[tbb] 26/64: Imported Upstream version 3.0+r147

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

    Imported Upstream version 3.0+r147
---
 CHANGES                                            |  397 ++-
 Makefile                                           |    4 +-
 build/AIX.gcc.inc                                  |   85 +
 build/AIX.inc                                      |   75 +
 build/FreeBSD.gcc.inc                              |    6 +-
 build/FreeBSD.inc                                  |    7 +-
 build/Makefile.rml                                 |   24 +-
 build/Makefile.tbb                                 |   32 +-
 build/Makefile.tbbmalloc                           |   50 +-
 build/Makefile.test                                |  129 +-
 build/SunOS.gcc.inc                                |    6 +-
 build/SunOS.inc                                    |    7 +-
 build/SunOS.suncc.inc                              |    2 +-
 build/common.inc                                   |   39 +-
 build/common_rules.inc                             |   21 +-
 build/detect.js                                    |   37 +-
 build/generate_tbbvars.bat                         |    2 +-
 build/generate_tbbvars.sh                          |    2 +-
 build/index.html                                   |    5 +-
 build/linux.gcc.inc                                |   60 +-
 build/linux.icc.inc                                |   39 +-
 build/linux.inc                                    |   25 +-
 build/macos.gcc.inc                                |   25 +-
 build/macos.icc.inc                                |   26 +-
 build/macos.inc                                    |   21 +-
 build/test_launcher.bat                            |    2 +-
 build/test_launcher.sh                             |    2 +-
 build/version_info_aix.sh                          |   42 +
 build/version_info_linux.sh                        |    4 +-
 build/version_info_macos.sh                        |    2 +-
 build/version_info_sunos.sh                        |    4 +-
 build/version_info_windows.js                      |    2 +-
 build/vsproject/index.html                         |    2 +-
 build/vsproject/tbb.vcproj                         |   52 +-
 build/vsproject/tbbmalloc.vcproj                   |   60 +-
 build/vsproject/tbbmalloc_proxy.vcproj             |   16 +-
 build/windows.cl.inc                               |   13 +-
 build/windows.gcc.inc                              |   26 +-
 build/windows.icl.inc                              |   17 +-
 build/windows.inc                                  |   17 +-
 build/xbox360.cl.inc                               |   34 +-
 build/xbox360.inc                                  |    7 +-
 doc/Release_Notes.txt                              |   45 +-
 doc/html/a00001.html                               |    9 +-
 doc/html/a00002.html                               |   10 +-
 doc/html/a00003.html                               |    8 +-
 doc/html/a00004.html                               |   19 +-
 doc/html/a00005.html                               |   15 +-
 doc/html/a00006.html                               |   28 +-
 doc/html/a00007.html                               |   30 +-
 doc/html/a00008.html                               |   43 +
 doc/html/a00009.html                               |   24 +-
 doc/html/a00011.html                               |   17 +-
 doc/html/a00012.html                               |   34 -
 doc/html/a00013.html                               |   77 +-
 doc/html/a00014.html                               |   34 +
 doc/html/a00015.html                               |   72 +-
 doc/html/a00016.html                               |   41 -
 doc/html/a00017.html                               |   15 +-
 doc/html/a00018.html                               |   39 +-
 doc/html/a00019.html                               |   41 +-
 doc/html/a00020.html                               |   54 +
 doc/html/a00021.html                               |   68 -
 doc/html/a00024.html                               |   55 +
 doc/html/a00025.html                               |   59 +
 doc/html/a00026.html                               |  102 -
 doc/html/a00027.html                               |   68 +
 doc/html/a00031.html                               |   66 -
 doc/html/a00032.html                               |  102 +
 doc/html/a00034.html                               |   49 -
 doc/html/a00035.html                               |   39 -
 doc/html/a00036.html                               |   36 -
 doc/html/a00037.html                               |   44 +-
 doc/html/a00038.html                               |   36 -
 doc/html/a00039.html                               |   40 -
 doc/html/a00040.html                               |    7 +-
 doc/html/a00041.html                               |   33 -
 doc/html/a00042.html                               |   14 +-
 doc/html/a00043.html                               |   15 +-
 doc/html/a00044.html                               |   23 +-
 doc/html/a00045.html                               |   43 +
 doc/html/a00046.html                               |   36 -
 doc/html/a00048.html                               |   24 +-
 doc/html/a00049.html                               |   22 +-
 doc/html/a00050.html                               |   28 +-
 doc/html/a00051.html                               |   44 -
 doc/html/a00052.html                               |   34 -
 doc/html/a00053.html                               |   23 +-
 doc/html/a00054.html                               |   27 +-
 doc/html/a00055.html                               |   67 +-
 doc/html/a00056.html                               |   39 -
 doc/html/a00057.html                               |   40 -
 doc/html/a00058.html                               |   77 +-
 doc/html/a00059.html                               |   70 +-
 doc/html/a00060.html                               |   68 +-
 doc/html/a00061.html                               |   38 +-
 doc/html/a00062.html                               |   39 -
 doc/html/a00063.html                               |   49 -
 doc/html/a00065.html                               |   19 +-
 doc/html/a00067.html                               |   29 +-
 doc/html/a00068.html                               |   39 -
 doc/html/a00069.html                               |   42 -
 doc/html/a00070.html                               |   40 -
 doc/html/a00072.html                               |   32 -
 doc/html/a00073.html                               |   48 -
 doc/html/a00075.html                               |   84 -
 doc/html/a00076.html                               |   82 -
 doc/html/a00077.html                               |   40 -
 doc/html/a00078.html                               |   49 +
 doc/html/a00079.html                               |   39 +
 doc/html/a00080.html                               |   36 +
 doc/html/a00081.html                               |   38 +
 doc/html/a00082.html                               |   36 +
 doc/html/a00083.html                               |   40 +
 doc/html/a00084.html                               |   15 +-
 doc/html/a00085.html                               |   33 +
 doc/html/a00086.html                               |   26 +-
 doc/html/a00087.html                               |   37 +
 doc/html/a00088.html                               |   11 +-
 doc/html/a00090.html                               |   20 +-
 doc/html/a00092.html                               |   13 +-
 doc/html/a00093.html                               |   54 +
 doc/html/a00094.html                               |   33 +-
 doc/html/a00095.html                               |   17 +-
 doc/html/a00096.html                               |    7 +-
 doc/html/a00097.html                               |   14 +-
 doc/html/a00098.html                               |   16 +-
 doc/html/a00099.html                               |   22 +-
 doc/html/a00100.html                               |   24 +-
 doc/html/a00101.html                               |   17 +-
 doc/html/a00102.html                               |   22 +-
 doc/html/a00103.html                               |   37 +
 doc/html/a00104.html                               |   37 +
 doc/html/a00105.html                               |   44 +
 doc/html/a00106.html                               |   39 +
 doc/html/a00107.html                               |   49 +
 doc/html/a00109.html                               |    8 +-
 doc/html/a00111.html                               |   41 +
 doc/html/a00112.html                               |   39 +
 doc/html/a00113.html                               |   17 +-
 doc/html/a00114.html                               |   23 +-
 doc/html/a00116.html                               |   32 +
 doc/html/a00117.html                               |   52 +
 doc/html/a00119.html                               |   89 +
 doc/html/a00120.html                               |   87 +
 doc/html/a00121.html                               |   40 +
 doc/html/a00128.html                               |   41 +
 doc/html/a00130.html                               |   53 +
 doc/html/a00132.html                               |   35 +
 doc/html/a00134.html                               |   44 +
 doc/html/a00136.html                               |   36 +
 doc/html/a00138.html                               |   34 +
 doc/html/a00139.html                               |   33 +
 doc/html/a00140.html                               |   39 +-
 doc/html/a00141.html                               |   40 +-
 doc/html/a00142.html                               |   43 +-
 doc/html/a00143.html                               |   44 +-
 doc/html/a00144.html                               |   48 +-
 doc/html/a00145.html                               |   45 +-
 doc/html/a00146.html                               |   30 +-
 doc/html/a00147.html                               |  224 --
 doc/html/a00148.html                               |   86 -
 doc/html/a00149.html                               |   93 -
 doc/html/a00150.html                               |  114 -
 doc/html/a00151.html                               |   65 -
 doc/html/a00152.html                               |  157 --
 doc/html/a00153.html                               |   61 +-
 doc/html/a00154.html                               |  306 ---
 doc/html/a00155.html                               |  646 -----
 doc/html/a00156.html                               |   68 -
 doc/html/a00156.png                                |  Bin 1379 -> 0 bytes
 doc/html/a00157.html                               |   68 -
 doc/html/a00158.html                               |   91 -
 doc/html/a00158.png                                |  Bin 1385 -> 0 bytes
 doc/html/a00159.html                               |  148 +-
 doc/html/a00160.html                               |  139 +-
 doc/html/a00161.html                               |  596 -----
 doc/html/a00162.html                               |   54 -
 doc/html/a00163.html                               |  197 --
 doc/html/a00164.html                               |  156 --
 doc/html/a00165.html                               |   76 -
 doc/html/a00166.html                               |   53 -
 doc/html/a00167.html                               |   54 -
 doc/html/a00168.html                               |   50 -
 doc/html/a00169.html                               |   50 -
 doc/html/a00170.html                               |   50 -
 doc/html/a00171.html                               |  171 --
 doc/html/a00172.html                               |  136 -
 doc/html/a00173.html                               |   77 -
 doc/html/a00174.html                               |   65 -
 doc/html/a00175.html                               |   59 -
 doc/html/a00176.html                               |   65 -
 doc/html/a00177.html                               |   65 -
 doc/html/a00178.html                               |   65 -
 doc/html/a00179.html                               |  140 -
 doc/html/a00180.html                               |  111 -
 doc/html/a00181.html                               |   53 -
 doc/html/a00182.html                               |   75 -
 doc/html/a00183.html                               |   94 -
 doc/html/a00184.html                               |   81 -
 doc/html/a00185.html                               |  123 -
 doc/html/a00186.html                               |  221 --
 doc/html/a00187.html                               |   67 -
 doc/html/a00188.html                               |   65 -
 doc/html/a00189.html                               |  118 -
 doc/html/a00190.html                               |   77 -
 doc/html/a00191.html                               |  112 -
 doc/html/a00192.html                               |   65 -
 doc/html/a00193.html                               |   64 -
 doc/html/a00194.html                               |  131 -
 doc/html/a00195.html                               |   97 -
 doc/html/a00196.html                               |  133 -
 doc/html/a00197.html                               |  123 -
 doc/html/a00198.html                               |   51 -
 doc/html/a00199.html                               |  536 ----
 doc/html/a00200.html                               |   48 -
 doc/html/a00201.html                               |  231 --
 doc/html/a00202.html                               |   83 -
 doc/html/a00203.html                               |  164 --
 doc/html/a00204.html                               |  130 -
 doc/html/a00205.html                               |   65 -
 doc/html/a00206.html                               |  168 --
 doc/html/a00207.html                               |   89 -
 doc/html/a00208.html                               |   56 -
 doc/html/a00209.html                               |  123 -
 doc/html/a00210.html                               |   68 -
 doc/html/a00211.html                               |   83 -
 doc/html/a00212.html                               |   38 +-
 doc/html/a00213.html                               |   67 +-
 doc/html/a00214.html                               |   69 +-
 doc/html/a00215.html                               |   63 +
 doc/html/a00216.html                               |   61 +
 doc/html/a00217.html                               |   56 +
 doc/html/a00218.html                               |   59 +
 doc/html/a00219.html                               |   64 +
 doc/html/a00220.html                               |   50 +
 doc/html/a00221.html                               |  224 ++
 doc/html/a00222.html                               |   86 +
 doc/html/a00223.html                               |   93 +
 doc/html/a00224.html                               |   86 +
 doc/html/a00224.png                                |  Bin 0 -> 891 bytes
 doc/html/a00225.html                               |  431 +++
 doc/html/a00225.png                                |  Bin 0 -> 1836 bytes
 doc/html/a00226.html                               |  114 +
 doc/html/a00227.html                               |   65 +
 doc/html/a00228.html                               |  157 ++
 doc/html/{a00152.png => a00228.png}                |  Bin
 doc/html/a00229.html                               |   84 +
 doc/html/a00230.html                               |  306 +++
 doc/html/{a00154.png => a00230.png}                |  Bin
 doc/html/a00231.html                               |  646 +++++
 doc/html/a00232.html                               |   68 +
 doc/html/a00232.png                                |  Bin 0 -> 1371 bytes
 doc/html/a00233.html                               |   65 +
 doc/html/a00234.html                               |  102 +
 doc/html/a00234.png                                |  Bin 0 -> 1376 bytes
 doc/html/a00235.html                               |  303 +++
 doc/html/a00236.html                               |  169 ++
 doc/html/a00237.html                               |  154 ++
 doc/html/{a00160.png => a00237.png}                |  Bin
 doc/html/a00238.html                               |  596 +++++
 doc/html/a00239.html                               |   46 +
 doc/html/a00240.html                               |   71 +
 doc/html/a00240.png                                |  Bin 0 -> 691 bytes
 doc/html/a00241.html                               |  161 ++
 doc/html/a00241.png                                |  Bin 0 -> 459 bytes
 doc/html/a00242.html                               |   54 +
 doc/html/{a00162.png => a00242.png}                |  Bin
 doc/html/a00243.html                               |  197 ++
 doc/html/a00244.html                               |   89 +
 doc/html/a00244.png                                |  Bin 0 -> 709 bytes
 doc/html/a00245.html                               |  236 ++
 doc/html/{a00164.png => a00245.png}                |  Bin
 doc/html/a00246.html                               |   76 +
 doc/html/a00247.html                               |   53 +
 doc/html/a00248.html                               |   71 +-
 doc/html/a00249.html                               |   83 +
 doc/html/a00249.png                                |  Bin 0 -> 543 bytes
 doc/html/a00250.html                               |  237 ++
 doc/html/a00251.html                               |   67 +
 doc/html/a00251.png                                |  Bin 0 -> 23191 bytes
 doc/html/a00252.html                               |   50 +
 doc/html/a00253.html                               |   50 +
 doc/html/a00254.html                               |   91 +
 doc/html/a00254.png                                |  Bin 0 -> 1138 bytes
 doc/html/a00255.html                               |  139 +
 doc/html/a00255.png                                |  Bin 0 -> 843 bytes
 doc/html/a00256.html                               |   50 +
 doc/html/a00257.html                               |  171 ++
 doc/html/{a00171.png => a00257.png}                |  Bin
 doc/html/a00258.html                               |  136 +
 doc/html/a00259.html                               |   77 +
 doc/html/a00260.html                               |   65 +
 doc/html/a00261.html                               |   59 +
 doc/html/a00262.html                               |   65 +
 doc/html/a00263.html                               |   65 +
 doc/html/a00264.html                               |   65 +
 doc/html/a00265.html                               |  140 +
 doc/html/a00266.html                               |  111 +
 doc/html/a00267.html                               |  659 +----
 doc/html/a00268.html                               |  129 +
 doc/html/a00268.png                                |  Bin 0 -> 1370 bytes
 doc/html/a00269.html                               |  117 +
 doc/html/a00269.png                                |  Bin 0 -> 1523 bytes
 doc/html/a00270.html                               |   75 +
 doc/html/a00271.html                               |   94 +
 doc/html/a00272.html                               |   81 +
 doc/html/a00273.html                               |  123 +
 doc/html/a00274.html                               |  214 +-
 doc/html/a00275.html                               |  349 +--
 doc/html/a00276.html                               |   57 +-
 doc/html/a00277.html                               |  336 +--
 doc/html/a00277.png                                |  Bin 0 -> 2390 bytes
 doc/html/a00278.html                               |  109 +-
 doc/html/a00279.html                               |   59 +-
 doc/html/a00280.html                               |   98 +-
 doc/html/a00281.html                               |  958 +------
 doc/html/a00282.html                               |   93 +
 doc/html/a00282.png                                |  Bin 0 -> 1782 bytes
 doc/html/a00283.html                               |  108 +
 doc/html/a00283.png                                |  Bin 0 -> 1445 bytes
 doc/html/a00284.html                               |   64 +
 doc/html/a00285.html                               |  131 +
 doc/html/a00285.png                                |  Bin 0 -> 732 bytes
 doc/html/a00286.html                               |  131 +
 doc/html/a00287.html                               |   97 +
 doc/html/a00288.html                               |  133 +
 doc/html/a00289.html                               |  149 ++
 doc/html/a00290.html                               |   51 +
 doc/html/a00291.html                               |  621 +++++
 doc/html/{a00199.png => a00291.png}                |  Bin
 doc/html/a00292.html                               |   48 +
 doc/html/a00293.html                               |  245 ++
 doc/html/a00294.html                               |   83 +
 doc/html/a00295.html                               |  168 ++
 doc/html/a00296.html                               |  130 +
 doc/html/a00297.html                               |   65 +
 doc/html/a00298.html                               |  168 ++
 doc/html/{a00206.png => a00298.png}                |  Bin
 doc/html/a00299.html                               | 1453 +---------
 doc/html/a00300.html                               |   56 +
 doc/html/a00301.html                               |  123 +
 doc/html/{a00209.png => a00301.png}                |  Bin
 doc/html/a00302.html                               |   68 +
 doc/html/a00303.html                               |   83 +
 doc/html/a00304.html                               |   98 +
 doc/html/a00304.png                                |  Bin 0 -> 548 bytes
 doc/html/a00305.html                               |   55 +
 doc/html/a00306.html                               |   93 +
 doc/html/a00307.html                               |   68 +
 doc/html/a00309.html                               |  103 -
 doc/html/a00311.html                               |   73 -
 doc/html/a00312.html                               |  401 ---
 doc/html/a00320.html                               |  127 -
 doc/html/a00321.html                               |  113 -
 doc/html/a00322.html                               |  131 -
 doc/html/a00323.html                               |  140 -
 doc/html/a00325.html                               |   98 -
 doc/html/a00326.html                               | 1361 +---------
 doc/html/a00336.html                               |  365 ---
 doc/html/a00337.html                               |  263 --
 doc/html/a00342.html                               |  924 -------
 doc/html/a00344.html                               |   77 +
 doc/html/a00351.html                               |  163 --
 doc/html/a00354.html                               |  970 -------
 doc/html/a00362.html                               |  746 ++++++
 doc/html/a00367.html                               |  245 --
 doc/html/a00369.html                               |   81 -
 doc/html/a00370.html                               |   98 +-
 doc/html/a00371.html                               |  782 +++---
 doc/html/a00372.html                               |   50 +
 doc/html/a00373.html                               |  313 +++
 doc/html/a00374.html                               |   59 +
 doc/html/a00375.html                               |   32 +
 doc/html/a00376.html                               |   44 +
 doc/html/a00377.html                               |  159 ++
 doc/html/a00380.html                               |  235 --
 doc/html/a00381.html                               |  942 +++++++
 doc/html/a00384.html                               |   92 -
 doc/html/a00386.html                               |  374 ---
 doc/html/a00392.html                               |  360 ---
 doc/html/a00396.html                               |  341 ---
 doc/html/a00397.html                               | 1417 ++++++++++
 doc/html/a00401.html                               |  225 --
 doc/html/a00405.html                               |  196 --
 doc/html/a00407.html                               |  107 +
 doc/html/a00409.html                               |  209 +-
 doc/html/a00410.html                               |  376 +++
 doc/html/a00414.html                               |  507 ----
 doc/html/a00418.html                               |  127 +
 doc/html/a00419.html                               |  113 +
 doc/html/a00420.html                               |  131 +
 doc/html/a00421.html                               |  140 +
 doc/html/a00423.html                               |   98 +
 doc/html/a00424.html                               | 1219 +++++++++
 doc/html/a00426.html                               |  136 -
 doc/html/a00427.html                               |  168 --
 doc/html/a00428.html                               |  179 --
 doc/html/a00429.html                               |  246 --
 doc/html/a00430.html                               |  199 --
 doc/html/a00431.html                               |  192 --
 doc/html/a00432.html                               |  217 --
 doc/html/a00433.html                               |  879 ++-----
 doc/html/a00436.html                               |  365 +++
 doc/html/a00437.html                               |  263 ++
 doc/html/a00442.html                               | 1085 ++++++--
 doc/html/a00449.html                               |   99 -
 doc/html/a00450.html                               |   90 -
 doc/html/a00451.html                               |  163 ++
 doc/html/a00452.html                               |   94 -
 doc/html/a00453.html                               |  212 --
 doc/html/a00454.html                               |  967 +++++++
 doc/html/a00457.html                               |  198 --
 doc/html/a00458.html                               |   68 -
 doc/html/a00459.html                               |  321 ---
 doc/html/a00460.html                               |  656 -----
 doc/html/a00464.html                               |  125 -
 doc/html/a00465.html                               |  256 --
 doc/html/a00466.html                               | 2522 ++++++++++++++++++
 doc/html/a00472.html                               |  310 ---
 doc/html/a00480.html                               |   96 -
 doc/html/a00482.html                               |  164 --
 doc/html/a00499.html                               |  240 ++
 doc/html/a00501.html                               |   81 +
 doc/html/a00502.html                               |   83 +
 doc/html/a00503.html                               |  480 ++++
 doc/html/a00512.html                               |  234 ++
 doc/html/a00516.html                               |   92 +
 doc/html/a00518.html                               |  374 +++
 doc/html/a00524.html                               |  340 +++
 doc/html/a00528.html                               |  341 +++
 doc/html/a00533.html                               |  225 ++
 doc/html/a00537.html                               |  196 ++
 doc/html/a00541.html                               |  230 ++
 doc/html/a00546.html                               |  585 +++++
 doc/html/a00560.html                               |  136 +
 doc/html/a00561.html                               |  168 ++
 doc/html/a00562.html                               |  179 ++
 doc/html/a00563.html                               |  241 ++
 doc/html/a00564.html                               |  199 ++
 doc/html/a00565.html                               |  192 ++
 doc/html/a00566.html                               |  217 ++
 doc/html/a00567.html                               |  726 +++++
 doc/html/a00577.html                               |  270 ++
 doc/html/a00584.html                               |  119 +
 doc/html/a00585.html                               |   90 +
 doc/html/a00587.html                               |   97 +
 doc/html/a00588.html                               |  212 ++
 doc/html/a00592.html                               |  237 ++
 doc/html/a00593.html                               |  316 +++
 doc/html/a00594.html                               |  709 +++++
 doc/html/a00599.html                               |  225 ++
 doc/html/a00600.html                               |  261 ++
 doc/html/a00606.html                               |  298 +++
 doc/html/a00614.html                               |   96 +
 doc/html/a00616.html                               |  164 ++
 doc/html/annotated.html                            |  173 +-
 doc/html/concepts.html                             |    2 +-
 doc/html/deprecated.html                           |    4 +-
 doc/html/files.html                                |  106 +-
 doc/html/functions.html                            |  295 +--
 doc/html/functions_0x62.html                       |   78 +
 doc/html/functions_0x63.html                       |   97 +
 doc/html/functions_0x64.html                       |   82 +
 doc/html/functions_0x65.html                       |   83 +
 doc/html/functions_0x66.html                       |   83 +
 doc/html/functions_0x67.html                       |   81 +
 doc/html/functions_0x69.html                       |   96 +
 doc/html/functions_0x6c.html                       |   78 +
 doc/html/functions_0x6d.html                       |   79 +
 doc/html/functions_0x6e.html                       |   77 +
 doc/html/functions_0x6f.html                       |   85 +
 doc/html/functions_0x70.html                       |   89 +
 doc/html/functions_0x71.html                       |   76 +
 doc/html/functions_0x72.html                       |  101 +
 doc/html/functions_0x73.html                       |   97 +
 doc/html/functions_0x74.html                       |   92 +
 doc/html/functions_0x75.html                       |   76 +
 doc/html/functions_0x76.html                       |   74 +
 doc/html/functions_0x77.html                       |   75 +
 doc/html/functions_0x7e.html                       |   96 +
 doc/html/functions_enum.html                       |   11 +-
 doc/html/functions_eval.html                       |   14 +-
 doc/html/functions_func.html                       |  263 +-
 doc/html/functions_func_0x62.html                  |   77 +
 doc/html/functions_func_0x63.html                  |   93 +
 doc/html/functions_func_0x64.html                  |   78 +
 doc/html/functions_func_0x65.html                  |   80 +
 doc/html/functions_func_0x66.html                  |   77 +
 doc/html/functions_func_0x67.html                  |   80 +
 doc/html/functions_func_0x69.html                  |   94 +
 doc/html/functions_func_0x6c.html                  |   77 +
 doc/html/functions_func_0x6d.html                  |   75 +
 doc/html/functions_func_0x6e.html                  |   75 +
 doc/html/functions_func_0x6f.html                  |   81 +
 doc/html/functions_func_0x70.html                  |   86 +
 doc/html/functions_func_0x71.html                  |   75 +
 doc/html/functions_func_0x72.html                  |   95 +
 doc/html/functions_func_0x73.html                  |   92 +
 doc/html/functions_func_0x74.html                  |   91 +
 doc/html/functions_func_0x75.html                  |   75 +
 doc/html/functions_func_0x77.html                  |   74 +
 doc/html/functions_func_0x7e.html                  |   95 +
 doc/html/functions_rela.html                       |    8 +-
 doc/html/functions_type.html                       |   28 +-
 doc/html/functions_vars.html                       |   16 +-
 doc/html/globals.html                              |   24 +-
 doc/html/globals_func.html                         |   24 +-
 doc/html/hierarchy.html                            |  253 +-
 doc/html/index.html                                |    2 +-
 doc/html/modules.html                              |   14 +-
 doc/html/namespacemembers.html                     |   39 +-
 doc/html/namespacemembers_enum.html                |    6 +-
 doc/html/namespacemembers_eval.html                |    8 +-
 doc/html/namespacemembers_func.html                |   27 +-
 doc/html/namespacemembers_type.html                |    4 +-
 doc/html/namespaces.html                           |    6 +-
 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               |    4 +-
 doc/html/parallel_sort_iter_req.html               |    2 +-
 doc/html/range_req.html                            |    2 +-
 examples/GettingStarted/index.html                 |    2 +-
 examples/GettingStarted/sub_string_finder/Makefile |    2 +-
 .../sub_string_finder/Makefile.windows             |    4 +-
 .../GettingStarted/sub_string_finder/index.html    |    2 +-
 .../sub_string_finder/sub_string_finder.cpp        |   11 +-
 .../sub_string_finder_extended.cpp                 |   19 +-
 .../sub_string_finder/sub_string_finder_pretty.cpp |   15 +-
 .../sub_string_finder.xcodeproj/project.pbxproj    |   50 +-
 examples/Makefile                                  |    4 +-
 examples/common/copy_libraries.bat                 |    9 +-
 examples/common/gui/Makefile.gmake                 |    2 +-
 examples/common/gui/Makefile.win                   |    4 +-
 examples/common/gui/convideo.cpp                   |    4 +-
 examples/common/gui/ddvideo.cpp                    |   10 +-
 examples/common/gui/dxcheck.bat                    |    2 +-
 examples/common/gui/gdivideo.cpp                   |    4 +-
 examples/common/gui/macvideo.cpp                   |    4 +-
 examples/common/gui/video.h                        |   73 +-
 examples/common/gui/winvideo.h                     |    2 +-
 examples/common/gui/xvideo.cpp                     |   49 +-
 examples/common/index.html                         |    6 +-
 examples/common/utility/utility.h                  |  396 +++
 .../concurrent_hash_map/count_strings/Makefile     |    9 +-
 .../count_strings/Makefile.windows                 |    9 +-
 .../count_strings/count_strings.cpp                |  115 +-
 .../concurrent_hash_map/count_strings/index.html   |   21 +-
 .../xcode/count_strings.xcodeproj/project.pbxproj  |   18 +-
 examples/concurrent_hash_map/index.html            |    2 +-
 examples/index.html                                |    6 +-
 examples/parallel_do/index.html                    |    2 +-
 examples/parallel_do/parallel_preorder/Graph.cpp   |   10 +-
 examples/parallel_do/parallel_preorder/Graph.h     |    2 +-
 examples/parallel_do/parallel_preorder/Makefile    |   11 +-
 .../parallel_do/parallel_preorder/Makefile.windows |   12 +-
 examples/parallel_do/parallel_preorder/Matrix.h    |    4 +-
 examples/parallel_do/parallel_preorder/index.html  |   31 +-
 examples/parallel_do/parallel_preorder/main.cpp    |  101 +
 .../msvs/parallel_preorder.vcproj                  |    4 +
 .../parallel_preorder/parallel_preorder.cpp        |  124 +-
 .../parallel_preorder.xcodeproj/project.pbxproj    |   22 +-
 examples/parallel_for/game_of_life.NET/Makefile    |   46 -
 .../parallel_for/game_of_life.NET/Makefile.windows |   49 -
 examples/parallel_for/game_of_life.NET/index.html  |   51 -
 .../game_of_life.NET/src/AssemblyInfo.cpp          |   66 -
 examples/parallel_for/game_of_life.NET/src/Board.h |  115 -
 .../game_of_life.NET/src/Evolution.cpp             |  251 --
 .../parallel_for/game_of_life.NET/src/Evolution.h  |  204 --
 examples/parallel_for/game_of_life.NET/src/Form1.h |  314 ---
 .../game_of_life.NET/src/Game_of_life.cpp          |  238 --
 .../game_of_life.NET/src/Update_state.cpp          |  410 ---
 examples/parallel_for/game_of_life/Makefile        |   46 +
 .../parallel_for/game_of_life/Makefile.windows     |   49 +
 examples/parallel_for/game_of_life/index.html      |   55 +
 .../msvs/Game_of_life.sln                          |    0
 .../msvs/Game_of_life.vcproj                       |    0
 .../msvs/app.ico                                   |  Bin
 .../{game_of_life.NET => game_of_life}/msvs/app.rc |    0
 .../msvs/resource.h                                |    0
 .../parallel_for/game_of_life/src/AssemblyInfo.cpp |   66 +
 examples/parallel_for/game_of_life/src/Board.h     |  115 +
 .../parallel_for/game_of_life/src/Evolution.cpp    |  251 ++
 examples/parallel_for/game_of_life/src/Evolution.h |  204 ++
 examples/parallel_for/game_of_life/src/Form1.h     |  314 +++
 .../parallel_for/game_of_life/src/Game_of_life.cpp |  238 ++
 .../parallel_for/game_of_life/src/Update_state.cpp |  410 +++
 .../xcode/game_of_life.xcodeproj/project.pbxproj   |  318 +++
 examples/parallel_for/index.html                   |    4 +-
 examples/parallel_for/polygon_overlay/Makefile     |    2 +-
 .../parallel_for/polygon_overlay/Makefile.windows  |    2 +-
 examples/parallel_for/polygon_overlay/index.html   |    2 +-
 examples/parallel_for/polygon_overlay/polymain.cpp |    2 +-
 examples/parallel_for/polygon_overlay/polymain.h   |    2 +-
 examples/parallel_for/polygon_overlay/polyover.cpp |    2 +-
 examples/parallel_for/polygon_overlay/polyover.h   |    2 +-
 .../parallel_for/polygon_overlay/pover_global.h    |    2 +-
 .../parallel_for/polygon_overlay/pover_video.cpp   |    2 +-
 .../parallel_for/polygon_overlay/pover_video.h     |    2 +-
 examples/parallel_for/polygon_overlay/rpolygon.h   |    2 +-
 .../xcode/PolygonOverlay.xcodeproj/project.pbxproj |   12 +-
 examples/parallel_for/seismic/Makefile             |    2 +-
 examples/parallel_for/seismic/Makefile.windows     |    2 +-
 .../parallel_for/seismic/SeismicSimulation.cpp     |    2 +-
 examples/parallel_for/seismic/index.html           |    2 +-
 .../SeismicSimulation.xcodeproj/project.pbxproj    |   10 +-
 examples/parallel_for/tachyon/Makefile             |    2 +-
 examples/parallel_for/tachyon/Makefile.windows     |    2 +-
 examples/parallel_for/tachyon/index.html           |    2 +-
 .../tachyon/msvs/tachyon.serial.vcproj             |    8 +
 .../parallel_for/tachyon/msvs/tachyon.tbb.vcproj   |   16 +-
 .../parallel_for/tachyon/msvs/tachyon.tbb1d.vcproj |   16 +-
 examples/parallel_for/tachyon/src/api.cpp          |    2 +-
 examples/parallel_for/tachyon/src/api.h            |    2 +-
 examples/parallel_for/tachyon/src/apigeom.cpp      |    2 +-
 examples/parallel_for/tachyon/src/apitrigeom.cpp   |    2 +-
 examples/parallel_for/tachyon/src/apitrigeom.h     |    2 +-
 examples/parallel_for/tachyon/src/bndbox.cpp       |    2 +-
 examples/parallel_for/tachyon/src/bndbox.h         |    2 +-
 examples/parallel_for/tachyon/src/box.cpp          |    2 +-
 examples/parallel_for/tachyon/src/box.h            |    2 +-
 examples/parallel_for/tachyon/src/camera.cpp       |    2 +-
 examples/parallel_for/tachyon/src/camera.h         |    2 +-
 examples/parallel_for/tachyon/src/coordsys.cpp     |    2 +-
 examples/parallel_for/tachyon/src/coordsys.h       |    2 +-
 examples/parallel_for/tachyon/src/cylinder.cpp     |    2 +-
 examples/parallel_for/tachyon/src/cylinder.h       |    2 +-
 examples/parallel_for/tachyon/src/extvol.cpp       |    2 +-
 examples/parallel_for/tachyon/src/extvol.h         |    2 +-
 examples/parallel_for/tachyon/src/getargs.cpp      |    2 +-
 examples/parallel_for/tachyon/src/getargs.h        |    2 +-
 examples/parallel_for/tachyon/src/global.cpp       |    2 +-
 examples/parallel_for/tachyon/src/global.h         |    2 +-
 examples/parallel_for/tachyon/src/grid.cpp         |    2 +-
 examples/parallel_for/tachyon/src/grid.h           |    2 +-
 examples/parallel_for/tachyon/src/imageio.cpp      |    2 +-
 examples/parallel_for/tachyon/src/imageio.h        |    2 +-
 examples/parallel_for/tachyon/src/imap.cpp         |    2 +-
 examples/parallel_for/tachyon/src/imap.h           |    2 +-
 examples/parallel_for/tachyon/src/intersect.cpp    |    2 +-
 examples/parallel_for/tachyon/src/intersect.h      |    2 +-
 examples/parallel_for/tachyon/src/jpeg.cpp         |    2 +-
 examples/parallel_for/tachyon/src/jpeg.h           |    2 +-
 examples/parallel_for/tachyon/src/light.cpp        |    2 +-
 examples/parallel_for/tachyon/src/light.h          |    2 +-
 examples/parallel_for/tachyon/src/machine.h        |    2 +-
 examples/parallel_for/tachyon/src/macros.h         |    2 +-
 examples/parallel_for/tachyon/src/objbound.cpp     |    2 +-
 examples/parallel_for/tachyon/src/objbound.h       |    2 +-
 examples/parallel_for/tachyon/src/parse.cpp        |   15 +-
 examples/parallel_for/tachyon/src/parse.h          |    2 +-
 examples/parallel_for/tachyon/src/plane.cpp        |    2 +-
 examples/parallel_for/tachyon/src/plane.h          |    2 +-
 examples/parallel_for/tachyon/src/ppm.cpp          |   15 +-
 examples/parallel_for/tachyon/src/ppm.h            |    2 +-
 examples/parallel_for/tachyon/src/pthread.cpp      |    2 +-
 examples/parallel_for/tachyon/src/pthread.h        |    2 +-
 examples/parallel_for/tachyon/src/quadric.cpp      |    2 +-
 examples/parallel_for/tachyon/src/quadric.h        |    2 +-
 examples/parallel_for/tachyon/src/render.cpp       |    2 +-
 examples/parallel_for/tachyon/src/render.h         |    2 +-
 examples/parallel_for/tachyon/src/ring.cpp         |    2 +-
 examples/parallel_for/tachyon/src/ring.h           |    2 +-
 examples/parallel_for/tachyon/src/shade.cpp        |    2 +-
 examples/parallel_for/tachyon/src/shade.h          |    2 +-
 examples/parallel_for/tachyon/src/sphere.cpp       |    2 +-
 examples/parallel_for/tachyon/src/sphere.h         |    2 +-
 examples/parallel_for/tachyon/src/texture.cpp      |    2 +-
 examples/parallel_for/tachyon/src/texture.h        |    2 +-
 examples/parallel_for/tachyon/src/tgafile.cpp      |    2 +-
 examples/parallel_for/tachyon/src/tgafile.h        |    2 +-
 examples/parallel_for/tachyon/src/trace.h          |    2 +-
 examples/parallel_for/tachyon/src/trace.serial.cpp |    2 +-
 examples/parallel_for/tachyon/src/trace.tbb.cpp    |    2 +-
 examples/parallel_for/tachyon/src/trace.tbb1d.cpp  |    2 +-
 examples/parallel_for/tachyon/src/trace_rest.cpp   |    2 +-
 examples/parallel_for/tachyon/src/triangle.cpp     |    2 +-
 examples/parallel_for/tachyon/src/triangle.h       |    2 +-
 examples/parallel_for/tachyon/src/types.h          |    2 +-
 examples/parallel_for/tachyon/src/ui.cpp           |    2 +-
 examples/parallel_for/tachyon/src/ui.h             |    2 +-
 examples/parallel_for/tachyon/src/util.cpp         |    2 +-
 examples/parallel_for/tachyon/src/util.h           |    2 +-
 examples/parallel_for/tachyon/src/vector.cpp       |    2 +-
 examples/parallel_for/tachyon/src/vector.h         |    2 +-
 examples/parallel_for/tachyon/src/video.cpp        |    2 +-
 examples/parallel_for/tachyon/src/video.h          |    2 +-
 examples/parallel_for/tachyon/src/vol.cpp          |    2 +-
 examples/parallel_for/tachyon/src/vol.h            |    2 +-
 .../xcode/tachyon.xcodeproj/project.pbxproj        |   42 +-
 examples/parallel_reduce/convex_hull/Makefile      |    2 +-
 .../parallel_reduce/convex_hull/Makefile.windows   |    4 +-
 examples/parallel_reduce/convex_hull/convex_hull.h |   11 +-
 .../convex_hull/convex_hull_bench.cpp              |  163 +-
 .../convex_hull/convex_hull_sample.cpp             |   55 +-
 examples/parallel_reduce/convex_hull/index.html    |    2 +-
 .../xcode/convex_hull.xcodeproj/project.pbxproj    |   34 +-
 examples/parallel_reduce/index.html                |    2 +-
 examples/parallel_reduce/primes/Makefile           |   15 +-
 examples/parallel_reduce/primes/Makefile.windows   |   17 +-
 examples/parallel_reduce/primes/index.html         |   26 +-
 examples/parallel_reduce/primes/main.cpp           |  119 +
 examples/parallel_reduce/primes/msvs/primes.vcproj |    8 +
 examples/parallel_reduce/primes/primes.cpp         |  247 +-
 examples/parallel_reduce/primes/primes.h           |   46 +
 .../primes/xcode/primes.xcodeproj/project.pbxproj  |   24 +-
 examples/pipeline/index.html                       |    2 +-
 examples/pipeline/square/Makefile                  |    2 +-
 examples/pipeline/square/Makefile.windows          |    4 +-
 examples/pipeline/square/gen_input.cpp             |    2 +-
 examples/pipeline/square/index.html                |    2 +-
 examples/pipeline/square/square.cpp                |    2 +-
 .../square/xcode/square.xcodeproj/project.pbxproj  |   18 +-
 examples/task/index.html                           |    2 +-
 examples/task/tree_sum/Makefile                    |    2 +-
 examples/task/tree_sum/Makefile.windows            |    4 +-
 .../task/tree_sum/OptimizedParallelSumTree.cpp     |    2 +-
 examples/task/tree_sum/SerialSumTree.cpp           |    2 +-
 examples/task/tree_sum/SimpleParallelSumTree.cpp   |    2 +-
 examples/task/tree_sum/common.h                    |    2 +-
 examples/task/tree_sum/index.html                  |    2 +-
 examples/task/tree_sum/main.cpp                    |    2 +-
 .../xcode/tree_sum.xcodeproj/project.pbxproj       |   28 +-
 examples/task_group/index.html                     |    2 +-
 examples/task_group/sudoku/Makefile                |    5 +-
 examples/task_group/sudoku/Makefile.windows        |    4 +-
 examples/task_group/sudoku/index.html              |    4 +-
 examples/task_group/sudoku/sudoku.cpp              |    2 +-
 .../sudoku/xcode/sudoku.xcodeproj/project.pbxproj  |  306 +++
 examples/task_priority/fractal/Makefile            |   73 +
 examples/task_priority/fractal/Makefile.windows    |   73 +
 examples/task_priority/fractal/fractal.cpp         |  265 ++
 examples/task_priority/fractal/fractal.h           |  112 +
 examples/task_priority/fractal/fractal_video.h     |   74 +
 examples/task_priority/fractal/index.html          |   66 +
 examples/task_priority/fractal/main.cpp            |   98 +
 examples/task_priority/fractal/msvs/fractal.icproj |   11 +
 examples/task_priority/fractal/msvs/fractal.vcproj |  832 ++++++
 examples/task_priority/fractal/msvs/fractal_cl.sln |   37 +
 .../task_priority/fractal/msvs/fractal_icl.sln     |   45 +
 examples/task_priority/fractal/msvs/gui.ico        |  Bin 0 -> 23558 bytes
 examples/task_priority/fractal/msvs/gui.rc         |   90 +
 examples/task_priority/fractal/msvs/resource.h     |    8 +
 examples/task_priority/fractal/msvs/small.ico      |  Bin 0 -> 23558 bytes
 .../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        |  302 +++
 examples/task_priority/index.html                  |   24 +
 examples/test_all/fibonacci/Fibonacci.cpp          |    2 +-
 examples/test_all/fibonacci/Makefile               |    2 +-
 examples/test_all/fibonacci/Makefile.windows       |    4 +-
 examples/test_all/fibonacci/index.html             |    2 +-
 .../xcode/fibonacci.xcodeproj/project.pbxproj      |   18 +-
 examples/test_all/index.html                       |    2 +-
 include/index.html                                 |    2 +-
 include/tbb/_aggregator_internal.h                 |  148 ++
 include/tbb/_concurrent_queue_internal.h           |   29 +-
 include/tbb/_concurrent_unordered_internal.h       |   41 +-
 include/tbb/_tbb_windef.h                          |   12 +-
 include/tbb/aligned_space.h                        |    2 +-
 include/tbb/atomic.h                               |   49 +-
 include/tbb/blocked_range.h                        |    2 +-
 include/tbb/blocked_range2d.h                      |    2 +-
 include/tbb/blocked_range3d.h                      |    2 +-
 include/tbb/cache_aligned_allocator.h              |    2 +-
 include/tbb/combinable.h                           |    2 +-
 include/tbb/compat/condition_variable              |   21 +-
 include/tbb/compat/ppl.h                           |    2 +-
 include/tbb/compat/thread                          |    2 +-
 include/tbb/compat/tuple                           |  401 +++
 include/tbb/concurrent_hash_map.h                  |  203 +-
 include/tbb/concurrent_priority_queue.h            |  364 +++
 include/tbb/concurrent_queue.h                     |   16 +-
 include/tbb/concurrent_unordered_map.h             |    2 +-
 include/tbb/concurrent_vector.h                    |   19 +-
 include/tbb/critical_section.h                     |    4 +-
 include/tbb/enumerable_thread_specific.h           |    7 +-
 include/tbb/graph.h                                | 2673 +++++++++++++++++++
 include/tbb/index.html                             |    2 +-
 include/tbb/machine/ibm_aix51.h                    |   14 +-
 include/tbb/machine/linux_common.h                 |    8 +-
 include/tbb/machine/linux_ia32.h                   |  110 +-
 include/tbb/machine/linux_ia64.h                   |    5 +-
 include/tbb/machine/linux_intel64.h                |   47 +-
 include/tbb/machine/mac_ppc.h                      |   55 +-
 include/tbb/machine/macos_common.h                 |  126 +
 include/tbb/machine/sunos_sparc.h                  |   10 +-
 include/tbb/machine/windows_api.h                  |   56 +
 include/tbb/machine/windows_ia32.h                 |   67 +-
 include/tbb/machine/windows_intel64.h              |   15 +-
 include/tbb/machine/xbox360_ppc.h                  |   42 +-
 include/tbb/mutex.h                                |   13 +-
 include/tbb/null_mutex.h                           |    2 +-
 include/tbb/null_rw_mutex.h                        |    2 +-
 include/tbb/parallel_do.h                          |    2 +-
 include/tbb/parallel_for.h                         |    7 +-
 include/tbb/parallel_for_each.h                    |    2 +-
 include/tbb/parallel_invoke.h                      |    2 +-
 include/tbb/parallel_reduce.h                      |   48 +-
 include/tbb/parallel_scan.h                        |    4 +-
 include/tbb/parallel_sort.h                        |    2 +-
 include/tbb/parallel_while.h                       |    2 +-
 include/tbb/partitioner.h                          |    4 +-
 include/tbb/pipeline.h                             |  153 +-
 include/tbb/queuing_mutex.h                        |    2 +-
 include/tbb/queuing_rw_mutex.h                     |    2 +-
 include/tbb/reader_writer_lock.h                   |    2 +-
 include/tbb/recursive_mutex.h                      |   13 +-
 include/tbb/scalable_allocator.h                   |    2 +-
 include/tbb/spin_mutex.h                           |   10 +-
 include/tbb/spin_rw_mutex.h                        |    4 +-
 include/tbb/task.h                                 |  169 +-
 include/tbb/task_group.h                           |   49 +-
 include/tbb/task_scheduler_init.h                  |   65 +-
 include/tbb/task_scheduler_observer.h              |    2 +-
 include/tbb/tbb.h                                  |    5 +-
 include/tbb/tbb_allocator.h                        |    2 +-
 include/tbb/tbb_config.h                           |   65 +-
 include/tbb/tbb_exception.h                        |   89 +-
 include/tbb/tbb_machine.h                          |  129 +-
 include/tbb/tbb_profiling.h                        |  102 +-
 include/tbb/tbb_stddef.h                           |   30 +-
 include/tbb/tbb_thread.h                           |   32 +-
 include/tbb/tbbmalloc_proxy.h                      |    2 +-
 include/tbb/tick_count.h                           |    4 +-
 index.html                                         |    2 +-
 src/Makefile                                       |   10 +-
 src/index.html                                     |    8 +-
 src/old/concurrent_queue_v2.cpp                    |    8 +-
 src/old/concurrent_queue_v2.h                      |   13 +-
 src/old/concurrent_vector_v2.cpp                   |    2 +-
 src/old/concurrent_vector_v2.h                     |    2 +-
 src/old/spin_rw_mutex_v2.cpp                       |    2 +-
 src/old/spin_rw_mutex_v2.h                         |    2 +-
 src/old/task_v2.cpp                                |    2 +-
 src/old/test_concurrent_queue_v2.cpp               |    2 +-
 src/old/test_concurrent_vector_v2.cpp              |    2 +-
 src/old/test_mutex_v2.cpp                          |    2 +-
 src/perf/fibonacci_cutoff.cpp                      |    2 +-
 src/perf/fibonacci_impl_tbb.cpp                    |    2 +-
 src/perf/perf.cpp                                  |  863 ++++++
 src/perf/perf.h                                    |  266 ++
 src/perf/perf_sched.cpp                            |  464 ++++
 src/perf/perf_util.h                               |  292 ---
 src/perf/run_statistics.sh                         |   40 +
 src/perf/statistics.cpp                            |  138 +-
 src/perf/statistics.h                              |   10 +-
 src/perf/statistics_xml.h                          |    2 +-
 src/perf/time_base.cpp                             |  262 --
 src/perf/time_framework.h                          |   23 +-
 src/perf/time_hash_map.cpp                         |    2 +-
 src/perf/time_hash_map_fill.cpp                    |   90 +-
 src/perf/time_hash_map_fill.html                   |  121 +
 src/perf/time_locked_work.cpp                      |    2 +-
 src/perf/time_sandbox.h                            |    2 +-
 src/perf/time_unit.cpp                             |  291 --
 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                       |   11 +-
 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                         |    8 +-
 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                      |   52 +-
 src/rml/server/thread_monitor.h                    |   40 +-
 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                    |    2 +-
 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                      |   10 +-
 src/rml/test/test_server.h                         |    4 +-
 src/rml/test/test_thread_monitor.cpp               |    3 +-
 src/tbb/arena.cpp                                  |  503 ++--
 src/tbb/arena.h                                    |  407 +--
 src/tbb/cache_aligned_allocator.cpp                |  137 +-
 src/tbb/cilk-tbb-interop.h                         |  120 +
 src/tbb/concurrent_hash_map.cpp                    |    2 +-
 src/tbb/concurrent_monitor.cpp                     |    4 +-
 src/tbb/concurrent_monitor.h                       |  102 +-
 src/tbb/concurrent_queue.cpp                       |    6 +-
 src/tbb/concurrent_vector.cpp                      |    2 +-
 src/tbb/condition_variable.cpp                     |   22 +-
 src/tbb/critical_section.cpp                       |    2 +-
 src/tbb/custom_scheduler.h                         |  411 ++-
 src/tbb/dynamic_link.cpp                           |  322 ++-
 src/tbb/dynamic_link.h                             |   59 +-
 src/tbb/governor.cpp                               |  213 +-
 src/tbb/governor.h                                 |   72 +-
 src/tbb/ia32-masm/atomic_support.asm               |    2 +-
 src/tbb/ia32-masm/lock_byte.asm                    |    2 +-
 src/tbb/ia64-gas/atomic_support.s                  |    2 +-
 src/tbb/ia64-gas/ia64_misc.s                       |    2 +-
 src/tbb/ia64-gas/lock_byte.s                       |    2 +-
 src/tbb/ia64-gas/log2.s                            |    2 +-
 src/tbb/ia64-gas/pause.s                           |    2 +-
 src/tbb/ibm_aix51/atomic_support.c                 |    2 +-
 src/tbb/index.html                                 |    2 +-
 src/tbb/intel64-masm/atomic_support.asm            |    2 +-
 src/tbb/intel64-masm/intel64_misc.asm              |   41 +
 src/tbb/intrusive_list.h                           |    7 +-
 src/tbb/itt_notify.cpp                             |   10 +-
 src/tbb/itt_notify.h                               |   10 +-
 src/tbb/lin32-tbb-export.def                       |  327 +--
 src/tbb/lin32-tbb-export.lst                       |  358 +++
 src/tbb/lin64-tbb-export.def                       |  312 +--
 src/tbb/lin64-tbb-export.lst                       |  343 +++
 src/tbb/lin64ipf-tbb-export.def                    |  354 +--
 src/tbb/lin64ipf-tbb-export.lst                    |  385 +++
 src/tbb/mac32-tbb-export.def                       |  364 +--
 src/tbb/mac32-tbb-export.lst                       |  356 +++
 src/tbb/mac64-tbb-export.def                       |  360 +--
 src/tbb/mac64-tbb-export.lst                       |  352 +++
 src/tbb/mailbox.h                                  |   10 +-
 src/tbb/market.cpp                                 |  432 ++-
 src/tbb/market.h                                   |  214 +-
 src/tbb/mutex.cpp                                  |    2 +-
 src/tbb/observer_proxy.cpp                         |    4 +-
 src/tbb/observer_proxy.h                           |    4 +-
 src/tbb/pipeline.cpp                               |  232 +-
 src/tbb/private_server.cpp                         |   32 +-
 src/tbb/queuing_mutex.cpp                          |    2 +-
 src/tbb/queuing_rw_mutex.cpp                       |    2 +-
 src/tbb/reader_writer_lock.cpp                     |    2 +-
 src/tbb/recursive_mutex.cpp                        |    2 +-
 src/tbb/scheduler.cpp                              |  970 ++++---
 src/tbb/scheduler.h                                |  498 ++--
 src/tbb/scheduler_common.h                         |  140 +-
 src/tbb/scheduler_utility.h                        |   71 +-
 src/tbb/semaphore.h                                |  132 +
 src/tbb/spin_mutex.cpp                             |    4 +-
 src/tbb/spin_rw_mutex.cpp                          |    2 +-
 src/tbb/task.cpp                                   |   90 +-
 src/tbb/task_group_context.cpp                     |  279 +-
 src/tbb/task_stream.h                              |    7 +-
 src/tbb/tbb_assert_impl.h                          |    2 +-
 src/tbb/tbb_main.cpp                               |   49 +-
 src/tbb/tbb_main.h                                 |    6 +-
 src/tbb/tbb_misc.cpp                               |   13 +-
 src/tbb/tbb_misc.h                                 |  225 +-
 src/tbb/tbb_misc_ex.cpp                            |  336 +++
 src/tbb/tbb_resource.rc                            |    4 +-
 src/tbb/tbb_statistics.cpp                         |  192 ++
 src/tbb/tbb_statistics.h                           |  248 ++
 src/tbb/tbb_thread.cpp                             |   10 +-
 src/tbb/tbb_version.h                              |    9 +-
 src/tbb/tls.h                                      |   10 +-
 src/tbb/tools_api/disable_warnings.h               |    2 +-
 src/tbb/tools_api/internal/ittnotify.h             |    2 +-
 src/tbb/tools_api/ittnotify.h                      |    2 +-
 src/tbb/tools_api/ittnotify_config.h               |    2 +-
 src/tbb/tools_api/ittnotify_static.c               |    2 +-
 src/tbb/tools_api/ittnotify_static.h               |    2 +-
 src/tbb/tools_api/ittnotify_types.h                |    2 +-
 src/tbb/tools_api/legacy/ittnotify.h               |    2 +-
 src/tbb/tools_api/prototype/ittnotify.h            |    2 +-
 src/tbb/win32-tbb-export.def                       |  272 +-
 src/tbb/win32-tbb-export.lst                       |  298 +++
 src/tbb/win64-gcc-tbb-export.def                   |   53 +
 src/tbb/win64-gcc-tbb-export.lst                   |  343 +++
 src/tbb/win64-tbb-export.def                       |  301 +--
 src/tbb/win64-tbb-export.lst                       |  294 +++
 src/tbb/xbox360-tbb-export.def                     |    4 +-
 src/tbbmalloc/Customize.h                          |   16 +-
 src/tbbmalloc/LifoList.h                           |    2 +-
 src/tbbmalloc/MapMemory.h                          |    4 +-
 src/tbbmalloc/MemoryAllocator.cpp                  | 2770 --------------------
 src/tbbmalloc/Statistics.h                         |    2 +-
 src/tbbmalloc/TypeDefinitions.h                    |    4 +-
 src/tbbmalloc/backend.cpp                          |  275 ++
 src/tbbmalloc/backref.cpp                          |  240 ++
 src/tbbmalloc/frontend.cpp                         | 2090 +++++++++++++++
 src/tbbmalloc/large_objects.cpp                    |  275 ++
 src/tbbmalloc/lin-tbbmalloc-export.def             |    2 +-
 src/tbbmalloc/lin32-proxy-export.def               |    2 +-
 src/tbbmalloc/lin64-proxy-export.def               |    2 +-
 src/tbbmalloc/lin64ipf-proxy-export.def            |    2 +-
 src/tbbmalloc/mac32-tbbmalloc-export.def           |   46 +-
 src/tbbmalloc/mac64-tbbmalloc-export.def           |   46 +-
 src/tbbmalloc/proxy.cpp                            |    2 +-
 src/tbbmalloc/proxy.h                              |    2 +-
 src/tbbmalloc/tbb_function_replacement.cpp         |    2 +-
 src/tbbmalloc/tbb_function_replacement.h           |    2 +-
 src/tbbmalloc/tbbmalloc.cpp                        |   45 +-
 src/tbbmalloc/tbbmalloc.rc                         |    4 +-
 src/tbbmalloc/tbbmalloc_internal.h                 |  272 ++
 src/tbbmalloc/win-gcc-tbbmalloc-export.def         |    2 +-
 src/tbbmalloc/win32-tbbmalloc-export.def           |    2 +-
 src/tbbmalloc/win64-tbbmalloc-export.def           |    2 +-
 src/tbbmalloc/xbox360-tbbmalloc-export.def         |    2 +-
 src/test/harness.h                                 |   65 +-
 src/test/harness_allocator.h                       |   20 +-
 src/test/harness_assert.h                          |    2 +-
 src/test/harness_bad_expr.h                        |    2 +-
 src/test/harness_barrier.h                         |    2 +-
 src/test/harness_concurrency_tracker.h             |    2 +-
 src/test/harness_cpu.h                             |    6 +-
 src/test/harness_eh.h                              |   13 +-
 src/test/harness_graph.h                           |  205 ++
 src/test/harness_inject_scheduler.h                |   10 +-
 src/test/harness_iterator.h                        |    2 +-
 src/test/harness_m128.h                            |    2 +-
 src/test/harness_memory.h                          |    2 +-
 src/test/harness_report.h                          |    2 +-
 src/test/harness_tbb_independence.h                |   70 +
 src/test/test_ScalableAllocator.cpp                |    8 +-
 src/test/test_ScalableAllocator_STL.cpp            |    2 +-
 src/test/test_aligned_space.cpp                    |    2 +-
 src/test/test_allocator.h                          |    2 +-
 src/test/test_allocator_STL.h                      |    2 +-
 src/test/test_assembly.cpp                         |   18 +-
 src/test/test_atomic.cpp                           |   77 +-
 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                   |  171 ++
 src/test/test_buffer_node.cpp                      |  404 +++
 src/test/test_cache_aligned_allocator.cpp          |   43 +-
 src/test/test_cache_aligned_allocator_STL.cpp      |    2 +-
 src/test/test_cilk_common.h                        |   91 +
 src/test/test_cilk_dynamic_load.cpp                |  186 ++
 src/test/test_cilk_interop.cpp                     |  160 ++
 src/test/test_combinable.cpp                       |    3 +-
 src/test/test_compiler.cpp                         |  102 -
 src/test/test_concurrent_hash_map.cpp              |   84 +-
 src/test/test_concurrent_monitor.cpp               |    7 +-
 src/test/test_concurrent_priority_queue.cpp        |  529 ++++
 src/test/test_concurrent_queue.cpp                 |   10 +-
 src/test/test_concurrent_unordered.cpp             |   23 +-
 src/test/test_concurrent_vector.cpp                |    4 +-
 src/test/test_condition_variable.h                 |    2 +-
 src/test/test_continue_node.cpp                    |  133 +
 src/test/test_critical_section.cpp                 |    2 +-
 src/test/test_eh_algorithms.cpp                    |   19 +-
 src/test/test_eh_tasks.cpp                         |   64 +-
 src/test/test_enumerable_thread_specific.cpp       |    6 +-
 src/test/test_executable_node.cpp                  |  123 +
 src/test/test_faf_task.cpp                         |  155 ++
 src/test/test_fast_random.cpp                      |  162 ++
 src/test/test_fp.cpp                               |  208 ++
 src/test/test_function_node.cpp                    |  225 ++
 src/test/test_halt.cpp                             |    2 +-
 src/test/test_handle_perror.cpp                    |    2 +-
 src/test/test_hw_concurrency.cpp                   |   93 +
 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                        |  419 +++
 src/test/test_lambda.cpp                           |    2 +-
 src/test/test_limiter_node.cpp                     |  206 ++
 src/test/test_malloc_atexit.cpp                    |   11 +-
 src/test/test_malloc_compliance.cpp                |   41 +-
 src/test/test_malloc_init_shutdown.cpp             |  117 +-
 src/test/test_malloc_lib_unload.cpp                |  134 +-
 src/test/test_malloc_overload.cpp                  |   23 +-
 src/test/test_malloc_pure_c.c                      |    2 +-
 src/test/test_malloc_regression.cpp                |    4 +-
 src/test/test_malloc_whitebox.cpp                  |   23 +-
 src/test/test_model_plugin.cpp                     |    6 +-
 src/test/test_mutex.cpp                            |    2 +-
 src/test/test_mutex_native_threads.cpp             |    2 +-
 src/test/test_openmp.cpp                           |   10 +-
 src/test/test_overwrite_node.cpp                   |  151 ++
 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                |  587 ++++-
 src/test/test_parallel_reduce.cpp                  |    4 +-
 src/test/test_parallel_scan.cpp                    |    2 +-
 src/test/test_parallel_sort.cpp                    |    8 +-
 src/test/test_parallel_while.cpp                   |    2 +-
 src/test/test_pipeline.cpp                         |    5 +-
 src/test/test_pipeline_with_tbf.cpp                |  270 +-
 src/test/test_priority_queue_node.cpp              |  330 +++
 src/test/test_queue_node.cpp                       |  440 ++++
 src/test/test_reader_writer_lock.cpp               |    2 +-
 src/test/test_rwm_upgrade_downgrade.cpp            |    2 +-
 src/test/test_semaphore.cpp                        |  258 ++
 src/test/test_sequencer_node.cpp                   |  391 +++
 src/test/test_source_node.cpp                      |  149 ++
 src/test/test_std_thread.cpp                       |    2 +-
 src/test/test_task.cpp                             |   46 +-
 src/test/test_task_assertions.cpp                  |    2 +-
 src/test/test_task_auto_init.cpp                   |    2 +-
 src/test/test_task_group.cpp                       |    4 +-
 src/test/test_task_leaks.cpp                       |   37 +-
 src/test/test_task_priority.cpp                    |  412 +++
 src/test/test_task_scheduler_init.cpp              |   12 +-
 src/test/test_task_scheduler_observer.cpp          |    5 +-
 src/test/test_tbb_condition_variable.cpp           |    2 +-
 src/test/test_tbb_header.cpp                       |   64 +-
 src/test/test_tbb_thread.cpp                       |    2 +-
 src/test/test_tbb_version.cpp                      |   10 +-
 src/test/test_thread.h                             |    4 +-
 src/test/test_tick_count.cpp                       |    2 +-
 src/test/test_tuple.cpp                            |  144 +
 src/test/test_write_once_node.cpp                  |  169 ++
 src/test/test_yield.cpp                            |    2 +-
 1123 files changed, 70477 insertions(+), 40831 deletions(-)

diff --git a/CHANGES b/CHANGES
index 807439f..18a03b9 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,31 +1,157 @@
+TBB 3.0 Update 6 commercial-aligned release
+
+Changes (w.r.t. TBB 3.0 Update 5 commercial-aligned release):
+
+- Added Community Preview feature: task and task group priority, and
+    Fractal example demonstrating it.
+- parallel_pipeline optimized for data items of small and large sizes.
+- Graph's join_node is now parametrized with a tuple of up to 10 types.
+- Improved performance of concurrent_priority_queue.
+
+Open-source contributions integrated:
+
+- Initial NetBSD support by Aleksej Saushev.
+
+Bugs fixed:
+
+- Failure to locate Cilk runtime library to enable Cilk/TBB interop.
+- Data race that could result in concurrent_unordered_map structure
+    corruption after call to clear() method.
+- Crash caused by invoking Cilk/TBB interop after one of the libraries
+    is unloaded.
+- Stack corruption caused by PIC version of 64-bit CAS compiled by Intel
+    compiler on Linux.
+- Inconsistency of exception propagation mode possible when application
+    built with Microsoft* Visual Studio* 2008 or earlier uses TBB built
+    with Microsoft* Visual Studio* 2010.
+- Affinitizing master thread to a subset of available CPUs after TBB
+    scheduler was initialized tied all worker threads to the same CPUs.
+- Method is_stolen_task() always returned 'false' for affinitized tasks.
+- write_once_node and overwrite_node did not immediately send buffered
+    items to successors
+
+------------------------------------------------------------------------
+TBB 3.0 Update 5 commercial-aligned release
+
+Changes (w.r.t. TBB 3.0 Update 4 commercial-aligned release):
+
+- Added Community Preview feature: graph.
+- Added automatic propagation of master thread FPU settings to
+    TBB worker threads.
+- Added a public function to perform a sequentially consistent full 
+    memory fence: tbb::atomic_fence() in tbb/atomic.h.
+
+Bugs fixed:
+
+- Data race that could result in scheduler data structures corruption
+    when using fire-and-forget tasks.
+- Potential referencing of destroyed concurrent_hash_map element after
+    using erase(accessor&A) method with A acquired as const_accessor.
+- Fixed a correctness bug in the convex hull example.
+
+Open-source contributions integrated:
+
+- Patch for calls to internal::atomic_do_once() by Andrey Semashev.
+
+------------------------------------------------------------------------
+TBB 3.0 Update 4 commercial-aligned release
+
+Changes (w.r.t. TBB 3.0 Update 3 commercial-aligned release):
+
+- Added Community Preview feature: concurrent_priority_queue.
+- Fixed library loading to avoid possibility for remote code execution,
+    see http://www.microsoft.com/technet/security/advisory/2269637.mspx.
+- Added support of more than 64 cores for appropriate Microsoft* 
+    Windows* versions. For more details, see 
+    http://msdn.microsoft.com/en-us/library/dd405503.aspx.
+- Default number of worker threads is adjusted in accordance with 
+    process affinity mask.
+
+Bugs fixed:
+
+- Calls of scalable_* functions from inside the allocator library 
+    caused issues if the functions were overridden by another module.
+- A crash occurred if methods run() and wait() were called concurrently
+    for an empty tbb::task_group (1736).
+- The tachyon example exhibited build problems associated with 
+    bug 554339 on Microsoft* Visual Studio* 2010. Project files were
+    modified as a partial workaround to overcome the problem. See 
+    http://connect.microsoft.com/VisualStudio/feedback/details/554339.
+
+------------------------------------------------------------------------
+TBB 3.0 Update 3 commercial-aligned release
+
+Changes (w.r.t. TBB 3.0 Update 2 commercial-aligned release):
+
+- cache_aligned_allocator class reworked to use scalable_aligned_malloc.
+- Improved performance of count() and equal_range() methods
+    in concurrent_unordered_map.
+- Improved implementation of 64-bit atomic loads and stores on 32-bit
+    platforms, including compilation with VC 7.1.
+- Added implementation of atomic operations on top of OSAtomic API
+    provided by Mac OS* X.
+- Removed gratuitous try/catch blocks surrounding thread function calls
+  in tbb_thread.
+- Xcode* projects were added for sudoku and game_of_life examples.
+- Xcode* projects were updated to work without TBB framework.
+
+Bugs fixed:
+
+- Fixed a data race in task scheduler destruction that on rare occasion
+    could result in memory corruption.
+- Fixed idle spinning in thread bound filters in tbb::pipeline (1670).
+
+Open-source contributions integrated:
+
+- MinGW-64 basic support by brsomoza (partially).
+- Patch for atomic.h by Andrey Semashev.
+- Support for AIX & GCC on PowerPC by Giannis Papadopoulos.
+- Various improvements by Raf Schietekat.
+
+------------------------------------------------------------------------
+TBB 3.0 Update 2 commercial-aligned release
+
+Changes (w.r.t. TBB 3.0 Update 1 commercial-aligned release):
+
+- Destructor of tbb::task_group class throws missing_wait exception
+    if there are tasks running when it is invoked.
+- Cilk-TBB interop layer added to protect TBB TLS in case of
+    "Cilk-TBB-Cilk nesting" usage model.
+- Compilation fix for dependent template names in concurrent_queue.
+- Memory allocator code refactored to ease development and maintenance.
+
+Bugs fixed:
+
+- Improved interoperability with other Intel software tools on Linux in
+    case of dynamic replacement of memory allocator (1700)
+- Fixed install issues that prevented installation on
+    Mac OS* X 10.6.4 (1711).
+
+------------------------------------------------------------------------
 TBB 3.0 Update 1 commercial-aligned release
 
 Changes (w.r.t. TBB 3.0 commercial-aligned release):
 
 - Decreased memory fragmentation by allocations bigger than 8K.
 - Lazily allocate worker threads, to avoid creating unnecessary stacks.
- 
-Bugs fixed: 
+
+Bugs fixed:
 
 - TBB allocator used much more memory than malloc (1703) - see above.
-- Deadlocks happened in some specific initialization scenarios 
+- Deadlocks happened in some specific initialization scenarios
     of the TBB allocator (1701, 1704).
 - Regression in enumerable_thread_specific: excessive requirements
     for object constructors.
-- A bug in construction of parallel_pipeline filters when body instance 
+- A bug in construction of parallel_pipeline filters when body instance
     was a temporary object.
 - Incorrect usage of memory fences on PowerPC and XBOX360 platforms.
-- A subtle issue in task group context binding that could result 
+- A subtle issue in task group context binding that could result
     in cancelation signal being missed by nested task groups.
 - Incorrect construction of concurrent_unordered_map if specified
     number of buckets is not power of two.
 - Broken count() and equal_range() of concurrent_unordered_map.
 - Return type of postfix form of operator++ for hash map's iterators.
 
-Open-source contributions integrated:
-
-- The fix to build examples on system there VS 2010 only is installed.
-
 ------------------------------------------------------------------------
 TBB 3.0 commercial-aligned release
 
@@ -52,11 +178,11 @@ Changes (w.r.t. 20100310 open-source release):
 - PDF documentation updated.
 - Other fixes and changes in code, tests, and examples.
 
-Bugs fixed: 
+Bugs fixed:
 
 - Eliminated build errors with MinGW32.
 - Fixed post-build step and other issues in VS projects for examples.
-- Fixed discrepancy between scalable_realloc and scalable_msize that 
+- Fixed discrepancy between scalable_realloc and scalable_msize that
     caused crashes with malloc replacement on Windows.
 
 ------------------------------------------------------------------------
@@ -82,8 +208,8 @@ Changes (w.r.t. TBB 2.2 Update 3 commercial-aligned release):
 - Added almost-C++0x-compatible std::condition_variable, plus a bunch
     of other C++0x classes required by condition_variable.
 - With TBB_IMPLEMENT_CPP0X, tbb_thread can be also used as std::thread.
-- task.cpp was split into several translation units to structure 
-    TBB scheduler sources layout. Static data layout and library 
+- task.cpp was split into several translation units to structure
+    TBB scheduler sources layout. Static data layout and library
     initialization logic were also updated.
 - TBB scheduler reworked to prevent master threads from stealing
     work belonging to other masters.
@@ -115,11 +241,11 @@ Changes (w.r.t. TBB 2.2 Update 2 commercial-aligned release):
 
 - PDF documentation updated.
 
-Bugs fixed: 
+Bugs fixed:
 
 - concurrent_hash_map compatibility issue exposed on Linux in case
     two versions of the container were used by different modules.
-- enforce 16 byte stack alignment for consistence with GCC; required 
+- enforce 16 byte stack alignment for consistence with GCC; required
     to work correctly with 128-bit variables processed by SSE.
 - construct() methods of allocator classes now use global operator new.
 
@@ -131,7 +257,7 @@ Changes (w.r.t. TBB 2.2 Update 1 commercial-aligned release):
 - parallel_invoke and parallel_for_each now take function objects
     by const reference, not by value.
 - Building TBB with /MT is supported, to avoid dependency on particular
-    versions of Visual C++* runtime DLLs. TBB DLLs built with /MT 
+    versions of Visual C++* runtime DLLs. TBB DLLs built with /MT
     are located in vc_mt directory.
 - Class critical_section introduced.
 - Improvements in exception support: new exception classes introduced,
@@ -141,19 +267,19 @@ Changes (w.r.t. TBB 2.2 Update 1 commercial-aligned release):
     function substitution on Windows*.
 - Method swap() added to class tbb_thread.
 - Methods rehash() and bucket_count() added to concurrent_hash_map.
-- Added support for Visual Studio* 2010 Beta2. No special binaries 
+- Added support for Visual Studio* 2010 Beta2. No special binaries
     provided, but CRT-independent DLLs (vc_mt) should work.
 - Other fixes and improvements in code, tests, examples, and docs.
 
 Open-source contributions integrated:
 
-- The fix to build 32-bit TBB on Mac OS X* 10.6.
+- The fix to build 32-bit TBB on Mac OS* X 10.6.
 - GCC-based port for SPARC Solaris by Michailo Matijkiw, with use of
     earlier work by Raf Schietekat.
 
-Bugs fixed: 
+Bugs fixed:
 
-- 159 - TBB build for PowerPC* running Mac OS X*.
+- 159 - TBB build for PowerPC* running Mac OS* X.
 - 160 - IBM* Java segfault if used with TBB allocator.
 - crash in concurrent_queue<char> (1616).
 
@@ -167,16 +293,16 @@ Changes (w.r.t. TBB 2.2 commercial-aligned release):
 - TBB scheduler auto-initialization now covers all possible use cases.
 - concurrent_queue: made argument types of sizeof used in paddings
   consistent with those actually used.
-- Memory allocator was improved: supported corner case of user's malloc 
-    calling scalable_malloc (non-Windows), corrected processing of 
-    memory allocation requests during tbb memory allocator startup 
+- Memory allocator was improved: supported corner case of user's malloc
+    calling scalable_malloc (non-Windows), corrected processing of
+    memory allocation requests during tbb memory allocator startup
     (Linux).
 - Windows malloc replacement has got better support for static objects.
-- In pipeline setups that do not allow actual parallelism, execution 
-    by a single thread is guaranteed, idle spinning eliminated, and 
+- In pipeline setups that do not allow actual parallelism, execution
+    by a single thread is guaranteed, idle spinning eliminated, and
     performance improved.
 - RML refactoring and clean-up.
-- New constructor for concurrent_hash_map allows reserving space for 
+- New constructor for concurrent_hash_map allows reserving space for
     a number of items.
 - Operator delete() added to the TBB exception classes.
 - Lambda support was improved in parallel_reduce.
@@ -184,10 +310,10 @@ Changes (w.r.t. TBB 2.2 commercial-aligned release):
 - Fixed possible initialization deadlock in modules using TBB entities
     during construction of global static objects.
 - Copy constructor in concurrent_hash_map was fixed.
-- Fixed a couple of rare crashes in the scheduler possible before 
+- Fixed a couple of rare crashes in the scheduler possible before
     in very specific use cases.
 - Fixed a rare crash in the TBB allocator running out of memory.
-- New tests were implemented, including test_lambda.cpp that checks 
+- New tests were implemented, including test_lambda.cpp that checks
     support for lambda expressions.
 - A few other small changes in code, tests, and documentation.
 
@@ -211,13 +337,13 @@ Changes (w.r.t. TBB 2.1 U4 commercial-aligned release):
 - Incorporates all changes from open-source releases below.
 - Architecture folders renamed from em64t to intel64 and from itanium
     to ia64.
-- Major Interface version changed from 3 to 4. Deprecated interfaces 
+- Major Interface version changed from 3 to 4. Deprecated interfaces
     might be removed in future releases.
-- Parallel algorithms that use partitioners have switched to use 
+- Parallel algorithms that use partitioners have switched to use
     the auto_partitioner by default.
 - Improved memory allocator performance for allocations bigger than 8K.
 - Added new thread-bound filters functionality for pipeline.
-- New implementation of concurrent_hash_map that improves performance 
+- New implementation of concurrent_hash_map that improves performance
     significantly.
 - A few other small changes in code and documentation.
 
@@ -231,7 +357,7 @@ Changes (w.r.t. previous open-source release):
     It can be used as an adaptor to any STL-compatible allocator class.
 - Added tbb::parallel_for_each template function as alias to parallel_do.
 - Added more overloads for tbb::parallel_for.
-- Added support for exact exception propagation (can only be used with 
+- Added support for exact exception propagation (can only be used with
     compilers that support C++0x std::exception_ptr).
 - tbb::atomic template class can be used with enumerations.
 - mutex, recursive_mutex, spin_mutex, spin_rw_mutex classes extended
@@ -246,11 +372,11 @@ Changes (w.r.t. previous open-source release):
 
 Changes affecting backward compatibility:
 
-- Improvements in concurrent_queue, including limited API changes. 
-    The previous version is deprecated; its functionality is accessible 
+- Improvements in concurrent_queue, including limited API changes.
+    The previous version is deprecated; its functionality is accessible
     via methods of the new tbb::concurrent_bounded_queue class.
 - grow* and push_back methods of concurrent_vector changed to return
-    iterators; old semantics is deprecated. 
+    iterators; old semantics is deprecated.
 
 ------------------------------------------------------------------------
 TBB 2.1 Update 4 commercial-aligned release
@@ -261,13 +387,13 @@ Changes (w.r.t. TBB 2.1 U3 commercial-aligned release):
 - Several improvements for better bundling with Intel(R) C++ Compiler.
 - A few other small changes in code and documentaion.
 
-Bugs fixed: 
+Bugs fixed:
 
 - 150 - request to build TBB examples with debug info in release mode.
 - backward compatibility issue with concurrent_queue on Windows.
 - dependency on VS 2005 SP1 runtime libraries removed.
-- compilation of GUI examples under XCode* 3.1 (1577).
-- On Windows, TBB allocator classes can be instantiated with const types 
+- compilation of GUI examples under Xcode* 3.1 (1577).
+- On Windows, TBB allocator classes can be instantiated with const types
     for compatibility with MS implementation of STL containers (1566).
 
 ------------------------------------------------------------------------
@@ -277,23 +403,23 @@ Changes (w.r.t. 20081109 open-source release):
 
 - Includes all changes introduced in TBB 2.1 Update 2 & Update 3
     commercial-aligned releases (see below for details).
-- Added tbb::parallel_invoke template function. It runs up to 10 
+- Added tbb::parallel_invoke template function. It runs up to 10
     user-defined functions in parallel and waits for them to complete.
 - Added a special library providing ability to replace the standard
     memory allocation routines in Microsoft* C/C++ RTL (malloc/free,
-    global new/delete, etc.) with the TBB memory allocator. 
+    global new/delete, etc.) with the TBB memory allocator.
     Usage details are described in include/tbb/tbbmalloc_proxy.h file.
-- Task scheduler switched to use new implementation of its core 
+- Task scheduler switched to use new implementation of its core
     functionality (deque based task pool, new structure of arena slots).
-- Preview of Microsoft* Visual Studio* 2005 project files for 
+- Preview of Microsoft* Visual Studio* 2005 project files for
     building the library is available in build/vsproject folder.
 - Added tests for aligned memory allocations and malloc replacement.
-- Added parallel_for/game_of_life.net example (for Windows only) 
+- Added parallel_for/game_of_life.net example (for Windows only)
     showing TBB usage in a .NET application.
 - A number of other fixes and improvements to code, tests, makefiles,
     examples and documents.
 
-Bugs fixed: 
+Bugs fixed:
 
 - The same list as in TBB 2.1 Update 4 right above.
 
@@ -303,10 +429,10 @@ TBB 2.1 Update 3 commercial-aligned release
 Changes (w.r.t. TBB 2.1 U2 commercial-aligned release):
 
 - Added support for aligned allocations to the TBB memory allocator.
-- Added a special library to use with LD_PRELOAD on Linux* in order to 
-    replace the standard memory allocation routines in C/C++ with the 
+- Added a special library to use with LD_PRELOAD on Linux* in order to
+    replace the standard memory allocation routines in C/C++ with the
     TBB memory allocator.
-- Added null_mutex and null_rw_mutex: no-op classes interface-compliant 
+- Added null_mutex and null_rw_mutex: no-op classes interface-compliant
     to other TBB mutexes.
 - Improved performance of parallel_sort, to close most of the serial gap
     with std::sort, and beat it on 2 and more cores.
@@ -314,7 +440,7 @@ Changes (w.r.t. TBB 2.1 U2 commercial-aligned release):
 
 Bugs fixed:
 
-- the problem where parallel_for hanged after exception throw 
+- the problem where parallel_for hanged after exception throw
     if affinity_partitioner was used (1556).
 - get rid of VS warnings about mbstowcs deprecation (1560),
     as well as some other warnings.
@@ -337,12 +463,12 @@ Changes (w.r.t. TBB 2.1 U1 commercial-aligned release):
     for parallel_do and pipeline.
 - Added copy constructor and [begin,end) constructor to concurrent_queue.
 - Added some support for beta version of Intel(R) Parallel Amplifier.
-- Added scripts to set environment for cross-compilation of 32-bit 
+- Added scripts to set environment for cross-compilation of 32-bit
     applications on 64-bit Linux with Intel(R) C++ Compiler.
 - Fixed semantics of concurrent_vector::clear() to not deallocate
     internal arrays. Fixed compact() to perform such deallocation later.
 - Fixed the issue with atomic<T*> when T is incomplete type.
-- Improved support for PowerPC* Macintosh*, including the fix 
+- Improved support for PowerPC* Macintosh*, including the fix
     for a bug in masked compare-and-swap reported by a customer.
 - As usual, a number of other improvements everywhere.
 
@@ -353,12 +479,12 @@ Changes (w.r.t. previous open-source release):
 
 - Added new serial out of order filter for tbb::pipeline.
 - Fixed the issue with atomic<T*>::operator= reported at the forum.
-- Fixed the issue with using tbb::task::self() in task destructor 
+- Fixed the issue with using tbb::task::self() in task destructor
     reported at the forum.
-- A number of other improvements to code, tests, makefiles, examples 
+- A number of other improvements to code, tests, makefiles, examples
     and documents.
 
-Open-source contributions integrated: 
+Open-source contributions integrated:
 - Changes in the memory allocator were partially integrated.
 
 ------------------------------------------------------------------------
@@ -366,17 +492,17 @@ Open-source contributions integrated:
 
 Changes (w.r.t. previous open-source release):
 
-- Introduced enumerable_thread_specific<T>.  This new class provides a 
-    wrapper around native thread local storage as well as iterators and 
+- Introduced enumerable_thread_specific<T>.  This new class provides a
+    wrapper around native thread local storage as well as iterators and
     ranges for accessing the thread local copies (1533).
 - Improved support for Intel(R) Threading Analysis Tools
     on Intel(R) 64 architecture.
-- Dependency from Microsoft* CRT was integrated to the libraries using 
-    manifests, to avoid issues if called from code that uses different 
+- Dependency from Microsoft* CRT was integrated to the libraries using
+    manifests, to avoid issues if called from code that uses different
     version of Visual C++* runtime than the library.
-- Introduced new defines TBB_USE_ASSERT, TBB_USE_DEBUG, 
+- Introduced new defines TBB_USE_ASSERT, TBB_USE_DEBUG,
     TBB_USE_PERFORMANCE_WARNINGS, TBB_USE_THREADING_TOOLS.
-- A number of other improvements to code, tests, makefiles, examples 
+- A number of other improvements to code, tests, makefiles, examples
     and documents.
 
 Open-source contributions integrated:
@@ -391,17 +517,16 @@ Changes (w.r.t. previous open-source release):
 - Same fix for a memory leak in the memory allocator as in TBB 2.1 U1.
 - Improved support for lambda functions.
 - Fixed more concurrent_queue issues reported at the forum.
-- A number of other improvements to code, tests, makefiles, examples 
+- A number of other improvements to code, tests, makefiles, examples
     and documents.
 
 ------------------------------------------------------------------------
 TBB 2.1 Update 1 commercial-aligned release
 
-Changes (w.r.t. TBB 2.1 Gold commercial-aligned release):
+Changes (w.r.t. TBB 2.1 commercial-aligned release):
 
 - Fixed small memory leak in the memory allocator.
-- Incorporates all open-source-release changes down to TBB 2.1 GOLD,
-    except for:
+- Incorporates all open-source-release changes since TBB 2.1, except for:
     - 20080825 changes for parallel_do;
 
 ------------------------------------------------------------------------
@@ -458,12 +583,12 @@ Changes (w.r.t. previous open-source release):
 - A few more improvements to the code.
 
 ------------------------------------------------------------------------
-TBB 2.1 GOLD commercial-aligned release
+TBB 2.1 commercial-aligned release
 
 Changes (w.r.t. TBB 2.0 U3 commercial-aligned release):
 
-- All open-source-release changes down to, and including, TBB 2.0 GOLD
-    below, were incorporated into this release.
+- All open-source-release changes down to, and including, TBB 2.0 below,
+    were incorporated into this release.
 
 ------------------------------------------------------------------------
 20080605 open-source release
@@ -496,15 +621,15 @@ Changes (w.r.t. previous open-source release):
 - Fixed a problem with backward binary compatibility
     of debug Linux builds.
 - Sun* Studio* support added.
-- soname support added on Linux via linker script. To restore backward 
+- soname support added on Linux via linker script. To restore backward
     binary compatibility, *.so -> *.so.2 softlinks should be created.
-- concurrent_hash_map improvements - added few new forms of insert() 
-    method and fixed precondition and guarantees of erase() methods.   
-    Added runtime warning reporting about bad hash function used for 
+- concurrent_hash_map improvements - added few new forms of insert()
+    method and fixed precondition and guarantees of erase() methods.
+    Added runtime warning reporting about bad hash function used for
     the container. Various improvements for performance and concurrency.
 - Cancellation mechanism reworked so that it does not hurt scalability.
-- Algorithm parallel_do reworked. Requirement for Body::argument_type 
-    definition removed, and work item argument type can be arbitrarily 
+- Algorithm parallel_do reworked. Requirement for Body::argument_type
+    definition removed, and work item argument type can be arbitrarily
     cv-qualified.
 - polygon_overlay example added.
 - A few more improvements to code, tests, examples and Makefiles.
@@ -535,9 +660,9 @@ Changes (w.r.t. TBB 2.0 U2 commercial-aligned release):
 
 Changes (w.r.t. previous open-source release):
 
-- count_strings example reworked: new word generator implemented, hash 
+- count_strings example reworked: new word generator implemented, hash
     function replaced, and tbb_allocator is used with std::string class.
-- Static methods of spin_rw_mutex were replaced by normal member 
+- Static methods of spin_rw_mutex were replaced by normal member
     functions, and the class name was versioned.
 - tacheon example was renamed to tachyon.
 - Improved support for Intel(R) Thread Checker.
@@ -552,14 +677,14 @@ Open-source contributions integrated:
 
 Changes (w.r.t. previous open-source release):
 
-- Exception handling and cancellation support for tasks and algorithms 
+- Exception handling and cancellation support for tasks and algorithms
     fully enabled.
-- Exception safety guaranties defined and fixed for all concurrent 
+- Exception safety guaranties defined and fixed for all concurrent
     containers.
-- User-defined memory allocator support added to all concurrent 
+- User-defined memory allocator support added to all concurrent
     containers.
 - Performance improvement of concurrent_hash_map, spin_rw_mutex.
-- Critical fix for a rare race condition during scheduler 
+- Critical fix for a rare race condition during scheduler
     initialization/de-initialization.
 - New methods added for concurrent containers to be closer to STL,
     as well as automatic filters removal from pipeline
@@ -573,14 +698,14 @@ Changes (w.r.t. previous open-source release):
 Changes (w.r.t. previous open-source release):
 
 - Support for gcc version 4.3 was added.
-- tbb_thread class, near compatible with std::thread expected in C++0x, 
+- tbb_thread class, near compatible with std::thread expected in C++0x,
     was added.
 
 Bugs fixed:
 
 - 116 - fix for compilation issues with gcc version 4.2.1.
 - 120 - fix for compilation issues with gcc version 4.3.
- 
+
 ------------------------------------------------------------------------
 20080311 open-source release
 
@@ -592,7 +717,7 @@ Changes (w.r.t. previous open-source release):
 - task_scheduler_init reverted to not use internal versioned class;
     binary compatibility guaranteed with stable releases only.
 - Various improvements to code, tests, examples and Makefiles.
- 
+
 ------------------------------------------------------------------------
 20080304 open-source release
 
@@ -603,7 +728,7 @@ Changes (w.r.t. previous open-source release):
 - Work-in-progress on cache_aligned_allocator improvements.
 - Pipeline really supports parallel input stage; it's no more serialized.
 - Various improvements to code, tests, examples and Makefiles.
- 
+
 Bugs fixed:
 
 - 119 - fix for scalable_malloc sometimes failing to return a big block.
@@ -762,7 +887,7 @@ Changes (w.r.t. previous open-source release):
 ------------------------------------------------------------------------
 20070927 open-source release
 
-Changes:
+Changes (w.r.t. TBB 2.0 U1 commercial-aligned release):
 
 - Minor update to TBB 2.0 U1 below.
 - Begin introduction of new concurrent_vector interfaces not released
@@ -773,10 +898,10 @@ TBB 2.0 U1 commercial-aligned release (package 014, October 1, 2007)
 
 Corresponds to commercial 014 (for Linux*, 016) packages.
 
-Changes (w.r.t. previous commercial-aligned release):
+Changes (w.r.t. TBB 2.0 commercial-aligned release):
 
-- All open-source-release changes down to, and including, TBB 2.0 GOLD
-    below, were incorporated into this release.
+- All open-source-release changes down to, and including, TBB 2.0 below,
+    were incorporated into this release.
 - Made a number of changes to the officially supported OS list:
     Added Linux* OSs:
 	Asianux* 3, Debian* 4.0, Fedora Core* 6, Fedora* 7,
@@ -824,15 +949,111 @@ Bugs fixed:
 
 Changes:
 
-- Minor update to TBB 2.0 GOLD below.
+- Minor update to TBB 2.0 commercial-aligned release below.
 - Changes to eliminate spurious build warnings.
 
 ------------------------------------------------------------------------
-TBB 2.0 GOLD commercial-aligned release (package 010, July 19, 2007)
+TBB 2.0 commercial-aligned release (package 010, July 19, 2007)
 
 Corresponds to commercial 010 (for Linux*, 012) packages.
 
 - TBB open-source debut release.
 
 ------------------------------------------------------------------------
+TBB 1.1 commercial release (April 10, 2007)
+
+Changes (w.r.t. TBB 1.0 commercial release):
+
+- auto_partitioner which offered an automatic alternative to specifying
+    a grain size parameter to estimate the best granularity for tasks.
+- The release was added to the Intel(R) C++ Compiler 10.0 Pro.
+
+------------------------------------------------------------------------
+TBB 1.0 Update 2 commercial release
+
+Changes (w.r.t. TBB 1.0 Update 1 commercial release):
+
+- Mac OS* X 64-bit support added.
+- Source packages for commercial releases introduced.
+
+------------------------------------------------------------------------
+TBB 1.0 Update 1 commercial-aligned release
+
+Changes (w.r.t. TBB 1.0 commercial release):
+
+- Fix for critical package issue on Mac OS* X.
+
+------------------------------------------------------------------------
+TBB 1.0 commercial release (August 29, 2006)
+
+Changes (w.r.t. TBB 1.0 beta commercial release):
+
+- New namespace (and compatibility headers for old namespace).
+    Namespaces are tbb and tbb::internal and all classes are in the
+    underscore_style not the WindowsStyle.
+- New class: scalable_allocator (and cache_aligned_allocator using that
+    if it exists).
+- Added parallel_for/tacheon example.
+- Removed C-style casts from headers for better C++ compliance.
+- Bug fixes.
+- Documentation improvements.
+- Improved performance of the concurrent_hash_map class.
+- Upgraded parallel_sort() to support STL-style random-access iterators
+    instead of just pointers.
+- The Windows vs7_1 directories renamed to vs7.1 in examples.
+- New class: spin version of reader-writer lock.
+- Added push_back() interface to concurrent_vector().
+
+------------------------------------------------------------------------
+TBB 1.0 beta commercial release
+
+Initial release.
+
+Features / APIs:
+
+- Concurrent containers: ConcurrentHashTable, ConcurrentVector,
+    ConcurrentQueue.
+- Parallel algorithms: ParallelFor, ParallelReduce, ParallelScan,
+    ParallelWhile, Pipeline, ParallelSort.
+- Support: AlignedSpace, BlockedRange (i.e., 1D), BlockedRange2D
+- Task scheduler with multi-master support.
+- Atomics: read, write, fetch-and-store, fetch-and-add, compare-and-swap.
+- Locks: spin, reader-writer, queuing, OS-wrapper.
+- Memory allocation: STL-style memory allocator that avoids false
+    sharing.
+- Timers.
+
+Tools Support:
+- Thread Checker 3.0.
+- Thread Profiler 3.0.
+
+Documentation:
+- First Use Documents: README.txt, INSTALL.txt, Release_Notes.txt,
+    Doc_Index.html, Getting_Started.pdf, Tutorial.pdf, Reference.pdf.
+- Class hierarchy HTML pages (Doxygen).
+- Tree of index.html pages for navigating the installed package, esp.
+    for the examples.
+
+Examples:
+- One for each of these TBB features: ConcurrentHashTable, ParallelFor,
+    ParallelReduce, ParallelWhile, Pipeline, Task.
+- Live copies of examples from Getting_Started.pdf.
+- TestAll example that exercises every class and header in the package
+    (i.e., a "liveness test").
+- Compilers: see Release_Notes.txt.
+- APIs: OpenMP, WinThreads, Pthreads.
+
+Packaging:
+- Package for Windows installs IA-32 and EM64T bits.
+- Package for Linux installs IA-32, EM64T and IPF bits.
+- Package for Mac OS* X installs IA-32 bits.
+- All packages support Intel(R) software setup assistant (ISSA) and
+    install-time FLEXlm license checking.
+- ISSA support allows license file to be specified directly in case of
+    no Internet connection or problems with IRC or serial #s.
+- Linux installer allows root or non-root, RPM or non-RPM installs.
+- FLEXlm license servers (for those who need floating/counted licenses)
+    are provided separately on Intel(R) Premier.
+
+------------------------------------------------------------------------
 * Other names and brands may be claimed as the property of others.
diff --git a/Makefile b/Makefile
index f8faec0..982975d 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -48,7 +48,7 @@ test: tbb tbbmalloc
 	-$(MAKE) -C "$(work_dir)_debug"  -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=debug malloc_test tbb_root=$(tbb_root)
 	-$(MAKE) -C "$(work_dir)_debug"  -r -f $(tbb_root)/build/Makefile.test cfg=debug tbb_root=$(tbb_root)
 	-$(MAKE) -C "$(work_dir)_release"  -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=release malloc_test tbb_root=$(tbb_root)
-	-$(MAKE) -C "$(work_dir)_release"  -r -f $(tbb_root)/build/Makefile.test cfg=release tbb_root=$(tbb_root) 
+	-$(MAKE) -C "$(work_dir)_release"  -r -f $(tbb_root)/build/Makefile.test cfg=release tbb_root=$(tbb_root)
 
 rml: mkdir
 	$(MAKE) -C "$(work_dir)_debug"  -r -f $(tbb_root)/build/Makefile.rml cfg=debug tbb_root=$(tbb_root)
diff --git a/build/AIX.gcc.inc b/build/AIX.gcc.inc
new file mode 100644
index 0000000..757f5a2
--- /dev/null
+++ b/build/AIX.gcc.inc
@@ -0,0 +1,85 @@
+# 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.
+
+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
+DYLIB_KEY = -shared
+LIBDL = -ldl
+
+TBB_NOSTRICT = 1
+
+CPLUS = g++ 
+CONLY = gcc
+LIB_LINK_FLAGS = -shared
+LIBS = -lpthread -ldl 
+C_FLAGS = $(CPLUS_FLAGS) -x c
+
+ifeq ($(cfg), release)
+        CPLUS_FLAGS = -O2 -DUSE_PTHREAD -pthread
+endif
+ifeq ($(cfg), debug)
+        CPLUS_FLAGS = -DTBB_USE_DEBUG -g -O0 -DUSE_PTHREAD -pthread
+endif
+
+ASM=
+ASM_FLAGS=
+
+TBB_ASM.OBJ=
+
+ifeq (powerpc,$(arch))
+    CPLUS_FLAGS    += -maix64 -Wl,-G
+    LIB_LINK_FLAGS += -maix64 -Wl,-b64 -Wl,-brtl -Wl,-G
+endif 
+
+#------------------------------------------------------------------------------
+# Setting assembler data.
+#------------------------------------------------------------------------------
+
+ASSEMBLY_SOURCE=ibm_aix51
+ifeq (powerpc,$(arch))
+    TBB_ASM.OBJ = atomic_support.o
+endif
+
+#------------------------------------------------------------------------------
+# End of setting assembler data.
+#------------------------------------------------------------------------------
+
+#------------------------------------------------------------------------------
+# Setting tbbmalloc data.
+#------------------------------------------------------------------------------
+
+M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions -fno-schedule-insns2
+
+#------------------------------------------------------------------------------
+# End of setting tbbmalloc data.
+#------------------------------------------------------------------------------
diff --git a/build/AIX.inc b/build/AIX.inc
new file mode 100644
index 0000000..3f165fe
--- /dev/null
+++ b/build/AIX.inc
@@ -0,0 +1,75 @@
+# 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.
+
+ifndef arch
+        arch:=$(shell uname -p)
+        export arch
+endif
+
+ifndef runtime
+        gcc_version:=$(shell gcc -v 2>&1 | grep 'gcc version' | sed -e 's/^gcc version //' | sed -e 's/ .*$$//')
+        os_version:=$(shell uname -r)
+        os_kernel_version:=$(shell uname -r | sed -e 's/-.*$$//')
+        export runtime:=cc$(gcc_version)_kernel$(os_kernel_version)
+endif
+
+native_compiler := gcc
+export compiler ?= gcc
+debugger ?= gdb
+
+CMD=$(SHELL) -c
+CWD=$(shell pwd)
+RM?=rm -f
+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_TBBVARS=sh $(tbb_root)/build/generate_tbbvars.sh
+
+ifdef LIBPATH
+        export LIBPATH := .:$(LIBPATH)
+else
+        export LIBPATH := .
+endif
+
+####### Build settings ########################################################
+
+OBJ = o
+DLL = so
+
+TBB.LST =
+TBB.DEF =
+TBB.DLL = libtbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(DLL)
+TBB.LIB = $(TBB.DLL)
+LINK_TBB.LIB = $(TBB.LIB)
+
+MALLOC.DLL = libtbbmalloc$(DEBUG_SUFFIX).$(DLL)
+MALLOC.LIB = $(MALLOC.DLL)
+
+TBB_NOSTRICT=1
+
+TEST_LAUNCHER=sh $(tbb_root)/build/test_launcher.sh
diff --git a/build/FreeBSD.gcc.inc b/build/FreeBSD.gcc.inc
index 7c65a71..f397748 100644
--- a/build/FreeBSD.gcc.inc
+++ b/build/FreeBSD.gcc.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -25,7 +25,7 @@
 # the GNU General Public License.
 
 COMPILE_ONLY = -c -MMD
-PREPROC_ONLY = -E -x c
+PREPROC_ONLY = -E -x c++
 INCLUDE_KEY = -I
 DEFINE_KEY = -D
 OUTPUT_KEY = -o #
@@ -54,6 +54,7 @@ ASM=
 ASM_FLAGS=
 
 TBB_ASM.OBJ=
+MALLOC_ASM.OBJ=
 
 ifeq (ia64,$(arch))
 # Position-independent code (PIC) is a must on IA-64, even for regular (not shared) executables
@@ -77,6 +78,7 @@ ASSEMBLY_SOURCE=$(arch)-gas
 ifeq (ia64,$(arch))
     ASM=as
     TBB_ASM.OBJ = atomic_support.o lock_byte.o log2.o pause.o
+    MALLOC_ASM.OBJ = atomic_support.o lock_byte.o pause.o
 endif 
 #------------------------------------------------------------------------------
 # End of setting assembler data.
diff --git a/build/FreeBSD.inc b/build/FreeBSD.inc
index 8f2d8c8..9f5b8d8 100644
--- a/build/FreeBSD.inc
+++ b/build/FreeBSD.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -69,8 +69,9 @@ OBJ = o
 DLL = so
 LIBEXT=so
 
-TBB.DEF = 
-TBB.DLL = libtbb$(DEBUG_SUFFIX).$(DLL)
+TBB.LST =
+TBB.DEF =
+TBB.DLL = libtbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(DLL)
 TBB.LIB = $(TBB.DLL)
 LINK_TBB.LIB = $(TBB.LIB)
 
diff --git a/build/Makefile.rml b/build/Makefile.rml
index a32fdc1..9c8692b 100644
--- a/build/Makefile.rml
+++ b/build/Makefile.rml
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -45,11 +45,11 @@ include $(tbb_root)/build/common_rules.inc
 # Define rules for making the RML server shared library and client objects.
 #--------------------------------------------------------------------------
 
-# Object files that make up RML server 
+# Object files that make up RML server
 RML_SERVER.OBJ = rml_server.$(OBJ)
 
 # Object files that RML clients need
-RML_TBB_CLIENT.OBJ = rml_tbb.$(OBJ) dynamic_link.$(OBJ)
+RML_TBB_CLIENT.OBJ = rml_tbb.$(OBJ) dynamic_link_rml.$(OBJ)
 RML_OMP_CLIENT.OBJ = rml_omp.$(OBJ) omp_dynamic_link.$(OBJ)
 
 RML.OBJ = $(RML_SERVER.OBJ) $(RML_TBB_CLIENT.OBJ) $(RML_OMP_CLIENT.OBJ)
@@ -60,12 +60,12 @@ ifeq (linux,$(tbb_os))
 RML_ASM.OBJ = $(if $(findstring ia64,$(arch)),$(TBB_ASM.OBJ))
 endif
 
-RML_TBB_DEP= cache_aligned_allocator_rml.$(OBJ) dynamic_link_rml.$(OBJ) concurrent_vector_rml.$(OBJ) tbb_misc_rml.$(OBJ)
-TBB_DEP_NON_RML_TEST= cache_aligned_allocator_rml.$(OBJ) dynamic_link_rml.$(OBJ) $(RML_ASM.OBJ) tbb_misc_rml.$(OBJ)
+RML_TBB_DEP= cache_aligned_allocator_rml.$(OBJ) dynamic_link_rml.$(OBJ) concurrent_vector_rml.$(OBJ) tbb_misc_rml.$(OBJ) tbb_misc_ex_rml.$(OBJ)
+TBB_DEP_NON_RML_TEST= cache_aligned_allocator_rml.$(OBJ) dynamic_link_rml.$(OBJ) $(RML_ASM.OBJ) tbb_misc_rml.$(OBJ) tbb_misc_ex_rml.$(OBJ)
 TBB_DEP_RML_TEST= $(RML_ASM.OBJ)
 ifeq ($(cfg),debug)
-RML_TBB_DEP+= spin_mutex_rml.$(OBJ) 
-TBB_DEP_RML_TEST+= tbb_misc_rml.$(OBJ) 
+RML_TBB_DEP+= spin_mutex_rml.$(OBJ)
+TBB_DEP_RML_TEST+= tbb_misc_rml.$(OBJ)
 endif
 LIBS += $(LIBDL)
 
@@ -73,7 +73,7 @@ INCLUDES += $(INCLUDE_KEY)$(RML_ROOT)/include $(INCLUDE_KEY).
 T_INCLUDES = $(INCLUDES) $(INCLUDE_KEY)$(tbb_root)/src/test $(INCLUDE_KEY)$(RML_SERVER_ROOT)
 
 # Suppress superfluous warnings for RML compilation
-R_CPLUS_FLAGS =  $(subst DO_ITT_NOTIFY,DO_ITT_NOTIFY=0,$(CPLUS_FLAGS_NOSTRICT)) $(WARNING_SUPPRESS) \
+R_CPLUS_FLAGS =  $(subst DO_ITT_NOTIFY,DO_ITT_NOTIFY=0,$(CPLUS_FLAGS)) $(WARNING_SUPPRESS) \
 		 $(DEFINE_KEY)TBB_USE_THREADING_TOOLS=0 $(DEFINE_KEY)__TBB_RML_STATIC=1 $(DEFINE_KEY)__TBB_NO_IMPLICIT_LINKAGE=1
 
 %.$(OBJ): %.cpp
@@ -84,14 +84,14 @@ tbb_misc_rml.$(OBJ): version_string.tmp
 RML_TEST.OBJ = test_job_automaton.$(OBJ) test_thread_monitor.$(OBJ) test_rml_tbb.$(OBJ) test_rml_omp.$(OBJ) test_rml_mixed.$(OBJ)
 
 $(RML_TBB_DEP): %_rml.$(OBJ): %.cpp
-	$(CPLUS) $(COMPILE_ONLY) $(OUTPUTOBJ_KEY)$@ $(R_CPLUS_FLAGS) $(PIC_KEY) $(INCLUDES) $< 
+	$(CPLUS) $(COMPILE_ONLY) $(OUTPUTOBJ_KEY)$@ $(R_CPLUS_FLAGS) $(PIC_KEY) $(INCLUDES) $<
 
 $(RML_TEST.OBJ): %.$(OBJ): %.cpp
 	$(CPLUS) $(COMPILE_ONLY) $(R_CPLUS_FLAGS) $(PIC_KEY) $(T_INCLUDES) $<
 
 ifneq (,$(RML.DEF))
 rml.def: $(RML.DEF)
-	$(CMD) "$(CPLUS) $(PREPROC_ONLY) $(RML.DEF) $(filter $(DEFINE_KEY)%,$(CPLUS_FLAGS)) >rml.def 2>$(NUL) || exit 0"
+	$(CPLUS) $(PREPROC_ONLY) $< $(CPLUS_FLAGS) $(INCLUDES) > $@
 
 LIB_LINK_FLAGS += $(EXPORT_KEY)rml.def
 $(RML.DLL): rml.def
@@ -125,10 +125,10 @@ test_rml_tbb.$(TEST_EXT): test_rml_tbb.$(OBJ) $(RML_TBB_CLIENT.OBJ) $(TBB_DEP_RM
 	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) test_rml_tbb.$(OBJ) $(RML_TBB_CLIENT.OBJ) $(TBB_DEP_RML_TEST) $(LIBS) $(LINK_FLAGS)
 
 test_rml_omp.$(TEST_EXT): test_rml_omp.$(OBJ) $(RML_OMP_CLIENT.OBJ) $(TBB_DEP_NON_RML_TEST)
-	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) test_rml_omp.$(OBJ) $(RML_OMP_CLIENT.OBJ) $(TBB_DEP_NON_RML_TEST) $(LIBS) $(LINK_FLAGS) 
+	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) test_rml_omp.$(OBJ) $(RML_OMP_CLIENT.OBJ) $(TBB_DEP_NON_RML_TEST) $(LIBS) $(LINK_FLAGS)
 
 test_rml_mixed.$(TEST_EXT): test_rml_mixed.$(OBJ) $(RML_TBB_CLIENT.OBJ) $(RML_OMP_CLIENT.OBJ) $(TBB_DEP_RML_TEST)
-	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) test_rml_mixed.$(OBJ) $(RML_TBB_CLIENT.OBJ) $(RML_OMP_CLIENT.OBJ) $(TBB_DEP_RML_TEST) $(LIBS) $(LINK_FLAGS) 
+	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) test_rml_mixed.$(OBJ) $(RML_TBB_CLIENT.OBJ) $(RML_OMP_CLIENT.OBJ) $(TBB_DEP_RML_TEST) $(LIBS) $(LINK_FLAGS)
 
 rml_omp_stub.$(OBJ): rml_omp_stub.cpp
 	$(CPLUS) $(COMPILE_ONLY) $(M_CPLUS_FLAGS) $(WARNING_SUPPRESS) $(T_INCLUDES) $(PIC_KEY) $<
diff --git a/build/Makefile.tbb b/build/Makefile.tbb
index 0206246..1ad9c04 100644
--- a/build/Makefile.tbb
+++ b/build/Makefile.tbb
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -46,26 +46,10 @@ VPATH = $(tbb_root)/src/tbb/$(ASSEMBLY_SOURCE) $(tbb_root)/src/tbb $(tbb_root)/s
 
 CPLUS_FLAGS += $(PIC_KEY) $(DEFINE_KEY)__TBB_BUILD=1
 
-ifeq (1,$(TBB_NOSTRICT))
-# GNU 3.2.3 headers have a ISO syntax that is rejected by Intel compiler in -strict_ansi mode.
-# The Mac uses gcc, so the list is empty for that platform.
-# The files below need the -strict_ansi flag downgraded to -ansi to compile
-
-KNOWN_NOSTRICT = concurrent_hash_map.o \
-	concurrent_queue.o \
-	concurrent_vector_v2.o \
-	concurrent_vector.o \
-	task.o \
-	task_group_context.o \
-	governor.o \
-	market.o \
-	arena.o \
-	scheduler.o \
-	observer_proxy.o \
-	tbb_main.o \
-	task_v2.o
-
-endif
+# A template to switch off strict-ansi for certain compilation units
+# ifeq (1,$(TBB_NOSTRICT))
+# KNOWN_NOSTRICT = <object-file-name>
+# endif
 
 # Object files (that were compiled from C++ code) that gmake up TBB
 TBB_CPLUS.OBJ = concurrent_hash_map.$(OBJ) \
@@ -83,6 +67,7 @@ TBB_CPLUS.OBJ = concurrent_hash_map.$(OBJ) \
 		critical_section.$(OBJ) \
 		task.$(OBJ) \
 		tbb_misc.$(OBJ) \
+		tbb_misc_ex.$(OBJ) \
 		mutex.$(OBJ) \
 		recursive_mutex.$(OBJ) \
 		condition_variable.$(OBJ) \
@@ -96,6 +81,7 @@ TBB_CPLUS.OBJ = concurrent_hash_map.$(OBJ) \
 		arena.$(OBJ) \
 		scheduler.$(OBJ) \
 		observer_proxy.$(OBJ) \
+		tbb_statistics.$(OBJ) \
 		tbb_main.$(OBJ)
 
 # OLD/Legacy object files for backward binary compatibility
@@ -116,8 +102,8 @@ WARNING_KEY += $(WARNING_SUPPRESS)
 include $(tbb_root)/build/common_rules.inc
 
 ifneq (,$(TBB.DEF))
-tbb.def: $(TBB.DEF)
-	$(CMD) "$(CPLUS) $(PREPROC_ONLY) $(TBB.DEF) $(INCLUDES) $(CPLUS_FLAGS) >tbb.def 2>$(NUL) || exit 0"
+tbb.def: $(TBB.DEF) $(TBB.LST)
+	$(CPLUS) $(PREPROC_ONLY) $< $(CPLUS_FLAGS) $(INCLUDES) > $@
 
 LIB_LINK_FLAGS += $(EXPORT_KEY)tbb.def
 $(TBB.DLL): tbb.def
diff --git a/build/Makefile.tbbmalloc b/build/Makefile.tbbmalloc
index 3598543..4a89d98 100644
--- a/build/Makefile.tbbmalloc
+++ b/build/Makefile.tbbmalloc
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -39,8 +39,6 @@ MALLOC_SOURCE_ROOT ?= $(MALLOC_ROOT)
 VPATH = $(tbb_root)/src/tbb/$(ASSEMBLY_SOURCE) $(tbb_root)/src/tbb $(tbb_root)/src/test
 VPATH += $(MALLOC_ROOT) $(MALLOC_SOURCE_ROOT)
 
-KNOWN_NOSTRICT = test_ScalableAllocator_STL.$(OBJ) test_malloc_compliance.$(OBJ) test_malloc_overload.$(OBJ)
-
 CPLUS_FLAGS += $(if $(crosstest),$(DEFINE_KEY)__TBBMALLOC_NO_IMPLICIT_LINKAGE=1)
 
 include $(tbb_root)/build/common_rules.inc
@@ -50,13 +48,8 @@ include $(tbb_root)/build/common_rules.inc
 #------------------------------------------------------
 
 # Object files that make up TBBMalloc
-MALLOC_CPLUS.OBJ = tbbmalloc.$(OBJ) dynamic_link.$(OBJ)
-MALLOC_CUSTOM.OBJ += tbb_misc_malloc.$(OBJ)
-MALLOC_ASM.OBJ = $(TBB_ASM.OBJ)
-
-# MALLOC_CPLUS.OBJ is built in two steps due to Intel Compiler Tracker # C69574
-MALLOC.OBJ := $(MALLOC_CPLUS.OBJ) $(MALLOC_ASM.OBJ) $(MALLOC_CUSTOM.OBJ) MemoryAllocator.$(OBJ) itt_notify.$(OBJ)
-MALLOC_CPLUS.OBJ += MemoryAllocator.$(OBJ)
+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)
 PROXY.OBJ := proxy.$(OBJ) tbb_function_replacement.$(OBJ)
 M_CPLUS_FLAGS := $(subst $(WARNING_KEY),,$(M_CPLUS_FLAGS)) $(DEFINE_KEY)__TBB_BUILD=1
 M_INCLUDES = $(INCLUDES) $(INCLUDE_KEY)$(MALLOC_ROOT) $(INCLUDE_KEY)$(MALLOC_SOURCE_ROOT)
@@ -64,7 +57,8 @@ M_INCLUDES = $(INCLUDES) $(INCLUDE_KEY)$(MALLOC_ROOT) $(INCLUDE_KEY)$(MALLOC_SOU
 # Suppress superfluous warnings for TBBmalloc compilation
 $(MALLOC.OBJ): M_CPLUS_FLAGS += $(WARNING_SUPPRESS)
 
-itt_notify.$(OBJ): CPLUS_FLAGS += $(PIC_KEY)
+tbbmalloc.$(OBJ): tbbmalloc.cpp version_string.tmp
+	$(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) $<
@@ -72,15 +66,15 @@ $(PROXY.OBJ): %.$(OBJ): %.cpp
 $(MALLOC_CPLUS.OBJ): %.$(OBJ): %.cpp
 	$(CPLUS) $(COMPILE_ONLY) $(M_CPLUS_FLAGS) $(PIC_KEY) $(M_INCLUDES) $<
 
-tbb_misc_malloc.$(OBJ): tbb_misc.cpp version_string.tmp
-	$(CPLUS) $(COMPILE_ONLY) $(subst -strict_ansi,-ansi,$(M_CPLUS_FLAGS)) $(PIC_KEY) $(OUTPUTOBJ_KEY)$@ $(INCLUDE_KEY). $(INCLUDES) $<
+itt_notify_malloc.$(OBJ): itt_notify.cpp
+	$(CPLUS) $(COMPILE_ONLY) $(M_CPLUS_FLAGS) $(PIC_KEY) $(OUTPUTOBJ_KEY)$@ $(INCLUDES) $<
 
 MALLOC_LINK_FLAGS = $(LIB_LINK_FLAGS)
-PROXY_LINK_FLAGS = $(LIB_LINK_FLAGS) 
+PROXY_LINK_FLAGS = $(LIB_LINK_FLAGS)
 
 ifneq (,$(MALLOC.DEF))
 tbbmalloc.def: $(MALLOC.DEF)
-	$(CMD) "$(CPLUS) $(PREPROC_ONLY) $(MALLOC.DEF) $(CPLUS_FLAGS) >tbbmalloc.def 2>$(NUL) || exit 0"
+	$(CPLUS) $(PREPROC_ONLY) $< $(CPLUS_FLAGS) $(INCLUDES) > $@
 
 MALLOC_LINK_FLAGS += $(EXPORT_KEY)tbbmalloc.def
 $(MALLOC.DLL): tbbmalloc.def
@@ -88,11 +82,11 @@ endif
 
 $(MALLOC.DLL): BUILDING_LIBRARY = $(MALLOC.DLL)
 $(MALLOC.DLL): $(MALLOC.OBJ) $(MALLOC.RES) $(MALLOC_NO_VERSION.DLL)
-	$(LIB_LINK_CMD) $(LIB_OUTPUT_KEY)$(MALLOC.DLL) $(MALLOC.OBJ) $(MALLOC.RES) $(LIB_LINK_LIBS) $(MALLOC_LINK_FLAGS)
+	$(subst $(CPLUS),$(CONLY),$(LIB_LINK_CMD)) $(LIB_OUTPUT_KEY)$(MALLOC.DLL) $(MALLOC.OBJ) $(MALLOC.RES) $(LIB_LINK_LIBS) $(MALLOC_LINK_FLAGS)
 
 ifneq (,$(MALLOCPROXY.DEF))
 tbbmallocproxy.def: $(MALLOCPROXY.DEF)
-	$(CMD) "$(CPLUS) $(PREPROC_ONLY) $(MALLOCPROXY.DEF) $(CPLUS_FLAGS) >tbbmallocproxy.def 2>$(NUL) || exit 0"
+	$(CPLUS) $(PREPROC_ONLY) $< $(CPLUS_FLAGS) $(INCLUDES) > $@
 
 PROXY_LINK_FLAGS += $(EXPORT_KEY)tbbmallocproxy.def
 $(MALLOCPROXY.DLL): tbbmallocproxy.def
@@ -102,8 +96,6 @@ ifneq (,$(MALLOCPROXY.DLL))
 $(MALLOCPROXY.DLL): BUILDING_LIBRARY = $(MALLOCPROXY.DLL)
 $(MALLOCPROXY.DLL): $(PROXY.OBJ) $(MALLOCPROXY_NO_VERSION.DLL) $(MALLOC.DLL) $(MALLOC.RES)
 	$(LIB_LINK_CMD) $(LIB_OUTPUT_KEY)$(MALLOCPROXY.DLL) $(PROXY.OBJ) $(MALLOC.RES) $(LIB_LINK_LIBS) $(LINK_MALLOC.LIB) $(PROXY_LINK_FLAGS)
-
-malloc: $(MALLOCPROXY.DLL)
 endif
 
 ifneq (,$(MALLOC_NO_VERSION.DLL))
@@ -118,7 +110,7 @@ endif
 
 malloc: $(MALLOC.DLL) $(MALLOCPROXY.DLL)
 
-malloc_dll: $(MALLOC.DLL) 
+malloc_dll: $(MALLOC.DLL)
 
 malloc_proxy_dll: $(MALLOCPROXY.DLL)
 
@@ -154,11 +146,11 @@ 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) tbb_misc_malloc.$(OBJ)
-	$(CPLUS) $(OUTPUT_KEY)$@ $(M_CPLUS_FLAGS) $(M_INCLUDES) $^ $(LIBS) $(LIBDL) $(LINK_FLAGS)
+test_malloc_whitebox.$(TEST_EXT): test_malloc_whitebox.cpp $(MALLOC_ASM.OBJ) version_string.tmp
+	$(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
-	$(CPLUS) $(OUTPUT_KEY)$@ $(M_CPLUS_FLAGS) $(M_INCLUDES) $^ $(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)
 
 $(MALLOC_MAIN_TESTS): %.$(TEST_EXT): %.$(OBJ) $(MALLOC_LIB)
 	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(MALLOC_LIB) $(LIBS) $(LINK_FLAGS)
@@ -177,14 +169,20 @@ endif
 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_OVERLOAD_TESTS) $(MALLOC_C_TESTS) test_malloc_whitebox.$(TEST_EXT) test_malloc_lib_unload.$(TEST_EXT)
+MALLOC_TESTS = $(MALLOC_MAIN_TESTS) $(MALLOC_C_TESTS) test_malloc_whitebox.$(TEST_EXT)
+ifneq (,$(MALLOCPROXY.DLL))
+MALLOC_TESTS += $(MALLOC_OVERLOAD_TESTS) test_malloc_lib_unload.$(TEST_EXT)
+endif
+
 # run_cmd is usually empty
 malloc_test: $(call cross_suffix,$(MALLOC.DLL)) $(TEST_PREREQUISITE) $(MALLOC_TESTS)
+ifneq (,$(MALLOCPROXY.DLL))
 	$(run_cmd) ./test_malloc_atexit.$(TEST_EXT) $(args)
 	$(run_cmd) ./test_malloc_lib_unload.$(TEST_EXT) $(args)
-	$(run_cmd) ./test_malloc_whitebox.$(TEST_EXT) $(args) 1:4
 	$(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_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)
diff --git a/build/Makefile.test b/build/Makefile.test
index e64e72f..0e17b14 100644
--- a/build/Makefile.test
+++ b/build/Makefile.test
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -45,55 +45,24 @@ VPATH = $(tbb_root)/src/tbb/$(ASSEMBLY_SOURCE) $(tbb_root)/src/tbb $(tbb_root)/s
 
 CPLUS_FLAGS += $(if $(crosstest),$(DEFINE_KEY)__TBB_NO_IMPLICIT_LINKAGE=1)
 
-ifeq (1,$(TBB_NOSTRICT))
-# GNU 3.2.3 headers have a ISO syntax that is rejected by Intel compiler in -strict_ansi mode.
-# The Mac uses gcc 4.0, so the list is empty for that platform.
-# The files below need the -strict_ansi flag downgraded to -ansi to compile
-
-KNOWN_NOSTRICT += \
-	test_concurrent_hash_map.o \
-	test_concurrent_unordered.o \
-	test_concurrent_vector.o \
-	test_concurrent_queue.o \
-	test_enumerable_thread_specific.o \
-	test_handle_perror.o \
-	test_cache_aligned_allocator_STL.o \
-	test_task_scheduler_init.o \
-	test_model_plugin.o \
-	test_parallel_do.o \
-	test_lambda.o \
-	test_eh_algorithms.o \
-	test_eh_tasks.o \
-	test_task_leaks.o \
-	test_task_assertions.o \
-	test_atomic.o \
-	test_parallel_sort.o \
-	test_parallel_for_each.o \
-	test_task_group.o \
-	test_tbb_header.o \
-	test_combinable.o \
-	test_critical_section.o \
-	test_reader_writer_lock.o \
-	test_tbb_condition_variable.o \
-	test_tbb_version.o
-
-endif
-
 include $(tbb_root)/build/common_rules.inc
 
 # Rule for generating executable test
 %.$(TEST_EXT): %.$(OBJ) $(TBB.LIB)
-	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(LINK_TBB.LIB) $(LIBS) $(LINK_FLAGS)
+	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(LINK_TBB.LIB) $(LIBS) $(AUX_LIBS) $(LINK_FLAGS)
 
 # Rules for generating a test DLL
 %_dll.$(DLL): %_dll.$(OBJ) $(TBB.LIB)
 	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $(PIC_KEY) $< $(LINK_TBB.LIB) $(LIBS) $(LINK_FLAGS) $(DYLIB_KEY)
-.PRECIOUS: %_dll.$(OBJ)
+.PRECIOUS: %_dll.$(OBJ) %_dll.$(DLL)
 
 # Rules for the tests, which use TBB in a dynamically loadable library
 test_model_plugin.$(TEST_EXT): test_model_plugin.$(OBJ) test_model_plugin_dll.$(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))
@@ -101,9 +70,9 @@ ifeq (,$(codecov))
 endif
 
 # These executables don't depend on the TBB library, but include core .cpp files directly
-TASK_CPP_DIRECTLY_INCLUDED = test_eh_tasks.$(TEST_EXT) \
- test_task_leaks.$(TEST_EXT) \
- test_task_assertions.$(TEST_EXT)
+TASK_CPP_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
 INCLUDES += $(INCLUDE_KEY).
@@ -114,20 +83,24 @@ $(TASK_CPP_DIRECTLY_INCLUDED): %.$(TEST_EXT) : %.$(OBJ) $(TASK_CPP_DEPENDENCIES)
 	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $^ $(LIBDL) $(LIBS) $(LINK_FLAGS)
 
 test_tbb_header2.$(OBJ): test_tbb_header.cpp
-	$(CPLUS) $(COMPILE_ONLY) $(CPLUS_FLAGS_NOSTRICT) $(CXX_ONLY_FLAGS) $(CXX_WARN_SUPPRESS) $(INCLUDES) $(DEFINE_KEY)__TBB_TEST_SECONDARY=1 $< $(OUTPUTOBJ_KEY)$@
+	$(CPLUS) $(COMPILE_ONLY) $(CPLUS_FLAGS) $(CXX_ONLY_FLAGS) $(CXX_WARN_SUPPRESS) $(INCLUDES) $(DEFINE_KEY)__TBB_TEST_SECONDARY=1 $< $(OUTPUTOBJ_KEY)$@
 
 # Detecting "multiple definition" linker error using the test that covers the whole library
 test_tbb_header.$(TEST_EXT): test_tbb_header.$(OBJ) test_tbb_header2.$(OBJ) $(TBB.LIB)
 	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) test_tbb_header.$(OBJ) test_tbb_header2.$(OBJ) $(LINK_TBB.LIB) $(LIBS) $(LINK_FLAGS)
 
-# These are in alphabetical order
+# Checks that TBB atomics work correctly in position independent code
+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)
+
+# The main list of TBB tests
 TEST_TBB_PLAIN.EXE = test_assembly.$(TEST_EXT)   \
 	test_aligned_space.$(TEST_EXT)               \
 	test_atomic.$(TEST_EXT)                      \
+	test_atomic_pic.$(TEST_EXT)                  \
 	test_blocked_range.$(TEST_EXT)               \
 	test_blocked_range2d.$(TEST_EXT)             \
 	test_blocked_range3d.$(TEST_EXT)             \
-	test_compiler.$(TEST_EXT)                    \
 	test_concurrent_queue.$(TEST_EXT)            \
 	test_concurrent_vector.$(TEST_EXT)           \
 	test_concurrent_unordered.$(TEST_EXT)        \
@@ -159,6 +132,7 @@ TEST_TBB_PLAIN.EXE = test_assembly.$(TEST_EXT)   \
 	test_tick_count.$(TEST_EXT)                  \
 	test_inits_loop.$(TEST_EXT)                  \
 	test_yield.$(TEST_EXT)                       \
+	test_eh_tasks.$(TEST_EXT)                    \
 	test_eh_algorithms.$(TEST_EXT)               \
 	test_parallel_invoke.$(TEST_EXT)             \
 	test_task_group.$(TEST_EXT)                  \
@@ -169,13 +143,34 @@ TEST_TBB_PLAIN.EXE = test_assembly.$(TEST_EXT)   \
 	test_task_auto_init.$(TEST_EXT)              \
 	test_concurrent_monitor.$(TEST_EXT)          \
 	test_critical_section.$(TEST_EXT)            \
+	test_semaphore.$(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_faf_task.$(TEST_EXT)                    \
+	test_hw_concurrency.$(TEST_EXT)              \
+	test_fp.$(TEST_EXT)                          \
+	test_broadcast_node.$(TEST_EXT)              \
+	test_continue_node.$(TEST_EXT)               \
+	test_executable_node.$(TEST_EXT)             \
+	test_function_node.$(TEST_EXT)               \
+	test_limiter_node.$(TEST_EXT)                \
+	test_join_node.$(TEST_EXT)                   \
+	test_buffer_node.$(TEST_EXT)                 \
+	test_queue_node.$(TEST_EXT)                  \
+	test_priority_queue_node.$(TEST_EXT)         \
+	test_sequencer_node.$(TEST_EXT)              \
+	test_source_node.$(TEST_EXT)                 \
+	test_overwrite_node.$(TEST_EXT)              \
+	test_write_once_node.$(TEST_EXT)             \
 	test_tbb_version.$(TEST_EXT)                 # insert new files right above
 
 ifdef OPENMP_FLAG
-	TEST_TBB_PLAIN.EXE += test_tbb_openmp
+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
@@ -187,24 +182,24 @@ endif
 $(TEST_TBB_PLAIN.EXE): WARNING_KEY += $(TEST_WARNING_KEY)
 
 # Run tests that are in TASK_CPP_DIRECTLY_INCLUDED and TEST_TBB_PLAIN.EXE
-# The test are ordered so that simpler components are tested first.
-# If a component Y uses component X, then tests for Y should come after tests for X.
 # Note that usually run_cmd is empty, and tests run directly
 test_tbb_plain: $(TEST_PREREQUISITE) $(TASK_CPP_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_compiler.$(TEST_EXT) $(args)
-        # Yes, 4:8 is intended on the next line. 
+	$(run_cmd) ./test_atomic.$(TEST_EXT) $(args)
+	$(run_cmd) ./test_atomic_pic.$(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)
 	$(run_cmd) ./test_task_auto_init.$(TEST_EXT) $(args)
 	$(run_cmd) ./test_task_scheduler_init.$(TEST_EXT) $(args) 1:4
 	$(run_cmd) ./test_task_scheduler_observer.$(TEST_EXT) $(args) 1:4
-	$(run_cmd) ./test_task_assertions.$(TEST_EXT) $(args)
 	$(run_cmd) ./test_task.$(TEST_EXT) $(args) 1:4
+	$(run_cmd) ./test_task_assertions.$(TEST_EXT) $(args)
 	$(run_cmd) ./test_task_leaks.$(TEST_EXT) $(args)
-	$(run_cmd) ./test_atomic.$(TEST_EXT) $(args)
+	$(run_cmd) ./test_fast_random.$(TEST_EXT) $(args) 1:16
+	$(run_cmd) ./test_eh_tasks.$(TEST_EXT) $(args) 2:4
 	$(run_cmd) ./test_cache_aligned_allocator.$(TEST_EXT) $(args)
 	$(run_cmd) ./test_cache_aligned_allocator_STL.$(TEST_EXT) $(args)
 	$(run_cmd) ./test_blocked_range.$(TEST_EXT) $(args) 1:4
@@ -222,7 +217,7 @@ test_tbb_plain: $(TEST_PREREQUISITE) $(TASK_CPP_DIRECTLY_INCLUDED) $(TEST_TBB_PL
 	$(run_cmd) ./test_mutex.$(TEST_EXT) $(args) 1:3
 	$(run_cmd) ./test_mutex_native_threads.$(TEST_EXT) $(args) 1:4
 	$(run_cmd) ./test_rwm_upgrade_downgrade.$(TEST_EXT) $(args) 4
-        # Yes, 4:8 is intended on the next line. 
+        # Yes, 4:8 is intended on the next line.
 	$(run_cmd) ./test_halt.$(TEST_EXT) $(args) 4:8
 	$(run_cmd) ./test_pipeline.$(TEST_EXT) $(args) 1:4
 	$(run_cmd) ./test_pipeline_with_tbf.$(TEST_EXT) $(args) 1:4
@@ -235,7 +230,6 @@ test_tbb_plain: $(TEST_PREREQUISITE) $(TASK_CPP_DIRECTLY_INCLUDED) $(TEST_TBB_PL
 	$(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_eh_tasks.$(TEST_EXT) $(args) 2:4
 	$(run_cmd) ./test_eh_algorithms.$(TEST_EXT) $(args) 2:4
 	$(run_cmd) ./test_tbb_thread.$(TEST_EXT) $(args)
 	$(run_cmd) ./test_std_thread.$(TEST_EXT) $(args)
@@ -246,11 +240,32 @@ 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_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)
-
-CPLUS_FLAGS_DEPRECATED = $(DEFINE_KEY)TBB_DEPRECATED=1 $(subst $(WARNING_KEY),,$(CPLUS_FLAGS_NOSTRICT)) $(WARNING_SUPPRESS)
+	$(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_faf_task.$(TEST_EXT) $(args)
+	$(run_cmd) ./test_hw_concurrency.$(TEST_EXT) $(args)
+	$(run_cmd) ./test_fp.$(TEST_EXT) $(args)
+	$(run_cmd) ./test_broadcast_node.$(TEST_EXT) $(args) 1:4
+	$(run_cmd) ./test_continue_node.$(TEST_EXT) $(args) 1:4
+	$(run_cmd) ./test_executable_node.$(TEST_EXT) $(args) 1:4
+	$(run_cmd) ./test_function_node.$(TEST_EXT) $(args) 1:4
+	$(run_cmd) ./test_limiter_node.$(TEST_EXT) $(args) 1:4
+	$(run_cmd) ./test_join_node.$(TEST_EXT) $(args) 1:4
+	$(run_cmd) ./test_buffer_node.$(TEST_EXT) $(args) 1:4
+	$(run_cmd) ./test_queue_node.$(TEST_EXT) $(args) 1:4
+	$(run_cmd) ./test_priority_queue_node.$(TEST_EXT) $(args) 1:4
+	$(run_cmd) ./test_sequencer_node.$(TEST_EXT) $(args) 1:4
+	$(run_cmd) ./test_source_node.$(TEST_EXT) $(args) 1:4
+	$(run_cmd) ./test_overwrite_node.$(TEST_EXT) $(args) 1:4
+	$(run_cmd) ./test_write_once_node.$(TEST_EXT) $(args) 1:4
+
+CPLUS_FLAGS_DEPRECATED = $(DEFINE_KEY)TBB_DEPRECATED=1 $(subst $(WARNING_KEY),,$(CPLUS_FLAGS)) $(WARNING_SUPPRESS)
 
 TEST_TBB_OLD.OBJ = test_concurrent_vector_v2.$(OBJ) test_concurrent_queue_v2.$(OBJ) test_mutex_v2.$(OBJ)
 
@@ -306,7 +321,11 @@ time_%: time_%.$(TEST_EXT) $(TEST_PREREQUISITE)
 	$(run_cmd) ./$< $(args)
 
 
-clean_%: 
+perf_%: AUX_LIBS = perf_dll.$(LIBEXT)
+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
 
 clean:
diff --git a/build/SunOS.gcc.inc b/build/SunOS.gcc.inc
index 83e612e..3447820 100644
--- a/build/SunOS.gcc.inc
+++ b/build/SunOS.gcc.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -25,7 +25,7 @@
 # the GNU General Public License.
 
 COMPILE_ONLY = -c -MMD
-PREPROC_ONLY = -E -x c
+PREPROC_ONLY = -E -x c++
 INCLUDE_KEY = -I
 DEFINE_KEY = -D
 OUTPUT_KEY = -o #
@@ -33,6 +33,8 @@ OUTPUTOBJ_KEY = -o #
 PIC_KEY = -fPIC
 WARNING_AS_ERROR_KEY = -Werror
 WARNING_KEY = -Wall
+TEST_WARNING_KEY = -Wshadow -Wcast-qual -Woverloaded-virtual -Wnon-virtual-dtor $(if $(findstring cc4., $(runtime)),-Wextra)
+WARNING_SUPPRESS = -Wno-parentheses -Wno-non-virtual-dtor
 DYLIB_KEY = -shared
 LIBDL = -ldl
 
diff --git a/build/SunOS.inc b/build/SunOS.inc
index 60cc44f..662e069 100644
--- a/build/SunOS.inc
+++ b/build/SunOS.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -76,8 +76,9 @@ OBJ = o
 DLL = so
 LIBEXT=so
 
-TBB.DEF = 
-TBB.DLL = libtbb$(DEBUG_SUFFIX).$(DLL)
+TBB.LST =
+TBB.DEF =
+TBB.DLL = libtbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(DLL)
 TBB.LIB = $(TBB.DLL)
 LINK_TBB.LIB = $(TBB.LIB)
 
diff --git a/build/SunOS.suncc.inc b/build/SunOS.suncc.inc
index dab47f1..8ec15ac 100644
--- a/build/SunOS.suncc.inc
+++ b/build/SunOS.suncc.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/build/common.inc b/build/common.inc
index 729852b..2d8af78 100644
--- a/build/common.inc
+++ b/build/common.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -25,24 +25,32 @@
 # the GNU General Public License.
 
 ifndef tbb_os
- ifeq ($(OS), Windows_NT)
-  export tbb_os=windows
- else
-  OS:=$(shell uname)
+
+  # Windows sets environment variable OS; for other systems, ask uname
   ifeq ($(OS),)
-   $(error "$(OS) is not supported")
-  else
-   export tbb_os=$(OS)
-   ifeq ($(OS), Linux)
+    OS:=$(shell uname)
+    ifeq ($(OS),)
+      $(error "Cannot detect operating system")
+    endif
+    export tbb_os=$(OS)
+  endif
+
+  ifeq ($(OS), Windows_NT)
+    export tbb_os=windows
+  endif
+  ifeq ($(OS), Linux)
     export tbb_os=linux
-   endif
-   ifeq ($(OS), Darwin)
+  endif
+  ifeq ($(OS), Darwin)
     export tbb_os=macos
-   endif
-  endif # OS successfully detected
- endif # !Windows
+  endif
+
 endif # !tbb_os
 
+ifeq ($(tbb_cpf),1)
+  export CPF_SUFFIX ?=_preview
+endif
+
 ifeq ($(wildcard $(tbb_root)/build/$(tbb_os).inc),)
   $(error "$(tbb_os)" is not supported. Add build/$(tbb_os).inc file with os-specific settings )
 endif
@@ -102,3 +110,6 @@ ifneq ($(BUILDING_PHASE),1)
   export tbb_root
  endif # BUILDING_PHASE != 0
 endif  # BUILDING_PHASE != 1
+
+.DELETE_ON_ERROR:    # Make will delete target if error occurred when building it.
+
diff --git a/build/common_rules.inc b/build/common_rules.inc
index 3373c09..95d6f9f 100644
--- a/build/common_rules.inc
+++ b/build/common_rules.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -41,9 +41,12 @@ endif
 INCLUDES += $(INCLUDE_KEY)$(tbb_root)/src $(INCLUDE_KEY)$(tbb_root)/src/rml/include $(INCLUDE_KEY)$(tbb_root)/include
 
 CPLUS_FLAGS += $(WARNING_KEY) $(CXXFLAGS)
+ifeq ($(tbb_cpf),1)
+CPLUS_FLAGS += $(DEFINE_KEY)__TBB_CPF_BUILD=1
+endif
 LINK_FLAGS += $(LDFLAGS)
 LIB_LINK_FLAGS += $(LDFLAGS)
-CPLUS_FLAGS_NOSTRICT = $(subst -strict_ansi,-ansi,$(CPLUS_FLAGS))
+CPLUS_FLAGS_NOSTRICT = $(subst -strict-ansi,-ansi,$(CPLUS_FLAGS))
 
 LIB_LINK_CMD ?= $(CPLUS) $(PIC_KEY)
 ifeq ($(origin LIB_OUTPUT_KEY), undefined)
@@ -68,9 +71,9 @@ CONLY ?= $(CPLUS)
 %.$(OBJ): %.s
 	cpp <$< | grep -v '^#' >$*.tmp
 	$(ASM) $(ASM_FLAGS) -o $@ $*.tmp
-	rm $*.tmp
 
 # Rule for generating .E file if needed for visual inspection
+# Note that due to mapping for ICL all uses of PREPROC_ONLY should be immediately followed by a file name
 %.E: %.cpp
 	$(CPLUS) $(CPLUS_FLAGS) $(CXX_ONLY_FLAGS) $(INCLUDES) $(PREPROC_ONLY) $< >$@
 
@@ -85,22 +88,22 @@ CONLY ?= $(CPLUS)
 # Customizations
 
 ifeq (1,$(TBB_NOSTRICT))
-# GNU 3.2.3 headers have a ISO syntax that is rejected by Intel compiler in -strict_ansi mode.
+# GNU 3.2.3 headers have a ISO syntax that is rejected by Intel compiler in -strict-ansi mode.
 # The Mac uses gcc, so the list is empty for that platform.
-# The files below need the -strict_ansi flag downgraded to -ansi to compile
+# The files below need the -strict-ansi flag downgraded to -ansi to compile
 
 $(KNOWN_NOSTRICT): %.$(OBJ): %.cpp
 	$(CPLUS) $(COMPILE_ONLY) $(CPLUS_FLAGS_NOSTRICT) $(CXX_ONLY_FLAGS) $(CXX_WARN_SUPPRESS) $(INCLUDES) $<
 endif
 
 $(KNOWN_WARNINGS): %.$(OBJ): %.cpp
-	$(CPLUS) $(COMPILE_ONLY) $(subst $(WARNING_KEY),,$(CPLUS_FLAGS_NOSTRICT)) $(CXX_ONLY_FLAGS) $(INCLUDES) $<
+	$(CPLUS) $(COMPILE_ONLY) $(subst $(WARNING_KEY),,$(CPLUS_FLAGS)) $(CXX_ONLY_FLAGS) $(INCLUDES) $<
 
 tbb_misc.$(OBJ): tbb_misc.cpp version_string.tmp
-	$(CPLUS) $(COMPILE_ONLY) $(CPLUS_FLAGS_NOSTRICT) $(CXX_ONLY_FLAGS) $(INCLUDE_KEY). $(INCLUDES) $<
+	$(CPLUS) $(COMPILE_ONLY) $(CPLUS_FLAGS) $(CXX_ONLY_FLAGS) $(CXX_WARN_SUPPRESS) $(INCLUDE_KEY). $(INCLUDES) $<
 
 tbb_misc.E: tbb_misc.cpp version_string.tmp
-	$(CPLUS) $(CPLUS_FLAGS_NOSTRICT) $(CXX_ONLY_FLAGS) $(INCLUDE_KEY). $(INCLUDES) $(PREPROC_ONLY) $< >$@
+	$(CPLUS) $(CPLUS_FLAGS) $(CXX_ONLY_FLAGS) $(INCLUDE_KEY). $(INCLUDES) $(PREPROC_ONLY) $< >$@
 
 %.res: %.rc version_string.tmp $(TBB.MANIFEST)
 	rc /Fo$@ $(INCLUDES) $(filter /D%,$(CPLUS_FLAGS)) $<
@@ -123,4 +126,4 @@ endif
 
 # Rules for generating a test DLL
 %_dll.$(OBJ): %.cpp
-	$(CPLUS) $(COMPILE_ONLY) $(OUTPUTOBJ_KEY)$@ $(CPLUS_FLAGS_NOSTRICT) $(PIC_KEY) $(DEFINE_KEY)_USRDLL $(INCLUDES) $<
+	$(CPLUS) $(COMPILE_ONLY) $(OUTPUTOBJ_KEY)$@ $(CPLUS_FLAGS) $(PIC_KEY) $(DEFINE_KEY)_USRDLL $(INCLUDES) $<
diff --git a/build/detect.js b/build/detect.js
index 8e90dc0..dc84f4a 100644
--- a/build/detect.js
+++ b/build/detect.js
@@ -1,4 +1,4 @@
-// Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+// Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 //
 // This file is part of Threading Building Blocks.
 //
@@ -30,23 +30,36 @@ function doWork() {
 		var fso = new ActiveXObject("Scripting.FileSystemObject");
 
 		var tmpExec;
+		tmpExec = WshShell.Run("cmd /c echo int main(){return 0;} >detect.c", 0, true);
 
+		// The next block deals with GCC (MinGW)
 		if ( WScript.Arguments.Count() > 1 && WScript.Arguments(1) == "gcc" ) {
 			if ( WScript.Arguments(0) == "/arch" ) {
-				WScript.Echo( "ia32" );
+				// Get predefined macros
+				tmpExec = WshShell.Run("cmd /C gcc -dM -E detect.c > detect.map", 0, true);
+				var file = fso.OpenTextFile("detect.map", 1, 0);
+				var defs = file.readAll();
+				file.Close();
+
+				//detect target architecture
+				var intel64=/x86_64|amd64/mgi;
+				var ia32=/i386/mgi;
+				if ( defs.match(intel64) ) {
+					WScript.Echo( "intel64" );
+				} else if ( defs.match(ia32) ) {
+					WScript.Echo( "ia32" );
+				} else {
+					WScript.Echo( "unknown" );
+				}
 			}
 			else if ( WScript.Arguments(0) == "/runtime" ) {
-				WScript.Echo( "mingw" );
+				tmpExec = WshShell.Exec("gcc -dumpversion");
+				WScript.Echo( "mingw"+tmpExec.StdOut.ReadLine() );
 			}
 			return;
 		}
 
 		//Compile binary
-		tmpExec = WshShell.Exec("cmd /c echo int main(){return 0;} >detect.c");
-		while ( tmpExec.Status == 0 ) {
-			WScript.Sleep(100);
-		}
-		
 		tmpExec = WshShell.Exec("cl /MD detect.c /link /MAP");
 		while ( tmpExec.Status == 0 ) {
 			WScript.Sleep(100);
@@ -98,7 +111,10 @@ function doWork() {
 				WScript.Echo( "unknown" );
 			}
 		}
+}
 
+function doClean() {
+		var fso = new ActiveXObject("Scripting.FileSystemObject");
 		// delete intermediate files
 		if ( fso.FileExists("detect.c") )
 			fso.DeleteFile ("detect.c", false);
@@ -116,11 +132,10 @@ if ( WScript.Arguments.Count() > 0 ) {
 	
 	try {
 		doWork();
-	} catch( error )
-	{
+	} catch( error ) {
 		WScript.Echo( "unknown" );
-		WScript.Quit( 0 );
 	}
+	doClean();
 
 } else {
 
diff --git a/build/generate_tbbvars.bat b/build/generate_tbbvars.bat
index 9fd3a51..f42db52 100644
--- a/build/generate_tbbvars.bat
+++ b/build/generate_tbbvars.bat
@@ -1,6 +1,6 @@
 @echo off
 REM
-REM Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+REM Copyright 2005-2011 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 484719f..16f4639 100644
--- a/build/generate_tbbvars.sh
+++ b/build/generate_tbbvars.sh
@@ -1,6 +1,6 @@
 #!/bin/bash
 #
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/build/index.html b/build/index.html
index ef17214..ae10fc4 100644
--- a/build/index.html
+++ b/build/index.html
@@ -132,6 +132,9 @@ To perform different build and/or test operations, use the following steps.
     <DT><TT>make tbb_build_prefix=<B>{</B>(build sub-directory)<B>}</B> <B>[</B>(above options or targets)<B>]</B></TT>
     <DD>Build and run as above, but place the built libraries in the specified sub-directory within the build/ directory,
 	rather than using the default sub-directory name.
+    <DT><TT>make tbb_cpf=1 <B>[</B>(above options or targets)<B>]</B></TT>
+    <DD>Build and run as above, but build and use libraries with the Community Preview Features enabled, 
+    rather than the default libraries.
     <DT><TT>make <B>[</B>(above options)<B>]</B> clean</TT>
     <DD>Remove any executables or intermediate files produced by the above commands.
         Includes build directories, object files, libraries and test executables.
@@ -219,7 +222,7 @@ See the Makefile infrastructure files for examples.
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <P></P>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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 
diff --git a/build/linux.gcc.inc b/build/linux.gcc.inc
index e3accbb..ec356f7 100644
--- a/build/linux.gcc.inc
+++ b/build/linux.gcc.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -25,7 +25,7 @@
 # the GNU General Public License.
 
 COMPILE_ONLY = -c -MMD
-PREPROC_ONLY = -E -x c
+PREPROC_ONLY = -E -x c++
 INCLUDE_KEY = -I
 DEFINE_KEY = -D
 OUTPUT_KEY = -o #
@@ -42,58 +42,84 @@ LIBDL = -ldl
 
 TBB_NOSTRICT = 1
 
-CPLUS = g++ 
+CPLUS = g++
 CONLY = gcc
-LIB_LINK_FLAGS = -shared -Wl,-soname=$(BUILDING_LIBRARY)
-LIBS = -lpthread -lrt 
+LIB_LINK_FLAGS = $(DYLIB_KEY) -Wl,-soname=$(BUILDING_LIBRARY)
+LIBS = -lpthread -lrt
+LINK_FLAGS = -Wl,-rpath-link=.
 C_FLAGS = $(CPLUS_FLAGS)
 
+ITT_NOTIFY = -DDO_ITT_NOTIFY
 ifeq ($(cfg), release)
-        CPLUS_FLAGS = -DDO_ITT_NOTIFY -O2 -DUSE_PTHREAD
+        CPLUS_FLAGS = $(ITT_NOTIFY) -O2 -DUSE_PTHREAD
 endif
 ifeq ($(cfg), debug)
-        CPLUS_FLAGS = -DTBB_USE_DEBUG -DDO_ITT_NOTIFY -g -O0 -DUSE_PTHREAD
+        CPLUS_FLAGS = -DTBB_USE_DEBUG $(ITT_NOTIFY) -g -O0 -DUSE_PTHREAD
 endif
 
 ifneq (0,$(cpp0x))
     CXX_ONLY_FLAGS = -std=c++0x
 endif
 
-ASM=
-ASM_FLAGS=
-
 TBB_ASM.OBJ=
+MALLOC_ASM.OBJ=
 
 ifeq (ia64,$(arch))
 # Position-independent code (PIC) is a must on IA-64, even for regular (not shared) executables
     CPLUS_FLAGS += $(PIC_KEY)
-endif 
+endif
 
 ifeq (intel64,$(arch))
     CPLUS_FLAGS += -m64
     LIB_LINK_FLAGS += -m64
-endif 
+endif
 
 ifeq (ia32,$(arch))
     CPLUS_FLAGS += -m32 -march=pentium4
     LIB_LINK_FLAGS += -m32
-endif 
+endif
+
+ifeq (ppc64,$(arch))
+    CPLUS_FLAGS += -m64
+    LIB_LINK_FLAGS += -m64
+endif
+
+ifeq (ppc32,$(arch))
+    CPLUS_FLAGS += -m32
+    LIB_LINK_FLAGS += -m32
+endif
+
+ifeq (bgp,$(arch))
+    CPLUS = mpicxx
+    CONLY = mpicc
+endif
 
 # for some gcc versions on Solaris, -m64 may imply V9, but perhaps not everywhere (TODO: verify)
 ifeq (sparc,$(arch))
     CPLUS_FLAGS    += -mcpu=v9 -m64
     LIB_LINK_FLAGS += -mcpu=v9 -m64
-endif 
+endif
 
 #------------------------------------------------------------------------------
 # Setting assembler data.
 #------------------------------------------------------------------------------
+ASM = as
+ifeq (intel64,$(arch))
+    ASM_FLAGS += --64
+endif
+ifeq (ia32,$(arch))
+    ASM_FLAGS += --32
+endif
+ifeq ($(cfg),debug)
+    ASM_FLAGS += -g
+endif
+
 ASSEMBLY_SOURCE=$(arch)-gas
 ifeq (ia64,$(arch))
-    ASM=as
     ASM_FLAGS += -xexplicit
-    TBB_ASM.OBJ = atomic_support.o lock_byte.o log2.o pause.o ia64_misc.o
-endif 
+    TBB_ASM.OBJ += atomic_support.o lock_byte.o log2.o pause.o ia64_misc.o
+    MALLOC_ASM.OBJ += atomic_support.o lock_byte.o pause.o
+endif
 #------------------------------------------------------------------------------
 # End of setting assembler data.
 #------------------------------------------------------------------------------
diff --git a/build/linux.icc.inc b/build/linux.icc.inc
index 85fab25..d477b53 100644
--- a/build/linux.icc.inc
+++ b/build/linux.icc.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -25,7 +25,7 @@
 # the GNU General Public License.
 
 COMPILE_ONLY = -c -MMD
-PREPROC_ONLY = -E -x c
+PREPROC_ONLY = -E -x c++
 INCLUDE_KEY = -I
 DEFINE_KEY = -D
 OUTPUT_KEY = -o #
@@ -35,19 +35,18 @@ WARNING_AS_ERROR_KEY = -Werror
 WARNING_KEY = -w1
 DYLIB_KEY = -shared
 EXPORT_KEY = -Wl,--version-script,
+NOINTRINSIC_KEY = -fno-builtin
 LIBDL = -ldl
-export COMPILER_VERSION := ICC: $(shell icc -V </dev/null 2>&1 | grep 'Version')
-#TODO: autodetection of arch from COMPILER_VERSION!!
 
 TBB_NOSTRICT = 1
 
-CPLUS = icpc 
+CPLUS = icpc
 CONLY = icc
 
 ifeq (release,$(cfg))
-CPLUS_FLAGS = -O2 -strict_ansi -DUSE_PTHREAD
+CPLUS_FLAGS = -O2 -strict-ansi -DUSE_PTHREAD
 else
-CPLUS_FLAGS = -O0 -g -strict_ansi -DUSE_PTHREAD -DTBB_USE_DEBUG
+CPLUS_FLAGS = -O0 -g -strict-ansi -DUSE_PTHREAD -DTBB_USE_DEBUG
 endif
 
 ifneq (,$(codecov))
@@ -58,13 +57,11 @@ endif
 
 OPENMP_FLAG = -openmp
 LIB_LINK_FLAGS = -shared -i-static -Wl,-soname=$(BUILDING_LIBRARY)
-LIBS = -lpthread -lrt 
+LIBS = -lpthread -lrt
 C_FLAGS = $(CPLUS_FLAGS)
 
-ASM=
-ASM_FLAGS=
-
 TBB_ASM.OBJ=
+MALLOC_ASM.OBJ=
 
 ifeq (ia32,$(arch))
     CPLUS_FLAGS += -falign-stack=maintain-16-byte
@@ -73,7 +70,7 @@ endif
 ifeq (ia64,$(arch))
 # Position-independent code (PIC) is a must on IA-64, even for regular (not shared) executables
     CPLUS_FLAGS += $(PIC_KEY)
-endif 
+endif
 
 ifneq (00,$(lambdas)$(cpp0x))
 	CPLUS_FLAGS += -std=c++0x -D_TBB_CPP0X
@@ -82,11 +79,23 @@ endif
 #------------------------------------------------------------------------------
 # Setting assembler data.
 #------------------------------------------------------------------------------
+ASM = as
+ifeq (intel64,$(arch))
+    ASM_FLAGS += --64
+endif
+ifeq (ia32,$(arch))
+    ASM_FLAGS += --32
+endif
+ifeq ($(cfg),debug)
+    ASM_FLAGS += -g
+endif
+
 ASSEMBLY_SOURCE=$(arch)-gas
 ifeq (ia64,$(arch))
-    ASM=ias
-    TBB_ASM.OBJ = atomic_support.o lock_byte.o log2.o pause.o ia64_misc.o
-endif 
+    ASM_FLAGS += -xexplicit
+    TBB_ASM.OBJ += atomic_support.o lock_byte.o log2.o pause.o ia64_misc.o
+    MALLOC_ASM.OBJ += atomic_support.o lock_byte.o pause.o
+endif
 #------------------------------------------------------------------------------
 # End of setting assembler data.
 #------------------------------------------------------------------------------
diff --git a/build/linux.inc b/build/linux.inc
index 99fbff7..e0e2889 100644
--- a/build/linux.inc
+++ b/build/linux.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -24,6 +24,24 @@
 # invalidate any other reasons why the executable file might be covered by
 # the GNU General Public License.
 
+####### Detections and Commands ###############################################
+
+ifeq (icc,$(compiler))
+  export COMPILER_VERSION := ICC: $(shell icc -V </dev/null 2>&1 | grep 'Version')
+  ifneq (,$(findstring IA-32, $(COMPILER_VERSION)))
+    export arch:=ia32
+  endif
+  ifneq (,$(findstring Intel(R) 64, $(COMPILER_VERSION)))
+    export arch:=intel64
+  endif
+  ifneq (,$(findstring IA-64, $(COMPILER_VERSION)))
+    export arch:=ia64
+  endif
+  ifeq (,$(arch))
+    $(warning "Unknown Intel compiler")
+  endif
+endif
+
 ifndef arch
         uname_m:=$(shell uname -m)
         ifeq ($(uname_m),i686)
@@ -94,11 +112,12 @@ ifeq (,$(def_prefix))
             def_prefix = lin32
     endif
 endif
-TBB.DEF = $(tbb_root)/src/tbb/$(def_prefix)-tbb-export.def
+TBB.LST = $(tbb_root)/src/tbb/$(def_prefix)-tbb-export.lst
+TBB.DEF = $(TBB.LST:.lst=.def)
 
 TBB.DLL = $(TBB_NO_VERSION.DLL).$(SONAME_SUFFIX)
 TBB.LIB = $(TBB.DLL)
-TBB_NO_VERSION.DLL=libtbb$(DEBUG_SUFFIX).$(DLL)
+TBB_NO_VERSION.DLL=libtbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(DLL)
 LINK_TBB.LIB = $(TBB_NO_VERSION.DLL)
 
 MALLOC_NO_VERSION.DLL = libtbbmalloc$(DEBUG_SUFFIX).$(DLL)
diff --git a/build/macos.gcc.inc b/build/macos.gcc.inc
index 4ac4731..eac10bb 100644
--- a/build/macos.gcc.inc
+++ b/build/macos.gcc.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -27,7 +27,7 @@
 CPLUS = g++
 CONLY = gcc
 COMPILE_ONLY = -c -MMD
-PREPROC_ONLY = -E -x c
+PREPROC_ONLY = -E -x c++
 INCLUDE_KEY = -I
 DEFINE_KEY = -D
 OUTPUT_KEY = -o #
@@ -42,7 +42,7 @@ EXPORT_KEY = -Wl,-exported_symbols_list,
 LIBDL = -ldl
 
 LIBS = -lpthread
-LINK_FLAGS = 
+LINK_FLAGS =
 LIB_LINK_FLAGS = -dynamiclib
 C_FLAGS = $(CPLUS_FLAGS)
 
@@ -79,6 +79,25 @@ ifeq (ppc32,$(arch))
 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.
 #------------------------------------------------------------------------------
 
diff --git a/build/macos.icc.inc b/build/macos.icc.inc
index fbca6d9..f3f21f8 100644
--- a/build/macos.icc.inc
+++ b/build/macos.icc.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -27,7 +27,7 @@
 CPLUS = icpc
 CONLY = icc
 COMPILE_ONLY = -c -MMD
-PREPROC_ONLY = -E -x c
+PREPROC_ONLY = -E -x c++
 INCLUDE_KEY = -I
 DEFINE_KEY = -D
 OUTPUT_KEY = -o #
@@ -38,12 +38,10 @@ WARNING_KEY = -w1
 DYLIB_KEY = -dynamiclib
 EXPORT_KEY = -Wl,-exported_symbols_list,
 LIBDL = -ldl
-export COMPILER_VERSION := $(shell icc -V </dev/null 2>&1 | grep 'Version')
-#TODO: autodetection of arch from COMPILER_VERSION!!
 
 OPENMP_FLAG = -openmp
 LIBS = -lpthread
-LINK_FLAGS = 
+LINK_FLAGS =
 LIB_LINK_FLAGS = -dynamiclib -i-static
 C_FLAGS = $(CPLUS_FLAGS)
 
@@ -63,6 +61,24 @@ ifneq (00,$(lambdas)$(cpp0x))
 	CPLUS_FLAGS += -std=c++0x -D_TBB_CPP0X
 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.
diff --git a/build/macos.inc b/build/macos.inc
index 15c9e1d..c840c6d 100644
--- a/build/macos.inc
+++ b/build/macos.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -25,6 +25,20 @@
 # the GNU General Public License.
 
 ####### Detections and Commands ###############################################
+
+ifeq (icc,$(compiler))
+  export COMPILER_VERSION := ICC: $(shell icc -V </dev/null 2>&1 | grep 'Version')
+  ifneq (,$(findstring IA-32, $(COMPILER_VERSION)))
+    export arch:=ia32
+  endif
+  ifneq (,$(findstring Intel(R) 64, $(COMPILER_VERSION)))
+    export arch:=intel64
+  endif
+  ifeq (,$(arch))
+    $(warning "Unknown Intel compiler")
+  endif
+endif
+
 ifndef arch
  ifeq ($(shell /usr/sbin/sysctl -n hw.machine),Power Macintosh)
    ifeq ($(shell /usr/sbin/sysctl -n hw.optional.64bitops),1)
@@ -71,8 +85,9 @@ LIBEXT=dylib
 
 def_prefix = $(if $(findstring 64,$(arch)),mac64,mac32)
 
-TBB.DEF = $(tbb_root)/src/tbb/$(def_prefix)-tbb-export.def
-TBB.DLL = libtbb$(DEBUG_SUFFIX).$(DLL)
+TBB.LST = $(tbb_root)/src/tbb/$(def_prefix)-tbb-export.lst
+TBB.DEF = $(TBB.LST:.lst=.def)
+TBB.DLL = libtbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(DLL)
 TBB.LIB = $(TBB.DLL)
 LINK_TBB.LIB = $(TBB.LIB)
 
diff --git a/build/test_launcher.bat b/build/test_launcher.bat
index a261494..f6fff3d 100644
--- a/build/test_launcher.bat
+++ b/build/test_launcher.bat
@@ -1,6 +1,6 @@
 @echo off
 REM
-REM Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+REM Copyright 2005-2011 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 48a382b..4aaebe8 100644
--- a/build/test_launcher.sh
+++ b/build/test_launcher.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 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
new file mode 100644
index 0000000..db9e079
--- /dev/null
+++ b/build/version_info_aix.sh
@@ -0,0 +1,42 @@
+#!/bin/sh
+#
+# 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.
+
+# Script used to generate version info string
+echo "#define __TBB_VERSION_STRINGS \\"
+echo '"TBB:' "BUILD_HOST\t\t"`hostname -s`" ("`uname -m`")"'" ENDL \'
+# find OS name in *-release and issue* files by filtering blank lines and lsb-release content out
+echo '"TBB:' "BUILD_OS\t\t"`lsb_release -sd 2>/dev/null | grep -ih '[a-z] ' - /etc/*release /etc/issue 2>/dev/null | head -1 | sed -e 's/["\\\\]//g'`'" ENDL \'
+echo '"TBB:' "BUILD_KERNEL\t"`uname -srv`'" ENDL \'
+echo '"TBB:' "BUILD_GCC\t\t"`g++ -v </dev/null 2>&1 | grep 'gcc.*version'`'" ENDL \'
+[ -z "$COMPILER_VERSION" ] || echo '"TBB:' "BUILD_COMPILER\t"$COMPILER_VERSION'" ENDL \'
+echo '"TBB:' "BUILD_GLIBC\t"`getconf GNU_LIBC_VERSION | grep glibc | sed -e 's/^glibc //'`'" ENDL \'
+echo '"TBB:' "BUILD_LD\t\t"`ld -v 2>&1 | grep 'version'`'" ENDL \'
+echo '"TBB:' "BUILD_TARGET\t$arch on $runtime"'" ENDL \'
+echo '"TBB:' "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 11e5abf..e71a70f 100644
--- a/build/version_info_linux.sh
+++ b/build/version_info_linux.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -32,7 +32,7 @@ echo '"TBB:' "BUILD_HOST\t\t"`hostname -s`" ("`uname -m`")"'" ENDL \'
 # find OS name in *-release and issue* files by filtering blank lines and lsb-release content out
 echo '"TBB:' "BUILD_OS\t\t"`lsb_release -sd 2>/dev/null | grep -ih '[a-z] ' - /etc/*release /etc/issue 2>/dev/null | head -1 | sed -e 's/["\\\\]//g'`'" ENDL \'
 echo '"TBB:' "BUILD_KERNEL\t"`uname -srv`'" ENDL \'
-echo '"TBB:' "BUILD_GCC\t\t"`g++ -v </dev/null 2>&1 | grep 'gcc.*version'`'" ENDL \'
+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 \'
diff --git a/build/version_info_macos.sh b/build/version_info_macos.sh
index 8ba45d6..b0d3c0c 100644
--- a/build/version_info_macos.sh
+++ b/build/version_info_macos.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/build/version_info_sunos.sh b/build/version_info_sunos.sh
index 557f2e2..ed72cb2 100644
--- a/build/version_info_sunos.sh
+++ b/build/version_info_sunos.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -32,7 +32,7 @@ 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 \'
+[ -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 ""
diff --git a/build/version_info_windows.js b/build/version_info_windows.js
index c8e7634..d2f597b 100644
--- a/build/version_info_windows.js
+++ b/build/version_info_windows.js
@@ -1,4 +1,4 @@
-// Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+// Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 //
 // This file is part of Threading Building Blocks.
 //
diff --git a/build/vsproject/index.html b/build/vsproject/index.html
index a0753e4..cd1788a 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-2010 Intel Corporation.  All Rights Reserved.
+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 
diff --git a/build/vsproject/tbb.vcproj b/build/vsproject/tbb.vcproj
index ce8b671..704111d 100644
--- a/build/vsproject/tbb.vcproj
+++ b/build/vsproject/tbb.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_USE_RTM_VERSION /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /W4 /Wp64 /I../../src /I../../src/rml/include /I../../include" Optimization="0" AdditionalIncludeDirectories="." PreprocessorDefinitions="" MinimalRebuild="true" BasicRuntimeChecks="3" RuntimeLibrary="3" UsePrecompiledHeader="0" WarningLevel="4" Debug [...]
+			<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 /D__TBB_BUILD=1 /W4 /Wp64 /I../../src /I../../src/rml/include /I../../include" Optimization="0" AdditionalIncludeDirectories="." PreprocessorDefinitions="" MinimalRebuild="true" BasicRuntimeChecks="3" RuntimeLibrary="3" UsePrecompiledHe [...]
 			<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_USE_RTM_VERSION /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /W4 /Wp64 /I../../src /I../../src/rml/include /I../../include" Optimization="0" AdditionalIncludeDirectories="." PreprocessorDefinitions="" MinimalRebuild="true" BasicRuntimeChecks="3" BufferSecurityCheck="false" RuntimeLibrary="3" UsePrecompiled [...]
+			<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 /D__TBB_BUILD=1 /W4 /Wp64 /I../../src /I../../src/rml/include /I../../include" Optimization="0" AdditionalIncludeDirectories="." PreprocessorDefinitions="" MinimalRebuild="true" BasicRuntimeChecks="3" BufferSecurityCheck="false" Ru [...]
 			<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_USE_RTM_VERSION /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /W4 /Wp64 /I../../src /I../../src/rml/include /I../../include" AdditionalIncludeDirectories="." PreprocessorDefinitions="" RuntimeLibrary="2" UsePrecompiledHeader="0" WarningLevel="4" DebugInformationFormat="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 /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0501 /D__TBB_BUILD=1 /W4 /Wp64 /I../../src /I../../src/rml/include /I../../include" AdditionalIncludeDirectories="." PreprocessorDefinitions="" RuntimeLibrary="2" UsePrecompiledHeader="0" WarningLevel="4" DebugInformationFormat="3"/>
 			<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_USE_RTM_VERSION /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /W4 /Wp64 /I../../src /I../../src/rml/include /I../../include" AdditionalIncludeDirectories="." PreprocessorDefinitions="" BufferSecurityCheck="false" RuntimeLibrary="2" UsePrecompiledHeader="0" WarningLevel="4" DebugInformationFormat="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 /D__TBB_BUILD=1 /W4 /Wp64 /I../../src /I../../src/rml/include /I../../include" AdditionalIncludeDirectories="." PreprocessorDefinitions="" BufferSecurityCheck="false" RuntimeLibrary="2" UsePrecompiledHeader="0" WarningLevel="4" DebugInformationFormat="3"/>
 			<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 /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include" Optimization="0" AdditionalIncludeDirectories="." PreprocessorDefinitions="" MinimalRebuild="true" BasicRuntimeChecks="3" RuntimeLibrary="1" UsePrecompiledHeader="0" WarningLevel="4" DebugInformationFormat="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 /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0501 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include" Optimization="0" AdditionalIncludeDirectories="." PreprocessorDefinitions="" MinimalRebuild="true" BasicRuntimeChecks="3" RuntimeLibrary="1" UsePrecompiledHeader="0" WarningLevel="4" [...]
 			<Tool Name="VCManagedResourceCompilerTool"/>
 			<Tool Name="VCResourceCompilerTool"/>
 			<Tool Name="VCPreLinkEventTool"/>
@@ -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 /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include" Optimization="0" AdditionalIncludeDirectories="." PreprocessorDefinitions="" MinimalRebuild="true" BasicRuntimeChecks="3" BufferSecurityCheck="false" RuntimeLibrary="1" UsePrecompiledHeader="0" WarningLevel=" [...]
+			<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 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include" Optimization="0" AdditionalIncludeDirectories="." PreprocessorDefinitions="" MinimalRebuild="true" BasicRuntimeChecks="3" BufferSecurityCheck="false" RuntimeLibrary="1" UsePreco [...]
 			<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 /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include" AdditionalIncludeDirectories="." PreprocessorDefinitions="" 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 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include" AdditionalIncludeDirectories="." PreprocessorDefinitions="" RuntimeLibrary="0" UsePrecompiledHeader="0" WarningLevel="4" DebugInformationFormat="3"/>
 			<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 /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include" AdditionalIncludeDirectories="." PreprocessorDefinitions="" BufferSecurityCheck="false" 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 /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0501 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include" AdditionalIncludeDirectories="." PreprocessorDefinitions="" BufferSecurityCheck="false" RuntimeLibrary="0" UsePrecompiledHeader="0" WarningLevel="4" DebugInformationFormat="3"/>
 			<Tool Name="VCManagedResourceCompilerTool"/>
 			<Tool Name="VCResourceCompilerTool"/>
 			<Tool Name="VCPreLinkEventTool"/>
@@ -191,6 +191,32 @@
 " Outputs="intel64\Release-MT\atomic_support.obj"/>
 				</FileConfiguration>
 			</File>
+			<File RelativePath="..\..\src\tbb\intel64-masm\intel64_misc.asm">
+				<FileConfiguration Name="Debug|Win32" ExcludedFromBuild="true">
+				</FileConfiguration>
+				<FileConfiguration Name="Debug|x64">
+					<Tool Name="VCCustomBuildTool" Description="building intel64_misc.obj" CommandLine="ml64 /Fo"intel64\Debug\intel64_misc.obj" /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/intel64_misc.asm
+" Outputs="intel64\Debug\intel64_misc.obj"/>
+				</FileConfiguration>
+				<FileConfiguration Name="Release|Win32" ExcludedFromBuild="true">
+				</FileConfiguration>
+				<FileConfiguration Name="Release|x64">
+					<Tool Name="VCCustomBuildTool" Description="building intel64_misc.obj" CommandLine="ml64 /Fo"intel64\Release\intel64_misc.obj"  /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/intel64_misc.asm
+" Outputs="intel64\Release\intel64_misc.obj"/>
+				</FileConfiguration>
+				<FileConfiguration Name="Debug-MT|Win32" ExcludedFromBuild="true">
+				</FileConfiguration>
+				<FileConfiguration Name="Debug-MT|x64">
+					<Tool Name="VCCustomBuildTool" Description="building intel64_misc.obj" CommandLine="ml64 /Fo"intel64\Debug-MT\intel64_misc.obj" /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/intel64_misc.asm
+" Outputs="intel64\Debug-MT\intel64_misc.obj"/>
+				</FileConfiguration>
+				<FileConfiguration Name="Release-MT|Win32" ExcludedFromBuild="true">
+				</FileConfiguration>
+				<FileConfiguration Name="Release-MT|x64">
+					<Tool Name="VCCustomBuildTool" Description="building intel64_misc.obj" CommandLine="ml64 /Fo"intel64\Release-MT\intel64_misc.obj"  /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/intel64_misc.asm
+" Outputs="intel64\Release-MT\intel64_misc.obj"/>
+				</FileConfiguration>
+			</File>
 			<File RelativePath="..\..\src\tbb\ia32-masm\atomic_support.asm">
 				<FileConfiguration Name="Debug|Win32">
 					<Tool Name="MASM" AdditionalOptions="/coff /Zi"/>
@@ -299,7 +325,7 @@
 " Outputs=""$(IntDir)\tbb.def""/>
 				</FileConfiguration>
 			</File>
-			<File RelativePath="..\..\src\tbb\concurrent_hash_map.cpp"/><File RelativePath="..\..\src\tbb\concurrent_queue.cpp"/><File RelativePath="..\..\src\tbb\concurrent_vector.cpp"/><File RelativePath="..\..\src\tbb\dynamic_link.cpp"/><File RelativePath="..\..\src\tbb\itt_notify.cpp"/><File RelativePath="..\..\src\tbb\cache_aligned_allocator.cpp"/><File RelativePath="..\..\src\tbb\pipeline.cpp"/><File RelativePath="..\..\src\tbb\queuing_mutex.cpp"/><File RelativePath="..\..\src\tbb\queuing_r [...]
+			<File RelativePath="..\..\src\tbb\concurrent_hash_map.cpp"/><File RelativePath="..\..\src\tbb\concurrent_queue.cpp"/><File RelativePath="..\..\src\tbb\concurrent_vector.cpp"/><File RelativePath="..\..\src\tbb\dynamic_link.cpp"/><File RelativePath="..\..\src\tbb\itt_notify.cpp"/><File RelativePath="..\..\src\tbb\cache_aligned_allocator.cpp"/><File RelativePath="..\..\src\tbb\pipeline.cpp"/><File RelativePath="..\..\src\tbb\queuing_mutex.cpp"/><File RelativePath="..\..\src\tbb\queuing_r [...]
 		<Filter Name="Header Files" Filter="h;hpp;hxx;hm;inl;inc;xsd" UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
 			<File RelativePath="..\..\include\tbb\_concurrent_queue_internal.h">
 			</File>
@@ -321,6 +347,8 @@
 			</File>
 			<File RelativePath="..\..\include\tbb\concurrent_hash_map.h">
 			</File>
+			<File RelativePath="..\..\src\tbb\semaphore.h">
+			</File>
 			<File RelativePath="..\..\src\tbb\concurrent_monitor.h">
 			</File>
 			<File RelativePath="..\..\include\tbb\concurrent_queue.h">
@@ -357,8 +385,6 @@
 			</File>
 			<File RelativePath="..\..\src\test\harness_iterator.h">
 			</File>
-			<File RelativePath="..\..\src\test\harness_lrb.h">
-			</File>
 			<File RelativePath="..\..\src\test\harness_m128.h">
 			</File>
 			<File RelativePath="..\..\src\test\harness_memory.h">
@@ -413,6 +439,8 @@
 			</File>
 			<File RelativePath="..\..\include\tbb\reader_writer_lock.h">
 			</File>
+			<File RelativePath="..\..\include\tbb\concurrent_priority_queue.h">
+			</File>
 			<File RelativePath="..\..\include\tbb\recursive_mutex.h">
 			</File>
 			<File RelativePath="..\..\include\tbb\scalable_allocator.h">
@@ -439,8 +467,6 @@
 			</File>
 			<File RelativePath="..\..\include\tbb\tbb_config.h">
 			</File>
-			<File RelativePath="..\..\include\tbb\tbb_config_lrb.h">
-			</File>
 			<File RelativePath="..\..\include\tbb\tbb_exception.h">
 			</File>
 			<File RelativePath="..\..\include\tbb\tbb_machine.h">
diff --git a/build/vsproject/tbbmalloc.vcproj b/build/vsproject/tbbmalloc.vcproj
index 1fe9818..ff5ac1d 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_USE_RTM_VERSION /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" Optimization="0" AdditionalIncludeDirectories="." PreprocessorDefinitions="" MinimalRebuild="true" ExceptionHandling="0" BasicRuntimeChecks="0" RuntimeLibrary [...]
+			<Tool Name="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="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_USE_RTM_VERSION /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /W4 /Wp64 /I../../src /I../../src/rml/include /I../../include" Optimization="0" AdditionalIncludeDirectories="." MinimalRebuild="false" ExceptionHandling="0" BasicRuntimeChecks="0" BufferSecurityCheck="false" RuntimeLibrary="3" TreatWChar_tAsBuiltInType="true" U [...]
+			<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="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_USE_RTM_VERSION /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" AdditionalIncludeDirectories="." PreprocessorDefinitions="" ExceptionHandling="0" RuntimeLibrary="2" UsePrecompiledHeader="0" WarningLevel="4" DebugInformationFormat="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 /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="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_USE_RTM_VERSION /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /W4 /Wp64 /I../../src /I../../src/rml/include /I../../include" AdditionalIncludeDirectories="." PreprocessorDefinitions="" ExceptionHandling="0" BufferSecurityCheck="false" RuntimeLibrary="2" UsePrecompiledHeader="0" WarningLevel="4" DebugInformationFormat="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="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 /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" Optimization="0" AdditionalIncludeDirectories="." PreprocessorDefinitions="" MinimalRebuild="true" ExceptionHandling="0" BasicRuntimeChecks="0" RuntimeLibrary="1" UsePrecompiled [...]
+			<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="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 /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /W4 /I../../src /I../../src/rml/include /I../../include" Optimization="0" AdditionalIncludeDirectories="." MinimalRebuild="false" ExceptionHandling="0" BufferSecurityCheck="false" BasicRuntimeChecks="0" RuntimeLibrary="1" TreatWChar_tAsBuiltInType="true" UsePrecompiledHeader="0" W [...]
+			<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="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 /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" AdditionalIncludeDirectories="." PreprocessorDefinitions="" ExceptionHandling="0" RuntimeLibrary="0" UsePrecompiledHeader="0" WarningLevel="4" 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__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="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 /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /W4 /I../../src /I../../src/rml/include /I../../include" AdditionalIncludeDirectories="." PreprocessorDefinitions="" ExceptionHandling="0" BufferSecurityCheck="false" 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 /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="VCManagedResourceCompilerTool"/>
 			<Tool Name="VCResourceCompilerTool"/>
 			<Tool Name="VCPreLinkEventTool"/>
@@ -191,46 +191,6 @@
 " Outputs="intel64\Release-MT\atomic_support.obj"/>
 				</FileConfiguration>
 			</File>
-			<File RelativePath="..\..\src\tbb\ia32-masm\atomic_support.asm">
-				<FileConfiguration Name="Debug|Win32">
-					<Tool Name="MASM" AdditionalOptions="/coff /Zi"/>
-				</FileConfiguration>
-				<FileConfiguration Name="Debug|x64" ExcludedFromBuild="true">
-					<Tool Name="MASM" AdditionalOptions="/coff /Zi"/>
-				</FileConfiguration>
-				<FileConfiguration Name="Release|x64" ExcludedFromBuild="true">
-					<Tool Name="MASM"/>
-				</FileConfiguration>
-				<FileConfiguration Name="Debug-MT|Win32">
-					<Tool Name="MASM" AdditionalOptions="/coff /Zi"/>
-				</FileConfiguration>
-				<FileConfiguration Name="Debug-MT|x64" ExcludedFromBuild="true">
-					<Tool Name="MASM" AdditionalOptions="/coff /Zi"/>
-				</FileConfiguration>
-				<FileConfiguration Name="Release-MT|x64" ExcludedFromBuild="true">
-					<Tool Name="MASM"/>
-				</FileConfiguration>
-			</File>
-			<File RelativePath="..\..\src\tbb\ia32-masm\lock_byte.asm">
-				<FileConfiguration Name="Debug|Win32">
-					<Tool Name="MASM" AdditionalOptions="/coff /Zi"/>
-				</FileConfiguration>
-				<FileConfiguration Name="Debug|x64" ExcludedFromBuild="true">
-					<Tool Name="MASM" AdditionalOptions="/coff /Zi"/>
-				</FileConfiguration>
-				<FileConfiguration Name="Release|x64" ExcludedFromBuild="true">
-					<Tool Name="MASM"/>
-				</FileConfiguration>
-				<FileConfiguration Name="Debug-MT|Win32">
-					<Tool Name="MASM" AdditionalOptions="/coff /Zi"/>
-				</FileConfiguration>
-				<FileConfiguration Name="Debug-MT|x64" ExcludedFromBuild="true">
-					<Tool Name="MASM" AdditionalOptions="/coff /Zi"/>
-				</FileConfiguration>
-				<FileConfiguration Name="Release-MT|x64" ExcludedFromBuild="true">
-					<Tool Name="MASM"/>
-				</FileConfiguration>
-			</File>
 			<File RelativePath="..\..\src\tbbmalloc\win32-tbbmalloc-export.def">
 				<FileConfiguration Name="Debug|Win32">
 					<Tool Name="VCCustomBuildTool" Description="generating tbbmalloc.def file" CommandLine="cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)\tbbmalloc.def"
@@ -299,7 +259,7 @@
 " Outputs=""$(IntDir)\tbbmalloc.def""/>
 				</FileConfiguration>
 			</File>
-			<File RelativePath="..\..\src\tbbmalloc\tbbmalloc.cpp"/><File RelativePath="..\..\src\tbb\dynamic_link.cpp"/><File RelativePath="..\..\src\tbb\tbb_misc.cpp"/><File RelativePath="..\..\src\tbbmalloc\MemoryAllocator.cpp"/><File RelativePath="..\..\src\tbb\itt_notify.cpp"/></Filter>
+			<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>
 		<Filter Name="Header Files" Filter="h;hpp;hxx;hm;inl;inc;xsd" UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
 			<File RelativePath="..\..\include\tbb\_concurrent_queue_internal.h">
 			</File>
@@ -391,8 +351,6 @@
 			</File>
 			<File RelativePath="..\..\include\tbb\tbb_config.h">
 			</File>
-			<File RelativePath="..\..\include\tbb\tbb_config_lrb.h">
-			</File>
 			<File RelativePath="..\..\include\tbb\tbb_exception.h">
 			</File>
 			<File RelativePath="..\..\src\tbbmalloc\tbb_function_replacement.h">
diff --git a/build/vsproject/tbbmalloc_proxy.vcproj b/build/vsproject/tbbmalloc_proxy.vcproj
index 233f247..759da4e 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_USE_RTM_VERSION /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /W4 /Wp64 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" Optimization="0" AdditionalIncludeDirectories="." PreprocessorDefinitions="" MinimalRebuild="true" ExceptionHandling="1" BasicRuntimeChecks="0" RuntimeLibrary=" [...]
+			<Tool Name="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="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_USE_RTM_VERSION /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /W4 /Wp64 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" Optimization="0" AdditionalIncludeDirectories="." MinimalRebuild="false" ExceptionHandling="0" BasicRuntimeChecks="0" BufferSecurityCheck="false" RuntimeLi [...]
+			<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="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_USE_RTM_VERSION /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /W4 /Wp64 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" AdditionalIncludeDirectories="." PreprocessorDefinitions="" ExceptionHandling="0" RuntimeLibrary="2" UsePrecompiledHeader="0" WarningLevel="4" DebugInformationFormat="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 /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="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_USE_RTM_VERSION /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /W4 /Wp64 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" AdditionalIncludeDirectories="." PreprocessorDefinitions="" ExceptionHandling="0" BufferSecurityCheck="false" RuntimeLibrary="2" UsePrecompiledHeader="0" WarningLevel="4" DebugI [...]
+			<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="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 /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /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" RuntimeLibrary="1" UsePrecompiledHeader=" [...]
+			<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="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 /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /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" RuntimeLibrary="1" TreatWChar_tAsB [...]
+			<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="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 /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /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 /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="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 /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /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" DebugInformationFormat="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="VCManagedResourceCompilerTool"/>
 			<Tool Name="VCResourceCompilerTool"/>
 			<Tool Name="VCPreLinkEventTool"/>
diff --git a/build/windows.cl.inc b/build/windows.cl.inc
index 39481aa..5f51f3a 100644
--- a/build/windows.cl.inc
+++ b/build/windows.cl.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -43,17 +43,17 @@ endif
 EH_FLAGS = /EHsc /GR
               
 ifeq ($(cfg), release)
-        CPLUS_FLAGS = $(MS_CRT_KEY) /O2 /Zi $(EH_FLAGS) /Zc:forScope /Zc:wchar_t
+        CPLUS_FLAGS = $(MS_CRT_KEY) /O2 /Zi $(EH_FLAGS) /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=$(TBB.LIB)
         ASM_FLAGS =
 endif
 ifeq ($(cfg), debug)
-        CPLUS_FLAGS = $(MS_CRT_KEY) /Od /Ob0 /Zi $(EH_FLAGS) /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG
+        CPLUS_FLAGS = $(MS_CRT_KEY) /Od /Ob0 /Zi $(EH_FLAGS) /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=$(TBB.LIB)
         ASM_FLAGS = /DUSE_FRAME_POINTER
 endif
 
 
 COMPILE_ONLY = /c
-PREPROC_ONLY = /TC /EP
+PREPROC_ONLY = /TP /EP
 INCLUDE_KEY = /I
 DEFINE_KEY = /D
 OUTPUT_KEY = /Fe
@@ -68,6 +68,8 @@ endif
 
 DYLIB_KEY = /DLL
 EXPORT_KEY = /DEF:
+NODEFAULTLIB_KEY = /Zl
+NOINTRINSIC_KEY = /Oi-
 
 ifeq ($(runtime),vc8)
         OPENMP_FLAG = /openmp
@@ -99,7 +101,8 @@ ASSEMBLY_SOURCE=$(arch)-masm
 ifeq (intel64,$(arch))
     ASM=ml64 /nologo
     ASM_FLAGS += /DEM64T=1 /c /Zi
-    TBB_ASM.OBJ = atomic_support.obj
+    TBB_ASM.OBJ = atomic_support.obj intel64_misc.obj
+    MALLOC_ASM.OBJ = atomic_support.obj
 else
     ASM=ml /nologo
     ASM_FLAGS += /c /coff /Zi
diff --git a/build/windows.gcc.inc b/build/windows.gcc.inc
index 7464e48..807bd20 100644
--- a/build/windows.gcc.inc
+++ b/build/windows.gcc.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -39,8 +39,11 @@ TBB.MANIFEST =
 MALLOC.MANIFEST =
 RML.MANIFEST =
 
-# TODO: do better when/if mingw64 support is added
-TBB.DEF = $(tbb_root)/src/tbb/lin32-tbb-export.def
+ifeq (ia32,$(arch))
+    TBB.LST = $(tbb_root)/src/tbb/lin32-tbb-export.lst
+else
+    TBB.LST = $(tbb_root)/src/tbb/win64-gcc-tbb-export.lst
+endif
 MALLOC.DEF = $(MALLOC_ROOT)/win-gcc-tbbmalloc-export.def
 RML.DEF = $(RML_SERVER_ROOT)/lin-rml-export.def
 
@@ -52,9 +55,9 @@ LINK_TBB.LIB = $(TBB.LIB)
 # Compiler-specific variables
 #------------------------------------------------------------------------------
 
-CPLUS = g++ 
+CPLUS = g++
 COMPILE_ONLY = -c -MMD
-PREPROC_ONLY = -E -x c
+PREPROC_ONLY = -E -x c++
 INCLUDE_KEY = -I
 DEFINE_KEY = -D
 OUTPUT_KEY = -o #
@@ -64,7 +67,7 @@ WARNING_AS_ERROR_KEY = -Werror
 WARNING_KEY = -Wall  -Wno-uninitialized
 WARNING_SUPPRESS = -Wno-parentheses
 DYLIB_KEY = -shared
-LIBDL = 
+LIBDL =
 EXPORT_KEY = -Wl,--version-script,
 LIBS = -lpsapi
 
@@ -74,8 +77,8 @@ LIBS = -lpsapi
 # Command lines
 #------------------------------------------------------------------------------
 
-LINK_FLAGS = -Wl,--enable-auto-import -Wl,--enable-runtime-pseudo-reloc-v2
-LIB_LINK_FLAGS = $(DYLIB_KEY) -Wl,--enable-runtime-pseudo-reloc-v2
+LINK_FLAGS = -Wl,--enable-auto-import
+LIB_LINK_FLAGS = $(DYLIB_KEY)
 
 ifeq ($(cfg), release)
         CPLUS_FLAGS = -O2
@@ -84,9 +87,10 @@ ifeq ($(cfg), debug)
         CPLUS_FLAGS = -g -O0 -DTBB_USE_DEBUG
 endif
 CPLUS_FLAGS += -DUSE_WINTHREAD
+CPLUS_FLAGS += -D_WIN32_WINNT=$(_WIN32_WINNT)
 
 # MinGW specific
-CPLUS_FLAGS += -D__MSVCRT_VERSION__=0x0700 -msse -mthreads
+CPLUS_FLAGS += -DMINGW_HAS_SECURE_API=1 -D__MSVCRT_VERSION__=0x0700 -msse -mthreads
 
 CONLY = gcc
 C_FLAGS = $(CPLUS_FLAGS)
@@ -94,12 +98,12 @@ C_FLAGS = $(CPLUS_FLAGS)
 ifeq (intel64,$(arch))
     CPLUS_FLAGS += -m64
     LIB_LINK_FLAGS += -m64
-endif 
+endif
 
 ifeq (ia32,$(arch))
     CPLUS_FLAGS += -m32
     LIB_LINK_FLAGS += -m32
-endif 
+endif
 
 # For examples
 export UNIXMODE = 1
diff --git a/build/windows.icl.inc b/build/windows.icl.inc
index d2a12e8..dfa7010 100644
--- a/build/windows.icl.inc
+++ b/build/windows.icl.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -52,17 +52,19 @@ endif
 EH_FLAGS = /EHsc /GR
 
 ifeq ($(cfg), release)
-    CPLUS_FLAGS = $(MS_CRT_KEY) /O2 /Zi $(EH_FLAGS) /Zc:forScope /Zc:wchar_t
+    CPLUS_FLAGS = $(MS_CRT_KEY) /O2 /Zi $(EH_FLAGS) /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=$(TBB.LIB)
     ASM_FLAGS =
 endif
 ifeq ($(cfg), debug)
-    CPLUS_FLAGS = $(MS_CRT_KEY) /Od /Ob0 /Zi $(EH_FLAGS) /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG
+    CPLUS_FLAGS = $(MS_CRT_KEY) /Od /Ob0 /Zi $(EH_FLAGS) /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=$(TBB.LIB)
     ASM_FLAGS = /DUSE_FRAME_POINTER
 endif
 
 
 COMPILE_ONLY = /c /QMMD
-PREPROC_ONLY = /EP /Tc
+# PREPROC_ONLY should really use /TP which applies to all files in the command line.
+# But with /TP, ICL does not preprocess *.def files.
+PREPROC_ONLY = /EP /Tp
 INCLUDE_KEY = /I
 DEFINE_KEY = /D
 OUTPUT_KEY = /Fe
@@ -71,6 +73,8 @@ WARNING_AS_ERROR_KEY = /WX
 WARNING_KEY = /W3
 DYLIB_KEY = /DLL
 EXPORT_KEY = /DEF:
+NODEFAULTLIB_KEY = /Zl
+NOINTRINSIC_KEY = /Oi-
 
 ifeq (intel64,$(arch))
     CPLUS_FLAGS += /GS-
@@ -103,7 +107,7 @@ ifeq ($(VCCOMPAT_FLAG),)
         VCCOMPAT_FLAG := $(if $(findstring vc8, $(VCVERSION)),/Qvc8)
 endif
 ifeq ($(VCCOMPAT_FLAG),)
-        VCCOMPAT_FLAG := $(if $(findstring vc_mt, $(VCVERSION)),/Qvc8)
+        VCCOMPAT_FLAG := $(if $(findstring vc_mt, $(VCVERSION)),/Qvc10)
 endif
 ifeq ($(VCCOMPAT_FLAG),)
         VCCOMPAT_FLAG := $(if $(findstring vc9, $(VCVERSION)),/Qvc9)
@@ -127,7 +131,8 @@ ASSEMBLY_SOURCE=$(arch)-masm
 ifeq (intel64,$(arch))
     ASM=ml64 /nologo
     ASM_FLAGS += /DEM64T=1 /c /Zi
-    TBB_ASM.OBJ = atomic_support.obj
+    TBB_ASM.OBJ = atomic_support.obj intel64_misc.obj
+    MALLOC_ASM.OBJ = atomic_support.obj
 else
     ASM=ml /nologo
     ASM_FLAGS += /c /coff /Zi
diff --git a/build/windows.inc b/build/windows.inc
index a1f04bf..7b09ee4 100644
--- a/build/windows.inc
+++ b/build/windows.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -24,6 +24,8 @@
 # invalidate any other reasons why the executable file might be covered by
 # the GNU General Public License.
 
+export SHELL = cmd
+
 ifdef tbb_build_dir
   test_dir:=$(tbb_build_dir)
 else
@@ -57,18 +59,19 @@ LIBEXT = lib
 
 def_prefix = $(if $(findstring ia32,$(arch)),win32,win64)
 
-# Target Windows version. Do not increase beyond 0x0500 without prior discussion!
+# Target Windows version. Do not increase beyond 0x0501 without prior discussion!
 # Used as the value for macro definition opiton in windows.cl.inc etc.
-_WIN32_WINNT=0x0400
+_WIN32_WINNT=0x0501
 
-TBB.DEF = $(tbb_root)/src/tbb/$(def_prefix)-tbb-export.def
-TBB.DLL = tbb$(DEBUG_SUFFIX).$(DLL)
-TBB.LIB = tbb$(DEBUG_SUFFIX).$(LIBEXT)
+TBB.LST = $(tbb_root)/src/tbb/$(def_prefix)-tbb-export.lst
+TBB.DEF = $(TBB.LST:.lst=.def)
+TBB.DLL = tbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(DLL)
+TBB.LIB = tbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(LIBEXT)
 TBB.RES = tbb_resource.res
 # On Windows, we use #pragma comment to set the proper TBB lib to link with
 # But for cross-configuration testing, need to link explicitly
 LINK_TBB.LIB = $(if $(crosstest),$(TBB.LIB))
-TBB.MANIFEST = 
+TBB.MANIFEST =
 ifneq ($(filter vc8 vc9,$(runtime)),)
     TBB.MANIFEST = tbbmanifest.exe.manifest
 endif
diff --git a/build/xbox360.cl.inc b/build/xbox360.cl.inc
index cd04d00..a06e2e8 100644
--- a/build/xbox360.cl.inc
+++ b/build/xbox360.cl.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -50,7 +50,7 @@ endif
 
 
 COMPILE_ONLY = /c
-PREPROC_ONLY = /TC /EP
+PREPROC_ONLY = /TP /EP
 INCLUDE_KEY = /I
 DEFINE_KEY = /D
 OUTPUT_KEY = /Fe
@@ -60,22 +60,11 @@ WARNING_KEY = /W3
 DYLIB_KEY = /DLL
 EXPORT_KEY = /DEF:
 
-        OPENMP_FLAG = /openmp
-ifeq ($(runtime),vc8)
-        OPENMP_FLAG = /openmp
-endif
-ifeq ($(runtime),vc9)
-        OPENMP_FLAG = /openmp
-endif
-
 ifeq (em64t,$(arch))
         CPLUS_FLAGS += /GS-
 endif
 
-
-
-CPLUS_FLAGS += /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE \
-        /D_WIN32_WINNT=$(_WIN32_WINNT)
+CPLUS_FLAGS += /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=$(_WIN32_WINNT)
 C_FLAGS = $(CPLUS_FLAGS) /TC
 #------------------------------------------------------------------------------
 # End of setting compiler flags.
@@ -85,22 +74,7 @@ C_FLAGS = $(CPLUS_FLAGS) /TC
 #------------------------------------------------------------------------------
 # Setting assembler data.
 #------------------------------------------------------------------------------
-ASSEMBLY_SOURCE=$(arch)-masm
-ifeq (XBOX360,$(arch))
-#do nothing for XBOX360
-else
-
-ifeq (em64t,$(arch))
-    ASM=ml64
-    ASM_FLAGS += /DEM64T=1 /c /Zi
-    TBB_ASM.OBJ =
-else
-    ASM=ml
-    ASM_FLAGS += /c /coff /Zi
-    TBB_ASM.OBJ =
-endif
-
-endif
+# nothing for XBOX360
 #------------------------------------------------------------------------------
 # End of setting assembler data.
 #------------------------------------------------------------------------------
diff --git a/build/xbox360.inc b/build/xbox360.inc
index 8852934..fb2d462 100644
--- a/build/xbox360.inc
+++ b/build/xbox360.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -61,9 +61,10 @@ def_prefix = $(arch)
 # Used as the value for macro definition opiton in compiler specific inc files.
 _WIN32_WINNT=0x0400
 
+TBB.LST =
 TBB.DEF = $(tbb_root)/src/tbb/$(def_prefix)-tbb-export.def
-TBB.DLL = tbb$(DEBUG_SUFFIX).$(DLL)
-TBB.LIB = tbb$(DEBUG_SUFFIX).$(LIBEXT)
+TBB.DLL = tbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(DLL)
+TBB.LIB = tbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(LIBEXT)
 TBB.RES =
 #On Windows we specify appropriate tbb library using #pragma comment
 LINK_TBB.LIB =
diff --git a/doc/Release_Notes.txt b/doc/Release_Notes.txt
index 9e4d32b..96f70ec 100644
--- a/doc/Release_Notes.txt
+++ b/doc/Release_Notes.txt
@@ -41,14 +41,14 @@ Software - Minimum Requirements
 
     Supported operating system (see below)
     Supported compiler (see below)
-    Xcode* tool suite 3.1.2 or higher (Mac OS* X systems only)
-    Microsoft* Internet Explorer* 6.0, or other compatible web browser
+    Xcode* tool suite 3.1.4 or higher (Mac OS* X systems only)
+    Microsoft* Internet Explorer* 8.0, or other compatible web browser
     Adobe(R) Reader(R)* 6.0 or higher
 
 Software - Recommended
 
     Intel(R) Parallel Studio
-    Intel(R) C++ Compiler 10.1 or higher
+    Intel(R) C++ Compiler 11.1 or higher
     Intel(R) Thread Checker 3.1 or higher
     Intel(R) Thread Profiler 3.1 or higher
 
@@ -61,18 +61,18 @@ Software - Supported Operating Systems
 	Microsoft* Windows* Server 2008
 	Microsoft* Windows* 7
     Linux* Systems
-	Red Hat* Enterprise Linux* 4, 5
+	Red Hat* Enterprise Linux* 5, 6, 4 (deprecated)
 	    (when using Red Hat* Enterprise Linux* 4 with Intel(R)
 	    Itanium(R) processors, operating system Update 2 or higher
 	    is recommended)
-	Fedora* 10, 11, 12
+	Fedora* 12, 13
 	    (not with Intel(R) Itanium(R) processors)
 	Asianux* 3.0
 	Debian* GNU/Linux* 5.0
-	Ubuntu* 9.04, 9.10
+	Ubuntu* 10.04
 	SuSE* Linux* Enterprise Server (SLES) 10, 11
     Mac OS* X Systems
-	Mac OS* X 10.5.6 or higher
+	Mac OS* X 10.5.8 or higher
 
 Software - Supported Compilers
 
@@ -82,13 +82,13 @@ Software - Supported Compilers
 	Windows* systems only)
     Microsoft* Visual C++ 10.0 (Microsoft* Visual Studio* 2010,
 	Windows* systems only)
-    Intel(R) C++ Compiler 10.1 or higher
+    Intel(R) C++ Compiler 11.1 or higher
     For each supported Linux* operating system, the standard gcc
 	version provided with that operating system is supported,
-	including gcc 3.4 through 4.4
+	including gcc 3.4 through 4.5
     For each supported Mac OS* X operating system, the standard gcc
 	version provided with that operating system is supported,
-	including: 4.0.1 or higher (Xcode* tool suite 3.1.2 or higher)
+	including: 4.0.1 or higher (Xcode* tool suite 3.1.4 or higher)
 
 
 Known Issues
@@ -99,14 +99,12 @@ Intel(R) Threading Building Blocks.
 
 Library Issues
 
-    - Unhandled exceptions in the user code executed in the context of
-	TBB algorithms or containers may cause segmentation faults when
-	Intel(R) C++ Compiler 10.x is used with glibc 2.3.2 to 2.3.4.
-
-    - To allow more accurate results to be obtained with Intel(R) Thread
-	Checker or Intel(R) Thread Profiler, download the latest update
-	releases of these products before using them with Intel(R)
-	Threading Building Blocks.
+    - If an application uses static version of MSVCRT libraries or uses
+	TBB DLL built with static MSVCRT (vc_mt variant), and throws
+	an exception from a functor passed to task_group::run_and_wait(),
+	the exception will not be intercepted by TBB and will not result
+	in cancellation of the task_group. For a workaround, catch the
+	exception in the functor and explicitly cancel the task_group.
 
     - If you are using Intel(R) Threading Building Blocks and OpenMP*
 	constructs mixed together in rapid succession in the same
@@ -127,17 +125,8 @@ Library Issues
 	the Tutorial in the product "doc" sub-directory for more details
 	on debug vs. release libraries.
     
-    - Installer doesn't accept non-commercial serial numbers on 
-	Fedora* 11. To install the product on the system use license 
-	file provided after registration of the serial number.
-
-    - Intel(R) TBB 2.2 Update 1 fixed known bugs with exception handling
-	in concurrent_vector. For applications using both exceptions 
-	and concurrent_vector, recompilation with TBB 2.2 Update 1
-	or a newer version is recommended.
-
 ------------------------------------------------------------------------
-Copyright (C) 2005-2010 Intel Corporation.  All Rights Reserved.
+Copyright (C) 2005-2011 Intel Corporation.  All Rights Reserved.
 
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00001.html b/doc/html/a00001.html
index 5a85470..50c62c7 100644
--- a/doc/html/a00001.html
+++ b/doc/html/a00001.html
@@ -20,12 +20,13 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::aligned_space< T, N > Member List</h1>This is the complete list of members for <a class="el" href="a00141.html">tbb::aligned_space< T, N ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00141.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()</td><td><a class="el" href="a00141.html">tbb::aligned_space< T, N ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00141.html#024be075c23c0394c9a2518d993bcd9e">end</a>()</td><td><a class="el" href="a00141.html">tbb::aligned_space< T, N ></a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::interface6::internal::aggregated_operation< Derived > Member List</h1>This is the complete list of members for <a class="el" href="a00213.html">tbb::interface6::internal::aggregated_operation< Derived ></a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>aggregated_operation</b>() (defined in <a class="el" href="a00213.html">tbb::interface6::internal::aggregated_operation< Derived ></a>)</td><td><a class="el" href="a00213.html">tbb::interface6::internal::aggregated_operation< Derived ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>next</b> (defined in <a class="el" href="a00213.html">tbb::interface6::internal::aggregated_operation< Derived ></a>)</td><td><a class="el" href="a00213.html">tbb::interface6::internal::aggregated_operation< Derived ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>status</b> (defined in <a class="el" href="a00213.html">tbb::interface6::internal::aggregated_operation< Derived ></a>)</td><td><a class="el" href="a00213.html">tbb::interface6::internal::aggregated_operation< Derived ></a></td><td></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00002.html b/doc/html/a00002.html
index 3cf66b7..753bae4 100644
--- a/doc/html/a00002.html
+++ b/doc/html/a00002.html
@@ -20,12 +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::atomic< T > Member List</h1>This is the complete list of members for <a class="el" href="a00142.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="a00142.html">tbb::atomic< T ></a>)</td><td><a class="el" href="a00142.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="a00142.html">tbb::atomic< T ></a>)</td><td><a class="el" href="a00142.html">tbb::atomic< T ></a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::interface6::internal::aggregator< handler_type, operation_type > Member List</h1>This is the complete list of members for <a class="el" href="a00214.html">tbb::interface6::internal::aggregator< handler_type, operation_type ></a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>aggregator</b>() (defined in <a class="el" href="a00214.html">tbb::interface6::internal::aggregator< handler_type, operation_type ></a>)</td><td><a class="el" href="a00214.html">tbb::interface6::internal::aggregator< handler_type, operation_type ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00214.html#282d5a2f1216b185c91ed23d00119481">execute</a>(operation_type *op)</td><td><a class="el" href="a00214.html">tbb::interface6::internal::aggregator< handler_type, operation_type ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>initialize_handler</b>(handler_type h) (defined in <a class="el" href="a00214.html">tbb::interface6::internal::aggregator< handler_type, operation_type ></a>)</td><td><a class="el" href="a00214.html">tbb::interface6::internal::aggregator< handler_type, operation_type ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~aggregator</b>() (defined in <a class="el" href="a00214.html">tbb::interface6::internal::aggregator< handler_type, operation_type ></a>)</td><td><a class="el" href="a00214.html">tbb::interface6::internal::aggregator< handler_type, operation_type ></a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00003.html b/doc/html/a00003.html
index 81de51f..e2b0392 100644
--- a/doc/html/a00003.html
+++ b/doc/html/a00003.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::atomic< void * > Member List</h1>This is the complete list of members for <a class="el" href="a00143.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="a00143.html">tbb::atomic< void * ></a>)</td><td><a class="el" href="a00143.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="a00143.html">tbb::atomic< void * ></a>)</td><td><a class="el" href="a00143.html">tbb::atomic< void * ></a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::aligned_space< T, N > Member List</h1>This is the complete list of members for <a class="el" href="a00215.html">tbb::aligned_space< T, N ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00215.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()</td><td><a class="el" href="a00215.html">tbb::aligned_space< T, N ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00215.html#024be075c23c0394c9a2518d993bcd9e">end</a>()</td><td><a class="el" href="a00215.html">tbb::aligned_space< T, N ></a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00004.html b/doc/html/a00004.html
index 4d7e876..6029fc7 100644
--- a/doc/html/a00004.html
+++ b/doc/html/a00004.html
@@ -20,23 +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::blocked_range< Value > Member List</h1>This is the complete list of members for <a class="el" href="a00147.html">tbb::blocked_range< Value ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00147.html#18d2258400756ac1446dac7676b18df3">begin</a>() const </td><td><a class="el" href="a00147.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00147.html#94607755c5110d199202234d58d022ac">blocked_range</a>()</td><td><a class="el" href="a00147.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00147.html#14795a36ead1414b4371dbe1a4656359">blocked_range</a>(Value begin_, Value end_, size_type grainsize_=1)</td><td><a class="el" href="a00147.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00147.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">blocked_range</a>(blocked_range &r, split)</td><td><a class="el" href="a00147.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="a00147.html">tbb::blocked_range< Value ></a>)</td><td><a class="el" href="a00147.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="a00147.html">tbb::blocked_range< Value ></a>)</td><td><a class="el" href="a00147.html">tbb::blocked_range< Value ></a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00147.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> typedef</td><td><a class="el" href="a00147.html">tbb::blocked_range< Value ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00147.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>() const </td><td><a class="el" href="a00147.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00147.html#8b929d93ddc13f148b11bceef3a3bdf8">end</a>() const </td><td><a class="el" href="a00147.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00147.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>() const </td><td><a class="el" href="a00147.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00147.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>() const </td><td><a class="el" href="a00147.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00147.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>() const </td><td><a class="el" href="a00147.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00147.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> typedef</td><td><a class="el" href="a00147.html">tbb::blocked_range< Value ></a></td><td></td></tr>
+<h1>tbb::atomic< T > Member List</h1>This is the complete list of members for <a class="el" href="a00216.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="a00216.html">tbb::atomic< T ></a>)</td><td><a class="el" href="a00216.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="a00216.html">tbb::atomic< T ></a>)</td><td><a class="el" href="a00216.html">tbb::atomic< T ></a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00005.html b/doc/html/a00005.html
index 445a967..5c001f4 100644
--- a/doc/html/a00005.html
+++ b/doc/html/a00005.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::blocked_range2d< RowValue, ColValue > Member List</h1>This is the complete list of members for <a class="el" href="a00148.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="a00148.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td><a class="el" href="a00148.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="a00148.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td><a class="el" href="a00148.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="a00148.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td><a class="el" href="a00148.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="a00148.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td><a class="el" href="a00148.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00148.html#392a46759af2c884957115771affa7f4">cols</a>() const </td><td><a class="el" href="a00148.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00148.html#d144cb2d88cef553420311aca8667a44">empty</a>() const </td><td><a class="el" href="a00148.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00148.html#ad36a9b38e4fef26d376f99552ce2d92">is_divisible</a>() const </td><td><a class="el" href="a00148.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00148.html#a807a22fe658ec38b8edfd69521d0383">row_range_type</a> typedef</td><td><a class="el" href="a00148.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00148.html#f496e7348a82652fba581203477cc07c">rows</a>() const </td><td><a class="el" href="a00148.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::atomic< void * > Member List</h1>This is the complete list of members for <a class="el" href="a00217.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="a00217.html">tbb::atomic< void * ></a>)</td><td><a class="el" href="a00217.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="a00217.html">tbb::atomic< void * ></a>)</td><td><a class="el" href="a00217.html">tbb::atomic< void * ></a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00006.html b/doc/html/a00006.html
index 6defd30..267678b 100644
--- a/doc/html/a00006.html
+++ b/doc/html/a00006.html
@@ -20,21 +20,23 @@
     <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="a00149.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="a00149.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00149.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="a00149.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00149.html">tbb::blocked_range3d [...]
-  <tr bgcolor="#f0f0f0"><td><b>blocked_range3d</b>(blocked_range3d &r, split) (defined in <a class="el" href="a00149.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00149.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="a00149.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00149.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00149.html#3336ba9480fd6c43e158f9beb024c050">cols</a>() const </td><td><a class="el" href="a00149.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00149.html#356860e1c977d91711e8216bd55c0b25">empty</a>() const </td><td><a class="el" href="a00149.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00149.html#39d69191721c488e737ae5d9c5336b9c">is_divisible</a>() const </td><td><a class="el" href="a00149.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00149.html#b8ebf17a552ba47825e9b3887855b719">page_range_type</a> typedef</td><td><a class="el" href="a00149.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00149.html#cf971430aa12361d3ed245344b7c6764">pages</a>() const </td><td><a class="el" href="a00149.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="a00149.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00149.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00149.html#1584623e59ff32a8aa82006827508be4">rows</a>() const </td><td><a class="el" href="a00149.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::blocked_range< Value > Member List</h1>This is the complete list of members for <a class="el" href="a00221.html">tbb::blocked_range< Value ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00221.html#18d2258400756ac1446dac7676b18df3">begin</a>() const </td><td><a class="el" href="a00221.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00221.html#94607755c5110d199202234d58d022ac">blocked_range</a>()</td><td><a class="el" href="a00221.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00221.html#14795a36ead1414b4371dbe1a4656359">blocked_range</a>(Value begin_, Value end_, size_type grainsize_=1)</td><td><a class="el" href="a00221.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00221.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">blocked_range</a>(blocked_range &r, split)</td><td><a class="el" href="a00221.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="a00221.html">tbb::blocked_range< Value ></a>)</td><td><a class="el" href="a00221.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="a00221.html">tbb::blocked_range< Value ></a>)</td><td><a class="el" href="a00221.html">tbb::blocked_range< Value ></a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00221.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> typedef</td><td><a class="el" href="a00221.html">tbb::blocked_range< Value ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00221.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>() const </td><td><a class="el" href="a00221.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00221.html#8b929d93ddc13f148b11bceef3a3bdf8">end</a>() const </td><td><a class="el" href="a00221.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00221.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>() const </td><td><a class="el" href="a00221.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00221.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>() const </td><td><a class="el" href="a00221.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00221.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>() const </td><td><a class="el" href="a00221.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00221.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> typedef</td><td><a class="el" href="a00221.html">tbb::blocked_range< Value ></a></td><td></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00007.html b/doc/html/a00007.html
index e72e69e..9d62bdf 100644
--- a/doc/html/a00007.html
+++ b/doc/html/a00007.html
@@ -20,27 +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::cache_aligned_allocator< T > Member List</h1>This is the complete list of members for <a class="el" href="a00150.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="a00150.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00150.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="a00150.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00150.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00150.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">allocate</a>(size_type n, const void *hint=0)</td><td><a class="el" href="a00150.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="a00150.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00150.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="a00150.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00150.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="a00150.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00150.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="a00150.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00150.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="a00150.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00150.html">tbb::cache_aligned_allocator< T ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00150.html#958ee8745c86c275bfc9533af565e017">construct</a>(pointer p, const value_type &value)</td><td><a class="el" href="a00150.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00150.html#3d4eadf188f7d85d3805ae534e0b8e1c">deallocate</a>(pointer p, size_type)</td><td><a class="el" href="a00150.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00150.html#cd298895a4f1654b5149ec84b591ecb5">destroy</a>(pointer p)</td><td><a class="el" href="a00150.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="a00150.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00150.html">tbb::cache_aligned_allocator< T ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00150.html#fb23b687b4c0429dab4c7f8017266cf0">max_size</a>() const </td><td><a class="el" href="a00150.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="a00150.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00150.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="a00150.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00150.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="a00150.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00150.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="a00150.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00150.html">tbb::cache_aligned_allocator< T ></a></td><td></td></tr>
+<h1>tbb::blocked_range2d< RowValue, ColValue > Member List</h1>This is the complete list of members for <a class="el" href="a00222.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="a00222.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td><a class="el" href="a00222.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="a00222.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td><a class="el" href="a00222.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="a00222.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td><a class="el" href="a00222.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="a00222.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td><a class="el" href="a00222.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00222.html#392a46759af2c884957115771affa7f4">cols</a>() const </td><td><a class="el" href="a00222.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00222.html#d144cb2d88cef553420311aca8667a44">empty</a>() const </td><td><a class="el" href="a00222.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00222.html#ad36a9b38e4fef26d376f99552ce2d92">is_divisible</a>() const </td><td><a class="el" href="a00222.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00222.html#a807a22fe658ec38b8edfd69521d0383">row_range_type</a> typedef</td><td><a class="el" href="a00222.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00222.html#f496e7348a82652fba581203477cc07c">rows</a>() const </td><td><a class="el" href="a00222.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00008.html b/doc/html/a00008.html
new file mode 100644
index 0000000..856f6e6
--- /dev/null
+++ b/doc/html/a00008.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>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_range3d< PageValue, RowValue, ColValue > Member List</h1>This is the complete list of members for <a class="el" href="a00223.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="a00223.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00223.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="a00223.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00223.html">tbb::blocked_range3d [...]
+  <tr bgcolor="#f0f0f0"><td><b>blocked_range3d</b>(blocked_range3d &r, split) (defined in <a class="el" href="a00223.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00223.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="a00223.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00223.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00223.html#3336ba9480fd6c43e158f9beb024c050">cols</a>() const </td><td><a class="el" href="a00223.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00223.html#356860e1c977d91711e8216bd55c0b25">empty</a>() const </td><td><a class="el" href="a00223.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00223.html#39d69191721c488e737ae5d9c5336b9c">is_divisible</a>() const </td><td><a class="el" href="a00223.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00223.html#b8ebf17a552ba47825e9b3887855b719">page_range_type</a> typedef</td><td><a class="el" href="a00223.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00223.html#cf971430aa12361d3ed245344b7c6764">pages</a>() const </td><td><a class="el" href="a00223.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="a00223.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00223.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00223.html#1584623e59ff32a8aa82006827508be4">rows</a>() const </td><td><a class="el" href="a00223.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.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the 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 356009c..9b88443 100644
--- a/doc/html/a00009.html
+++ b/doc/html/a00009.html
@@ -20,13 +20,27 @@
     <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="a00151.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="a00151.html">tbb::cache_aligned_allocator< void ></a>)</td><td><a class="el" href="a00151.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="a00151.html">tbb::cache_aligned_allocator< void ></a>)</td><td><a class="el" href="a00151.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="a00151.html">tbb::cache_aligned_allocator< void ></a>)</td><td><a class="el" href="a00151.html">tbb::cache_aligned_allocator< void ></a></td><td></td></tr>
+<h1>tbb::cache_aligned_allocator< T > Member List</h1>This is the complete list of members for <a class="el" href="a00226.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="a00226.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00226.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="a00226.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00226.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00226.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">allocate</a>(size_type n, const void *hint=0)</td><td><a class="el" href="a00226.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="a00226.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00226.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="a00226.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00226.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="a00226.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00226.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="a00226.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00226.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="a00226.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00226.html">tbb::cache_aligned_allocator< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00226.html#958ee8745c86c275bfc9533af565e017">construct</a>(pointer p, const value_type &value)</td><td><a class="el" href="a00226.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00226.html#3d4eadf188f7d85d3805ae534e0b8e1c">deallocate</a>(pointer p, size_type)</td><td><a class="el" href="a00226.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00226.html#cd298895a4f1654b5149ec84b591ecb5">destroy</a>(pointer p)</td><td><a class="el" href="a00226.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="a00226.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00226.html">tbb::cache_aligned_allocator< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00226.html#fb23b687b4c0429dab4c7f8017266cf0">max_size</a>() const </td><td><a class="el" href="a00226.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="a00226.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00226.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="a00226.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00226.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="a00226.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00226.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="a00226.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00226.html">tbb::cache_aligned_allocator< T ></a></td><td></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00011.html b/doc/html/a00011.html
index 94b29c1..8795e2e 100644
--- a/doc/html/a00011.html
+++ b/doc/html/a00011.html
@@ -20,20 +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::combinable< T > Member List</h1>This is the complete list of members for <a class="el" href="a00153.html">tbb::combinable< T ></a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>clear</b>() (defined in <a class="el" href="a00153.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00153.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="a00153.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00153.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="a00153.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00153.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="a00153.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00153.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="a00153.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00153.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="a00153.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00153.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="a00153.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00153.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="a00153.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00153.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="a00153.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00153.html">tbb::combinable< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00153.html#2c87e79ae98588a5780f708773388843">~combinable</a>()</td><td><a class="el" href="a00153.html">tbb::combinable< T ></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="a00227.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="a00227.html">tbb::cache_aligned_allocator< void ></a>)</td><td><a class="el" href="a00227.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="a00227.html">tbb::cache_aligned_allocator< void ></a>)</td><td><a class="el" href="a00227.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="a00227.html">tbb::cache_aligned_allocator< void ></a>)</td><td><a class="el" href="a00227.html">tbb::cache_aligned_allocator< void ></a></td><td></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00012.html b/doc/html/a00012.html
deleted file mode 100644
index ab8e91d..0000000
--- a/doc/html/a00012.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::tbb_hash_compare< Key > Member List</h1>This is the complete list of members for <a class="el" href="a00208.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="a00208.html">tbb::tbb_hash_compare< Key ></a>)</td><td><a class="el" href="a00208.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="a00208.html">tbb::tbb_hash_compare< Key ></a>)</td><td><a class="el" href="a00208.html">tbb::tbb_hash_compare< Key ></a></td><td><code> [inline, static]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00013.html b/doc/html/a00013.html
index 5bc8391..58a53a3 100644
--- a/doc/html/a00013.html
+++ b/doc/html/a00013.html
@@ -20,73 +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::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator > Member List</h1>This is the complete list of members for <a class="el" href="a00155.html">tbb::interface4::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="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00155.html">tbb::interface4::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="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00155.html">tbb::interface4::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="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#414d15033d36c63aa3a40666dc4d6f5e">bucket_count</a>() const </td><td><a class="el" href="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#a9f89be8fe28835749529d91081a2511">clear</a>()</td><td><a class="el" href="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#d827bb5e4f61de1916ab67d51c7c6e60">concurrent_hash_map</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#a4612d5c7233712d455496641e9b31ff">concurrent_hash_map</a>(size_type n, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#df0cd14eaddb17f10929c91519e65be9">concurrent_hash_map</a>(const concurrent_hash_map &table, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#3bfe75fcb350ce39cf610c164f233edc">concurrent_hash_map</a>(I first, I last, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00155.html">tbb::interface4::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="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00155.html">tbb::interface4::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="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00155.html">tbb::interface4::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="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00155.html">tbb::interface4::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="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00155.html">tbb::interface4::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="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#74f5ef06a06c5e619f156a1c76c04969">count</a>(const Key &key) const </td><td><a class="el" href="a00155.html">tbb::interface4::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="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00155.html">tbb::interface4::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="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#6cab7d029a3e73a653ef0faeac4d1586">empty</a>() const </td><td><a class="el" href="a00155.html">tbb::interface4::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="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00155.html">tbb::interface4::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="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00155.html">tbb::interface4::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="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00155.html">tbb::interface4::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="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#034c3b3ee419edee78e0f2f2b1f0d7ca">erase</a>(const Key &key)</td><td><a class="el" href="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#da7e4a50f6bb06191817425ec85fe760">erase</a>(const_accessor &item_accessor)</td><td><a class="el" href="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#0f500842d0cf791f8fa61662edb1b311">erase</a>(accessor &item_accessor)</td><td><a class="el" href="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#faad2108bd2be75e52293486af59f11e">exclude</a>(const_accessor &item_accessor, bool readonly)</td><td><a class="el" href="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#64338d7f2e35df586af4cb0145cd910f">find</a>(const_accessor &result, const Key &key) const </td><td><a class="el" href="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#bce7bdf46435115a95cca2aa73c5da83">find</a>(accessor &result, const Key &key)</td><td><a class="el" href="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#199208eed6f09e200cda364f906be0fe">get_allocator</a>() const </td><td><a class="el" href="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#58c38b27273de6c670568633c0931854">insert</a>(const_accessor &result, const Key &key)</td><td><a class="el" href="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#ccfecaa3e71d92be61fb3d811dd264eb">insert</a>(accessor &result, const Key &key)</td><td><a class="el" href="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#d4a2816129e38c53128c6d0c7b6b7370">insert</a>(const_accessor &result, const value_type &value)</td><td><a class="el" href="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#a657e61cd2b13164764ca2708875784a">insert</a>(accessor &result, const value_type &value)</td><td><a class="el" href="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#52bffd1066b3d7b793945bc6fa1a71a1">insert</a>(const value_type &value)</td><td><a class="el" href="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#cfe172677e5987004ef4a03e22fa338a">insert</a>(I first, I last)</td><td><a class="el" href="a00155.html">tbb::interface4::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="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00155.html">tbb::interface4::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="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#3c27779fe66b79505390d084310d997e">internal_copy</a>(const concurrent_hash_map &source)</td><td><a class="el" href="a00155.html">tbb::interface4::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="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#976c57edfb7f22b9f91a2e11f141eb4a">internal_equal_range</a>(const Key &key, I end) const </td><td><a class="el" href="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#2f76ed101a0ccc8875b846c2f747897e">internal_fast_find</a>(const Key &key) const </td><td><a class="el" href="a00155.html">tbb::interface4::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="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00155.html">tbb::interface4::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="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#1f22480a290ddc6c145888d8f985531a">lookup</a>(bool op_insert, const Key &key, const T *t, const_accessor *result, bool write)</td><td><a class="el" href="a00155.html">tbb::interface4::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="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#1e45d3cbd1e2ae06f365f1b48e0df0b5">max_size</a>() const </td><td><a class="el" href="a00155.html">tbb::interface4::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="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00155.html">tbb::interface4::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="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00155.html">tbb::interface4::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="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#2c0c42a2e1b5282b6739157df9ce2304">operator=</a>(const concurrent_hash_map &table)</td><td><a class="el" href="a00155.html">tbb::interface4::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="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00155.html">tbb::interface4::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="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00155.html">tbb::interface4::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="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00155.html">tbb::interface4::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="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00155.html">tbb::interface4::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="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#13f3f2e8de7564be03882c31559493c9">rehash</a>(size_type n=0)</td><td><a class="el" href="a00155.html">tbb::interface4::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="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00155.html">tbb::interface4::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="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline, protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#17fd8c5fe8c6a86075f34aa4e8412ba3">size</a>() const </td><td><a class="el" href="a00155.html">tbb::interface4::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="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#eddb0d2efe0b4f25a85c059e1c3dac15">swap</a>(concurrent_hash_map &table)</td><td><a class="el" href="a00155.html">tbb::interface4::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="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#a1ac58997d8fbf242b266e3691573481">~concurrent_hash_map</a>()</td><td><a class="el" href="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></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="a00229.html">tbb::combinable< T ></a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>clear</b>() (defined in <a class="el" href="a00229.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00229.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="a00229.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00229.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="a00229.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00229.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="a00229.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00229.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="a00229.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00229.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="a00229.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00229.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="a00229.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00229.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="a00229.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00229.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="a00229.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00229.html">tbb::combinable< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00229.html#2c87e79ae98588a5780f708773388843">~combinable</a>()</td><td><a class="el" href="a00229.html">tbb::combinable< T ></a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00014.html b/doc/html/a00014.html
new file mode 100644
index 0000000..0d81875
--- /dev/null
+++ b/doc/html/a00014.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::tbb_hash_compare< Key > Member List</h1>This is the complete list of members for <a class="el" href="a00300.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="a00300.html">tbb::tbb_hash_compare< Key ></a>)</td><td><a class="el" href="a00300.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="a00300.html">tbb::tbb_hash_compare< Key ></a>)</td><td><a class="el" href="a00300.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.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00015.html b/doc/html/a00015.html
index bcd4a74..e49596c 100644
--- a/doc/html/a00015.html
+++ b/doc/html/a00015.html
@@ -20,15 +20,73 @@
     <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::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor Member List</h1>This is the complete list of members for <a class="el" href="a00157.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00157.html#26b4fe0ca87a7ad4852cb787db880119">acquire</a>(concurrent_hash_map *base, const hashcode_t h, bool writer=false)</td><td><a class="el" href="a00157.html">tbb::interface4::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="a00157.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a>)</td><td><a class="el" href="a00157.html">tbb::interface4::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="a00157.html#fc194e3a186dc935a5fb513cc9f8e898">is_writer</a>()</td><td><a class="el" href="a00157.html">tbb::interface4::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="a00157.html#57c6110bd20e95c06de5a199de988941">operator()</a>()</td><td><a class="el" href="a00157.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>upgrade_to_writer</b>() (defined in <a class="el" href="a00157.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a>)</td><td><a class="el" href="a00157.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a></td><td><code> [inline]</code></td></tr>
+<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="a00231.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="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00231.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="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00231.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="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00231.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="a00231.html#af34cb91b1d0f36a885a1a3432dd9af1">bucket_count</a>() const </td><td><a class="el" href="a00231.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="a00231.html#220686fe17b197eedf19dd856cd02e36">clear</a>()</td><td><a class="el" href="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00231.html#1ad413f5b666176e7669bf4c87d1ff3f">concurrent_hash_map</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00231.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="a00231.html#46b9896317662c3cfa3c876ad7592a7c">concurrent_hash_map</a>(size_type n, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00231.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="a00231.html#6fb14710893308fb47aaeee55ee30dc3">concurrent_hash_map</a>(const concurrent_hash_map &table, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00231.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="a00231.html#83c40f2053f208861b90390e12a36436">concurrent_hash_map</a>(I first, I last, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00231.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="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00231.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="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00231.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="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00231.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="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00231.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="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00231.html#6968eb6feed2df36be421df0464297af">count</a>(const Key &key) const </td><td><a class="el" href="a00231.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="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00231.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="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00231.html#61ff2e5bb44e5469366fd5295e5d0ebe">empty</a>() const </td><td><a class="el" href="a00231.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="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00231.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="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00231.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="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00231.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="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00231.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="a00231.html#f27802b3a8d1863c29e743e9c6b4e870">erase</a>(const Key &key)</td><td><a class="el" href="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00231.html#e698ef3d70b2d1a29a7a5551784d3653">erase</a>(const_accessor &item_accessor)</td><td><a class="el" href="a00231.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="a00231.html#5f12d150d421420965db07368666a84f">erase</a>(accessor &item_accessor)</td><td><a class="el" href="a00231.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="a00231.html#0c964214eb38f54603aa75fdff6d2709">exclude</a>(const_accessor &item_accessor)</td><td><a class="el" href="a00231.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="a00231.html#2afcc33dade7bb24e008d60c0df38230">find</a>(const_accessor &result, const Key &key) const </td><td><a class="el" href="a00231.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="a00231.html#7bc475d1968f7f0af3d736d7e8a0d7df">find</a>(accessor &result, const Key &key)</td><td><a class="el" href="a00231.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="a00231.html#6cbcacb4a256a85bf89576c101373ca7">get_allocator</a>() const </td><td><a class="el" href="a00231.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="a00231.html#47fe0e60151a9bd7a444db827772a4e6">insert</a>(const_accessor &result, const Key &key)</td><td><a class="el" href="a00231.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="a00231.html#54e0955ecd11575b4c07166838a72893">insert</a>(accessor &result, const Key &key)</td><td><a class="el" href="a00231.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="a00231.html#091efd2d12fdad4fe9e54d9629a9dfc3">insert</a>(const_accessor &result, const value_type &value)</td><td><a class="el" href="a00231.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="a00231.html#39183d78d6e8425917555ab542ab92de">insert</a>(accessor &result, const value_type &value)</td><td><a class="el" href="a00231.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="a00231.html#3f121a316af8135de476a30fae6d7c07">insert</a>(const value_type &value)</td><td><a class="el" href="a00231.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="a00231.html#1dd37fad87e561151ba1e242ca94bcc1">insert</a>(I first, I last)</td><td><a class="el" href="a00231.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="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00231.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="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00231.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="a00231.html#72c9c9e9655fcf096f5f0ed9c8ba6669">internal_copy</a>(const concurrent_hash_map &source)</td><td><a class="el" href="a00231.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="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00231.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="a00231.html#8f5373b8e1864619d1ffcf3bf3f1f13d">internal_equal_range</a>(const Key &key, I end) const </td><td><a class="el" href="a00231.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="a00231.html#2f76ed101a0ccc8875b846c2f747897e">internal_fast_find</a>(const Key &key) const </td><td><a class="el" href="a00231.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="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00231.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="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00231.html#3f3413264a99174a224ef96f6c4ea769">lookup</a>(bool op_insert, const Key &key, const T *t, const_accessor *result, bool write)</td><td><a class="el" href="a00231.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="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00231.html#2bce57fe9b594abe1e6d2568aea8b357">max_size</a>() const </td><td><a class="el" href="a00231.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="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00231.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="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00231.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="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00231.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="a00231.html#088d1aaccc816884a49e38f7065622c8">operator=</a>(const concurrent_hash_map &table)</td><td><a class="el" href="a00231.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="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00231.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="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00231.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="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00231.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="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00231.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="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00231.html#94758113d8993cfe5afdf2d63a728869">rehash</a>(size_type n=0)</td><td><a class="el" href="a00231.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="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00231.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="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00231.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="a00231.html#6aa56a8b5a25e61a97fa0b54fe2b5659">size</a>() const </td><td><a class="el" href="a00231.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="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00231.html#076f8d9e16110aac5f558777aa744eb6">swap</a>(concurrent_hash_map &table)</td><td><a class="el" href="a00231.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="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00231.html#2aa8e2d28d5af1284cf78d20a9c22731">~concurrent_hash_map</a>()</td><td><a class="el" href="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00016.html b/doc/html/a00016.html
deleted file mode 100644
index c381134..0000000
--- a/doc/html/a00016.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::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor Member List</h1>This is the complete list of members for <a class="el" href="a00158.html">tbb::interface4::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="a00158.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>)</td><td><a class="el" href="a00158.html">tbb::interface4::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="a00158.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>)</td><td><a class="el" href="a00158.html">tbb::interface4::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="a00158.html#a9ead65cca68d4c49c7ef64d7899a4c8">const_accessor</a>()</td><td><a class="el" href="a00158.html">tbb::interface4::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="a00158.html#5cce3104cb0a52e08d2131370871c614">empty</a>() const </td><td><a class="el" href="a00158.html">tbb::interface4::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="a00158.html#30f31106840700a4c3664b9cb1c31ca7">operator *</a>() const </td><td><a class="el" href="a00158.html">tbb::interface4::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="a00158.html#3d03a48ecb8cd9549bd8be64b09c9b0d">operator-></a>() const </td><td><a class="el" href="a00158.html">tbb::interface4::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="a00158.html#d5ce4f88d8870290238a8ad621e6f270">release</a>()</td><td><a class="el" href="a00158.html">tbb::interface4::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="a00158.html#48647ca0d79c1233b997f5768403c926">value_type</a> typedef</td><td><a class="el" href="a00158.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00158.html#752b0c1ec74b94786403a75e42917d01">~const_accessor</a>()</td><td><a class="el" href="a00158.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [inline]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the 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 025e56c..efeeecd 100644
--- a/doc/html/a00017.html
+++ b/doc/html/a00017.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::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor Member List</h1>This is the complete list of members for <a class="el" href="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00158.html#a9ead65cca68d4c49c7ef64d7899a4c8">const_accessor</a>()</td><td><a class="el" href="a00158.html">tbb::interface4::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="a00158.html#5cce3104cb0a52e08d2131370871c614">empty</a>() const </td><td><a class="el" href="a00158.html">tbb::interface4::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="a00156.html#e8938f0cd1211e88a1d73527ed3636c4">operator *</a>() const </td><td><a class="el" href="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00156.html#fcebc32c020202cc37e60eadef157569">operator-></a>() const </td><td><a class="el" href="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00158.html#d5ce4f88d8870290238a8ad621e6f270">release</a>()</td><td><a class="el" href="a00158.html">tbb::interface4::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="a00156.html#49eec74f272bab187d176c0d9d16a7fe">value_type</a> typedef</td><td><a class="el" href="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00158.html#752b0c1ec74b94786403a75e42917d01">~const_accessor</a>()</td><td><a class="el" href="a00158.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [inline]</code></td></tr>
+<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="a00233.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="a00233.html#d11c77f4d70a94d4fb344492bbf18007">acquire</a>(concurrent_hash_map *base, const hashcode_t h, bool writer=false)</td><td><a class="el" href="a00233.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="a00233.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a>)</td><td><a class="el" href="a00233.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="a00233.html#07d958f151a0eaa92f50fd56ad6440e2">is_writer</a>()</td><td><a class="el" href="a00233.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="a00233.html#fa6314b861c574f86ed189b124cf5853">operator()</a>()</td><td><a class="el" href="a00233.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-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00018.html b/doc/html/a00018.html
index 65bd878..59becc6 100644
--- a/doc/html/a00018.html
+++ b/doc/html/a00018.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="a00159.html">tbb::strict_ppl::concurrent_queue< T, A ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00159.html#5a3956341728eaa558d8827063718cac">allocator_type</a> typedef</td><td><a class="el" href="a00159.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00159.html#c32e8e84c0524155133b4aae32d2a827">clear</a>()</td><td><a class="el" href="a00159.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00159.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00159.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="a00159.html#25209656c84f2f9b030e2f9162713341">concurrent_queue</a>(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00159.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00159.html#8a6b98ea11a867db8ac868f0113ca429">concurrent_queue</a>(const concurrent_queue &src, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00159.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="a00159.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00159.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00159.html#4d48e7ff93f81636bca2c74f7da34750">const_reference</a> typedef</td><td><a class="el" href="a00159.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00159.html#068576d16c7e4e05d52f9db7a45b5b65">difference_type</a> typedef</td><td><a class="el" href="a00159.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00159.html#f3f6fce0cfa2d581d6f3b47e0613ad64">empty</a>() const </td><td><a class="el" href="a00159.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00159.html#f034f70caef445fe8abc9113ec926a8d">get_allocator</a>() const </td><td><a class="el" href="a00159.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="a00159.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00159.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="a00159.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00159.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00159.html#73c47563ffcc4c2f6452f25a04ebe2e2">push</a>(const T &source)</td><td><a class="el" href="a00159.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00159.html#a8d725c50a9834bb7af5b67c0aff92b8">reference</a> typedef</td><td><a class="el" href="a00159.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00159.html#8fc30e93f8342a1960357f71e4fe8a2b">size_type</a> typedef</td><td><a class="el" href="a00159.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00159.html#ae31ca0db34ef96ef1e74aa0d28c95f8">try_pop</a>(T &result)</td><td><a class="el" href="a00159.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="a00159.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00159.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="a00159.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00159.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="a00159.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00159.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="a00159.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00159.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00159.html#eaa35a5274606779802e9a669a706260">unsafe_size</a>() const </td><td><a class="el" href="a00159.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00159.html#682c3978d5cb0620000994f11c44a476">value_type</a> typedef</td><td><a class="el" href="a00159.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00159.html#830b33753d6b149c366344e29b2edd8c">~concurrent_queue</a>()</td><td><a class="el" href="a00159.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="a00234.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="a00234.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>)</td><td><a class="el" href="a00234.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="a00234.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>)</td><td><a class="el" href="a00234.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="a00234.html#27399c613eb1aecd4660803955dda09d">const_accessor</a>()</td><td><a class="el" href="a00234.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="a00234.html#84c3080d0c6124d55c8bb4cf6055e65f">empty</a>() const </td><td><a class="el" href="a00234.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="a00234.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>)</td><td><a class="el" href="a00234.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="a00234.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>)</td><td><a class="el" href="a00234.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="a00234.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>)</td><td><a class="el" href="a00234.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="a00234.html#9411df8197ceb4881ec4c7368a0a7f88">operator *</a>() const </td><td><a class="el" href="a00234.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="a00234.html#3d03a48ecb8cd9549bd8be64b09c9b0d">operator-></a>() const </td><td><a class="el" href="a00234.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="a00234.html#7db006d41b49dc5f1716a913769d4698">release</a>()</td><td><a class="el" href="a00234.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="a00234.html#a8e50238483ba451363dccebd981d346">value_type</a> typedef</td><td><a class="el" href="a00234.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="a00234.html#928769b139d53427e7075c1f86148e4c">~const_accessor</a>()</td><td><a class="el" href="a00234.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-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00019.html b/doc/html/a00019.html
index a419489..53e07de 100644
--- a/doc/html/a00019.html
+++ b/doc/html/a00019.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="a00154.html">tbb::concurrent_bounded_queue< T, A ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00154.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> typedef</td><td><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#b2888b3e4e837d7e03f2c731963a402b">capacity</a>() const </td><td><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#90b31e2954c6e4596c7900435a5f4bc1">clear</a>()</td><td><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#7b7fb414d2eaa8a7f5d68fc4cd63ac50">concurrent_bounded_queue</a>(const concurrent_bounded_queue &src, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#a5e04dcd7db9fd9b583b4e7df832246a">concurrent_bounded_queue</a>(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00154.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="a00154.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#796713d0b9ba93a4721cbe13e4474068">const_reference</a> typedef</td><td><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#4b45c91297e69515d83d5eef85ae1f49">difference_type</a> typedef</td><td><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#f64924f2ee9225c368a270fc3c394db9">empty</a>() const </td><td><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#415eb87e53b1c6a266de06ecbc490d16">get_allocator</a>() const </td><td><a class="el" href="a00154.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="a00154.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00154.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="a00154.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#41f4c6bd7a82ab070e840bbf81b0b123">pop</a>(T &destination)</td><td><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#ceb08c743b11ba88c878e73fff8af20b">push</a>(const T &source)</td><td><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#dcd44ca6a88c0dc7a847a47a10811f0c">reference</a> typedef</td><td><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#f3c6c934f85fd02aedbc83a16943193b">set_capacity</a>(size_type new_capacity)</td><td><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#7dc14d1a579a4cccda9f857585e1768d">size</a>() const </td><td><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> typedef</td><td><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#0ca487019bbb00a196442aff78a1e4f7">try_pop</a>(T &destination)</td><td><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#2bd6232531279fb3ccbd296bea23066b">try_push</a>(const T &source)</td><td><a class="el" href="a00154.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="a00154.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00154.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="a00154.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00154.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="a00154.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00154.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="a00154.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#98245517a931e5893f6601e66c51fc75">value_type</a> typedef</td><td><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#acaf5b510dc0dfc7780b8c956cf773cf">~concurrent_bounded_queue</a>()</td><td><a class="el" href="a00154.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="a00232.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="a00234.html#27399c613eb1aecd4660803955dda09d">const_accessor</a>()</td><td><a class="el" href="a00234.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="a00234.html#84c3080d0c6124d55c8bb4cf6055e65f">empty</a>() const </td><td><a class="el" href="a00234.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="a00234.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>)</td><td><a class="el" href="a00234.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="a00234.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>)</td><td><a class="el" href="a00234.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="a00234.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>)</td><td><a class="el" href="a00234.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="a00232.html#170280ea807a22e742095de3e8c5ea38">operator *</a>() const </td><td><a class="el" href="a00232.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="a00232.html#a807920cdffe3ec5c5e282b4d1ff92a2">operator-></a>() const </td><td><a class="el" href="a00232.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="a00234.html#7db006d41b49dc5f1716a913769d4698">release</a>()</td><td><a class="el" href="a00234.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="a00232.html#0b648be7a95a8fb2971042c15eb112c1">value_type</a> typedef</td><td><a class="el" href="a00232.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00234.html#928769b139d53427e7075c1f86148e4c">~const_accessor</a>()</td><td><a class="el" href="a00234.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-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00020.html b/doc/html/a00020.html
new file mode 100644
index 0000000..8f0af58
--- /dev/null
+++ b/doc/html/a00020.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::interface5::concurrent_priority_queue< T, Compare, A > Member List</h1>This is the complete list of members for <a class="el" href="a00235.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00235.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a> typedef</td><td><a class="el" href="a00235.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00235.html#e5d6a0aca1579ecebb716bbe53514963">capacity</a>() const </td><td><a class="el" href="a00235.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="a00235.html#0bdcdf7cde9fd369edca845bec34ca94">clear</a>()</td><td><a class="el" href="a00235.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="a00235.html#eefa40599afe00ea393897d8f5662e65">concurrent_priority_queue</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00235.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="a00235.html#4555b4a55415a70024c4004b51e9f385">concurrent_priority_queue</a>(size_type init_capacity, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00235.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="a00235.html#9147cb4207017c260a0c3929c12cd40f">concurrent_priority_queue</a>(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00235.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="a00235.html#509419e320f200456d89dc54a65140b3">concurrent_priority_queue</a>(const concurrent_priority_queue &src)</td><td><a class="el" href="a00235.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td><code> [inline, explicit]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>concurrent_priority_queue</b>(const concurrent_priority_queue &src, const allocator_type &a) (defined in <a class="el" href="a00235.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>)</td><td><a class="el" href="a00235.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="a00235.html#a4ded8601a434098605be0dcc4febc60">const_reference</a> typedef</td><td><a class="el" href="a00235.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00235.html#77399bc76b3ecd60e33f7e35a5becd87">difference_type</a> typedef</td><td><a class="el" href="a00235.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00235.html#317c508fa92df218be5d014c26c09bb7">empty</a>() const </td><td><a class="el" href="a00235.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="a00235.html#d545d444fb0d16148f9b61fd89f9a337">get_allocator</a>() const </td><td><a class="el" href="a00235.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="a00235.html#2ab7f7808891027ac0f0f5b3a4be51e9">operator=</a>(const concurrent_priority_queue &src)</td><td><a class="el" href="a00235.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="a00235.html#d905af7b8f6defff562f5ae9c3275763">push</a>(const_reference elem)</td><td><a class="el" href="a00235.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="a00235.html#5804b3c708ef4e50d603f918ef2b9e58">reference</a> typedef</td><td><a class="el" href="a00235.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00235.html#e7c59f011c4cca83ff210aefe7c9d868">reserve</a>(size_type new_cap)</td><td><a class="el" href="a00235.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="a00235.html#28d113288fc7e0c04c9053ec7de61368">shrink_to_fit</a>()</td><td><a class="el" href="a00235.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="a00235.html#8b2ae25c61338c6fd59e94fe09822ba5">size</a>() const </td><td><a class="el" href="a00235.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="a00235.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> typedef</td><td><a class="el" href="a00235.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00235.html#0ecdc6a04aa259374425d424ca2a6082">swap</a>(concurrent_priority_queue &q)</td><td><a class="el" href="a00235.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="a00235.html#e036461a29cc40902a2bb79abf9f5146">try_pop</a>(reference elem)</td><td><a class="el" href="a00235.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="a00235.html#7c611a6b5b8f94b0e7f2afc97e31efb1">value_type</a> typedef</td><td><a class="el" href="a00235.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.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the 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
deleted file mode 100644
index 79a95ba..0000000
--- a/doc/html/a00021.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="a00160.html">tbb::deprecated::concurrent_queue< T, A ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00154.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> typedef</td><td><a class="el" href="a00154.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="a00160.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00160.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="a00160.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00160.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#b2888b3e4e837d7e03f2c731963a402b">capacity</a>() const </td><td><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#90b31e2954c6e4596c7900435a5f4bc1">clear</a>()</td><td><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#7b7fb414d2eaa8a7f5d68fc4cd63ac50">concurrent_bounded_queue</a>(const concurrent_bounded_queue &src, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#a5e04dcd7db9fd9b583b4e7df832246a">concurrent_bounded_queue</a>(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00160.html#aaf19bd7337b72f3131ece60f7315ef7">concurrent_queue</a>(const A &a=A())</td><td><a class="el" href="a00160.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00160.html#fc092b9082f233482f3513fc3bb670f7">concurrent_queue</a>(const concurrent_queue &src, const A &a=A())</td><td><a class="el" href="a00160.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00160.html#9102b897776bd2d9e908e6604ff16b5f">concurrent_queue</a>(InputIterator b, InputIterator e, const A &a=A())</td><td><a class="el" href="a00160.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="a00160.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00160.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#796713d0b9ba93a4721cbe13e4474068">const_reference</a> typedef</td><td><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#4b45c91297e69515d83d5eef85ae1f49">difference_type</a> typedef</td><td><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#f64924f2ee9225c368a270fc3c394db9">empty</a>() const </td><td><a class="el" href="a00154.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="a00160.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00160.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="a00160.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00160.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#415eb87e53b1c6a266de06ecbc490d16">get_allocator</a>() const </td><td><a class="el" href="a00154.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="a00160.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00160.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="a00160.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00160.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#41f4c6bd7a82ab070e840bbf81b0b123">pop</a>(T &destination)</td><td><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00160.html#48da3536245318af6cb5fd58bac78039">pop_if_present</a>(T &destination)</td><td><a class="el" href="a00160.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#ceb08c743b11ba88c878e73fff8af20b">push</a>(const T &source)</td><td><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00160.html#7c45561bafe71107d09b2bc1b8f4e681">push_if_not_full</a>(const T &source)</td><td><a class="el" href="a00160.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#dcd44ca6a88c0dc7a847a47a10811f0c">reference</a> typedef</td><td><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#f3c6c934f85fd02aedbc83a16943193b">set_capacity</a>(size_type new_capacity)</td><td><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#7dc14d1a579a4cccda9f857585e1768d">size</a>() const </td><td><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> typedef</td><td><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#0ca487019bbb00a196442aff78a1e4f7">try_pop</a>(T &destination)</td><td><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#2bd6232531279fb3ccbd296bea23066b">try_push</a>(const T &source)</td><td><a class="el" href="a00154.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="a00154.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00154.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="a00154.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00154.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="a00154.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00154.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="a00154.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#98245517a931e5893f6601e66c51fc75">value_type</a> typedef</td><td><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#acaf5b510dc0dfc7780b8c956cf773cf">~concurrent_bounded_queue</a>()</td><td><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00024.html b/doc/html/a00024.html
new file mode 100644
index 0000000..efbbad4
--- /dev/null
+++ b/doc/html/a00024.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="a00236.html">tbb::strict_ppl::concurrent_queue< T, A ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00236.html#5a3956341728eaa558d8827063718cac">allocator_type</a> typedef</td><td><a class="el" href="a00236.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00236.html#c32e8e84c0524155133b4aae32d2a827">clear</a>()</td><td><a class="el" href="a00236.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00236.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00236.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="a00236.html#25209656c84f2f9b030e2f9162713341">concurrent_queue</a>(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00236.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00236.html#8a6b98ea11a867db8ac868f0113ca429">concurrent_queue</a>(const concurrent_queue &src, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00236.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="a00236.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00236.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00236.html#4d48e7ff93f81636bca2c74f7da34750">const_reference</a> typedef</td><td><a class="el" href="a00236.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00236.html#068576d16c7e4e05d52f9db7a45b5b65">difference_type</a> typedef</td><td><a class="el" href="a00236.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00236.html#f3f6fce0cfa2d581d6f3b47e0613ad64">empty</a>() const </td><td><a class="el" href="a00236.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00236.html#f034f70caef445fe8abc9113ec926a8d">get_allocator</a>() const </td><td><a class="el" href="a00236.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="a00236.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00236.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="a00236.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00236.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00236.html#73c47563ffcc4c2f6452f25a04ebe2e2">push</a>(const T &source)</td><td><a class="el" href="a00236.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00236.html#a8d725c50a9834bb7af5b67c0aff92b8">reference</a> typedef</td><td><a class="el" href="a00236.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00236.html#8fc30e93f8342a1960357f71e4fe8a2b">size_type</a> typedef</td><td><a class="el" href="a00236.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00236.html#ae31ca0db34ef96ef1e74aa0d28c95f8">try_pop</a>(T &result)</td><td><a class="el" href="a00236.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="a00236.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00236.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="a00236.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00236.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="a00236.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00236.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="a00236.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00236.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00236.html#eaa35a5274606779802e9a669a706260">unsafe_size</a>() const </td><td><a class="el" href="a00236.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00236.html#682c3978d5cb0620000994f11c44a476">value_type</a> typedef</td><td><a class="el" href="a00236.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00236.html#830b33753d6b149c366344e29b2edd8c">~concurrent_queue</a>()</td><td><a class="el" href="a00236.html">tbb::strict_ppl::concurrent_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/a00025.html b/doc/html/a00025.html
new file mode 100644
index 0000000..9af2e9f
--- /dev/null
+++ b/doc/html/a00025.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::concurrent_bounded_queue< T, A > Member List</h1>This is the complete list of members for <a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00230.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> typedef</td><td><a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#b2888b3e4e837d7e03f2c731963a402b">capacity</a>() const </td><td><a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#90b31e2954c6e4596c7900435a5f4bc1">clear</a>()</td><td><a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#7b7fb414d2eaa8a7f5d68fc4cd63ac50">concurrent_bounded_queue</a>(const concurrent_bounded_queue &src, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#a5e04dcd7db9fd9b583b4e7df832246a">concurrent_bounded_queue</a>(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00230.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="a00230.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#796713d0b9ba93a4721cbe13e4474068">const_reference</a> typedef</td><td><a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#4b45c91297e69515d83d5eef85ae1f49">difference_type</a> typedef</td><td><a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#f64924f2ee9225c368a270fc3c394db9">empty</a>() const </td><td><a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#415eb87e53b1c6a266de06ecbc490d16">get_allocator</a>() const </td><td><a class="el" href="a00230.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="a00230.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00230.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="a00230.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#41f4c6bd7a82ab070e840bbf81b0b123">pop</a>(T &destination)</td><td><a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#ceb08c743b11ba88c878e73fff8af20b">push</a>(const T &source)</td><td><a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#dcd44ca6a88c0dc7a847a47a10811f0c">reference</a> typedef</td><td><a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#f3c6c934f85fd02aedbc83a16943193b">set_capacity</a>(size_type new_capacity)</td><td><a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#7dc14d1a579a4cccda9f857585e1768d">size</a>() const </td><td><a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> typedef</td><td><a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#0ca487019bbb00a196442aff78a1e4f7">try_pop</a>(T &destination)</td><td><a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#2bd6232531279fb3ccbd296bea23066b">try_push</a>(const T &source)</td><td><a class="el" href="a00230.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="a00230.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00230.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="a00230.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00230.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="a00230.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00230.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="a00230.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#98245517a931e5893f6601e66c51fc75">value_type</a> typedef</td><td><a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#acaf5b510dc0dfc7780b8c956cf773cf">~concurrent_bounded_queue</a>()</td><td><a class="el" href="a00230.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/a00026.html b/doc/html/a00026.html
deleted file mode 100644
index daddd0b..0000000
--- a/doc/html/a00026.html
+++ /dev/null
@@ -1,102 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>Member List</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
-    <li><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="annotated.html"><span>Class List</span></a></li>
-    <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-    <li><a href="functions.html"><span>Class Members</span></a></li>
-  </ul></div>
-<h1>tbb::concurrent_vector< T, A > Member List</h1>This is the complete list of members for <a class="el" href="a00161.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="a00161.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#423e5aa15e0e3309ad86d026fd85f6f6">assign</a>(size_type n, const_reference t)</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#93a06b3112cb804f42f40efb5e7387b4">assign</a>(I first, I last)</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#0c073ca43e787c7cbf7b0e26d2221748">at</a>(size_type index)</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#23e14a38af748edff96a7adc3a0f1c58">at</a>(size_type index) const </td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#41ce48d6015a1a2812d41cf620ec3476">back</a>()</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#bd518e204107d07fd08d0ec5bdfd383d">back</a>() const </td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#730b23a251ecb6d37f692fb22f38e029">begin</a>()</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#78a06182276ff758788d4c0623ae0d71">begin</a>() const </td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#3ed6b9ae7217af5103d974045b6f5cd5">capacity</a>() const </td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#f88fcf1c920693c39bd9709db33c199f">cbegin</a>() const </td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#0c15a5d0f1cf75d687dabba07da1d46b">cend</a>() const </td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#26f937a359a66b6aae904c3cd9a3c444">clear</a>()</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#1693d1da41b1a8235871be9c6633be35">compact</a>()</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#2c8ca9cabfcd30ad5943324c853664b5">concurrent_vector</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#dd8a200b99a8088435a37934b58fe335">concurrent_vector</a>(const concurrent_vector &vector, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#64432f13f7b29bfe4acfb5568f34f3a8">concurrent_vector</a>(const concurrent_vector< T, M > &vector, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#2a2e261dfe1cab3f73f7b1a94137cfca">concurrent_vector</a>(size_type n)</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#3883a8a908b44e249a57f454de3f55d8">concurrent_vector</a>(size_type n, const_reference t, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#4450de83c5862ea4bcd9443fd7e67419">concurrent_vector</a>(I first, I last, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00161.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="a00161.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00161.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="a00161.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00161.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="a00161.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00161.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="a00161.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00161.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="a00161.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00161.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="a00161.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#db78a1d28c9c966050e8a2926d834a33">crbegin</a>() const </td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#fff9cece89438587997ebedf93c5e962">crend</a>() const </td><td><a class="el" href="a00161.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="a00161.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#c6426cb93cf20d3af40f3c90f1f0481a">empty</a>() const </td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#c0b51160e5a764982ec97a455f94f2c6">end</a>()</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#1e6aa764ce5a1cbd24526f68bc0a2f6b">end</a>() const </td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#15181759c0bfa2ddce5d10c7550e0002">front</a>()</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#502615a858eb9fa0390ee59169065e90">front</a>() const </td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#2fdba8e90de6a4d2300222236d46758e">get_allocator</a>() const </td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#30484e3959892fd5392fa93c873c31f0">grow_by</a>(size_type delta)</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#c8177b1865270ea68aa1ab9148e5e35e">grow_by</a>(size_type delta)</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#38274ab3f772ecba600c7daca7690102">grow_by</a>(size_type delta, const_reference t)</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#473a59a4c9308b93411b898b3110d26c">grow_by</a>(size_type delta, const_reference t)</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#47fe588214dd5fa06ab6e8ab78d83874">grow_to_at_least</a>(size_type n)</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#a7e3b67c8ccab16d0aecc80899ae799d">grow_to_at_least</a>(size_type n)</td><td><a class="el" href="a00161.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="a00161.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00161.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="a00161.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00161.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="a00161.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#2c248a017f0576df3e7cd99627836fd6">max_size</a>() const </td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#691f0f3cda3e489c37a657016e375eaf">operator=</a>(const concurrent_vector &vector)</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#19f4ab88a01b0fd056af3bba463e7bd6">operator=</a>(const concurrent_vector< T, M > &vector)</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#4c52f2950bb1832886bd4458eb09d7eb">operator[]</a>(size_type index)</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#c6fade5c732cc95274d1d8277ea619d1">operator[]</a>(size_type index) const </td><td><a class="el" href="a00161.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="a00161.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(const_reference item) iterator push_back(const _reference item)</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#a4c6ffff3bf08b92939aa2fc516edfba">range</a>(size_t grainsize=1)</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#3d09ccfb581b879ae64203741035e193">range</a>(size_t grainsize=1) const </td><td><a class="el" href="a00161.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="a00161.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#5e220926d09236d98f04fe0721e5f9a1">rbegin</a>()</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#9f9c103e18d5f212703805354074ad44">rbegin</a>() const </td><td><a class="el" href="a00161.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="a00161.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#290119a4eb43cd6a9e98fa17016ba3c2">rend</a>()</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#d438b9b32ea3a8ffb703015b6dce055b">rend</a>() const </td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#5a0ce05026994b010018f72cfdeb72c1">reserve</a>(size_type n)</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#8dfb0cb0eef96d440b4dcf801807a718">resize</a>(size_type n)</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#98ce6b2c6d2622f0c030b46dfac3880c">resize</a>(size_type n, const_reference t)</td><td><a class="el" href="a00161.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="a00161.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00161.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="a00161.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#03c6f4cf66532bf4cc907ee738a9a186">shrink_to_fit</a>()</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>() const </td><td><a class="el" href="a00161.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="a00161.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#96c9c4bd968ed3edb8dd276854d2dae0">swap</a>(concurrent_vector &vector)</td><td><a class="el" href="a00161.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="a00161.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#da2444b28bb840d38f60d0030333a5fc">~concurrent_vector</a>()</td><td><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00027.html b/doc/html/a00027.html
new file mode 100644
index 0000000..73846d5
--- /dev/null
+++ b/doc/html/a00027.html
@@ -0,0 +1,68 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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="a00237.html">tbb::deprecated::concurrent_queue< T, A ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00230.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> typedef</td><td><a class="el" href="a00230.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="a00237.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00237.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="a00237.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#b2888b3e4e837d7e03f2c731963a402b">capacity</a>() const </td><td><a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#90b31e2954c6e4596c7900435a5f4bc1">clear</a>()</td><td><a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#7b7fb414d2eaa8a7f5d68fc4cd63ac50">concurrent_bounded_queue</a>(const concurrent_bounded_queue &src, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#a5e04dcd7db9fd9b583b4e7df832246a">concurrent_bounded_queue</a>(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00237.html#aaf19bd7337b72f3131ece60f7315ef7">concurrent_queue</a>(const A &a=A())</td><td><a class="el" href="a00237.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00237.html#fc092b9082f233482f3513fc3bb670f7">concurrent_queue</a>(const concurrent_queue &src, const A &a=A())</td><td><a class="el" href="a00237.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00237.html#9102b897776bd2d9e908e6604ff16b5f">concurrent_queue</a>(InputIterator b, InputIterator e, const A &a=A())</td><td><a class="el" href="a00237.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="a00237.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#796713d0b9ba93a4721cbe13e4474068">const_reference</a> typedef</td><td><a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#4b45c91297e69515d83d5eef85ae1f49">difference_type</a> typedef</td><td><a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#f64924f2ee9225c368a270fc3c394db9">empty</a>() const </td><td><a class="el" href="a00230.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="a00237.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00237.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="a00237.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#415eb87e53b1c6a266de06ecbc490d16">get_allocator</a>() const </td><td><a class="el" href="a00230.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="a00237.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00237.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="a00237.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#41f4c6bd7a82ab070e840bbf81b0b123">pop</a>(T &destination)</td><td><a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00237.html#48da3536245318af6cb5fd58bac78039">pop_if_present</a>(T &destination)</td><td><a class="el" href="a00237.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#ceb08c743b11ba88c878e73fff8af20b">push</a>(const T &source)</td><td><a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00237.html#7c45561bafe71107d09b2bc1b8f4e681">push_if_not_full</a>(const T &source)</td><td><a class="el" href="a00237.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#dcd44ca6a88c0dc7a847a47a10811f0c">reference</a> typedef</td><td><a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#f3c6c934f85fd02aedbc83a16943193b">set_capacity</a>(size_type new_capacity)</td><td><a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#7dc14d1a579a4cccda9f857585e1768d">size</a>() const </td><td><a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> typedef</td><td><a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#0ca487019bbb00a196442aff78a1e4f7">try_pop</a>(T &destination)</td><td><a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#2bd6232531279fb3ccbd296bea23066b">try_push</a>(const T &source)</td><td><a class="el" href="a00230.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="a00230.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00230.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="a00230.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00230.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="a00230.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00230.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="a00230.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#98245517a931e5893f6601e66c51fc75">value_type</a> typedef</td><td><a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00230.html#acaf5b510dc0dfc7780b8c956cf773cf">~concurrent_bounded_queue</a>()</td><td><a class="el" href="a00230.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
deleted file mode 100644
index 642e3d7..0000000
--- a/doc/html/a00031.html
+++ /dev/null
@@ -1,66 +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::enumerable_thread_specific< T, Allocator, ETS_key_type > Member List</h1>This is the complete list of members for <a class="el" href="a00163.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="a00163.html#3c03eb40955b933b01987222722ac4bd">allocator_type</a> typedef</td><td><a class="el" href="a00163.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00163.html#01d7baf8e913ab2819e97917a2ac795f">begin</a>()</td><td><a class="el" href="a00163.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="a00163.html#84afb3906a39e399cde1c950d6351300">begin</a>() const </td><td><a class="el" href="a00163.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="a00163.html#a8764176d4b6014c5d65f1051851abc8">clear</a>()</td><td><a class="el" href="a00163.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="a00163.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00163.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="a00163.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00163.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="a00163.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00163.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="a00163.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00163.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="a00163.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00163.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="a00163.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00163.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="a00163.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00163.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00163.html#72595886d0ac8fd0543f90038570510d">empty</a>() const </td><td><a class="el" href="a00163.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="a00163.html#2456ff88252fc921b01cd8907628a4ee">end</a>()</td><td><a class="el" href="a00163.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="a00163.html#cb448bb4977ce366ceb7344085cc7050">end</a>() const </td><td><a class="el" href="a00163.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="a00163.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00163.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="a00163.html#0cfa3a5c8f2be3bbf313d93b1fa8cdb3">enumerable_thread_specific</a>()</td><td><a class="el" href="a00163.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="a00163.html#8d4b456ff9d7b289c73254eccc11db45">enumerable_thread_specific</a>(Finit finit)</td><td><a class="el" href="a00163.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="a00163.html#7bce6829981c9efe3f59cae2355e383e">enumerable_thread_specific</a>(const T &exemplar)</td><td><a class="el" href="a00163.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="a00163.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00163.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="a00163.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00163.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="a00163.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00163.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00163.html#c8d5265ccbd5e4485996b3f3baaa5ba1">local</a>()</td><td><a class="el" href="a00163.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="a00163.html#7dc79058d2832f7447de8e691c3455ea">local</a>(bool &exists)</td><td><a class="el" href="a00163.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="a00163.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00163.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="a00163.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00163.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="a00163.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00163.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00163.html#b22c54990b2362cd93c1a8f73de140bc">range</a>(size_t grainsize=1)</td><td><a class="el" href="a00163.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="a00163.html#3b068000cf4dbf9b40f8bb7e3fc53e0b">range</a>(size_t grainsize=1) const </td><td><a class="el" href="a00163.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="a00163.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00163.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="a00163.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00163.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00163.html#33fd6593da1ed14340f10f67d5a69130">size</a>() const </td><td><a class="el" href="a00163.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="a00163.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00163.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="a00163.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00163.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00163.html#5a7907d9e3e5b18e7a7b55211ef3213f">~enumerable_thread_specific</a>()</td><td><a class="el" href="a00163.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-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00032.html b/doc/html/a00032.html
new file mode 100644
index 0000000..ff359bb
--- /dev/null
+++ b/doc/html/a00032.html
@@ -0,0 +1,102 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<h1>tbb::concurrent_vector< T, A > Member List</h1>This is the complete list of members for <a class="el" href="a00238.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="a00238.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#423e5aa15e0e3309ad86d026fd85f6f6">assign</a>(size_type n, const_reference t)</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#93a06b3112cb804f42f40efb5e7387b4">assign</a>(I first, I last)</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#0c073ca43e787c7cbf7b0e26d2221748">at</a>(size_type index)</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#23e14a38af748edff96a7adc3a0f1c58">at</a>(size_type index) const </td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#41ce48d6015a1a2812d41cf620ec3476">back</a>()</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#bd518e204107d07fd08d0ec5bdfd383d">back</a>() const </td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#730b23a251ecb6d37f692fb22f38e029">begin</a>()</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#78a06182276ff758788d4c0623ae0d71">begin</a>() const </td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#3ed6b9ae7217af5103d974045b6f5cd5">capacity</a>() const </td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#f88fcf1c920693c39bd9709db33c199f">cbegin</a>() const </td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#0c15a5d0f1cf75d687dabba07da1d46b">cend</a>() const </td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#26f937a359a66b6aae904c3cd9a3c444">clear</a>()</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#1693d1da41b1a8235871be9c6633be35">compact</a>()</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#2c8ca9cabfcd30ad5943324c853664b5">concurrent_vector</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#dd8a200b99a8088435a37934b58fe335">concurrent_vector</a>(const concurrent_vector &vector, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#64432f13f7b29bfe4acfb5568f34f3a8">concurrent_vector</a>(const concurrent_vector< T, M > &vector, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#2a2e261dfe1cab3f73f7b1a94137cfca">concurrent_vector</a>(size_type n)</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#3883a8a908b44e249a57f454de3f55d8">concurrent_vector</a>(size_type n, const_reference t, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#4450de83c5862ea4bcd9443fd7e67419">concurrent_vector</a>(I first, I last, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00238.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="a00238.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00238.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="a00238.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00238.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="a00238.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00238.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="a00238.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00238.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="a00238.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00238.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="a00238.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#db78a1d28c9c966050e8a2926d834a33">crbegin</a>() const </td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#fff9cece89438587997ebedf93c5e962">crend</a>() const </td><td><a class="el" href="a00238.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="a00238.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#c6426cb93cf20d3af40f3c90f1f0481a">empty</a>() const </td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#c0b51160e5a764982ec97a455f94f2c6">end</a>()</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#1e6aa764ce5a1cbd24526f68bc0a2f6b">end</a>() const </td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#15181759c0bfa2ddce5d10c7550e0002">front</a>()</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#502615a858eb9fa0390ee59169065e90">front</a>() const </td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#2fdba8e90de6a4d2300222236d46758e">get_allocator</a>() const </td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#30484e3959892fd5392fa93c873c31f0">grow_by</a>(size_type delta)</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#c8177b1865270ea68aa1ab9148e5e35e">grow_by</a>(size_type delta)</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#38274ab3f772ecba600c7daca7690102">grow_by</a>(size_type delta, const_reference t)</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#473a59a4c9308b93411b898b3110d26c">grow_by</a>(size_type delta, const_reference t)</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#47fe588214dd5fa06ab6e8ab78d83874">grow_to_at_least</a>(size_type n)</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#a7e3b67c8ccab16d0aecc80899ae799d">grow_to_at_least</a>(size_type n)</td><td><a class="el" href="a00238.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="a00238.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00238.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="a00238.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00238.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="a00238.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#2c248a017f0576df3e7cd99627836fd6">max_size</a>() const </td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#691f0f3cda3e489c37a657016e375eaf">operator=</a>(const concurrent_vector &vector)</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#19f4ab88a01b0fd056af3bba463e7bd6">operator=</a>(const concurrent_vector< T, M > &vector)</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#4c52f2950bb1832886bd4458eb09d7eb">operator[]</a>(size_type index)</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#c6fade5c732cc95274d1d8277ea619d1">operator[]</a>(size_type index) const </td><td><a class="el" href="a00238.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="a00238.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(const_reference item) iterator push_back(const _reference item)</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#a4c6ffff3bf08b92939aa2fc516edfba">range</a>(size_t grainsize=1)</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#3d09ccfb581b879ae64203741035e193">range</a>(size_t grainsize=1) const </td><td><a class="el" href="a00238.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="a00238.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#5e220926d09236d98f04fe0721e5f9a1">rbegin</a>()</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#9f9c103e18d5f212703805354074ad44">rbegin</a>() const </td><td><a class="el" href="a00238.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="a00238.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#290119a4eb43cd6a9e98fa17016ba3c2">rend</a>()</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#d438b9b32ea3a8ffb703015b6dce055b">rend</a>() const </td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#5a0ce05026994b010018f72cfdeb72c1">reserve</a>(size_type n)</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#8dfb0cb0eef96d440b4dcf801807a718">resize</a>(size_type n)</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#98ce6b2c6d2622f0c030b46dfac3880c">resize</a>(size_type n, const_reference t)</td><td><a class="el" href="a00238.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="a00238.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00238.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="a00238.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#03c6f4cf66532bf4cc907ee738a9a186">shrink_to_fit</a>()</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>() const </td><td><a class="el" href="a00238.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="a00238.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#96c9c4bd968ed3edb8dd276854d2dae0">swap</a>(concurrent_vector &vector)</td><td><a class="el" href="a00238.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="a00238.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00238.html#da2444b28bb840d38f60d0030333a5fc">~concurrent_vector</a>()</td><td><a class="el" href="a00238.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.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00034.html b/doc/html/a00034.html
deleted file mode 100644
index 898dc6e..0000000
--- a/doc/html/a00034.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::mutex Member List</h1>This is the complete list of members for <a class="el" href="a00172.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="a00172.html">tbb::mutex</a>)</td><td><a class="el" href="a00172.html">tbb::mutex</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>HELD</b> enum value (defined in <a class="el" href="a00172.html">tbb::mutex</a>)</td><td><a class="el" href="a00172.html">tbb::mutex</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>INITIALIZED</b> enum value (defined in <a class="el" href="a00172.html">tbb::mutex</a>)</td><td><a class="el" href="a00172.html">tbb::mutex</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00172.html">tbb::mutex</a>)</td><td><a class="el" href="a00172.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="a00172.html">tbb::mutex</a>)</td><td><a class="el" href="a00172.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="a00172.html">tbb::mutex</a>)</td><td><a class="el" href="a00172.html">tbb::mutex</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00172.html#4470e61c24c129a0299ca6c17240adbb">lock</a>()</td><td><a class="el" href="a00172.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00172.html#05313cb77d4f85213103d4dab74ed454">mutex</a>()</td><td><a class="el" href="a00172.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="a00172.html">tbb::mutex</a>)</td><td><a class="el" href="a00172.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00172.html#9f1ec84d5815263ceae853f06ddb4cac">native_handle_type</a> typedef</td><td><a class="el" href="a00172.html">tbb::mutex</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>native_handle_type</b> typedef (defined in <a class="el" href="a00172.html">tbb::mutex</a>)</td><td><a class="el" href="a00172.html">tbb::mutex</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b> (defined in <a class="el" href="a00172.html">tbb::mutex</a>)</td><td><a class="el" href="a00172.html">tbb::mutex</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00172.html#795649a185b0d6af6dc81c5f378616dd">set_state</a>(state_t to)</td><td><a class="el" href="a00172.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="a00172.html">tbb::mutex</a>)</td><td><a class="el" href="a00172.html">tbb::mutex</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00172.html#4331652c79dea1c1131bd59ab161b234">try_lock</a>()</td><td><a class="el" href="a00172.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00172.html#5fc9ef443ae75d966695546be399cc6b">unlock</a>()</td><td><a class="el" href="a00172.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>~mutex</b>() (defined in <a class="el" href="a00172.html">tbb::mutex</a>)</td><td><a class="el" href="a00172.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00035.html b/doc/html/a00035.html
deleted file mode 100644
index 61e86b5..0000000
--- a/doc/html/a00035.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>Member List</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
-    <li><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="annotated.html"><span>Class List</span></a></li>
-    <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-    <li><a href="functions.html"><span>Class Members</span></a></li>
-  </ul></div>
-<h1>tbb::mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00173.html">tbb::mutex::scoped_lock</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00173.html#862e022841cdc522e4296a5533b22efd">acquire</a>(mutex &mutex)</td><td><a class="el" href="a00173.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="a00173.html">tbb::mutex::scoped_lock</a>)</td><td><a class="el" href="a00173.html">tbb::mutex::scoped_lock</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00173.html#0d51d18cd99df3b2e93bf07378d0992c">release</a>()</td><td><a class="el" href="a00173.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00173.html#1d403ae51b484df5d86d85ae38f11e6e">scoped_lock</a>()</td><td><a class="el" href="a00173.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00173.html#605a6b9af0f8cdabdf81825e0de99600">scoped_lock</a>(mutex &mutex)</td><td><a class="el" href="a00173.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00173.html#591e0c49b82bcedffcbe0923f1b915ec">try_acquire</a>(mutex &mutex)</td><td><a class="el" href="a00173.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00173.html#0ebbbecaf4311e9df7362cb76ceaa368">~scoped_lock</a>()</td><td><a class="el" href="a00173.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the 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
deleted file mode 100644
index 2dd8fa8..0000000
--- a/doc/html/a00036.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_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00174.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="a00174.html">tbb::null_mutex</a>)</td><td><a class="el" href="a00174.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="a00174.html">tbb::null_mutex</a>)</td><td><a class="el" href="a00174.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="a00174.html">tbb::null_mutex</a>)</td><td><a class="el" href="a00174.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="a00174.html">tbb::null_mutex</a>)</td><td><a class="el" href="a00174.html">tbb::null_mutex</a></td><td><code> [inline]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00037.html b/doc/html/a00037.html
index 7a2f0ad..b44d73e 100644
--- a/doc/html/a00037.html
+++ b/doc/html/a00037.html
@@ -20,16 +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::null_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00175.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="a00175.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00175.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="a00175.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00175.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="a00175.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00175.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="a00175.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00175.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="a00175.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00175.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="a00175.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00175.html">tbb::null_mutex::scoped_lock</a></td><td><code> [inline]</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="a00243.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="a00243.html#3c03eb40955b933b01987222722ac4bd">allocator_type</a> typedef</td><td><a class="el" href="a00243.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00243.html#01d7baf8e913ab2819e97917a2ac795f">begin</a>()</td><td><a class="el" href="a00243.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="a00243.html#84afb3906a39e399cde1c950d6351300">begin</a>() const </td><td><a class="el" href="a00243.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="a00243.html#a8764176d4b6014c5d65f1051851abc8">clear</a>()</td><td><a class="el" href="a00243.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="a00243.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00243.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="a00243.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00243.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="a00243.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00243.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="a00243.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00243.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="a00243.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00243.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="a00243.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00243.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="a00243.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00243.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00243.html#72595886d0ac8fd0543f90038570510d">empty</a>() const </td><td><a class="el" href="a00243.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="a00243.html#2456ff88252fc921b01cd8907628a4ee">end</a>()</td><td><a class="el" href="a00243.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="a00243.html#cb448bb4977ce366ceb7344085cc7050">end</a>() const </td><td><a class="el" href="a00243.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="a00243.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00243.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="a00243.html#0cfa3a5c8f2be3bbf313d93b1fa8cdb3">enumerable_thread_specific</a>()</td><td><a class="el" href="a00243.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="a00243.html#8d4b456ff9d7b289c73254eccc11db45">enumerable_thread_specific</a>(Finit finit)</td><td><a class="el" href="a00243.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="a00243.html#7bce6829981c9efe3f59cae2355e383e">enumerable_thread_specific</a>(const T &exemplar)</td><td><a class="el" href="a00243.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="a00243.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00243.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="a00243.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00243.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="a00243.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00243.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00243.html#c8d5265ccbd5e4485996b3f3baaa5ba1">local</a>()</td><td><a class="el" href="a00243.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="a00243.html#7dc79058d2832f7447de8e691c3455ea">local</a>(bool &exists)</td><td><a class="el" href="a00243.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="a00243.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00243.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="a00243.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00243.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="a00243.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00243.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00243.html#b22c54990b2362cd93c1a8f73de140bc">range</a>(size_t grainsize=1)</td><td><a class="el" href="a00243.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="a00243.html#3b068000cf4dbf9b40f8bb7e3fc53e0b">range</a>(size_t grainsize=1) const </td><td><a class="el" href="a00243.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="a00243.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00243.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="a00243.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00243.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00243.html#33fd6593da1ed14340f10f67d5a69130">size</a>() const </td><td><a class="el" href="a00243.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="a00243.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00243.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="a00243.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00243.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00243.html#5a7907d9e3e5b18e7a7b55211ef3213f">~enumerable_thread_specific</a>()</td><td><a class="el" href="a00243.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-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00038.html b/doc/html/a00038.html
deleted file mode 100644
index 23355f6..0000000
--- a/doc/html/a00038.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="a00176.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="a00176.html">tbb::null_rw_mutex</a>)</td><td><a class="el" href="a00176.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="a00176.html">tbb::null_rw_mutex</a>)</td><td><a class="el" href="a00176.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="a00176.html">tbb::null_rw_mutex</a>)</td><td><a class="el" href="a00176.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="a00176.html">tbb::null_rw_mutex</a>)</td><td><a class="el" href="a00176.html">tbb::null_rw_mutex</a></td><td><code> [inline]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the 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 93002c2..0000000
--- a/doc/html/a00039.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="a00177.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="a00177.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00177.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="a00177.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00177.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="a00177.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00177.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="a00177.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00177.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="a00177.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00177.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="a00177.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00177.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="a00177.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00177.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="a00177.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00177.html">tbb::null_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00040.html b/doc/html/a00040.html
index 8e26dde..603513a 100644
--- a/doc/html/a00040.html
+++ b/doc/html/a00040.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::parallel_do_feeder< Item > Member List</h1>This is the complete list of members for <a class="el" href="a00178.html">tbb::parallel_do_feeder< Item ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00178.html#40baaf0f6856f4491dd0adf896c93516">add</a>(const Item &item)</td><td><a class="el" href="a00178.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="a00178.html">tbb::parallel_do_feeder< Item ></a>)</td><td><a class="el" href="a00178.html">tbb::parallel_do_feeder< Item ></a></td><td><code> [friend]</code></td></tr>
+<h1>tbb::graph_node Member List</h1>This is the complete list of members for <a class="el" href="a00251.html">tbb::graph_node</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>~graph_node</b>() (defined in <a class="el" href="a00251.html">tbb::graph_node</a>)</td><td><a class="el" href="a00251.html">tbb::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00041.html b/doc/html/a00041.html
deleted file mode 100644
index 7460015..0000000
--- a/doc/html/a00041.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::pre_scan_tag Member List</h1>This is the complete list of members for <a class="el" href="a00181.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="a00181.html">tbb::pre_scan_tag</a>)</td><td><a class="el" href="a00181.html">tbb::pre_scan_tag</a></td><td><code> [inline, static]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the 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
index a8e9567..bf3347d 100644
--- a/doc/html/a00042.html
+++ b/doc/html/a00042.html
@@ -20,11 +20,19 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::final_scan_tag Member List</h1>This is the complete list of members for <a class="el" href="a00166.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="a00166.html">tbb::final_scan_tag</a>)</td><td><a class="el" href="a00166.html">tbb::final_scan_tag</a></td><td><code> [inline, static]</code></td></tr>
+<h1>tbb::sender< T > Member List</h1>This is the complete list of members for <a class="el" href="a00282.html">tbb::sender< T ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00282.html#d3aa21714dfc464e65a471816e38ea89">output_type</a> typedef</td><td><a class="el" href="a00282.html">tbb::sender< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#be48ac70174cf8e08e2b0279cd6343d3">register_successor</a>(successor_type &r)=0</td><td><a class="el" href="a00282.html">tbb::sender< T ></a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#3f345427e812e8741370308ff88f30bf">remove_successor</a>(successor_type &r)=0</td><td><a class="el" href="a00282.html">tbb::sender< T ></a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#c0746cda7dfd266f01acaf6cd5d4b77d">successor_type</a> typedef</td><td><a class="el" href="a00282.html">tbb::sender< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#add46946c4c7330422733432e4032fac">try_consume</a>()</td><td><a class="el" href="a00282.html">tbb::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#bf8c9235810354f3353a899c982645de">try_get</a>(T &)</td><td><a class="el" href="a00282.html">tbb::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#28c41df1c0c7ed485b4a691ec8f30098">try_release</a>()</td><td><a class="el" href="a00282.html">tbb::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#3506c7275aeeb2fc3ba5d5f10ee0adac">try_reserve</a>(T &)</td><td><a class="el" href="a00282.html">tbb::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~sender</b>() (defined in <a class="el" href="a00282.html">tbb::sender< T ></a>)</td><td><a class="el" href="a00282.html">tbb::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00043.html b/doc/html/a00043.html
index c7d6559..d0426dc 100644
--- a/doc/html/a00043.html
+++ b/doc/html/a00043.html
@@ -20,15 +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::parallel_while< Body > Member List</h1>This is the complete list of members for <a class="el" href="a00179.html">tbb::parallel_while< Body ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00179.html#e131c560057a58229992b61eb8dba4c6">add</a>(const value_type &item)</td><td><a class="el" href="a00179.html">tbb::parallel_while< Body ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00179.html#36e26ba3880c7bcf804a97ba0cbe133f">parallel_while</a>()</td><td><a class="el" href="a00179.html">tbb::parallel_while< Body ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00179.html#b32a0a6e5e09ebb7fad3e6652c19afe5">run</a>(Stream &stream, const Body &body)</td><td><a class="el" href="a00179.html">tbb::parallel_while< Body ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00179.html#fa297e53d3af2a101e712bc200233e9c">value_type</a> typedef</td><td><a class="el" href="a00179.html">tbb::parallel_while< Body ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00179.html#6fcfc973cc56b79c6d0fbb8a31be7e84">~parallel_while</a>()</td><td><a class="el" href="a00179.html">tbb::parallel_while< Body ></a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::receiver< T > Member List</h1>This is the complete list of members for <a class="el" href="a00277.html">tbb::receiver< T ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00277.html#9cfd5ef0d67d5bbfb5f9a76d75e62765">input_type</a> typedef</td><td><a class="el" href="a00277.html">tbb::receiver< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00277.html#c802c845b51c6d129153b684d33f7310">predecessor_type</a> typedef</td><td><a class="el" href="a00277.html">tbb::receiver< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00277.html#14ae737c8fca4c8bf8e1a736dfbac444">register_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00277.html">tbb::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00277.html#d2f23b40b328dc254a7c2a0a30f408e4">remove_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00277.html">tbb::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00277.html#6e5422b03b4570138f227b3d5d0073b8">try_put</a>(T t)=0</td><td><a class="el" href="a00277.html">tbb::receiver< T ></a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00277.html#18f74b83abae0ee1e4ce07942797ef27">~receiver</a>()</td><td><a class="el" href="a00277.html">tbb::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00044.html b/doc/html/a00044.html
index 6fb7d3c..f3620d7 100644
--- a/doc/html/a00044.html
+++ b/doc/html/a00044.html
@@ -20,14 +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::simple_partitioner Member List</h1>This is the complete list of members for <a class="el" href="a00193.html">tbb::simple_partitioner</a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>internal::start_for</b> (defined in <a class="el" href="a00193.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00193.html">tbb::simple_partitioner</a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal::start_reduce</b> (defined in <a class="el" href="a00193.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00193.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="a00193.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00193.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="a00193.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00193.html">tbb::simple_partitioner</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::continue_receiver Member List</h1>This is the complete list of members for <a class="el" href="a00241.html">tbb::continue_receiver</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00241.html#799d383813261426d881b10247caadba">continue_receiver</a>(int number_of_predecessors=0)</td><td><a class="el" href="a00241.html">tbb::continue_receiver</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00241.html#e6bf1d21e670b78ea00c71fccbe17c78">execute</a>()=0</td><td><a class="el" href="a00241.html">tbb::continue_receiver</a></td><td><code> [protected, pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00241.html#21acef0b97b53d92f637619012837b30">input_type</a> typedef</td><td><a class="el" href="a00241.html">tbb::continue_receiver</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_current_count</b> (defined in <a class="el" href="a00241.html">tbb::continue_receiver</a>)</td><td><a class="el" href="a00241.html">tbb::continue_receiver</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_mutex</b> (defined in <a class="el" href="a00241.html">tbb::continue_receiver</a>)</td><td><a class="el" href="a00241.html">tbb::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="a00241.html">tbb::continue_receiver</a>)</td><td><a class="el" href="a00241.html">tbb::continue_receiver</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00241.html#52fa92968dd48560d59798ca7ba6a3a2">predecessor_type</a> typedef</td><td><a class="el" href="a00241.html">tbb::continue_receiver</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00241.html#b9fa9290cbb871f8780f9d69e1ec3b4e">register_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00241.html">tbb::continue_receiver</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00277.html#14ae737c8fca4c8bf8e1a736dfbac444">tbb::receiver::register_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00277.html">tbb::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00241.html#02411d8d13b380062548aff133752cc5">remove_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00241.html">tbb::continue_receiver</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00277.html#d2f23b40b328dc254a7c2a0a30f408e4">tbb::receiver::remove_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00277.html">tbb::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00241.html#a7f8b9cc6286eb2cd8d429d6279da64d">try_put</a>(input_type)</td><td><a class="el" href="a00241.html">tbb::continue_receiver</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00277.html#6e5422b03b4570138f227b3d5d0073b8">tbb::receiver::try_put</a>(T t)=0</td><td><a class="el" href="a00277.html">tbb::receiver< T ></a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00241.html#9a38edb7e1e3c9be4e3848145c51a617">~continue_receiver</a>()</td><td><a class="el" href="a00241.html">tbb::continue_receiver</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00277.html#18f74b83abae0ee1e4ce07942797ef27">~receiver</a>()</td><td><a class="el" href="a00277.html">tbb::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00045.html b/doc/html/a00045.html
new file mode 100644
index 0000000..6d946c3
--- /dev/null
+++ b/doc/html/a00045.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>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::graph Member List</h1>This is the complete list of members for <a class="el" href="a00250.html">tbb::graph</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00250.html#633b9b55e3248b785efd13264261f0e5">concurrency</a> enum name</td><td><a class="el" href="a00250.html">tbb::graph</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00250.html#ff3b6a3ef2ae1e661dcdb398c227b43c">decrement_wait_count</a>()</td><td><a class="el" href="a00250.html">tbb::graph</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00250.html#1ba8311506558a2419101722f5d49ba9">graph</a>()</td><td><a class="el" href="a00250.html">tbb::graph</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00250.html#1e5c5ae6538ec714cee107d1004705b9">increment_wait_count</a>()</td><td><a class="el" href="a00250.html">tbb::graph</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00250.html#34d61d8b6560e5b2eb42e0112701db0f">root_task</a>()</td><td><a class="el" href="a00250.html">tbb::graph</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00250.html#4c5e8dc5a45e641d534d6206838cfa7f">run</a>(Receiver &r, Body body)</td><td><a class="el" href="a00250.html">tbb::graph</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00250.html#71213dd18099298dc74731e293c8286a">run</a>(Body body)</td><td><a class="el" href="a00250.html">tbb::graph</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>serial</b> enum value (defined in <a class="el" href="a00250.html">tbb::graph</a>)</td><td><a class="el" href="a00250.html">tbb::graph</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>unlimited</b> enum value (defined in <a class="el" href="a00250.html">tbb::graph</a>)</td><td><a class="el" href="a00250.html">tbb::graph</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00250.html#bafd6349fdc6563ffa02746866e30bec">wait_for_all</a>()</td><td><a class="el" href="a00250.html">tbb::graph</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00250.html#55332084e7884a26ff288b8fe960030d">~graph</a>()</td><td><a class="el" href="a00250.html">tbb::graph</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/a00046.html b/doc/html/a00046.html
deleted file mode 100644
index afda5d4..0000000
--- a/doc/html/a00046.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::auto_partitioner Member List</h1>This is the complete list of members for <a class="el" href="a00145.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="a00145.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00145.html">tbb::auto_partitioner</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal::start_for</b> (defined in <a class="el" href="a00145.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00145.html">tbb::auto_partitioner</a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal::start_reduce</b> (defined in <a class="el" href="a00145.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00145.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="a00145.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00145.html">tbb::auto_partitioner</a></td><td><code> [friend]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the 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
index 4142902..93c65e7 100644
--- a/doc/html/a00048.html
+++ b/doc/html/a00048.html
@@ -20,16 +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::affinity_partitioner Member List</h1>This is the complete list of members for <a class="el" href="a00140.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="a00140.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00140.html">tbb::affinity_partitioner</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal::affinity_partition_type</b> (defined in <a class="el" href="a00140.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00140.html">tbb::affinity_partitioner</a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal::start_for</b> (defined in <a class="el" href="a00140.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00140.html">tbb::affinity_partitioner</a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal::start_reduce</b> (defined in <a class="el" href="a00140.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00140.html">tbb::affinity_partitioner</a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal::start_reduce_with_affinity</b> (defined in <a class="el" href="a00140.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00140.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="a00140.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00140.html">tbb::affinity_partitioner</a></td><td><code> [friend]</code></td></tr>
+<h1>tbb::source_node< Output > Member List</h1>This is the complete list of members for <a class="el" href="a00285.html">tbb::source_node< Output ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00285.html#d71ed386c53032463f3435f79a15b6ff">activate</a>()</td><td><a class="el" href="a00285.html">tbb::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="a00285.html">tbb::source_node< Output ></a>)</td><td><a class="el" href="a00285.html">tbb::source_node< Output ></a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00285.html#c5a2c6ab64bcd798724976d7d75ba92f">output_type</a> typedef</td><td><a class="el" href="a00285.html">tbb::source_node< Output ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00285.html#ce601874ec5cbb0996f6dcb8e43badb8">register_successor</a>(receiver< output_type > &r)</td><td><a class="el" href="a00285.html">tbb::source_node< Output ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00285.html#de069bfc6fae7ed4e82b2a1fbb58b721">remove_successor</a>(receiver< output_type > &r)</td><td><a class="el" href="a00285.html">tbb::source_node< Output ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00285.html#0513272133a06db6742873671af98f21">source_node</a>(graph &g, Body body, bool is_active=true)</td><td><a class="el" href="a00285.html">tbb::source_node< Output ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00285.html#217d72bbc6e7a4b35ef014dd9a15efca">successor_type</a> typedef</td><td><a class="el" href="a00285.html">tbb::source_node< Output ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00285.html#809f51859ca4dd04204591d76c8572eb">try_consume</a>()</td><td><a class="el" href="a00285.html">tbb::source_node< Output ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00285.html#0434d2933ad082d3c43a4ec774150511">try_get</a>(output_type &v)</td><td><a class="el" href="a00285.html">tbb::source_node< Output ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00285.html#3dd7e998aa3e7258b3b5731307df23a0">try_release</a>()</td><td><a class="el" href="a00285.html">tbb::source_node< Output ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00285.html#ecac0bb52cff61912dcd186647ccd1bf">try_reserve</a>(output_type &v)</td><td><a class="el" href="a00285.html">tbb::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="a00251.html">tbb::graph_node</a>)</td><td><a class="el" href="a00251.html">tbb::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~sender</b>() (defined in <a class="el" href="a00282.html">tbb::sender< Output ></a>)</td><td><a class="el" href="a00282.html">tbb::sender< Output ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00285.html#90c94a8a52cc3d19cf393ce289e80733">~source_node</a>()</td><td><a class="el" href="a00285.html">tbb::source_node< Output ></a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00049.html b/doc/html/a00049.html
index 0c3e068..36c6bc3 100644
--- a/doc/html/a00049.html
+++ b/doc/html/a00049.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::filter Member List</h1>This is the complete list of members for <a class="el" href="a00164.html">tbb::filter</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00164.html#56275eb889c77c4807967133e21401bd">finalize</a>(void *)</td><td><a class="el" href="a00164.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="a00164.html">tbb::filter</a>)</td><td><a class="el" href="a00164.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="a00164.html">tbb::filter</a>)</td><td><a class="el" href="a00164.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00164.html#15c29cae5d237e6d63dbfe5c94af89d5">is_bound</a>() const </td><td><a class="el" href="a00164.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00164.html#cd53206c4795ef2df5df26b795caf692">is_ordered</a>() const </td><td><a class="el" href="a00164.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00164.html#fcfec27656a69ff2072802ac001e936f">is_serial</a>() const </td><td><a class="el" href="a00164.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00164.html#fa1b3dc1f4f47563ccab7f4d92f5b543">operator()</a>(void *item)=0</td><td><a class="el" href="a00164.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="a00164.html">tbb::filter</a>)</td><td><a class="el" href="a00164.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>thread_bound_filter</b> (defined in <a class="el" href="a00164.html">tbb::filter</a>)</td><td><a class="el" href="a00164.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00164.html#66d159f362293e3964ba3da8bc1d2604">~filter</a>()</td><td><a class="el" href="a00164.html">tbb::filter</a></td><td><code> [virtual]</code></td></tr>
+<h1>tbb::function_node< Input, Output > Member List</h1>This is the complete list of members for <a class="el" href="a00249.html">tbb::function_node< Input, Output ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00249.html#7bde12e8ee43d4cafbdd5b1fc2031e2b">function_node</a>(graph &g, size_t concurrency, Body body)</td><td><a class="el" href="a00249.html">tbb::function_node< Input, Output ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>input_type</b> typedef (defined in <a class="el" href="a00249.html">tbb::function_node< Input, Output ></a>)</td><td><a class="el" href="a00249.html">tbb::function_node< Input, Output ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_successors</b> (defined in <a class="el" href="a00249.html">tbb::function_node< Input, Output ></a>)</td><td><a class="el" href="a00249.html">tbb::function_node< Input, Output ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>output_type</b> typedef (defined in <a class="el" href="a00249.html">tbb::function_node< Input, Output ></a>)</td><td><a class="el" href="a00249.html">tbb::function_node< Input, Output ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>predecessor_type</b> typedef (defined in <a class="el" href="a00249.html">tbb::function_node< Input, Output ></a>)</td><td><a class="el" href="a00249.html">tbb::function_node< Input, Output ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>successor_type</b> typedef (defined in <a class="el" href="a00249.html">tbb::function_node< Input, Output ></a>)</td><td><a class="el" href="a00249.html">tbb::function_node< Input, Output ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>successors</b>() (defined in <a class="el" href="a00249.html">tbb::function_node< Input, Output ></a>)</td><td><a class="el" href="a00249.html">tbb::function_node< Input, Output ></a></td><td><code> [inline, protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~graph_node</b>() (defined in <a class="el" href="a00251.html">tbb::graph_node</a>)</td><td><a class="el" href="a00251.html">tbb::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00050.html b/doc/html/a00050.html
index b509337..12f826c 100644
--- a/doc/html/a00050.html
+++ b/doc/html/a00050.html
@@ -20,25 +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::thread_bound_filter Member List</h1>This is the complete list of members for <a class="el" href="a00209.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="a00209.html">tbb::thread_bound_filter</a>)</td><td><a class="el" href="a00209.html">tbb::thread_bound_filter</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00164.html#56275eb889c77c4807967133e21401bd">finalize</a>(void *)</td><td><a class="el" href="a00164.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="a00164.html">tbb::filter</a>)</td><td><a class="el" href="a00164.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="a00164.html">tbb::filter</a>)</td><td><a class="el" href="a00164.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00164.html#15c29cae5d237e6d63dbfe5c94af89d5">is_bound</a>() const </td><td><a class="el" href="a00164.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00164.html#cd53206c4795ef2df5df26b795caf692">is_ordered</a>() const </td><td><a class="el" href="a00164.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00164.html#fcfec27656a69ff2072802ac001e936f">is_serial</a>() const </td><td><a class="el" href="a00164.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="a00209.html">tbb::thread_bound_filter</a>)</td><td><a class="el" href="a00209.html">tbb::thread_bound_filter</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00164.html#fa1b3dc1f4f47563ccab7f4d92f5b543">operator()</a>(void *item)=0</td><td><a class="el" href="a00164.html">tbb::filter</a></td><td><code> [pure virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00209.html#5e726bdc7fbd924c0b07bd558b1d4d5d">process_item</a>()</td><td><a class="el" href="a00209.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="a00209.html">tbb::thread_bound_filter</a>)</td><td><a class="el" href="a00209.html">tbb::thread_bound_filter</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>success</b> enum value (defined in <a class="el" href="a00209.html">tbb::thread_bound_filter</a>)</td><td><a class="el" href="a00209.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="a00209.html">tbb::thread_bound_filter</a>)</td><td><a class="el" href="a00209.html">tbb::thread_bound_filter</a></td><td><code> [inline, protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00209.html#c4f90f2c771bce748beb9be734fa286c">try_process_item</a>()</td><td><a class="el" href="a00209.html">tbb::thread_bound_filter</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00164.html#66d159f362293e3964ba3da8bc1d2604">~filter</a>()</td><td><a class="el" href="a00164.html">tbb::filter</a></td><td><code> [virtual]</code></td></tr>
+<h1>tbb::executable_node< Output > Member List</h1>This is the complete list of members for <a class="el" href="a00244.html">tbb::executable_node< Output ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00244.html#73d4304b322a25ed0df468e607dd1dac">executable_node</a>(graph &g, Body body)</td><td><a class="el" href="a00244.html">tbb::executable_node< Output ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00244.html#c13030111d34feeafd9cdb1dd21584f1">executable_node</a>(graph &g, int number_of_predecessors, Body body)</td><td><a class="el" href="a00244.html">tbb::executable_node< Output ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>input_type</b> typedef (defined in <a class="el" href="a00244.html">tbb::executable_node< Output ></a>)</td><td><a class="el" href="a00244.html">tbb::executable_node< Output ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_successors</b> (defined in <a class="el" href="a00244.html">tbb::executable_node< Output ></a>)</td><td><a class="el" href="a00244.html">tbb::executable_node< Output ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>output_type</b> typedef (defined in <a class="el" href="a00244.html">tbb::executable_node< Output ></a>)</td><td><a class="el" href="a00244.html">tbb::executable_node< Output ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>predecessor_type</b> typedef (defined in <a class="el" href="a00244.html">tbb::executable_node< Output ></a>)</td><td><a class="el" href="a00244.html">tbb::executable_node< Output ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>successor_type</b> typedef (defined in <a class="el" href="a00244.html">tbb::executable_node< Output ></a>)</td><td><a class="el" href="a00244.html">tbb::executable_node< Output ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>successors</b>() (defined in <a class="el" href="a00244.html">tbb::executable_node< Output ></a>)</td><td><a class="el" href="a00244.html">tbb::executable_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="a00251.html">tbb::graph_node</a>)</td><td><a class="el" href="a00251.html">tbb::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00051.html b/doc/html/a00051.html
deleted file mode 100644
index add893f..0000000
--- a/doc/html/a00051.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::pipeline Member List</h1>This is the complete list of members for <a class="el" href="a00180.html">tbb::pipeline</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00180.html#38fb5c9c8395dd6f89a4ae2011a83e0d">add_filter</a>(filter &filter_)</td><td><a class="el" href="a00180.html">tbb::pipeline</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00180.html#2c84aef5b834b555ee220b176e25931e">clear</a>()</td><td><a class="el" href="a00180.html">tbb::pipeline</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>filter</b> (defined in <a class="el" href="a00180.html">tbb::pipeline</a>)</td><td><a class="el" href="a00180.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="a00180.html">tbb::pipeline</a>)</td><td><a class="el" href="a00180.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="a00180.html">tbb::pipeline</a>)</td><td><a class="el" href="a00180.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="a00180.html">tbb::pipeline</a>)</td><td><a class="el" href="a00180.html">tbb::pipeline</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00180.html#596dc3beba27099c4c8581cb419e1a59">pipeline</a>()</td><td><a class="el" href="a00180.html">tbb::pipeline</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00180.html#f627616049b3fe36801f37ee40403ef8">run</a>(size_t max_number_of_live_tokens)</td><td><a class="el" href="a00180.html">tbb::pipeline</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00180.html#93d7fec8cd607b803dd2d79fb46bd260">run</a>(size_t max_number_of_live_tokens, tbb::task_group_context &context)</td><td><a class="el" href="a00180.html">tbb::pipeline</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>tbb::interface5::internal::pipeline_proxy</b> (defined in <a class="el" href="a00180.html">tbb::pipeline</a>)</td><td><a class="el" href="a00180.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="a00180.html">tbb::pipeline</a>)</td><td><a class="el" href="a00180.html">tbb::pipeline</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00180.html#49513c6c24f9d5bbbb27edca5efe01c9">~pipeline</a>()</td><td><a class="el" href="a00180.html">tbb::pipeline</a></td><td><code> [virtual]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the 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 6e872b8..0000000
--- a/doc/html/a00052.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::interface5::flow_control Member List</h1>This is the complete list of members for <a class="el" href="a00167.html">tbb::interface5::flow_control</a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>internal::concrete_filter</b> (defined in <a class="el" href="a00167.html">tbb::interface5::flow_control</a>)</td><td><a class="el" href="a00167.html">tbb::interface5::flow_control</a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>stop</b>() (defined in <a class="el" href="a00167.html">tbb::interface5::flow_control</a>)</td><td><a class="el" href="a00167.html">tbb::interface5::flow_control</a></td><td><code> [inline]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the 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
index 9003cd6..3f4adb8 100644
--- a/doc/html/a00053.html
+++ b/doc/html/a00053.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::interface5::filter_t< T, U > Member List</h1>This is the complete list of members for <a class="el" href="a00165.html">tbb::interface5::filter_t< T, U ></a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>clear</b>() (defined in <a class="el" href="a00165.html">tbb::interface5::filter_t< T, U ></a>)</td><td><a class="el" href="a00165.html">tbb::interface5::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="a00165.html">tbb::interface5::filter_t< T, U ></a>)</td><td><a class="el" href="a00165.html">tbb::interface5::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="a00165.html">tbb::interface5::filter_t< T, U ></a>)</td><td><a class="el" href="a00165.html">tbb::interface5::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="a00165.html">tbb::interface5::filter_t< T, U ></a>)</td><td><a class="el" href="a00165.html">tbb::interface5::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="a00165.html">tbb::interface5::filter_t< T, U ></a>)</td><td><a class="el" href="a00165.html">tbb::interface5::filter_t< T, U ></a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00165.html#85c2892eff1fddcd06e28911e75838bd">make_filter</a>(tbb::filter::mode, const Body &)</td><td><a class="el" href="a00165.html">tbb::interface5::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="a00165.html">tbb::interface5::filter_t< T, U ></a>)</td><td><a class="el" href="a00165.html">tbb::interface5::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="a00165.html">tbb::interface5::filter_t< T, U ></a>)</td><td><a class="el" href="a00165.html">tbb::interface5::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="a00165.html">tbb::interface5::filter_t< T, U ></a>)</td><td><a class="el" href="a00165.html">tbb::interface5::filter_t< T, U ></a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::continue_node Member List</h1>This is the complete list of members for <a class="el" href="a00240.html">tbb::continue_node</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>continue_node</b>(graph &g) (defined in <a class="el" href="a00240.html">tbb::continue_node</a>)</td><td><a class="el" href="a00240.html">tbb::continue_node</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00244.html#73d4304b322a25ed0df468e607dd1dac">executable_node</a>(graph &g, Body body)</td><td><a class="el" href="a00244.html">tbb::executable_node< Output ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00244.html#c13030111d34feeafd9cdb1dd21584f1">executable_node</a>(graph &g, int number_of_predecessors, Body body)</td><td><a class="el" href="a00244.html">tbb::executable_node< Output ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>input_type</b> typedef (defined in <a class="el" href="a00240.html">tbb::continue_node</a>)</td><td><a class="el" href="a00240.html">tbb::continue_node</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_successors</b> (defined in <a class="el" href="a00244.html">tbb::executable_node< Output ></a>)</td><td><a class="el" href="a00244.html">tbb::executable_node< Output ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>output_type</b> typedef (defined in <a class="el" href="a00240.html">tbb::continue_node</a>)</td><td><a class="el" href="a00240.html">tbb::continue_node</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>predecessor_type</b> typedef (defined in <a class="el" href="a00240.html">tbb::continue_node</a>)</td><td><a class="el" href="a00240.html">tbb::continue_node</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>successor_type</b> typedef (defined in <a class="el" href="a00240.html">tbb::continue_node</a>)</td><td><a class="el" href="a00240.html">tbb::continue_node</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>successors</b>() (defined in <a class="el" href="a00244.html">tbb::executable_node< Output ></a>)</td><td><a class="el" href="a00244.html">tbb::executable_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="a00251.html">tbb::graph_node</a>)</td><td><a class="el" href="a00251.html">tbb::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00054.html b/doc/html/a00054.html
index d54d76b..ff5451f 100644
--- a/doc/html/a00054.html
+++ b/doc/html/a00054.html
@@ -20,16 +20,27 @@
     <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="a00182.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="a00182.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00182.html">tbb::queuing_mutex</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00182.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00182.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="a00182.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00182.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="a00182.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00182.html">tbb::queuing_mutex</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00182.html#b389ad9c4db7293e4bdb5b8cda69ec04">queuing_mutex</a>()</td><td><a class="el" href="a00182.html">tbb::queuing_mutex</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b> (defined in <a class="el" href="a00182.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00182.html">tbb::queuing_mutex</a></td><td><code> [friend]</code></td></tr>
+<h1>tbb::broadcast_node< T > Member List</h1>This is the complete list of members for <a class="el" href="a00224.html">tbb::broadcast_node< T ></a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>broadcast_node</b>() (defined in <a class="el" href="a00224.html">tbb::broadcast_node< T ></a>)</td><td><a class="el" href="a00224.html">tbb::broadcast_node< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00224.html#59ea89dbeab816742e6dc6af467e6c3f">input_type</a> typedef</td><td><a class="el" href="a00224.html">tbb::broadcast_node< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00224.html#b844ca1ee578a54bc11ff28467b12e7d">output_type</a> typedef</td><td><a class="el" href="a00224.html">tbb::broadcast_node< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00224.html#4dd13b81f6361fc244abe7cbcacd048c">predecessor_type</a> typedef</td><td><a class="el" href="a00224.html">tbb::broadcast_node< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00277.html#14ae737c8fca4c8bf8e1a736dfbac444">register_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00277.html">tbb::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00224.html#3f4149fa6b984b2138cb5ed40a2ddc6c">register_successor</a>(receiver< T > &r)</td><td><a class="el" href="a00224.html">tbb::broadcast_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00277.html#d2f23b40b328dc254a7c2a0a30f408e4">remove_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00277.html">tbb::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00224.html#eefb3210bb9727765ea7385ba163c2a6">remove_successor</a>(receiver< T > &r)</td><td><a class="el" href="a00224.html">tbb::broadcast_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00224.html#453928c367d813cb481f1b9aa1e1742a">successor_type</a> typedef</td><td><a class="el" href="a00224.html">tbb::broadcast_node< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#add46946c4c7330422733432e4032fac">try_consume</a>()</td><td><a class="el" href="a00282.html">tbb::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#bf8c9235810354f3353a899c982645de">try_get</a>(T &)</td><td><a class="el" href="a00282.html">tbb::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00224.html#9b211e02554d6b39dc04f7e7f4e00073">try_put</a>(T t)</td><td><a class="el" href="a00224.html">tbb::broadcast_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#28c41df1c0c7ed485b4a691ec8f30098">try_release</a>()</td><td><a class="el" href="a00282.html">tbb::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#3506c7275aeeb2fc3ba5d5f10ee0adac">try_reserve</a>(T &)</td><td><a class="el" href="a00282.html">tbb::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="a00251.html">tbb::graph_node</a>)</td><td><a class="el" href="a00251.html">tbb::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00277.html#18f74b83abae0ee1e4ce07942797ef27">~receiver</a>()</td><td><a class="el" href="a00277.html">tbb::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~sender</b>() (defined in <a class="el" href="a00282.html">tbb::sender< T ></a>)</td><td><a class="el" href="a00282.html">tbb::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00055.html b/doc/html/a00055.html
index b18bf24..4316b58 100644
--- a/doc/html/a00055.html
+++ b/doc/html/a00055.html
@@ -20,16 +20,67 @@
     <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="a00183.html">tbb::queuing_mutex::scoped_lock</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00183.html#533e4fc8355ee321206a0609c42d909d">acquire</a>(queuing_mutex &m)</td><td><a class="el" href="a00183.html">tbb::queuing_mutex::scoped_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00183.html#3bf2b8c87ff22115be9b2eac179f2d30">release</a>()</td><td><a class="el" href="a00183.html">tbb::queuing_mutex::scoped_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00183.html#db0fa3967491014572e24d6607bdc971">scoped_lock</a>()</td><td><a class="el" href="a00183.html">tbb::queuing_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00183.html#9b51ef972f5618ac17caadb58841ab6d">scoped_lock</a>(queuing_mutex &m)</td><td><a class="el" href="a00183.html">tbb::queuing_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00183.html#e5a014fb817599386a87170cf2cf51a9">try_acquire</a>(queuing_mutex &m)</td><td><a class="el" href="a00183.html">tbb::queuing_mutex::scoped_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00183.html#ac2c576a93570957d694192a5f491443">~scoped_lock</a>()</td><td><a class="el" href="a00183.html">tbb::queuing_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::buffer_node< T > Member List</h1>This is the complete list of members for <a class="el" href="a00225.html">tbb::buffer_node< T ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00225.html#7360978fa427d054bc6cde05c80e5e9f">buffer_node</a>(graph &g)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>con_res</b> enum value (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>FAILED</b> enum value (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#3a31b3b55bee417de3af09c7b45b9ad6">forward</a>()</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>forwarder_busy</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#3ec9d33aa9f1e9292d5952e3eb477ca1">grow_my_array</a>(size_t minimum_size)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>handle_operations</b>(buffer_operation *op_list) (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>initial_buffer_size</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#90de308ba6abefb74c537a62ed0f1ca3">input_type</a> typedef</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::forward_task< buffer_node< T > ></b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></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="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#a3cb61d8a98bc4bc860b1cb04944b4f8">internal_forward</a>(buffer_operation *op)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></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="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></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="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#017f16c8d6e0fb65d0d3a61aec86b3e2">internal_reg_succ</a>(buffer_operation *op)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></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="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#a75f731cf9fc93f7487eb72de3fcf7b1">internal_rem_succ</a>(buffer_operation *op)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></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="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></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="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_aggregator</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_array</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_array_size</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_head</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_mutex</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_parent</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_reserved</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_reserved_id</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_successors</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_tail</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>op_stat</b> enum name (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>op_type</b> enum name (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#28c06a61dbad153f2e989efbf43016c5">output_type</a> typedef</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#688cf819089ee2fac2b9de2e050adea7">predecessor_type</a> typedef</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>put_item</b> enum value (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>reg_succ</b> enum value (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00277.html#14ae737c8fca4c8bf8e1a736dfbac444">register_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00277.html">tbb::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#cd2ef588b0ee6eb8d23ee169e00c73a9">register_successor</a>(receiver< output_type > &r)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></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="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>rem_succ</b> enum value (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00277.html#d2f23b40b328dc254a7c2a0a30f408e4">remove_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00277.html">tbb::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#415428db02e74a479fb056a8ed72ba53">remove_successor</a>(receiver< output_type > &r)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></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="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>res_item</b> enum value (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>SUCCEEDED</b> enum value (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#5e23f4f377ff4e1f53e71fd909a65771">successor_type</a> typedef</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#46b8b257a97e2192a2b11743279e8ffe">try_consume</a>()</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></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="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#b68bdec127703dbfb2d93d685abbfd67">try_get</a>(T &v)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#f74899ffb67687998168ad428f586b64">try_put</a>(T t)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#435e29a66f0719d4822a0a8dc78a0405">try_release</a>()</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#11ebad4c72082a1a03ecccd3afab4ae2">try_reserve</a>(T &v)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>WAIT</b> enum value (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~buffer_node</b>() (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~graph_node</b>() (defined in <a class="el" href="a00251.html">tbb::graph_node</a>)</td><td><a class="el" href="a00251.html">tbb::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00277.html#18f74b83abae0ee1e4ce07942797ef27">~receiver</a>()</td><td><a class="el" href="a00277.html">tbb::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~sender</b>() (defined in <a class="el" href="a00282.html">tbb::sender< T ></a>)</td><td><a class="el" href="a00282.html">tbb::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00056.html b/doc/html/a00056.html
deleted file mode 100644
index 6ba9fb1..0000000
--- a/doc/html/a00056.html
+++ /dev/null
@@ -1,39 +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::queuing_rw_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00184.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="a00184.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00184.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="a00184.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00184.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="a00184.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00184.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="a00184.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00184.html">tbb::queuing_rw_mutex</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00184.html#85c90877c3447690ac4e2ac4ff8dea5e">queuing_rw_mutex</a>()</td><td><a class="el" href="a00184.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="a00184.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00184.html">tbb::queuing_rw_mutex</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00184.html#1ba73e3d95cfdf8323880bc623af9099">~queuing_rw_mutex</a>()</td><td><a class="el" href="a00184.html">tbb::queuing_rw_mutex</a></td><td><code> [inline]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the 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
deleted file mode 100644
index 707ca91..0000000
--- a/doc/html/a00057.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::queuing_rw_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00185.html">tbb::queuing_rw_mutex::scoped_lock</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00185.html#a8dd5ab8686e76de21587544dbb681e0">acquire</a>(queuing_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00185.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00185.html#0d2f93edf7b15ec4bcee138823220c52">downgrade_to_reader</a>()</td><td><a class="el" href="a00185.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00185.html#67ae221109ddc69510ab593874e435d4">release</a>()</td><td><a class="el" href="a00185.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00185.html#c62e365be7bcbba091c9ea7454a4d22c">scoped_lock</a>()</td><td><a class="el" href="a00185.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00185.html#fbb8798792d3aebb136c46fc63d2529e">scoped_lock</a>(queuing_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00185.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00185.html#2e4ff6c9ec2fee6682f95290d1f42baa">try_acquire</a>(queuing_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00185.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00185.html#11ba1da4a722c9e6f73339a52c487e82">upgrade_to_writer</a>()</td><td><a class="el" href="a00185.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00185.html#32c7d67a660d23ebbaab1a1d2826d31a">~scoped_lock</a>()</td><td><a class="el" href="a00185.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00058.html b/doc/html/a00058.html
index 23cbb1a..b3d1559 100644
--- a/doc/html/a00058.html
+++ b/doc/html/a00058.html
@@ -20,24 +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::interface5::reader_writer_lock Member List</h1>This is the complete list of members for <a class="el" href="a00186.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="a00186.html">tbb::interface5::reader_writer_lock</a>)</td><td><a class="el" href="a00186.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="a00186.html">tbb::interface5::reader_writer_lock</a>)</td><td><a class="el" href="a00186.html">tbb::interface5::reader_writer_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00186.html#2653d1a2d560059a51219a8ceab3ade9">lock</a>()</td><td><a class="el" href="a00186.html">tbb::interface5::reader_writer_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00186.html#d9d16a24d9f6c3dada73c6b9ff214f5b">lock_read</a>()</td><td><a class="el" href="a00186.html">tbb::interface5::reader_writer_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00186.html#c1431c4293e777efd9aab9a95c2a46e1">reader_writer_lock</a>()</td><td><a class="el" href="a00186.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="a00186.html">tbb::interface5::reader_writer_lock</a>)</td><td><a class="el" href="a00186.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="a00186.html">tbb::interface5::reader_writer_lock</a>)</td><td><a class="el" href="a00186.html">tbb::interface5::reader_writer_lock</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00186.html#6f921f0d7c1812ceb5674418c8b6ccaf">status_t</a> enum name</td><td><a class="el" href="a00186.html">tbb::interface5::reader_writer_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00186.html#721eb173e154ab38292273e9266a9b07">try_lock</a>()</td><td><a class="el" href="a00186.html">tbb::interface5::reader_writer_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00186.html#595fb23952e3b89426b1f7938dea9b11">try_lock_read</a>()</td><td><a class="el" href="a00186.html">tbb::interface5::reader_writer_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00186.html#5113b32689305599b2c36b5831547704">unlock</a>()</td><td><a class="el" href="a00186.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="a00186.html">tbb::interface5::reader_writer_lock</a>)</td><td><a class="el" href="a00186.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="a00186.html">tbb::interface5::reader_writer_lock</a>)</td><td><a class="el" href="a00186.html">tbb::interface5::reader_writer_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00186.html#5135f64f7b7339017f33d956445edbee">~reader_writer_lock</a>()</td><td><a class="el" href="a00186.html">tbb::interface5::reader_writer_lock</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::queue_node< T > Member List</h1>This is the complete list of members for <a class="el" href="a00269.html">tbb::queue_node< T ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00225.html#7360978fa427d054bc6cde05c80e5e9f">buffer_node</a>(graph &g)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>con_res</b> enum value (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>FAILED</b> enum value (defined in <a class="el" href="a00269.html">tbb::queue_node< T ></a>)</td><td><a class="el" href="a00269.html">tbb::queue_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#3a31b3b55bee417de3af09c7b45b9ad6">forward</a>()</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>forwarder_busy</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#3ec9d33aa9f1e9292d5952e3eb477ca1">grow_my_array</a>(size_t minimum_size)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>handle_operations</b>(buffer_operation *op_list) (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>initial_buffer_size</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#27016487003a4ff2908748c3cf11c1fe">input_type</a> typedef</td><td><a class="el" href="a00269.html">tbb::queue_node< T ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::forward_task< buffer_node< T > ></b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></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="a00269.html">tbb::queue_node< T ></a>)</td><td><a class="el" href="a00269.html">tbb::queue_node< T ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#fb58bac5ac355e5134c51125e601fa2a">internal_forward</a>(queue_operation *op)</td><td><a class="el" href="a00269.html">tbb::queue_node< T ></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="a00269.html">tbb::queue_node< T ></a>)</td><td><a class="el" href="a00269.html">tbb::queue_node< T ></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="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#017f16c8d6e0fb65d0d3a61aec86b3e2">internal_reg_succ</a>(buffer_operation *op)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></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="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#a75f731cf9fc93f7487eb72de3fcf7b1">internal_rem_succ</a>(buffer_operation *op)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></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="a00269.html">tbb::queue_node< T ></a>)</td><td><a class="el" href="a00269.html">tbb::queue_node< T ></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="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_aggregator</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_array</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_array_size</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_head</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_mutex</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_parent</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_reserved</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_reserved_id</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_successors</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_tail</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>op_stat</b> enum name (defined in <a class="el" href="a00269.html">tbb::queue_node< T ></a>)</td><td><a class="el" href="a00269.html">tbb::queue_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>op_type</b> enum name (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#d227f122eebe2f9489ba763ff24fd6fb">output_type</a> typedef</td><td><a class="el" href="a00269.html">tbb::queue_node< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#83bc7308a38f1d205377d78ec14931d1">predecessor_type</a> typedef</td><td><a class="el" href="a00269.html">tbb::queue_node< T ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>put_item</b> enum value (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#1564c6bf9573b13d6854b0e8f7ce2b68">queue_node</a>(graph &g)</td><td><a class="el" href="a00269.html">tbb::queue_node< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>queue_operation</b> typedef (defined in <a class="el" href="a00269.html">tbb::queue_node< T ></a>)</td><td><a class="el" href="a00269.html">tbb::queue_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>reg_succ</b> enum value (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00277.html#14ae737c8fca4c8bf8e1a736dfbac444">register_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00277.html">tbb::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#cd2ef588b0ee6eb8d23ee169e00c73a9">register_successor</a>(receiver< output_type > &r)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></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="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>rem_succ</b> enum value (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00277.html#d2f23b40b328dc254a7c2a0a30f408e4">remove_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00277.html">tbb::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#415428db02e74a479fb056a8ed72ba53">remove_successor</a>(receiver< output_type > &r)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></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="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>res_item</b> enum value (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00269.html">tbb::queue_node< T ></a>)</td><td><a class="el" href="a00269.html">tbb::queue_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>SUCCEEDED</b> enum value (defined in <a class="el" href="a00269.html">tbb::queue_node< T ></a>)</td><td><a class="el" href="a00269.html">tbb::queue_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#c3b1d76b66b1292f6a1b6dae52c67a0e">successor_type</a> typedef</td><td><a class="el" href="a00269.html">tbb::queue_node< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#46b8b257a97e2192a2b11743279e8ffe">try_consume</a>()</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></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="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#b68bdec127703dbfb2d93d685abbfd67">try_get</a>(T &v)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#f74899ffb67687998168ad428f586b64">try_put</a>(T t)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#435e29a66f0719d4822a0a8dc78a0405">try_release</a>()</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#11ebad4c72082a1a03ecccd3afab4ae2">try_reserve</a>(T &v)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>WAIT</b> enum value (defined in <a class="el" href="a00269.html">tbb::queue_node< T ></a>)</td><td><a class="el" href="a00269.html">tbb::queue_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~buffer_node</b>() (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~graph_node</b>() (defined in <a class="el" href="a00251.html">tbb::graph_node</a>)</td><td><a class="el" href="a00251.html">tbb::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00277.html#18f74b83abae0ee1e4ce07942797ef27">~receiver</a>()</td><td><a class="el" href="a00277.html">tbb::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~sender</b>() (defined in <a class="el" href="a00282.html">tbb::sender< T ></a>)</td><td><a class="el" href="a00282.html">tbb::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00059.html b/doc/html/a00059.html
index 6e36491..ac0a985 100644
--- a/doc/html/a00059.html
+++ b/doc/html/a00059.html
@@ -20,15 +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::interface5::reader_writer_lock::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00187.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="a00187.html">tbb::interface5::reader_writer_lock::scoped_lock</a>)</td><td><a class="el" href="a00187.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="a00187.html">tbb::interface5::reader_writer_lock::scoped_lock</a>)</td><td><a class="el" href="a00187.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="a00187.html">tbb::interface5::reader_writer_lock::scoped_lock</a>)</td><td><a class="el" href="a00187.html">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00187.html#cf19f20e082887c1bb0ba6b0911c3583">scoped_lock</a>(reader_writer_lock &lock)</td><td><a class="el" href="a00187.html">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00187.html#70246e0260493625ff956fa5926fc71f">~scoped_lock</a>()</td><td><a class="el" href="a00187.html">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::sequencer_node< T > Member List</h1>This is the complete list of members for <a class="el" href="a00283.html">tbb::sequencer_node< T ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00225.html#7360978fa427d054bc6cde05c80e5e9f">buffer_node</a>(graph &g)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>con_res</b> enum value (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>FAILED</b> enum value (defined in <a class="el" href="a00283.html">tbb::sequencer_node< T ></a>)</td><td><a class="el" href="a00283.html">tbb::sequencer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#3a31b3b55bee417de3af09c7b45b9ad6">forward</a>()</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>forwarder_busy</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#3ec9d33aa9f1e9292d5952e3eb477ca1">grow_my_array</a>(size_t minimum_size)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>handle_operations</b>(buffer_operation *op_list) (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>initial_buffer_size</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00283.html#a73e4a3ae6c430281f08226d448ebfc8">input_type</a> typedef</td><td><a class="el" href="a00283.html">tbb::sequencer_node< T ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::forward_task< buffer_node< T > ></b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></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="a00269.html">tbb::queue_node< T ></a>)</td><td><a class="el" href="a00269.html">tbb::queue_node< T ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#fb58bac5ac355e5134c51125e601fa2a">internal_forward</a>(queue_operation *op)</td><td><a class="el" href="a00269.html">tbb::queue_node< T ></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="a00269.html">tbb::queue_node< T ></a>)</td><td><a class="el" href="a00269.html">tbb::queue_node< T ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#017f16c8d6e0fb65d0d3a61aec86b3e2">internal_reg_succ</a>(buffer_operation *op)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></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="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#a75f731cf9fc93f7487eb72de3fcf7b1">internal_rem_succ</a>(buffer_operation *op)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></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="a00269.html">tbb::queue_node< T ></a>)</td><td><a class="el" href="a00269.html">tbb::queue_node< T ></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="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_aggregator</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_array</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_array_size</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_head</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_mutex</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_parent</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_reserved</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_reserved_id</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_successors</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_tail</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>op_stat</b> enum name (defined in <a class="el" href="a00283.html">tbb::sequencer_node< T ></a>)</td><td><a class="el" href="a00283.html">tbb::sequencer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>op_type</b> enum name (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00283.html#0c613bb01103dfcfbc3f9cbe943f95b0">output_type</a> typedef</td><td><a class="el" href="a00283.html">tbb::sequencer_node< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00283.html#6581686ef0cf8e13c0270687628af5eb">predecessor_type</a> typedef</td><td><a class="el" href="a00283.html">tbb::sequencer_node< T ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>put_item</b> enum value (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#1564c6bf9573b13d6854b0e8f7ce2b68">queue_node</a>(graph &g)</td><td><a class="el" href="a00269.html">tbb::queue_node< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>queue_operation</b> typedef (defined in <a class="el" href="a00269.html">tbb::queue_node< T ></a>)</td><td><a class="el" href="a00269.html">tbb::queue_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>reg_succ</b> enum value (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00277.html#14ae737c8fca4c8bf8e1a736dfbac444">register_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00277.html">tbb::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#cd2ef588b0ee6eb8d23ee169e00c73a9">register_successor</a>(receiver< output_type > &r)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></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="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>rem_succ</b> enum value (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00277.html#d2f23b40b328dc254a7c2a0a30f408e4">remove_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00277.html">tbb::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#415428db02e74a479fb056a8ed72ba53">remove_successor</a>(receiver< output_type > &r)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></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="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>res_item</b> enum value (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00283.html#c3138c1c96b76ae9f13b0abbf7029590">sequencer_node</a>(graph &g, const Sequencer &s)</td><td><a class="el" href="a00283.html">tbb::sequencer_node< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>sequencer_operation</b> typedef (defined in <a class="el" href="a00283.html">tbb::sequencer_node< T ></a>)</td><td><a class="el" href="a00283.html">tbb::sequencer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00283.html">tbb::sequencer_node< T ></a>)</td><td><a class="el" href="a00283.html">tbb::sequencer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>SUCCEEDED</b> enum value (defined in <a class="el" href="a00283.html">tbb::sequencer_node< T ></a>)</td><td><a class="el" href="a00283.html">tbb::sequencer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00283.html#3591313e30d0f485a09106686067411f">successor_type</a> typedef</td><td><a class="el" href="a00283.html">tbb::sequencer_node< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#46b8b257a97e2192a2b11743279e8ffe">try_consume</a>()</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></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="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#b68bdec127703dbfb2d93d685abbfd67">try_get</a>(T &v)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#f74899ffb67687998168ad428f586b64">try_put</a>(T t)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#435e29a66f0719d4822a0a8dc78a0405">try_release</a>()</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#11ebad4c72082a1a03ecccd3afab4ae2">try_reserve</a>(T &v)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>WAIT</b> enum value (defined in <a class="el" href="a00283.html">tbb::sequencer_node< T ></a>)</td><td><a class="el" href="a00283.html">tbb::sequencer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~buffer_node</b>() (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~graph_node</b>() (defined in <a class="el" href="a00251.html">tbb::graph_node</a>)</td><td><a class="el" href="a00251.html">tbb::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00277.html#18f74b83abae0ee1e4ce07942797ef27">~receiver</a>()</td><td><a class="el" href="a00277.html">tbb::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~sender</b>() (defined in <a class="el" href="a00282.html">tbb::sender< T ></a>)</td><td><a class="el" href="a00282.html">tbb::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00283.html#c87d80feebaf2bae4af22b5f2459b37e">~sequencer_node</a>()</td><td><a class="el" href="a00283.html">tbb::sequencer_node< T ></a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00060.html b/doc/html/a00060.html
index 3b8570d..7aead19 100644
--- a/doc/html/a00060.html
+++ b/doc/html/a00060.html
@@ -20,15 +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::interface5::reader_writer_lock::scoped_lock_read Member List</h1>This is the complete list of members for <a class="el" href="a00188.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="a00188.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a>)</td><td><a class="el" href="a00188.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="a00188.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a>)</td><td><a class="el" href="a00188.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="a00188.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a>)</td><td><a class="el" href="a00188.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="a00188.html#87ab0dc8f7216e6ba0f7acd6aec33064">scoped_lock_read</a>(reader_writer_lock &lock)</td><td><a class="el" href="a00188.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="a00188.html#bd21c5f3d555d64d1de8658e15bf4966">~scoped_lock_read</a>()</td><td><a class="el" href="a00188.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::priority_queue_node< T, Compare > Member List</h1>This is the complete list of members for <a class="el" href="a00268.html">tbb::priority_queue_node< T, Compare ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00225.html#7360978fa427d054bc6cde05c80e5e9f">buffer_node</a>(graph &g)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>con_res</b> enum value (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>FAILED</b> enum value (defined in <a class="el" href="a00268.html">tbb::priority_queue_node< T, Compare ></a>)</td><td><a class="el" href="a00268.html">tbb::priority_queue_node< T, Compare ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#3a31b3b55bee417de3af09c7b45b9ad6">forward</a>()</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>forwarder_busy</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#3ec9d33aa9f1e9292d5952e3eb477ca1">grow_my_array</a>(size_t minimum_size)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>handle_operations</b>(prio_operation *op_list) (defined in <a class="el" href="a00268.html">tbb::priority_queue_node< T, Compare ></a>)</td><td><a class="el" href="a00268.html">tbb::priority_queue_node< T, Compare ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>initial_buffer_size</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#40fdedd4829aeae3ebd1a5fdaf39b23d">input_type</a> typedef</td><td><a class="el" href="a00268.html">tbb::priority_queue_node< T, Compare ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::forward_task< buffer_node< T > ></b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></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="a00268.html">tbb::priority_queue_node< T, Compare ></a>)</td><td><a class="el" href="a00268.html">tbb::priority_queue_node< T, Compare ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#79161e73f79cc43b2c2b08367504dfda">internal_forward</a>(prio_operation *op)</td><td><a class="el" href="a00268.html">tbb::priority_queue_node< T, Compare ></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="a00268.html">tbb::priority_queue_node< T, Compare ></a>)</td><td><a class="el" href="a00268.html">tbb::priority_queue_node< T, Compare ></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="a00268.html">tbb::priority_queue_node< T, Compare ></a>)</td><td><a class="el" href="a00268.html">tbb::priority_queue_node< T, Compare ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#017f16c8d6e0fb65d0d3a61aec86b3e2">internal_reg_succ</a>(buffer_operation *op)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></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="a00268.html">tbb::priority_queue_node< T, Compare ></a>)</td><td><a class="el" href="a00268.html">tbb::priority_queue_node< T, Compare ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#a75f731cf9fc93f7487eb72de3fcf7b1">internal_rem_succ</a>(buffer_operation *op)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></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="a00268.html">tbb::priority_queue_node< T, Compare ></a>)</td><td><a class="el" href="a00268.html">tbb::priority_queue_node< T, Compare ></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="a00268.html">tbb::priority_queue_node< T, Compare ></a>)</td><td><a class="el" href="a00268.html">tbb::priority_queue_node< T, Compare ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_aggregator</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_array</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_array_size</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_head</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_mutex</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_parent</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_reserved</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_reserved_id</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_successors</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_tail</b> (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>op_stat</b> enum name (defined in <a class="el" href="a00268.html">tbb::priority_queue_node< T, Compare ></a>)</td><td><a class="el" href="a00268.html">tbb::priority_queue_node< T, Compare ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>op_type</b> enum name (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#3b3fa4479416e7cb6d4a6a4b175c2b15">output_type</a> typedef</td><td><a class="el" href="a00268.html">tbb::priority_queue_node< T, Compare ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#98900a87758cac05500fcbc74113cebf">predecessor_type</a> typedef</td><td><a class="el" href="a00268.html">tbb::priority_queue_node< T, Compare ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>prio_operation</b> typedef (defined in <a class="el" href="a00268.html">tbb::priority_queue_node< T, Compare ></a>)</td><td><a class="el" href="a00268.html">tbb::priority_queue_node< T, Compare ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#1630f68674c4b201346a391b1e8d3f5d">priority_queue_node</a>(graph &g)</td><td><a class="el" href="a00268.html">tbb::priority_queue_node< T, Compare ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>put_item</b> enum value (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>reg_succ</b> enum value (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00277.html#14ae737c8fca4c8bf8e1a736dfbac444">register_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00277.html">tbb::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#cd2ef588b0ee6eb8d23ee169e00c73a9">register_successor</a>(receiver< output_type > &r)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></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="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>rem_succ</b> enum value (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00277.html#d2f23b40b328dc254a7c2a0a30f408e4">remove_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00277.html">tbb::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#415428db02e74a479fb056a8ed72ba53">remove_successor</a>(receiver< output_type > &r)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></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="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>res_item</b> enum value (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00268.html">tbb::priority_queue_node< T, Compare ></a>)</td><td><a class="el" href="a00268.html">tbb::priority_queue_node< T, Compare ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>SUCCEEDED</b> enum value (defined in <a class="el" href="a00268.html">tbb::priority_queue_node< T, Compare ></a>)</td><td><a class="el" href="a00268.html">tbb::priority_queue_node< T, Compare ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#e01014f2e5ceea292c68f6fe47391c57">successor_type</a> typedef</td><td><a class="el" href="a00268.html">tbb::priority_queue_node< T, Compare ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#46b8b257a97e2192a2b11743279e8ffe">try_consume</a>()</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></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="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#b68bdec127703dbfb2d93d685abbfd67">try_get</a>(T &v)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#f74899ffb67687998168ad428f586b64">try_put</a>(T t)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#435e29a66f0719d4822a0a8dc78a0405">try_release</a>()</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00225.html#11ebad4c72082a1a03ecccd3afab4ae2">try_reserve</a>(T &v)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>WAIT</b> enum value (defined in <a class="el" href="a00268.html">tbb::priority_queue_node< T, Compare ></a>)</td><td><a class="el" href="a00268.html">tbb::priority_queue_node< T, Compare ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~buffer_node</b>() (defined in <a class="el" href="a00225.html">tbb::buffer_node< T ></a>)</td><td><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~graph_node</b>() (defined in <a class="el" href="a00251.html">tbb::graph_node</a>)</td><td><a class="el" href="a00251.html">tbb::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00277.html#18f74b83abae0ee1e4ce07942797ef27">~receiver</a>()</td><td><a class="el" href="a00277.html">tbb::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~sender</b>() (defined in <a class="el" href="a00282.html">tbb::sender< T ></a>)</td><td><a class="el" href="a00282.html">tbb::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00061.html b/doc/html/a00061.html
index 31bb962..cb52008 100644
--- a/doc/html/a00061.html
+++ b/doc/html/a00061.html
@@ -20,22 +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::recursive_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00189.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="a00189.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00189.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="a00189.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00189.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="a00189.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00189.html">tbb::recursive_mutex</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00189.html#4c342c69d47f4bb0b393535dee4015d6">lock</a>()</td><td><a class="el" href="a00189.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="a00189.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00189.html">tbb::recursive_mutex</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00189.html#889fa8cc32dd707eef7c0f52dda09c0d">native_handle_type</a> typedef</td><td><a class="el" href="a00189.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="a00189.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00189.html">tbb::recursive_mutex</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00189.html#d2fceb7f95c24a8cd1457d4527e4b8c6">recursive_mutex</a>()</td><td><a class="el" href="a00189.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="a00189.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00189.html">tbb::recursive_mutex</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00189.html#86e719b0afee25704af11ab97694d240">try_lock</a>()</td><td><a class="el" href="a00189.html">tbb::recursive_mutex</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00189.html#f0a96e26b7f074588dc31e32524856ae">unlock</a>()</td><td><a class="el" href="a00189.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="a00189.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00189.html">tbb::recursive_mutex</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::limiter_node< T > Member List</h1>This is the complete list of members for <a class="el" href="a00255.html">tbb::limiter_node< T ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00255.html#181fa37d3e3c68ec3819ea46beed79a2">decrement</a></td><td><a class="el" href="a00255.html">tbb::limiter_node< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00255.html#f654b8974c613e8fd3de5a40e181d5ff">input_type</a> typedef</td><td><a class="el" href="a00255.html">tbb::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="a00255.html">tbb::limiter_node< T ></a>)</td><td><a class="el" href="a00255.html">tbb::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="a00255.html">tbb::limiter_node< T ></a>)</td><td><a class="el" href="a00255.html">tbb::limiter_node< T ></a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00255.html#f0139fc645a51ce30b7aebb59c38a4ed">limiter_node</a>(graph &g, size_t threshold, int number_of_decrement_predecessors=0)</td><td><a class="el" href="a00255.html">tbb::limiter_node< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00255.html#370f88278dec6f584c1d08a375f9b4cd">output_type</a> typedef</td><td><a class="el" href="a00255.html">tbb::limiter_node< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00255.html#fd88ce7670e7107aef2161b45f156185">predecessor_type</a> typedef</td><td><a class="el" href="a00255.html">tbb::limiter_node< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00255.html#fb9909b87538f5c881c7cb7577436d14">register_predecessor</a>(predecessor_type &src)</td><td><a class="el" href="a00255.html">tbb::limiter_node< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00277.html#14ae737c8fca4c8bf8e1a736dfbac444">tbb::receiver::register_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00277.html">tbb::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00255.html#b8b9dbfbfc52750fa0c6bb8849681e86">register_successor</a>(receiver< output_type > &r)</td><td><a class="el" href="a00255.html">tbb::limiter_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00255.html#a05cf39b2825183e9c0393890fbbbb41">remove_predecessor</a>(predecessor_type &src)</td><td><a class="el" href="a00255.html">tbb::limiter_node< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00277.html#d2f23b40b328dc254a7c2a0a30f408e4">tbb::receiver::remove_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00277.html">tbb::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00255.html#047d77f583e789e6d3ac6a52aba3168b">remove_successor</a>(receiver< output_type > &r)</td><td><a class="el" href="a00255.html">tbb::limiter_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00255.html#754182cc1e5b403201495bc1fd45674b">successor_type</a> typedef</td><td><a class="el" href="a00255.html">tbb::limiter_node< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#add46946c4c7330422733432e4032fac">try_consume</a>()</td><td><a class="el" href="a00282.html">tbb::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#bf8c9235810354f3353a899c982645de">try_get</a>(T &)</td><td><a class="el" href="a00282.html">tbb::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00255.html#a38facb46cde854cb7408bf9f3bf8999">try_put</a>(T t)</td><td><a class="el" href="a00255.html">tbb::limiter_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#28c41df1c0c7ed485b4a691ec8f30098">try_release</a>()</td><td><a class="el" href="a00282.html">tbb::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#3506c7275aeeb2fc3ba5d5f10ee0adac">try_reserve</a>(T &)</td><td><a class="el" href="a00282.html">tbb::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="a00251.html">tbb::graph_node</a>)</td><td><a class="el" href="a00251.html">tbb::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00277.html#18f74b83abae0ee1e4ce07942797ef27">~receiver</a>()</td><td><a class="el" href="a00277.html">tbb::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~sender</b>() (defined in <a class="el" href="a00282.html">tbb::sender< T ></a>)</td><td><a class="el" href="a00282.html">tbb::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00062.html b/doc/html/a00062.html
deleted file mode 100644
index 29d3140..0000000
--- a/doc/html/a00062.html
+++ /dev/null
@@ -1,39 +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::recursive_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00190.html">tbb::recursive_mutex::scoped_lock</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00190.html#7fb04da37cccf8c99b1f9102d9074f9a">acquire</a>(recursive_mutex &mutex)</td><td><a class="el" href="a00190.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="a00190.html">tbb::recursive_mutex::scoped_lock</a>)</td><td><a class="el" href="a00190.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00190.html#ac480ea0e9d5ea0345a67d57008b6263">release</a>()</td><td><a class="el" href="a00190.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00190.html#d82d4d36fbf9727a493d26ae50855fe7">scoped_lock</a>()</td><td><a class="el" href="a00190.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00190.html#dec17713c4c1321ac8fec66816d0c602">scoped_lock</a>(recursive_mutex &mutex)</td><td><a class="el" href="a00190.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00190.html#36bfc3e93e3ef6340abef4901444d340">try_acquire</a>(recursive_mutex &mutex)</td><td><a class="el" href="a00190.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00190.html#c1197ffb8f3cd9d4fed71d7e06265b7c">~scoped_lock</a>()</td><td><a class="el" href="a00190.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00063.html b/doc/html/a00063.html
deleted file mode 100644
index 9dc36fd..0000000
--- a/doc/html/a00063.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::scalable_allocator< T > Member List</h1>This is the complete list of members for <a class="el" href="a00191.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="a00191.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00191.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="a00191.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00191.html">tbb::scalable_allocator< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00191.html#726b1586d05d44665a36e1c7b2699bfd">allocate</a>(size_type n, const void *=0)</td><td><a class="el" href="a00191.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="a00191.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00191.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="a00191.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00191.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="a00191.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00191.html">tbb::scalable_allocator< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00191.html#f806a238c18cbcfb531e1e0a0d2ec59d">deallocate</a>(pointer p, size_type)</td><td><a class="el" href="a00191.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="a00191.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00191.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="a00191.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00191.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00191.html#880e766f1d913988c21973dbdd874fd5">max_size</a>() const </td><td><a class="el" href="a00191.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="a00191.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00191.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00191.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00191.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>scalable_allocator</b>() (defined in <a class="el" href="a00191.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00191.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="a00191.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00191.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="a00191.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00191.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="a00191.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00191.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="a00191.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00191.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00065.html b/doc/html/a00065.html
index 7ac1702..f9800d9 100644
--- a/doc/html/a00065.html
+++ b/doc/html/a00065.html
@@ -20,13 +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< void > Member List</h1>This is the complete list of members for <a class="el" href="a00192.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="a00192.html">tbb::scalable_allocator< void ></a>)</td><td><a class="el" href="a00192.html">tbb::scalable_allocator< void ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00192.html">tbb::scalable_allocator< void ></a>)</td><td><a class="el" href="a00192.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="a00192.html">tbb::scalable_allocator< void ></a>)</td><td><a class="el" href="a00192.html">tbb::scalable_allocator< void ></a></td><td></td></tr>
+<h1>tbb::internal::two_phase_port< T > Member List</h1>This is the complete list of members for <a class="el" href="a00304.html">tbb::internal::two_phase_port< T ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00304.html#684f6bbc3290270ed43cb34ffd273f71">consume</a>()</td><td><a class="el" href="a00304.html">tbb::internal::two_phase_port< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00304.html#0f464d59e15941d6d625e8c7d634e26b">input_type</a> typedef</td><td><a class="el" href="a00304.html">tbb::internal::two_phase_port< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00304.html#37ee9b5320b631c39bccc0b4745d88d1">predecessor_type</a> typedef</td><td><a class="el" href="a00304.html">tbb::internal::two_phase_port< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00304.html#6dc1f9bf02109c7f6fe4cc58bc31a00c">register_predecessor</a>(sender< T > &src)</td><td><a class="el" href="a00304.html">tbb::internal::two_phase_port< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00304.html#091f6efffaadbbeca6cf23483dabd891">release</a>()</td><td><a class="el" href="a00304.html">tbb::internal::two_phase_port< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00304.html#a734a55289804ff34ce1c6ac4c5075e4">remove_predecessor</a>(sender< T > &src)</td><td><a class="el" href="a00304.html">tbb::internal::two_phase_port< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00304.html#1d7399cfc77fca8878d8d16049ce4e7e">reserve</a>(T &v)</td><td><a class="el" href="a00304.html">tbb::internal::two_phase_port< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>set_join_node_pointer</b>(forwarding_base *join) (defined in <a class="el" href="a00304.html">tbb::internal::two_phase_port< T ></a>)</td><td><a class="el" href="a00304.html">tbb::internal::two_phase_port< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00304.html#f316c0d5ff67068ff23b684accbe87f4">try_put</a>(T)</td><td><a class="el" href="a00304.html">tbb::internal::two_phase_port< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00304.html#60e17ef935031c86c4a288eafab5c066">two_phase_port</a>()</td><td><a class="el" href="a00304.html">tbb::internal::two_phase_port< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>two_phase_port</b>(const two_phase_port &) (defined in <a class="el" href="a00304.html">tbb::internal::two_phase_port< T ></a>)</td><td><a class="el" href="a00304.html">tbb::internal::two_phase_port< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00277.html#18f74b83abae0ee1e4ce07942797ef27">~receiver</a>()</td><td><a class="el" href="a00277.html">tbb::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00067.html b/doc/html/a00067.html
index d0f95f3..6b72233 100644
--- a/doc/html/a00067.html
+++ b/doc/html/a00067.html
@@ -20,19 +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::spin_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00194.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="a00194.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00194.html">tbb::spin_mutex</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00194.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00194.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="a00194.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00194.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="a00194.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00194.html">tbb::spin_mutex</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00194.html#4f748989e19b6045e3a2d2ee73626a28">lock</a>()</td><td><a class="el" href="a00194.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="a00194.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00194.html">tbb::spin_mutex</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00194.html#3d8fb44644fd8d41ada1fbeba7409be3">spin_mutex</a>()</td><td><a class="el" href="a00194.html">tbb::spin_mutex</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00194.html#8f9a58fb56a2b4c5efe1a7f7c1ae2074">try_lock</a>()</td><td><a class="el" href="a00194.html">tbb::spin_mutex</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00194.html#0e843ee6265f57f27d228ba91e7308ef">unlock</a>()</td><td><a class="el" href="a00194.html">tbb::spin_mutex</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::internal::join_node_base< JP, InputTuple, OutputTuple > Member List</h1>This is the complete list of members for <a class="el" href="a00254.html">tbb::internal::join_node_base< JP, InputTuple, OutputTuple ></a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>forward_task< join_node_base< JP, InputTuple, OutputTuple > ></b> (defined in <a class="el" href="a00254.html">tbb::internal::join_node_base< JP, InputTuple, OutputTuple ></a>)</td><td><a class="el" href="a00254.html">tbb::internal::join_node_base< JP, InputTuple, OutputTuple ></a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>input_port</b>(void) (defined in <a class="el" href="a00254.html">tbb::internal::join_node_base< JP, InputTuple, OutputTuple ></a>)</td><td><a class="el" href="a00254.html">tbb::internal::join_node_base< JP, InputTuple, OutputTuple ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>input_ports_type</b> typedef (defined in <a class="el" href="a00254.html">tbb::internal::join_node_base< JP, InputTuple, OutputTuple ></a>)</td><td><a class="el" href="a00254.html">tbb::internal::join_node_base< JP, InputTuple, OutputTuple ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>join_node_base</b>(graph &g) (defined in <a class="el" href="a00254.html">tbb::internal::join_node_base< JP, InputTuple, OutputTuple ></a>)</td><td><a class="el" href="a00254.html">tbb::internal::join_node_base< JP, InputTuple, OutputTuple ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00254.html#578893d923f91b7e44a15dea8b0d7082">output_type</a> typedef</td><td><a class="el" href="a00254.html">tbb::internal::join_node_base< JP, InputTuple, OutputTuple ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>register_successor</b>(successor_type &r) (defined in <a class="el" href="a00254.html">tbb::internal::join_node_base< JP, InputTuple, OutputTuple ></a>)</td><td><a class="el" href="a00254.html">tbb::internal::join_node_base< JP, InputTuple, OutputTuple ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#be48ac70174cf8e08e2b0279cd6343d3">tbb::sender< OutputTuple >::register_successor</a>(successor_type &r)=0</td><td><a class="el" href="a00282.html">tbb::sender< OutputTuple ></a></td><td><code> [pure virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>remove_successor</b>(successor_type &r) (defined in <a class="el" href="a00254.html">tbb::internal::join_node_base< JP, InputTuple, OutputTuple ></a>)</td><td><a class="el" href="a00254.html">tbb::internal::join_node_base< JP, InputTuple, OutputTuple ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#3f345427e812e8741370308ff88f30bf">tbb::sender< OutputTuple >::remove_successor</a>(successor_type &r)=0</td><td><a class="el" href="a00282.html">tbb::sender< OutputTuple ></a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00254.html#1212cbaa293a93c3bf334da1539556bd">successor_type</a> typedef</td><td><a class="el" href="a00254.html">tbb::internal::join_node_base< JP, InputTuple, OutputTuple ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#add46946c4c7330422733432e4032fac">try_consume</a>()</td><td><a class="el" href="a00282.html">tbb::sender< OutputTuple ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00254.html#50c0e6465ac929a2e94d4e62a13ebeff">try_get</a>(output_type &v)</td><td><a class="el" href="a00254.html">tbb::internal::join_node_base< JP, InputTuple, OutputTuple ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#28c41df1c0c7ed485b4a691ec8f30098">try_release</a>()</td><td><a class="el" href="a00282.html">tbb::sender< OutputTuple ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#3506c7275aeeb2fc3ba5d5f10ee0adac">try_reserve</a>(OutputTuple &)</td><td><a class="el" href="a00282.html">tbb::sender< OutputTuple ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~graph_node</b>() (defined in <a class="el" href="a00251.html">tbb::graph_node</a>)</td><td><a class="el" href="a00251.html">tbb::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~sender</b>() (defined in <a class="el" href="a00282.html">tbb::sender< OutputTuple ></a>)</td><td><a class="el" href="a00282.html">tbb::sender< OutputTuple ></a></td><td><code> [inline, virtual]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00068.html b/doc/html/a00068.html
deleted file mode 100644
index ae5a08e..0000000
--- a/doc/html/a00068.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>Member List</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
-    <li><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="annotated.html"><span>Class List</span></a></li>
-    <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-    <li><a href="functions.html"><span>Class Members</span></a></li>
-  </ul></div>
-<h1>tbb::spin_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00195.html">tbb::spin_mutex::scoped_lock</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00195.html#3ee3c338732b1f64b0b32a757807a30d">acquire</a>(spin_mutex &m)</td><td><a class="el" href="a00195.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00195.html#eeb615e68e963e6bf8d9c11402d0ce8e">release</a>()</td><td><a class="el" href="a00195.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00195.html#29ae680ae7f5e685c2e15535b9c855b3">scoped_lock</a>()</td><td><a class="el" href="a00195.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00195.html#5ce6807050a9e8f87bcb4a65dccb12ef">scoped_lock</a>(spin_mutex &m)</td><td><a class="el" href="a00195.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="a00195.html">tbb::spin_mutex::scoped_lock</a>)</td><td><a class="el" href="a00195.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00195.html#9297ec188534b45dc0ca48f2f39a0501">try_acquire</a>(spin_mutex &m)</td><td><a class="el" href="a00195.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00195.html#ac6fa425d1f06c56d8b70abc51aac844">~scoped_lock</a>()</td><td><a class="el" href="a00195.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00069.html b/doc/html/a00069.html
deleted file mode 100644
index bf73f96..0000000
--- a/doc/html/a00069.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>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="a00196.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="a00196.html">tbb::spin_rw_mutex_v3</a>)</td><td><a class="el" href="a00196.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="a00196.html">tbb::spin_rw_mutex_v3</a>)</td><td><a class="el" href="a00196.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="a00196.html">tbb::spin_rw_mutex_v3</a>)</td><td><a class="el" href="a00196.html">tbb::spin_rw_mutex_v3</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00196.html#4007d6e1523dbc3c2bb7f889ab789a8a">lock</a>()</td><td><a class="el" href="a00196.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00196.html#13f799708ac4ca437a16be202e263e18">lock_read</a>()</td><td><a class="el" href="a00196.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00196.html#61332b2756de89f3f5f69310cbb6e70c">spin_rw_mutex_v3</a>()</td><td><a class="el" href="a00196.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00196.html#088bb256be794cc47d3b83791632fdfc">try_lock</a>()</td><td><a class="el" href="a00196.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00196.html#b8667415869013f840d976aa406d385a">try_lock_read</a>()</td><td><a class="el" href="a00196.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00196.html#f9f52ead2098eb5fb12da59d5ae53b55">unlock</a>()</td><td><a class="el" href="a00196.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00196.html#9a815fb2759e55072ed413f1b6970cf3">~spin_rw_mutex_v3</a>()</td><td><a class="el" href="a00196.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00070.html b/doc/html/a00070.html
deleted file mode 100644
index c7bc843..0000000
--- a/doc/html/a00070.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::spin_rw_mutex_v3::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00197.html">tbb::spin_rw_mutex_v3::scoped_lock</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00197.html#b0b646ec5be02a127d159bbb7ca65353">acquire</a>(spin_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00197.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00197.html#c2c2c38a08cb9080e87099fac3e5bc94">downgrade_to_reader</a>()</td><td><a class="el" href="a00197.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00197.html#61b14d00a78185c9b2d206ebfc379124">release</a>()</td><td><a class="el" href="a00197.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00197.html#d6ea60dee5563f702379bf5e51aa8806">scoped_lock</a>()</td><td><a class="el" href="a00197.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00197.html#42a92d4f8fdde425b111cfa8a9228071">scoped_lock</a>(spin_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00197.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00197.html#9879626968d9b9a04cd2ec0fb2e84ae1">try_acquire</a>(spin_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00197.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00197.html#3f0b1e3f2efab63336400348bd070226">upgrade_to_writer</a>()</td><td><a class="el" href="a00197.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00197.html#d7eaaa3f2e2c5dc11e7005811b1bdd04">~scoped_lock</a>()</td><td><a class="el" href="a00197.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the 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
deleted file mode 100644
index aaaa32b..0000000
--- a/doc/html/a00072.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>Member List</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="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::internal::task_base Member List</h1>This is the complete list of members for <a class="el" href="a00200.html">tbb::interface5::internal::task_base</a>, including all inherited members.<p><table>
-</table><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00073.html b/doc/html/a00073.html
deleted file mode 100644
index 935c2af..0000000
--- a/doc/html/a00073.html
+++ /dev/null
@@ -1,48 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>Member List</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
-    <li><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="annotated.html"><span>Class List</span></a></li>
-    <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-    <li><a href="functions.html"><span>Class Members</span></a></li>
-  </ul></div>
-<h1>tbb::task_group_context Member List</h1>This is the complete list of members for <a class="el" href="a00201.html">tbb::task_group_context</a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>bound</b> enum value (defined in <a class="el" href="a00201.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00201.html">tbb::task_group_context</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00201.html#8bcdfdf4e6bfb76125b6de15c00b571d">cancel_group_execution</a>()</td><td><a class="el" href="a00201.html">tbb::task_group_context</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>concurrent_wait</b> enum value (defined in <a class="el" href="a00201.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00201.html">tbb::task_group_context</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>default_traits</b> enum value (defined in <a class="el" href="a00201.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00201.html">tbb::task_group_context</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>exact_exception</b> enum value (defined in <a class="el" href="a00201.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00201.html">tbb::task_group_context</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00201.html#49a55352084fd44b8863d182e839e6dc">init</a>()</td><td><a class="el" href="a00201.html">tbb::task_group_context</a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_with_context_proxy</b> (defined in <a class="el" href="a00201.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00201.html">tbb::task_group_context</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00201.html#4db72f16210b0a991b2c134d6763a4cc">is_group_execution_cancelled</a>() const </td><td><a class="el" href="a00201.html">tbb::task_group_context</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>isolated</b> enum value (defined in <a class="el" href="a00201.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00201.html">tbb::task_group_context</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>kind_type</b> enum name (defined in <a class="el" href="a00201.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00201.html">tbb::task_group_context</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00201.html#d97c8a03615594b71b4ef06ff75cf561">register_pending_exception</a>()</td><td><a class="el" href="a00201.html">tbb::task_group_context</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00201.html#6d30d16bf1cd22f86c6afaf29c2b430c">reset</a>()</td><td><a class="el" href="a00201.html">tbb::task_group_context</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>task</b> (defined in <a class="el" href="a00201.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00201.html">tbb::task_group_context</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00201.html#19fee08fb8ac98adccfe69c1aa63c491">task_group_context</a>(kind_type relation_with_parent=bound, uintptr_t traits=default_traits)</td><td><a class="el" href="a00201.html">tbb::task_group_context</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>traits_type</b> enum name (defined in <a class="el" href="a00201.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00201.html">tbb::task_group_context</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>~task_group_context</b>() (defined in <a class="el" href="a00201.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00201.html">tbb::task_group_context</a></td><td></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00075.html b/doc/html/a00075.html
deleted file mode 100644
index 6a8540a..0000000
--- a/doc/html/a00075.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>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="a00199.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="a00199.html">tbb::task</a>)</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#3a920a56b0bcf2801518fb45b2c9d2be">affinity</a>() const </td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#d61bb32389d3857bf7511d69beaafb76">affinity_id</a> typedef</td><td><a class="el" href="a00199.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#1ff794f7053cd9148d5f280fbf07377f">allocate_child</a>()</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#1434c79a5138993269d034008bff7329">allocate_continuation</a>()</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#23acb0da0afd690da797f9f882027d34">allocate_root</a>()</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#8ccc518caf31075a3e073996d2d240a4">allocate_root</a>(task_group_context &ctx)</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">allocated</a> enum value</td><td><a class="el" href="a00199.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#0f3fb4aac549ab642022450a4bd13326">cancel_group_execution</a>()</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#d8c36a93f3972590fbb65ff1cef3173b">context</a>()</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#ef4680f5c148020c5e7e43ddef44cd5d">decrement_ref_count</a>()</td><td><a class="el" href="a00199.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="a00199.html">tbb::task</a>)</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#dfaacf92685e5f86393bf657b2853bf8">destroy</a>(task &t)</td><td><a class="el" href="a00199.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#8365d063c0cc9d7bd616bca47256b93c">enqueue</a>(task &t)</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#22c298cd40937a431a06777423f002f6">execute</a>()=0</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [pure virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">executing</a> enum value</td><td><a class="el" href="a00199.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">freed</a> enum value</td><td><a class="el" href="a00199.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#f5fb43c7ad0de5a4b95703cebc39e345">increment_ref_count</a>()</td><td><a class="el" href="a00199.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="a00199.html">tbb::task</a>)</td><td><a class="el" href="a00199.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="a00199.html">tbb::task</a>)</td><td><a class="el" href="a00199.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="a00199.html">tbb::task</a>)</td><td><a class="el" href="a00199.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="a00199.html">tbb::task</a>)</td><td><a class="el" href="a00199.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="a00199.html">tbb::task</a>)</td><td><a class="el" href="a00199.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="a00199.html">tbb::task</a>)</td><td><a class="el" href="a00199.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="a00199.html">tbb::task</a>)</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#025f18118c057c4c8db87ff2ce8df975">is_cancelled</a>() const </td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#c26718b3b247cd13deb1a741902e7105">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00199.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#f9169402702f56bf519448aaf34450aa">is_stolen_task</a>() const </td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#713c338c8eeaebdc5a6b10a69c039b06">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#314e98ee4347ccec83efcb9ee22e8596">parent</a>() const </td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">ready</a> enum value</td><td><a class="el" href="a00199.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">recycle</a> enum value</td><td><a class="el" href="a00199.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#db399855177438bbc9cc61d508dae8d2">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#a67a79e18f62b43a623a00cfbd76db4c">recycle_as_continuation</a>()</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#3b290d14109704e2b69dc1ac980a7a76">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#4f1be9bbcdb487830dbe298b68d85144">recycle_to_reexecute</a>()</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">reexecute</a> enum value</td><td><a class="el" href="a00199.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#ad774f55eaec008ae02b236423209ced">ref_count</a>() const </td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#bd43e8d6249738efafd12d6a4c72c5e3">self</a>()</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#dca19d7a45487a7d67a0db517e2b57c9">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00199.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="a00199.html">tbb::task</a>)</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#06a4206a57e8e12a439b14d6d41cfd92">set_ref_count</a>(int count)</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#3ce28ca9baa771cfc37ecd72e69c4f3c">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#894ab68378e502776d8220eea7ce9fa1">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00199.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#ce8ce689c26a4ddf343829bc3c73290a">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#c33c7edbaec67aa8a56f48986a9dc69f">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#0af7b2d7e6e8b4333b2accfce3dfb374">state</a>() const </td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293e">state_type</a> enum name</td><td><a class="el" href="a00199.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#2bce8ec6e44706e70128f5cf91b76e67">task</a>()</td><td><a class="el" href="a00199.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="a00199.html">tbb::task</a>)</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#53d2615ad9c38859b4c8080936600283">wait_for_all</a>()</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#98245ee0473f84cb19dbbf8c81134908">~task</a>()</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00076.html b/doc/html/a00076.html
deleted file mode 100644
index 2db1358..0000000
--- a/doc/html/a00076.html
+++ /dev/null
@@ -1,82 +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="a00162.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="a00199.html">tbb::task</a>)</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#3a920a56b0bcf2801518fb45b2c9d2be">affinity</a>() const </td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#d61bb32389d3857bf7511d69beaafb76">affinity_id</a> typedef</td><td><a class="el" href="a00199.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#1ff794f7053cd9148d5f280fbf07377f">allocate_child</a>()</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#1434c79a5138993269d034008bff7329">allocate_continuation</a>()</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#23acb0da0afd690da797f9f882027d34">allocate_root</a>()</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#8ccc518caf31075a3e073996d2d240a4">allocate_root</a>(task_group_context &ctx)</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">allocated</a> enum value</td><td><a class="el" href="a00199.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#0f3fb4aac549ab642022450a4bd13326">cancel_group_execution</a>()</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#d8c36a93f3972590fbb65ff1cef3173b">context</a>()</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#ef4680f5c148020c5e7e43ddef44cd5d">decrement_ref_count</a>()</td><td><a class="el" href="a00199.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="a00199.html">tbb::task</a>)</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#dfaacf92685e5f86393bf657b2853bf8">destroy</a>(task &t)</td><td><a class="el" href="a00199.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#8365d063c0cc9d7bd616bca47256b93c">enqueue</a>(task &t)</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">executing</a> enum value</td><td><a class="el" href="a00199.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">freed</a> enum value</td><td><a class="el" href="a00199.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#f5fb43c7ad0de5a4b95703cebc39e345">increment_ref_count</a>()</td><td><a class="el" href="a00199.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="a00199.html">tbb::task</a>)</td><td><a class="el" href="a00199.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="a00199.html">tbb::task</a>)</td><td><a class="el" href="a00199.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="a00199.html">tbb::task</a>)</td><td><a class="el" href="a00199.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="a00199.html">tbb::task</a>)</td><td><a class="el" href="a00199.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="a00199.html">tbb::task</a>)</td><td><a class="el" href="a00199.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="a00199.html">tbb::task</a>)</td><td><a class="el" href="a00199.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="a00199.html">tbb::task</a>)</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#025f18118c057c4c8db87ff2ce8df975">is_cancelled</a>() const </td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#c26718b3b247cd13deb1a741902e7105">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00199.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#f9169402702f56bf519448aaf34450aa">is_stolen_task</a>() const </td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#713c338c8eeaebdc5a6b10a69c039b06">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#314e98ee4347ccec83efcb9ee22e8596">parent</a>() const </td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">ready</a> enum value</td><td><a class="el" href="a00199.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">recycle</a> enum value</td><td><a class="el" href="a00199.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#db399855177438bbc9cc61d508dae8d2">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#a67a79e18f62b43a623a00cfbd76db4c">recycle_as_continuation</a>()</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#3b290d14109704e2b69dc1ac980a7a76">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#4f1be9bbcdb487830dbe298b68d85144">recycle_to_reexecute</a>()</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">reexecute</a> enum value</td><td><a class="el" href="a00199.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#ad774f55eaec008ae02b236423209ced">ref_count</a>() const </td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#bd43e8d6249738efafd12d6a4c72c5e3">self</a>()</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#dca19d7a45487a7d67a0db517e2b57c9">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00199.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="a00199.html">tbb::task</a>)</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#06a4206a57e8e12a439b14d6d41cfd92">set_ref_count</a>(int count)</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#3ce28ca9baa771cfc37ecd72e69c4f3c">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#894ab68378e502776d8220eea7ce9fa1">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00199.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#ce8ce689c26a4ddf343829bc3c73290a">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#c33c7edbaec67aa8a56f48986a9dc69f">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#0af7b2d7e6e8b4333b2accfce3dfb374">state</a>() const </td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293e">state_type</a> enum name</td><td><a class="el" href="a00199.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#2bce8ec6e44706e70128f5cf91b76e67">task</a>()</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#53d2615ad9c38859b4c8080936600283">wait_for_all</a>()</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00199.html#98245ee0473f84cb19dbbf8c81134908">~task</a>()</td><td><a class="el" href="a00199.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00077.html b/doc/html/a00077.html
deleted file mode 100644
index 5175d70..0000000
--- a/doc/html/a00077.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::task_list Member List</h1>This is the complete list of members for <a class="el" href="a00202.html">tbb::task_list</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00202.html#fce446ee13e025969945328f3ff59b95">clear</a>()</td><td><a class="el" href="a00202.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00202.html#f3ac31e092814b90929f81bb30441959">empty</a>() const </td><td><a class="el" href="a00202.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="a00202.html">tbb::task_list</a>)</td><td><a class="el" href="a00202.html">tbb::task_list</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00202.html#5fe85df5ed524418389d34051750347d">pop_front</a>()</td><td><a class="el" href="a00202.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00202.html#4cd34756bc4763dafb8c84838a0124ff">push_back</a>(task &task)</td><td><a class="el" href="a00202.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="a00202.html">tbb::task_list</a>)</td><td><a class="el" href="a00202.html">tbb::task_list</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00202.html#416341c2047eaef50417b41eaf7e9de6">task_list</a>()</td><td><a class="el" href="a00202.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00202.html#6d438f1499a02db1e59c24ab6043e5ba">~task_list</a>()</td><td><a class="el" href="a00202.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00078.html b/doc/html/a00078.html
new file mode 100644
index 0000000..575a53d
--- /dev/null
+++ b/doc/html/a00078.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="a00258.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="a00258.html">tbb::mutex</a>)</td><td><a class="el" href="a00258.html">tbb::mutex</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>HELD</b> enum value (defined in <a class="el" href="a00258.html">tbb::mutex</a>)</td><td><a class="el" href="a00258.html">tbb::mutex</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>INITIALIZED</b> enum value (defined in <a class="el" href="a00258.html">tbb::mutex</a>)</td><td><a class="el" href="a00258.html">tbb::mutex</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00258.html">tbb::mutex</a>)</td><td><a class="el" href="a00258.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="a00258.html">tbb::mutex</a>)</td><td><a class="el" href="a00258.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="a00258.html">tbb::mutex</a>)</td><td><a class="el" href="a00258.html">tbb::mutex</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00258.html#4470e61c24c129a0299ca6c17240adbb">lock</a>()</td><td><a class="el" href="a00258.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00258.html#05313cb77d4f85213103d4dab74ed454">mutex</a>()</td><td><a class="el" href="a00258.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="a00258.html">tbb::mutex</a>)</td><td><a class="el" href="a00258.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00258.html#9f1ec84d5815263ceae853f06ddb4cac">native_handle_type</a> typedef</td><td><a class="el" href="a00258.html">tbb::mutex</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>native_handle_type</b> typedef (defined in <a class="el" href="a00258.html">tbb::mutex</a>)</td><td><a class="el" href="a00258.html">tbb::mutex</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b> (defined in <a class="el" href="a00258.html">tbb::mutex</a>)</td><td><a class="el" href="a00258.html">tbb::mutex</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00258.html#795649a185b0d6af6dc81c5f378616dd">set_state</a>(state_t to)</td><td><a class="el" href="a00258.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="a00258.html">tbb::mutex</a>)</td><td><a class="el" href="a00258.html">tbb::mutex</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00258.html#4331652c79dea1c1131bd59ab161b234">try_lock</a>()</td><td><a class="el" href="a00258.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00258.html#5fc9ef443ae75d966695546be399cc6b">unlock</a>()</td><td><a class="el" href="a00258.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~mutex</b>() (defined in <a class="el" href="a00258.html">tbb::mutex</a>)</td><td><a class="el" href="a00258.html">tbb::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
new file mode 100644
index 0000000..57a201f
--- /dev/null
+++ b/doc/html/a00079.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::mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00259.html">tbb::mutex::scoped_lock</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00259.html#862e022841cdc522e4296a5533b22efd">acquire</a>(mutex &mutex)</td><td><a class="el" href="a00259.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="a00259.html">tbb::mutex::scoped_lock</a>)</td><td><a class="el" href="a00259.html">tbb::mutex::scoped_lock</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00259.html#0d51d18cd99df3b2e93bf07378d0992c">release</a>()</td><td><a class="el" href="a00259.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00259.html#1d403ae51b484df5d86d85ae38f11e6e">scoped_lock</a>()</td><td><a class="el" href="a00259.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00259.html#605a6b9af0f8cdabdf81825e0de99600">scoped_lock</a>(mutex &mutex)</td><td><a class="el" href="a00259.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00259.html#591e0c49b82bcedffcbe0923f1b915ec">try_acquire</a>(mutex &mutex)</td><td><a class="el" href="a00259.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00259.html#0ebbbecaf4311e9df7362cb76ceaa368">~scoped_lock</a>()</td><td><a class="el" href="a00259.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.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the 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
new file mode 100644
index 0000000..641ac00
--- /dev/null
+++ b/doc/html/a00080.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::null_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00260.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="a00260.html">tbb::null_mutex</a>)</td><td><a class="el" href="a00260.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="a00260.html">tbb::null_mutex</a>)</td><td><a class="el" href="a00260.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="a00260.html">tbb::null_mutex</a>)</td><td><a class="el" href="a00260.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="a00260.html">tbb::null_mutex</a>)</td><td><a class="el" href="a00260.html">tbb::null_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/a00081.html b/doc/html/a00081.html
new file mode 100644
index 0000000..d215285
--- /dev/null
+++ b/doc/html/a00081.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::null_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00261.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="a00261.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00261.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="a00261.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00261.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="a00261.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00261.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="a00261.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00261.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="a00261.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00261.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="a00261.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00261.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.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the 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
new file mode 100644
index 0000000..e55d066
--- /dev/null
+++ b/doc/html/a00082.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::null_rw_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00262.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="a00262.html">tbb::null_rw_mutex</a>)</td><td><a class="el" href="a00262.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="a00262.html">tbb::null_rw_mutex</a>)</td><td><a class="el" href="a00262.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="a00262.html">tbb::null_rw_mutex</a>)</td><td><a class="el" href="a00262.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="a00262.html">tbb::null_rw_mutex</a>)</td><td><a class="el" href="a00262.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/a00083.html b/doc/html/a00083.html
new file mode 100644
index 0000000..a4c376f
--- /dev/null
+++ b/doc/html/a00083.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::null_rw_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00263.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="a00263.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00263.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="a00263.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00263.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="a00263.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00263.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="a00263.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00263.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="a00263.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00263.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="a00263.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00263.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="a00263.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00263.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="a00263.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00263.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/a00084.html b/doc/html/a00084.html
index 5bbf2bb..b59c34f 100644
--- a/doc/html/a00084.html
+++ b/doc/html/a00084.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::task_scheduler_init Member List</h1>This is the complete list of members for <a class="el" href="a00203.html">tbb::task_scheduler_init</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00203.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a></td><td><a class="el" href="a00203.html">tbb::task_scheduler_init</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00203.html#ba00714c33a41a3c2216f48613971cab">default_num_threads</a>()</td><td><a class="el" href="a00203.html">tbb::task_scheduler_init</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00203.html#e6c860f1e559026ff3ef4599c0d6c514">deferred</a></td><td><a class="el" href="a00203.html">tbb::task_scheduler_init</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00203.html#d476053cc712e572554823492a5229ce">initialize</a>(int number_of_threads=automatic)</td><td><a class="el" href="a00203.html">tbb::task_scheduler_init</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00203.html#d5ed214a8bb53b0466ed91ff4734b9a3">initialize</a>(int number_of_threads, stack_size_type thread_stack_size)</td><td><a class="el" href="a00203.html">tbb::task_scheduler_init</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00203.html#12752282977029f23416642bc03e8b74">is_active</a>() const </td><td><a class="el" href="a00203.html">tbb::task_scheduler_init</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00203.html#421600bf9bf9338bcf937063f2ff0e90">task_scheduler_init</a>(int number_of_threads=automatic, stack_size_type thread_stack_size=0)</td><td><a class="el" href="a00203.html">tbb::task_scheduler_init</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00203.html#f73257e04cb7fb9bd5be2b635d9016f1">terminate</a>()</td><td><a class="el" href="a00203.html">tbb::task_scheduler_init</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00203.html#4da6c86292d80c703a66c1f6f5299488">~task_scheduler_init</a>()</td><td><a class="el" href="a00203.html">tbb::task_scheduler_init</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="a00264.html">tbb::parallel_do_feeder< Item ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00264.html#40baaf0f6856f4491dd0adf896c93516">add</a>(const Item &item)</td><td><a class="el" href="a00264.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="a00264.html">tbb::parallel_do_feeder< Item ></a>)</td><td><a class="el" href="a00264.html">tbb::parallel_do_feeder< Item ></a></td><td><code> [friend]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00085.html b/doc/html/a00085.html
new file mode 100644
index 0000000..8db8eb1
--- /dev/null
+++ b/doc/html/a00085.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::pre_scan_tag Member List</h1>This is the complete list of members for <a class="el" href="a00267.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="a00267.html">tbb::pre_scan_tag</a>)</td><td><a class="el" href="a00267.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.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the 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 a278cc4..5893606 100644
--- a/doc/html/a00086.html
+++ b/doc/html/a00086.html
@@ -20,31 +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::tbb_allocator< T > Member List</h1>This is the complete list of members for <a class="el" href="a00204.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="a00204.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00204.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="a00204.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00204.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00204.html#f6cb487b1bdce0b581f265a77dca6d53">allocate</a>(size_type n, const void *=0)</td><td><a class="el" href="a00204.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00204.html#78701e7454ef8e1a25b5acd364367080">allocator_type</a>()</td><td><a class="el" href="a00204.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="a00204.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00204.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="a00204.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00204.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00204.html#ab228ab9e324ed041c2226e1d717df5f">construct</a>(pointer p, const value_type &value)</td><td><a class="el" href="a00204.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00204.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">deallocate</a>(pointer p, size_type)</td><td><a class="el" href="a00204.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00204.html#ef133522bf55f05a605bee0763208281">destroy</a>(pointer p)</td><td><a class="el" href="a00204.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="a00204.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00204.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00204.html#09a7f81fb2c3055aaecf058b11538544">malloc_type</a> enum name</td><td><a class="el" href="a00204.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00204.html#f059ca2c96243024f0d562ee3a87a3a5">max_size</a>() const </td><td><a class="el" href="a00204.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="a00204.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00204.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00204.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00204.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="a00204.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00204.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="a00204.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00204.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="a00204.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00204.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>tbb_allocator</b>() (defined in <a class="el" href="a00204.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00204.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="a00204.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00204.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="a00204.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00204.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="a00204.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00204.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
+<h1>tbb::final_scan_tag Member List</h1>This is the complete list of members for <a class="el" href="a00247.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="a00247.html">tbb::final_scan_tag</a>)</td><td><a class="el" href="a00247.html">tbb::final_scan_tag</a></td><td><code> [inline, static]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00087.html b/doc/html/a00087.html
new file mode 100644
index 0000000..f84857d
--- /dev/null
+++ b/doc/html/a00087.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::parallel_while< Body > Member List</h1>This is the complete list of members for <a class="el" href="a00265.html">tbb::parallel_while< Body ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00265.html#e131c560057a58229992b61eb8dba4c6">add</a>(const value_type &item)</td><td><a class="el" href="a00265.html">tbb::parallel_while< Body ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00265.html#36e26ba3880c7bcf804a97ba0cbe133f">parallel_while</a>()</td><td><a class="el" href="a00265.html">tbb::parallel_while< Body ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00265.html#b32a0a6e5e09ebb7fad3e6652c19afe5">run</a>(Stream &stream, const Body &body)</td><td><a class="el" href="a00265.html">tbb::parallel_while< Body ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00265.html#fa297e53d3af2a101e712bc200233e9c">value_type</a> typedef</td><td><a class="el" href="a00265.html">tbb::parallel_while< Body ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00265.html#6fcfc973cc56b79c6d0fbb8a31be7e84">~parallel_while</a>()</td><td><a class="el" href="a00265.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.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the 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
index 7667290..742a894 100644
--- a/doc/html/a00088.html
+++ b/doc/html/a00088.html
@@ -20,13 +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::tbb_allocator< void > Member List</h1>This is the complete list of members for <a class="el" href="a00205.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="a00205.html">tbb::tbb_allocator< void ></a>)</td><td><a class="el" href="a00205.html">tbb::tbb_allocator< void ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00205.html">tbb::tbb_allocator< void ></a>)</td><td><a class="el" href="a00205.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="a00205.html">tbb::tbb_allocator< void ></a>)</td><td><a class="el" href="a00205.html">tbb::tbb_allocator< void ></a></td><td></td></tr>
+<h1>tbb::simple_partitioner Member List</h1>This is the complete list of members for <a class="el" href="a00284.html">tbb::simple_partitioner</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>internal::start_for</b> (defined in <a class="el" href="a00284.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00284.html">tbb::simple_partitioner</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::start_reduce</b> (defined in <a class="el" href="a00284.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00284.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="a00284.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00284.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="a00284.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00284.html">tbb::simple_partitioner</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00090.html b/doc/html/a00090.html
index 54a3406..e7dad3a 100644
--- a/doc/html/a00090.html
+++ b/doc/html/a00090.html
@@ -20,22 +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::zero_allocator< T, Allocator > Member List</h1>This is the complete list of members for <a class="el" href="a00213.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="a00213.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00213.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="a00213.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00213.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="a00213.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00213.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="a00213.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00213.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="a00213.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00213.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="a00213.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00213.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="a00213.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00213.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="a00213.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00213.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="a00213.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00213.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="a00213.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00213.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="a00213.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00213.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="a00213.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00213.html">tbb::zero_allocator< T, Allocator ></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="a00219.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="a00219.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00219.html">tbb::auto_partitioner</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::start_for</b> (defined in <a class="el" href="a00219.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00219.html">tbb::auto_partitioner</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::start_reduce</b> (defined in <a class="el" href="a00219.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00219.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="a00219.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00219.html">tbb::auto_partitioner</a></td><td><code> [friend]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00092.html b/doc/html/a00092.html
index bb94cb0..3780df9 100644
--- a/doc/html/a00092.html
+++ b/doc/html/a00092.html
@@ -20,14 +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::zero_allocator< void, Allocator > Member List</h1>This is the complete list of members for <a class="el" href="a00214.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="a00214.html">tbb::zero_allocator< void, Allocator ></a>)</td><td><a class="el" href="a00214.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="a00214.html">tbb::zero_allocator< void, Allocator ></a>)</td><td><a class="el" href="a00214.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="a00214.html">tbb::zero_allocator< void, Allocator ></a>)</td><td><a class="el" href="a00214.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="a00214.html">tbb::zero_allocator< void, Allocator ></a>)</td><td><a class="el" href="a00214.html">tbb::zero_allocator< void, Allocator ></a></td><td></td></tr>
+<h1>tbb::affinity_partitioner Member List</h1>This is the complete list of members for <a class="el" href="a00212.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="a00212.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00212.html">tbb::affinity_partitioner</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::affinity_partition_type</b> (defined in <a class="el" href="a00212.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00212.html">tbb::affinity_partitioner</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::start_for</b> (defined in <a class="el" href="a00212.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00212.html">tbb::affinity_partitioner</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::start_reduce</b> (defined in <a class="el" href="a00212.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00212.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="a00212.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00212.html">tbb::affinity_partitioner</a></td><td><code> [friend]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00093.html b/doc/html/a00093.html
new file mode 100644
index 0000000..79f7e4a
--- /dev/null
+++ b/doc/html/a00093.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::filter Member List</h1>This is the complete list of members for <a class="el" href="a00245.html">tbb::filter</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00245.html#f17200974c33be21f42a5f00893de028">exact_exception_propagation</a></td><td><a class="el" href="a00245.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="a00245.html">tbb::filter</a>)</td><td><a class="el" href="a00245.html">tbb::filter</a></td><td><code> [inline, protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00245.html#dd6a6e7210efc9bcaf2c5e08767d92b5">filter_is_bound</a></td><td><a class="el" href="a00245.html">tbb::filter</a></td><td><code> [protected, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00245.html#2e5eb65f95d8050186278077e433c5b1">filter_is_out_of_order</a></td><td><a class="el" href="a00245.html">tbb::filter</a></td><td><code> [protected, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00245.html#4b7de3a76e744f3d9c1bc5d437ea851d">filter_is_serial</a></td><td><a class="el" href="a00245.html">tbb::filter</a></td><td><code> [protected, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00245.html#bdd02a434a6e7499dd1e8f43aae96793">filter_may_emit_null</a></td><td><a class="el" href="a00245.html">tbb::filter</a></td><td><code> [protected, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00245.html#56275eb889c77c4807967133e21401bd">finalize</a>(void *)</td><td><a class="el" href="a00245.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="a00245.html">tbb::filter</a>)</td><td><a class="el" href="a00245.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="a00245.html">tbb::filter</a>)</td><td><a class="el" href="a00245.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00245.html#15c29cae5d237e6d63dbfe5c94af89d5">is_bound</a>() const </td><td><a class="el" href="a00245.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00245.html#cd53206c4795ef2df5df26b795caf692">is_ordered</a>() const </td><td><a class="el" href="a00245.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00245.html#fcfec27656a69ff2072802ac001e936f">is_serial</a>() const </td><td><a class="el" href="a00245.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="a00245.html">tbb::filter</a>)</td><td><a class="el" href="a00245.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="a00245.html">tbb::filter</a>)</td><td><a class="el" href="a00245.html">tbb::filter</a></td><td><code> [inline, protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00245.html#8ec4dfe053e94a2349d56781ddea8477">object_may_be_null</a>()</td><td><a class="el" href="a00245.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00245.html#fa1b3dc1f4f47563ccab7f4d92f5b543">operator()</a>(void *item)=0</td><td><a class="el" href="a00245.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="a00245.html">tbb::filter</a>)</td><td><a class="el" href="a00245.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="a00245.html">tbb::filter</a>)</td><td><a class="el" href="a00245.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="a00245.html">tbb::filter</a>)</td><td><a class="el" href="a00245.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="a00245.html">tbb::filter</a>)</td><td><a class="el" href="a00245.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="a00245.html">tbb::filter</a>)</td><td><a class="el" href="a00245.html">tbb::filter</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00245.html#66d159f362293e3964ba3da8bc1d2604">~filter</a>()</td><td><a class="el" href="a00245.html">tbb::filter</a></td><td><code> [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/a00094.html b/doc/html/a00094.html
index ebfe34f..a370a16 100644
--- a/doc/html/a00094.html
+++ b/doc/html/a00094.html
@@ -20,12 +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::bad_last_alloc Member List</h1>This is the complete list of members for <a class="el" href="a00146.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="a00146.html">tbb::bad_last_alloc</a>)</td><td><a class="el" href="a00146.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="a00146.html">tbb::bad_last_alloc</a>)</td><td><a class="el" href="a00146.html">tbb::bad_last_alloc</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::thread_bound_filter Member List</h1>This is the complete list of members for <a class="el" href="a00301.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="a00301.html">tbb::thread_bound_filter</a>)</td><td><a class="el" href="a00301.html">tbb::thread_bound_filter</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00245.html#f17200974c33be21f42a5f00893de028">exact_exception_propagation</a></td><td><a class="el" href="a00245.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="a00245.html">tbb::filter</a>)</td><td><a class="el" href="a00245.html">tbb::filter</a></td><td><code> [inline, protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00245.html#dd6a6e7210efc9bcaf2c5e08767d92b5">filter_is_bound</a></td><td><a class="el" href="a00245.html">tbb::filter</a></td><td><code> [protected, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00245.html#2e5eb65f95d8050186278077e433c5b1">filter_is_out_of_order</a></td><td><a class="el" href="a00245.html">tbb::filter</a></td><td><code> [protected, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00245.html#4b7de3a76e744f3d9c1bc5d437ea851d">filter_is_serial</a></td><td><a class="el" href="a00245.html">tbb::filter</a></td><td><code> [protected, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00245.html#bdd02a434a6e7499dd1e8f43aae96793">filter_may_emit_null</a></td><td><a class="el" href="a00245.html">tbb::filter</a></td><td><code> [protected, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00245.html#56275eb889c77c4807967133e21401bd">finalize</a>(void *)</td><td><a class="el" href="a00245.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="a00245.html">tbb::filter</a>)</td><td><a class="el" href="a00245.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="a00245.html">tbb::filter</a>)</td><td><a class="el" href="a00245.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00245.html#15c29cae5d237e6d63dbfe5c94af89d5">is_bound</a>() const </td><td><a class="el" href="a00245.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00245.html#cd53206c4795ef2df5df26b795caf692">is_ordered</a>() const </td><td><a class="el" href="a00245.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00245.html#fcfec27656a69ff2072802ac001e936f">is_serial</a>() const </td><td><a class="el" href="a00245.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="a00301.html">tbb::thread_bound_filter</a>)</td><td><a class="el" href="a00301.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="a00245.html">tbb::filter</a>)</td><td><a class="el" href="a00245.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="a00245.html">tbb::filter</a>)</td><td><a class="el" href="a00245.html">tbb::filter</a></td><td><code> [inline, protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00245.html#8ec4dfe053e94a2349d56781ddea8477">object_may_be_null</a>()</td><td><a class="el" href="a00245.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00245.html#fa1b3dc1f4f47563ccab7f4d92f5b543">operator()</a>(void *item)=0</td><td><a class="el" href="a00245.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="a00245.html">tbb::filter</a>)</td><td><a class="el" href="a00245.html">tbb::filter</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00301.html#5e726bdc7fbd924c0b07bd558b1d4d5d">process_item</a>()</td><td><a class="el" href="a00301.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="a00301.html">tbb::thread_bound_filter</a>)</td><td><a class="el" href="a00301.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="a00245.html">tbb::filter</a>)</td><td><a class="el" href="a00245.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="a00301.html">tbb::thread_bound_filter</a>)</td><td><a class="el" href="a00301.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="a00301.html">tbb::thread_bound_filter</a>)</td><td><a class="el" href="a00301.html">tbb::thread_bound_filter</a></td><td><code> [inline, protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00301.html#c4f90f2c771bce748beb9be734fa286c">try_process_item</a>()</td><td><a class="el" href="a00301.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="a00245.html">tbb::filter</a>)</td><td><a class="el" href="a00245.html">tbb::filter</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00245.html#66d159f362293e3964ba3da8bc1d2604">~filter</a>()</td><td><a class="el" href="a00245.html">tbb::filter</a></td><td><code> [virtual]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00095.html b/doc/html/a00095.html
index e88dc70..26972b3 100644
--- a/doc/html/a00095.html
+++ b/doc/html/a00095.html
@@ -20,11 +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::improper_lock Member List</h1>This is the complete list of members for <a class="el" href="a00168.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="a00168.html">tbb::improper_lock</a>)</td><td><a class="el" href="a00168.html">tbb::improper_lock</a></td><td></td></tr>
+<h1>tbb::pipeline Member List</h1>This is the complete list of members for <a class="el" href="a00266.html">tbb::pipeline</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00266.html#38fb5c9c8395dd6f89a4ae2011a83e0d">add_filter</a>(filter &filter_)</td><td><a class="el" href="a00266.html">tbb::pipeline</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00266.html#2c84aef5b834b555ee220b176e25931e">clear</a>()</td><td><a class="el" href="a00266.html">tbb::pipeline</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>filter</b> (defined in <a class="el" href="a00266.html">tbb::pipeline</a>)</td><td><a class="el" href="a00266.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="a00266.html">tbb::pipeline</a>)</td><td><a class="el" href="a00266.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="a00266.html">tbb::pipeline</a>)</td><td><a class="el" href="a00266.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="a00266.html">tbb::pipeline</a>)</td><td><a class="el" href="a00266.html">tbb::pipeline</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00266.html#596dc3beba27099c4c8581cb419e1a59">pipeline</a>()</td><td><a class="el" href="a00266.html">tbb::pipeline</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00266.html#f627616049b3fe36801f37ee40403ef8">run</a>(size_t max_number_of_live_tokens)</td><td><a class="el" href="a00266.html">tbb::pipeline</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00266.html#93d7fec8cd607b803dd2d79fb46bd260">run</a>(size_t max_number_of_live_tokens, tbb::task_group_context &context)</td><td><a class="el" href="a00266.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="a00266.html">tbb::pipeline</a>)</td><td><a class="el" href="a00266.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="a00266.html">tbb::pipeline</a>)</td><td><a class="el" href="a00266.html">tbb::pipeline</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00266.html#49513c6c24f9d5bbbb27edca5efe01c9">~pipeline</a>()</td><td><a class="el" href="a00266.html">tbb::pipeline</a></td><td><code> [virtual]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00096.html b/doc/html/a00096.html
index 897643b..b7dad10 100644
--- a/doc/html/a00096.html
+++ b/doc/html/a00096.html
@@ -20,11 +20,12 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::missing_wait Member List</h1>This is the complete list of members for <a class="el" href="a00170.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="a00170.html">tbb::missing_wait</a>)</td><td><a class="el" href="a00170.html">tbb::missing_wait</a></td><td></td></tr>
+<h1>tbb::interface6::flow_control Member List</h1>This is the complete list of members for <a class="el" href="a00248.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="a00248.html">tbb::interface6::flow_control</a>)</td><td><a class="el" href="a00248.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="a00248.html">tbb::interface6::flow_control</a>)</td><td><a class="el" href="a00248.html">tbb::interface6::flow_control</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00097.html b/doc/html/a00097.html
index 421ef7b..2bdd71f 100644
--- a/doc/html/a00097.html
+++ b/doc/html/a00097.html
@@ -20,11 +20,19 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::invalid_multiple_scheduling Member List</h1>This is the complete list of members for <a class="el" href="a00169.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="a00169.html">tbb::invalid_multiple_scheduling</a>)</td><td><a class="el" href="a00169.html">tbb::invalid_multiple_scheduling</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="a00246.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="a00246.html">tbb::interface6::filter_t< T, U ></a>)</td><td><a class="el" href="a00246.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="a00246.html">tbb::interface6::filter_t< T, U ></a>)</td><td><a class="el" href="a00246.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="a00246.html">tbb::interface6::filter_t< T, U ></a>)</td><td><a class="el" href="a00246.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="a00246.html">tbb::interface6::filter_t< T, U ></a>)</td><td><a class="el" href="a00246.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="a00246.html">tbb::interface6::filter_t< T, U ></a>)</td><td><a class="el" href="a00246.html">tbb::interface6::filter_t< T, U ></a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00246.html#85c2892eff1fddcd06e28911e75838bd">make_filter</a>(tbb::filter::mode, const Body &)</td><td><a class="el" href="a00246.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="a00246.html">tbb::interface6::filter_t< T, U ></a>)</td><td><a class="el" href="a00246.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="a00246.html">tbb::interface6::filter_t< T, U ></a>)</td><td><a class="el" href="a00246.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="a00246.html">tbb::interface6::filter_t< T, U ></a>)</td><td><a class="el" href="a00246.html">tbb::interface6::filter_t< T, U ></a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00098.html b/doc/html/a00098.html
index fbf5186..0ee16d9 100644
--- a/doc/html/a00098.html
+++ b/doc/html/a00098.html
@@ -20,16 +20,16 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::tbb_exception Member List</h1>This is the complete list of members for <a class="el" href="a00206.html">tbb::tbb_exception</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00206.html#66c94938eca8bf88b76f3eccaaf215d8">destroy</a>()=0</td><td><a class="el" href="a00206.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00206.html#3e3482bf264d4ca4dde046cd9c02c766">move</a>()=0</td><td><a class="el" href="a00206.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00206.html#d00f6497e552fee978a02bfcbebf46e2">name</a>() const =0</td><td><a class="el" href="a00206.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00206.html#3f2da7f3d8a6e4c1df522af1213afb5a">operator delete</a>(void *p)</td><td><a class="el" href="a00206.html">tbb::tbb_exception</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00206.html#8588e07fa49692f4d734e4f2e4f048f4">throw_self</a>()=0</td><td><a class="el" href="a00206.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00206.html#e8157689ecb66bc6c72d3618bf3cc371">what</a>() const =0</td><td><a class="el" href="a00206.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
+<h1>tbb::queuing_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00270.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="a00270.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00270.html">tbb::queuing_mutex</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00270.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00270.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="a00270.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00270.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="a00270.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00270.html">tbb::queuing_mutex</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00270.html#b389ad9c4db7293e4bdb5b8cda69ec04">queuing_mutex</a>()</td><td><a class="el" href="a00270.html">tbb::queuing_mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b> (defined in <a class="el" href="a00270.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00270.html">tbb::queuing_mutex</a></td><td><code> [friend]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00099.html b/doc/html/a00099.html
index 5837e4c..8311748 100644
--- a/doc/html/a00099.html
+++ b/doc/html/a00099.html
@@ -20,22 +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::captured_exception Member List</h1>This is the complete list of members for <a class="el" href="a00152.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="a00152.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00152.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="a00152.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00152.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="a00152.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00152.html">tbb::captured_exception</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00152.html#93d875d3555502ff6f18513525de204c">destroy</a>()</td><td><a class="el" href="a00152.html">tbb::captured_exception</a></td><td><code> [virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00152.html#837a50b8f6a800bda225c39d1699643f">move</a>()</td><td><a class="el" href="a00152.html">tbb::captured_exception</a></td><td><code> [virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00152.html#5af82fd677449c5ca727fa1d7e16f9f5">name</a>() const </td><td><a class="el" href="a00152.html">tbb::captured_exception</a></td><td><code> [virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00206.html#3f2da7f3d8a6e4c1df522af1213afb5a">operator delete</a>(void *p)</td><td><a class="el" href="a00206.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="a00152.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00152.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="a00152.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00152.html">tbb::captured_exception</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00152.html#2dd1be66ab32fa27e0ddef5707fa67ef">throw_self</a>()</td><td><a class="el" href="a00152.html">tbb::captured_exception</a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00152.html#6b5988ef74a1fe2a58998d110b3633e0">what</a>() const </td><td><a class="el" href="a00152.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="a00152.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00152.html">tbb::captured_exception</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="a00271.html">tbb::queuing_mutex::scoped_lock</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00271.html#533e4fc8355ee321206a0609c42d909d">acquire</a>(queuing_mutex &m)</td><td><a class="el" href="a00271.html">tbb::queuing_mutex::scoped_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00271.html#3bf2b8c87ff22115be9b2eac179f2d30">release</a>()</td><td><a class="el" href="a00271.html">tbb::queuing_mutex::scoped_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00271.html#db0fa3967491014572e24d6607bdc971">scoped_lock</a>()</td><td><a class="el" href="a00271.html">tbb::queuing_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00271.html#9b51ef972f5618ac17caadb58841ab6d">scoped_lock</a>(queuing_mutex &m)</td><td><a class="el" href="a00271.html">tbb::queuing_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00271.html#e5a014fb817599386a87170cf2cf51a9">try_acquire</a>(queuing_mutex &m)</td><td><a class="el" href="a00271.html">tbb::queuing_mutex::scoped_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00271.html#ac2c576a93570957d694192a5f491443">~scoped_lock</a>()</td><td><a class="el" href="a00271.html">tbb::queuing_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00100.html b/doc/html/a00100.html
index 2f0b123..652f520 100644
--- a/doc/html/a00100.html
+++ b/doc/html/a00100.html
@@ -20,23 +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::movable_exception< ExceptionData > Member List</h1>This is the complete list of members for <a class="el" href="a00171.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="a00171.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00171.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="a00171.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00171.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00171.html#7a46873119d9f85a7b0009c13e41a258">destroy</a>()</td><td><a class="el" href="a00171.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="a00171.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00171.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="a00171.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00171.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00171.html#1aea0ad179d6f0481fe7f3495f66adf9">move</a>()</td><td><a class="el" href="a00171.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00171.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a></td><td><a class="el" href="a00171.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00171.html#bc5f5c4739b17ac5211ac58226c2f5a5">name</a>() const </td><td><a class="el" href="a00171.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00206.html#3f2da7f3d8a6e4c1df522af1213afb5a">operator delete</a>(void *p)</td><td><a class="el" href="a00206.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="a00171.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00171.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00171.html#17cffba35811c92b7e65d63506b69602">throw_self</a>()</td><td><a class="el" href="a00171.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00171.html#b33a89bccf0c63106f1270c7bfaaf54f">what</a>() const </td><td><a class="el" href="a00171.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="a00171.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00171.html">tbb::movable_exception< ExceptionData ></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="a00272.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="a00272.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00272.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="a00272.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00272.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="a00272.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00272.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="a00272.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00272.html">tbb::queuing_rw_mutex</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00272.html#85c90877c3447690ac4e2ac4ff8dea5e">queuing_rw_mutex</a>()</td><td><a class="el" href="a00272.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="a00272.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00272.html">tbb::queuing_rw_mutex</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00272.html#1ba73e3d95cfdf8323880bc623af9099">~queuing_rw_mutex</a>()</td><td><a class="el" href="a00272.html">tbb::queuing_rw_mutex</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00101.html b/doc/html/a00101.html
index cdab383..f5f0e2d 100644
--- a/doc/html/a00101.html
+++ b/doc/html/a00101.html
@@ -20,15 +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::internal::tbb_exception_ptr Member List</h1>This is the complete list of members for <a class="el" href="a00207.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="a00207.html">tbb::internal::tbb_exception_ptr</a>)</td><td><a class="el" href="a00207.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="a00207.html">tbb::internal::tbb_exception_ptr</a>)</td><td><a class="el" href="a00207.html">tbb::internal::tbb_exception_ptr</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00207.html#c35e5db8e9cdff5d1387db5b0bad2e4a">allocate</a>(captured_exception &src)</td><td><a class="el" href="a00207.html">tbb::internal::tbb_exception_ptr</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00207.html#921875bbacd2c8a5f324c7da7a415262">destroy</a>()</td><td><a class="el" href="a00207.html">tbb::internal::tbb_exception_ptr</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00207.html#292832fd5c523e3d8081a22247840a1d">throw_self</a>()</td><td><a class="el" href="a00207.html">tbb::internal::tbb_exception_ptr</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="a00273.html">tbb::queuing_rw_mutex::scoped_lock</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00273.html#a8dd5ab8686e76de21587544dbb681e0">acquire</a>(queuing_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00273.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00273.html#0d2f93edf7b15ec4bcee138823220c52">downgrade_to_reader</a>()</td><td><a class="el" href="a00273.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00273.html#67ae221109ddc69510ab593874e435d4">release</a>()</td><td><a class="el" href="a00273.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00273.html#c62e365be7bcbba091c9ea7454a4d22c">scoped_lock</a>()</td><td><a class="el" href="a00273.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00273.html#fbb8798792d3aebb136c46fc63d2529e">scoped_lock</a>(queuing_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00273.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00273.html#2e4ff6c9ec2fee6682f95290d1f42baa">try_acquire</a>(queuing_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00273.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00273.html#11ba1da4a722c9e6f73339a52c487e82">upgrade_to_writer</a>()</td><td><a class="el" href="a00273.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00273.html#32c7d67a660d23ebbaab1a1d2826d31a">~scoped_lock</a>()</td><td><a class="el" href="a00273.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00102.html b/doc/html/a00102.html
index 160f4b4..e67c1de 100644
--- a/doc/html/a00102.html
+++ b/doc/html/a00102.html
@@ -20,14 +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::internal::atomic_backoff Member List</h1>This is the complete list of members for <a class="el" href="a00144.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="a00144.html">tbb::internal::atomic_backoff</a>)</td><td><a class="el" href="a00144.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="a00144.html">tbb::internal::atomic_backoff</a>)</td><td><a class="el" href="a00144.html">tbb::internal::atomic_backoff</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00144.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>()</td><td><a class="el" href="a00144.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="a00144.html">tbb::internal::atomic_backoff</a>)</td><td><a class="el" href="a00144.html">tbb::internal::atomic_backoff</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="a00274.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="a00274.html">tbb::interface5::reader_writer_lock</a>)</td><td><a class="el" href="a00274.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="a00274.html">tbb::interface5::reader_writer_lock</a>)</td><td><a class="el" href="a00274.html">tbb::interface5::reader_writer_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00274.html#2653d1a2d560059a51219a8ceab3ade9">lock</a>()</td><td><a class="el" href="a00274.html">tbb::interface5::reader_writer_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00274.html#d9d16a24d9f6c3dada73c6b9ff214f5b">lock_read</a>()</td><td><a class="el" href="a00274.html">tbb::interface5::reader_writer_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00274.html#c1431c4293e777efd9aab9a95c2a46e1">reader_writer_lock</a>()</td><td><a class="el" href="a00274.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="a00274.html">tbb::interface5::reader_writer_lock</a>)</td><td><a class="el" href="a00274.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="a00274.html">tbb::interface5::reader_writer_lock</a>)</td><td><a class="el" href="a00274.html">tbb::interface5::reader_writer_lock</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00274.html#6f921f0d7c1812ceb5674418c8b6ccaf">status_t</a> enum name</td><td><a class="el" href="a00274.html">tbb::interface5::reader_writer_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00274.html#721eb173e154ab38292273e9266a9b07">try_lock</a>()</td><td><a class="el" href="a00274.html">tbb::interface5::reader_writer_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00274.html#595fb23952e3b89426b1f7938dea9b11">try_lock_read</a>()</td><td><a class="el" href="a00274.html">tbb::interface5::reader_writer_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00274.html#5113b32689305599b2c36b5831547704">unlock</a>()</td><td><a class="el" href="a00274.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="a00274.html">tbb::interface5::reader_writer_lock</a>)</td><td><a class="el" href="a00274.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="a00274.html">tbb::interface5::reader_writer_lock</a>)</td><td><a class="el" href="a00274.html">tbb::interface5::reader_writer_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00274.html#5135f64f7b7339017f33d956445edbee">~reader_writer_lock</a>()</td><td><a class="el" href="a00274.html">tbb::interface5::reader_writer_lock</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00103.html b/doc/html/a00103.html
new file mode 100644
index 0000000..5800849
--- /dev/null
+++ b/doc/html/a00103.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="a00275.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="a00275.html">tbb::interface5::reader_writer_lock::scoped_lock</a>)</td><td><a class="el" href="a00275.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="a00275.html">tbb::interface5::reader_writer_lock::scoped_lock</a>)</td><td><a class="el" href="a00275.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="a00275.html">tbb::interface5::reader_writer_lock::scoped_lock</a>)</td><td><a class="el" href="a00275.html">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00275.html#cf19f20e082887c1bb0ba6b0911c3583">scoped_lock</a>(reader_writer_lock &lock)</td><td><a class="el" href="a00275.html">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00275.html#70246e0260493625ff956fa5926fc71f">~scoped_lock</a>()</td><td><a class="el" href="a00275.html">tbb::interface5::reader_writer_lock::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/a00104.html b/doc/html/a00104.html
new file mode 100644
index 0000000..ed68e97
--- /dev/null
+++ b/doc/html/a00104.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_read Member List</h1>This is the complete list of members for <a class="el" href="a00276.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="a00276.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a>)</td><td><a class="el" href="a00276.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="a00276.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a>)</td><td><a class="el" href="a00276.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="a00276.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a>)</td><td><a class="el" href="a00276.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="a00276.html#87ab0dc8f7216e6ba0f7acd6aec33064">scoped_lock_read</a>(reader_writer_lock &lock)</td><td><a class="el" href="a00276.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="a00276.html#bd21c5f3d555d64d1de8658e15bf4966">~scoped_lock_read</a>()</td><td><a class="el" href="a00276.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/a00105.html b/doc/html/a00105.html
new file mode 100644
index 0000000..59ca4f2
--- /dev/null
+++ b/doc/html/a00105.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="a00278.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="a00278.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00278.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="a00278.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00278.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="a00278.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00278.html">tbb::recursive_mutex</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00278.html#4c342c69d47f4bb0b393535dee4015d6">lock</a>()</td><td><a class="el" href="a00278.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="a00278.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00278.html">tbb::recursive_mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00278.html#889fa8cc32dd707eef7c0f52dda09c0d">native_handle_type</a> typedef</td><td><a class="el" href="a00278.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="a00278.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00278.html">tbb::recursive_mutex</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00278.html#d2fceb7f95c24a8cd1457d4527e4b8c6">recursive_mutex</a>()</td><td><a class="el" href="a00278.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="a00278.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00278.html">tbb::recursive_mutex</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00278.html#86e719b0afee25704af11ab97694d240">try_lock</a>()</td><td><a class="el" href="a00278.html">tbb::recursive_mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00278.html#f0a96e26b7f074588dc31e32524856ae">unlock</a>()</td><td><a class="el" href="a00278.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="a00278.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00278.html">tbb::recursive_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/a00106.html b/doc/html/a00106.html
new file mode 100644
index 0000000..9320470
--- /dev/null
+++ b/doc/html/a00106.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="a00279.html">tbb::recursive_mutex::scoped_lock</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00279.html#7fb04da37cccf8c99b1f9102d9074f9a">acquire</a>(recursive_mutex &mutex)</td><td><a class="el" href="a00279.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="a00279.html">tbb::recursive_mutex::scoped_lock</a>)</td><td><a class="el" href="a00279.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00279.html#ac480ea0e9d5ea0345a67d57008b6263">release</a>()</td><td><a class="el" href="a00279.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00279.html#d82d4d36fbf9727a493d26ae50855fe7">scoped_lock</a>()</td><td><a class="el" href="a00279.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00279.html#dec17713c4c1321ac8fec66816d0c602">scoped_lock</a>(recursive_mutex &mutex)</td><td><a class="el" href="a00279.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00279.html#36bfc3e93e3ef6340abef4901444d340">try_acquire</a>(recursive_mutex &mutex)</td><td><a class="el" href="a00279.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00279.html#c1197ffb8f3cd9d4fed71d7e06265b7c">~scoped_lock</a>()</td><td><a class="el" href="a00279.html">tbb::recursive_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/a00107.html b/doc/html/a00107.html
new file mode 100644
index 0000000..bbf4347
--- /dev/null
+++ b/doc/html/a00107.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::scalable_allocator< T > Member List</h1>This is the complete list of members for <a class="el" href="a00280.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="a00280.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00280.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="a00280.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00280.html">tbb::scalable_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00280.html#726b1586d05d44665a36e1c7b2699bfd">allocate</a>(size_type n, const void *=0)</td><td><a class="el" href="a00280.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="a00280.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00280.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="a00280.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00280.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="a00280.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00280.html">tbb::scalable_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00280.html#f806a238c18cbcfb531e1e0a0d2ec59d">deallocate</a>(pointer p, size_type)</td><td><a class="el" href="a00280.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="a00280.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00280.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="a00280.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00280.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00280.html#880e766f1d913988c21973dbdd874fd5">max_size</a>() const </td><td><a class="el" href="a00280.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="a00280.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00280.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00280.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00280.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>scalable_allocator</b>() (defined in <a class="el" href="a00280.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00280.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="a00280.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00280.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="a00280.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00280.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="a00280.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00280.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="a00280.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00280.html">tbb::scalable_allocator< T ></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/a00109.html b/doc/html/a00109.html
index 529beb0..76982cc 100644
--- a/doc/html/a00109.html
+++ b/doc/html/a00109.html
@@ -20,11 +20,13 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::internal::work_around_alignment_bug< Size, T > Member List</h1>This is the complete list of members for <a class="el" href="a00212.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="a00212.html">tbb::internal::work_around_alignment_bug< Size, T ></a>)</td><td><a class="el" href="a00212.html">tbb::internal::work_around_alignment_bug< Size, T ></a></td><td><code> [static]</code></td></tr>
+<h1>tbb::scalable_allocator< void > Member List</h1>This is the complete list of members for <a class="el" href="a00281.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="a00281.html">tbb::scalable_allocator< void ></a>)</td><td><a class="el" href="a00281.html">tbb::scalable_allocator< void ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00281.html">tbb::scalable_allocator< void ></a>)</td><td><a class="el" href="a00281.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="a00281.html">tbb::scalable_allocator< void ></a>)</td><td><a class="el" href="a00281.html">tbb::scalable_allocator< void ></a></td><td></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00111.html b/doc/html/a00111.html
new file mode 100644
index 0000000..34e8215
--- /dev/null
+++ b/doc/html/a00111.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="a00286.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="a00286.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00286.html">tbb::spin_mutex</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00286.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00286.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="a00286.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00286.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="a00286.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00286.html">tbb::spin_mutex</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00286.html#4f748989e19b6045e3a2d2ee73626a28">lock</a>()</td><td><a class="el" href="a00286.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="a00286.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00286.html">tbb::spin_mutex</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00286.html#3d8fb44644fd8d41ada1fbeba7409be3">spin_mutex</a>()</td><td><a class="el" href="a00286.html">tbb::spin_mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00286.html#8f9a58fb56a2b4c5efe1a7f7c1ae2074">try_lock</a>()</td><td><a class="el" href="a00286.html">tbb::spin_mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00286.html#0e843ee6265f57f27d228ba91e7308ef">unlock</a>()</td><td><a class="el" href="a00286.html">tbb::spin_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/a00112.html b/doc/html/a00112.html
new file mode 100644
index 0000000..04418b4
--- /dev/null
+++ b/doc/html/a00112.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="a00287.html">tbb::spin_mutex::scoped_lock</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00287.html#3ee3c338732b1f64b0b32a757807a30d">acquire</a>(spin_mutex &m)</td><td><a class="el" href="a00287.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00287.html#eeb615e68e963e6bf8d9c11402d0ce8e">release</a>()</td><td><a class="el" href="a00287.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00287.html#29ae680ae7f5e685c2e15535b9c855b3">scoped_lock</a>()</td><td><a class="el" href="a00287.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00287.html#5ce6807050a9e8f87bcb4a65dccb12ef">scoped_lock</a>(spin_mutex &m)</td><td><a class="el" href="a00287.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="a00287.html">tbb::spin_mutex::scoped_lock</a>)</td><td><a class="el" href="a00287.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00287.html#9297ec188534b45dc0ca48f2f39a0501">try_acquire</a>(spin_mutex &m)</td><td><a class="el" href="a00287.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00287.html#ac6fa425d1f06c56d8b70abc51aac844">~scoped_lock</a>()</td><td><a class="el" href="a00287.html">tbb::spin_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/a00113.html b/doc/html/a00113.html
index bf208c4..2dcf573 100644
--- a/doc/html/a00113.html
+++ b/doc/html/a00113.html
@@ -20,13 +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::tick_count Member List</h1>This is the complete list of members for <a class="el" href="a00210.html">tbb::tick_count</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00210.html#fb7f78ca61cf28398645ace66e284473">now</a>()</td><td><a class="el" href="a00210.html">tbb::tick_count</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00210.html#09dde78a4100800c11bb883d6204b586">operator-</a>(const tick_count &t1, const tick_count &t0)</td><td><a class="el" href="a00210.html">tbb::tick_count</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00210.html#34593326ae4191e02a13c7cbdab9de4c">tick_count</a>()</td><td><a class="el" href="a00210.html">tbb::tick_count</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::spin_rw_mutex_v3 Member List</h1>This is the complete list of members for <a class="el" href="a00288.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="a00288.html">tbb::spin_rw_mutex_v3</a>)</td><td><a class="el" href="a00288.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="a00288.html">tbb::spin_rw_mutex_v3</a>)</td><td><a class="el" href="a00288.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="a00288.html">tbb::spin_rw_mutex_v3</a>)</td><td><a class="el" href="a00288.html">tbb::spin_rw_mutex_v3</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00288.html#4007d6e1523dbc3c2bb7f889ab789a8a">lock</a>()</td><td><a class="el" href="a00288.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00288.html#13f799708ac4ca437a16be202e263e18">lock_read</a>()</td><td><a class="el" href="a00288.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00288.html#61332b2756de89f3f5f69310cbb6e70c">spin_rw_mutex_v3</a>()</td><td><a class="el" href="a00288.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00288.html#088bb256be794cc47d3b83791632fdfc">try_lock</a>()</td><td><a class="el" href="a00288.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00288.html#b8667415869013f840d976aa406d385a">try_lock_read</a>()</td><td><a class="el" href="a00288.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00288.html#f9f52ead2098eb5fb12da59d5ae53b55">unlock</a>()</td><td><a class="el" href="a00288.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00288.html#9a815fb2759e55072ed413f1b6970cf3">~spin_rw_mutex_v3</a>()</td><td><a class="el" href="a00288.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00114.html b/doc/html/a00114.html
index 23751c8..563ff24 100644
--- a/doc/html/a00114.html
+++ b/doc/html/a00114.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::tick_count::interval_t Member List</h1>This is the complete list of members for <a class="el" href="a00211.html">tbb::tick_count::interval_t</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00211.html#75a9a0949f8a8a84d6758835f1b48dad">interval_t</a>()</td><td><a class="el" href="a00211.html">tbb::tick_count::interval_t</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00211.html#1a21a428e00cced2e6a49e0f5f2258bf">interval_t</a>(double sec)</td><td><a class="el" href="a00211.html">tbb::tick_count::interval_t</a></td><td><code> [inline, explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00211.html#5871ead1ca230efbe52a5008470e6428">operator+</a>(const interval_t &i, const interval_t &j)</td><td><a class="el" href="a00211.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00211.html#cd9814947902e26463a69a111530f81b">operator+=</a>(const interval_t &i)</td><td><a class="el" href="a00211.html">tbb::tick_count::interval_t</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00211.html#09dde78a4100800c11bb883d6204b586">operator-</a>(const tick_count &t1, const tick_count &t0)</td><td><a class="el" href="a00211.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00211.html#fa509691e1d689830931e36edd274f76">operator-</a>(const interval_t &i, const interval_t &j)</td><td><a class="el" href="a00211.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00211.html#35ff7eaf7c2031b4a991402ac9ecb940">operator-=</a>(const interval_t &i)</td><td><a class="el" href="a00211.html">tbb::tick_count::interval_t</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00211.html#d5d8429c0bc59cf6131b2abc7929fa59">seconds</a>() const </td><td><a class="el" href="a00211.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="a00211.html">tbb::tick_count::interval_t</a>)</td><td><a class="el" href="a00211.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</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="a00289.html">tbb::spin_rw_mutex_v3::scoped_lock</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00289.html#b0b646ec5be02a127d159bbb7ca65353">acquire</a>(spin_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00289.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00289.html#c2c2c38a08cb9080e87099fac3e5bc94">downgrade_to_reader</a>()</td><td><a class="el" href="a00289.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00289.html#6b5a7c3c67a36b05c4df8410d32627d8">is_writer</a></td><td><a class="el" href="a00289.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00289.html#d96d1a1fcc3d79ef3e5c06a53b8ffeaa">mutex</a></td><td><a class="el" href="a00289.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00289.html#61b14d00a78185c9b2d206ebfc379124">release</a>()</td><td><a class="el" href="a00289.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00289.html#d6ea60dee5563f702379bf5e51aa8806">scoped_lock</a>()</td><td><a class="el" href="a00289.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00289.html#42a92d4f8fdde425b111cfa8a9228071">scoped_lock</a>(spin_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00289.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00289.html#9879626968d9b9a04cd2ec0fb2e84ae1">try_acquire</a>(spin_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00289.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00289.html#3f0b1e3f2efab63336400348bd070226">upgrade_to_writer</a>()</td><td><a class="el" href="a00289.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00289.html#d7eaaa3f2e2c5dc11e7005811b1bdd04">~scoped_lock</a>()</td><td><a class="el" href="a00289.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00116.html b/doc/html/a00116.html
new file mode 100644
index 0000000..7b83c00
--- /dev/null
+++ b/doc/html/a00116.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>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::internal::task_base Member List</h1>This is the complete list of members for <a class="el" href="a00292.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.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00117.html b/doc/html/a00117.html
new file mode 100644
index 0000000..90456af
--- /dev/null
+++ b/doc/html/a00117.html
@@ -0,0 +1,52 @@
+<!DOCTYPE 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_group_context Member List</h1>This is the complete list of members for <a class="el" href="a00293.html">tbb::task_group_context</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>bound</b> enum value (defined in <a class="el" href="a00293.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00293.html">tbb::task_group_context</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00293.html#8bcdfdf4e6bfb76125b6de15c00b571d">cancel_group_execution</a>()</td><td><a class="el" href="a00293.html">tbb::task_group_context</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>concurrent_wait</b> enum value (defined in <a class="el" href="a00293.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00293.html">tbb::task_group_context</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>default_traits</b> enum value (defined in <a class="el" href="a00293.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00293.html">tbb::task_group_context</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>exact_exception</b> enum value (defined in <a class="el" href="a00293.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00293.html">tbb::task_group_context</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00293.html#49a55352084fd44b8863d182e839e6dc">init</a>()</td><td><a class="el" href="a00293.html">tbb::task_group_context</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_with_context_proxy</b> (defined in <a class="el" href="a00293.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00293.html">tbb::task_group_context</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::generic_scheduler</b> (defined in <a class="el" href="a00293.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00293.html">tbb::task_group_context</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00293.html#4db72f16210b0a991b2c134d6763a4cc">is_group_execution_cancelled</a>() const </td><td><a class="el" href="a00293.html">tbb::task_group_context</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>isolated</b> enum value (defined in <a class="el" href="a00293.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00293.html">tbb::task_group_context</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>kind_type</b> enum name (defined in <a class="el" href="a00293.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00293.html">tbb::task_group_context</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00293.html#2f2342b9e6c9c03703248ac13ad0271d">priority</a>() const </td><td><a class="el" href="a00293.html">tbb::task_group_context</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00293.html#d97c8a03615594b71b4ef06ff75cf561">register_pending_exception</a>()</td><td><a class="el" href="a00293.html">tbb::task_group_context</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00293.html#6d30d16bf1cd22f86c6afaf29c2b430c">reset</a>()</td><td><a class="el" href="a00293.html">tbb::task_group_context</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00293.html#c4272d4d9ab65d600ca70fc2c8c4b039">set_priority</a>(priority_t)</td><td><a class="el" href="a00293.html">tbb::task_group_context</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>task</b> (defined in <a class="el" href="a00293.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00293.html">tbb::task_group_context</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00293.html#19fee08fb8ac98adccfe69c1aa63c491">task_group_context</a>(kind_type relation_with_parent=bound, uintptr_t traits=default_traits)</td><td><a class="el" href="a00293.html">tbb::task_group_context</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>task_scheduler_init</b> (defined in <a class="el" href="a00293.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00293.html">tbb::task_group_context</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>traits_type</b> enum name (defined in <a class="el" href="a00293.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00293.html">tbb::task_group_context</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~task_group_context</b>() (defined in <a class="el" href="a00293.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00293.html">tbb::task_group_context</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/a00119.html b/doc/html/a00119.html
new file mode 100644
index 0000000..6bac6a7
--- /dev/null
+++ b/doc/html/a00119.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>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="a00291.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="a00291.html">tbb::task</a>)</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#3a920a56b0bcf2801518fb45b2c9d2be">affinity</a>() const </td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#d61bb32389d3857bf7511d69beaafb76">affinity_id</a> typedef</td><td><a class="el" href="a00291.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#1ff794f7053cd9148d5f280fbf07377f">allocate_child</a>()</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#1434c79a5138993269d034008bff7329">allocate_continuation</a>()</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#23acb0da0afd690da797f9f882027d34">allocate_root</a>()</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#8ccc518caf31075a3e073996d2d240a4">allocate_root</a>(task_group_context &ctx)</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">allocated</a> enum value</td><td><a class="el" href="a00291.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#0f3fb4aac549ab642022450a4bd13326">cancel_group_execution</a>()</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#62247be9a637a814c8e8f4bcfb3a1908">change_group</a>(task_group_context &ctx)</td><td><a class="el" href="a00291.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#d8c36a93f3972590fbb65ff1cef3173b">context</a>()</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#ef4680f5c148020c5e7e43ddef44cd5d">decrement_ref_count</a>()</td><td><a class="el" href="a00291.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="a00291.html">tbb::task</a>)</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#dfaacf92685e5f86393bf657b2853bf8">destroy</a>(task &t)</td><td><a class="el" href="a00291.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#8365d063c0cc9d7bd616bca47256b93c">enqueue</a>(task &t)</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#fe6bf6aaf84e664134fabb6c4f409ea9">enqueue</a>(task &t, priority_t p)</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#22c298cd40937a431a06777423f002f6">execute</a>()=0</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">executing</a> enum value</td><td><a class="el" href="a00291.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">freed</a> enum value</td><td><a class="el" href="a00291.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#5987123486afca36ddebb9e2a8b7779a">group</a>()</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#e1d969a1ccab6796e3b8b2c1a5be33d2">group_priority</a>() const </td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#f5fb43c7ad0de5a4b95703cebc39e345">increment_ref_count</a>()</td><td><a class="el" href="a00291.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="a00291.html">tbb::task</a>)</td><td><a class="el" href="a00291.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="a00291.html">tbb::task</a>)</td><td><a class="el" href="a00291.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="a00291.html">tbb::task</a>)</td><td><a class="el" href="a00291.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="a00291.html">tbb::task</a>)</td><td><a class="el" href="a00291.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="a00291.html">tbb::task</a>)</td><td><a class="el" href="a00291.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="a00291.html">tbb::task</a>)</td><td><a class="el" href="a00291.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="a00291.html">tbb::task</a>)</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#025f18118c057c4c8db87ff2ce8df975">is_cancelled</a>() const </td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#c26718b3b247cd13deb1a741902e7105">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00291.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#f9169402702f56bf519448aaf34450aa">is_stolen_task</a>() const </td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#713c338c8eeaebdc5a6b10a69c039b06">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#314e98ee4347ccec83efcb9ee22e8596">parent</a>() const </td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">ready</a> enum value</td><td><a class="el" href="a00291.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">recycle</a> enum value</td><td><a class="el" href="a00291.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#db399855177438bbc9cc61d508dae8d2">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#a67a79e18f62b43a623a00cfbd76db4c">recycle_as_continuation</a>()</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#3b290d14109704e2b69dc1ac980a7a76">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#4f1be9bbcdb487830dbe298b68d85144">recycle_to_reexecute</a>()</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">reexecute</a> enum value</td><td><a class="el" href="a00291.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#ad774f55eaec008ae02b236423209ced">ref_count</a>() const </td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#bd43e8d6249738efafd12d6a4c72c5e3">self</a>()</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#dca19d7a45487a7d67a0db517e2b57c9">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00291.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="a00291.html">tbb::task</a>)</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#9ac8d1542d67d9d80121ff986801ac26">set_group_priority</a>(priority_t p)</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#06a4206a57e8e12a439b14d6d41cfd92">set_ref_count</a>(int count)</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#3ce28ca9baa771cfc37ecd72e69c4f3c">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#894ab68378e502776d8220eea7ce9fa1">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00291.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#ce8ce689c26a4ddf343829bc3c73290a">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#c33c7edbaec67aa8a56f48986a9dc69f">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#0af7b2d7e6e8b4333b2accfce3dfb374">state</a>() const </td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#4a3c415562d17905390ea5b49d12293e">state_type</a> enum name</td><td><a class="el" href="a00291.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#2bce8ec6e44706e70128f5cf91b76e67">task</a>()</td><td><a class="el" href="a00291.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="a00291.html">tbb::task</a>)</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#53d2615ad9c38859b4c8080936600283">wait_for_all</a>()</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#98245ee0473f84cb19dbbf8c81134908">~task</a>()</td><td><a class="el" href="a00291.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/a00120.html b/doc/html/a00120.html
new file mode 100644
index 0000000..4781215
--- /dev/null
+++ b/doc/html/a00120.html
@@ -0,0 +1,87 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>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="a00242.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="a00291.html">tbb::task</a>)</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#3a920a56b0bcf2801518fb45b2c9d2be">affinity</a>() const </td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#d61bb32389d3857bf7511d69beaafb76">affinity_id</a> typedef</td><td><a class="el" href="a00291.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#1ff794f7053cd9148d5f280fbf07377f">allocate_child</a>()</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#1434c79a5138993269d034008bff7329">allocate_continuation</a>()</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#23acb0da0afd690da797f9f882027d34">allocate_root</a>()</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#8ccc518caf31075a3e073996d2d240a4">allocate_root</a>(task_group_context &ctx)</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">allocated</a> enum value</td><td><a class="el" href="a00291.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#0f3fb4aac549ab642022450a4bd13326">cancel_group_execution</a>()</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#62247be9a637a814c8e8f4bcfb3a1908">change_group</a>(task_group_context &ctx)</td><td><a class="el" href="a00291.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#d8c36a93f3972590fbb65ff1cef3173b">context</a>()</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#ef4680f5c148020c5e7e43ddef44cd5d">decrement_ref_count</a>()</td><td><a class="el" href="a00291.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="a00291.html">tbb::task</a>)</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#dfaacf92685e5f86393bf657b2853bf8">destroy</a>(task &t)</td><td><a class="el" href="a00291.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#8365d063c0cc9d7bd616bca47256b93c">enqueue</a>(task &t)</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#fe6bf6aaf84e664134fabb6c4f409ea9">enqueue</a>(task &t, priority_t p)</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">executing</a> enum value</td><td><a class="el" href="a00291.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">freed</a> enum value</td><td><a class="el" href="a00291.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#5987123486afca36ddebb9e2a8b7779a">group</a>()</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#e1d969a1ccab6796e3b8b2c1a5be33d2">group_priority</a>() const </td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#f5fb43c7ad0de5a4b95703cebc39e345">increment_ref_count</a>()</td><td><a class="el" href="a00291.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="a00291.html">tbb::task</a>)</td><td><a class="el" href="a00291.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="a00291.html">tbb::task</a>)</td><td><a class="el" href="a00291.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="a00291.html">tbb::task</a>)</td><td><a class="el" href="a00291.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="a00291.html">tbb::task</a>)</td><td><a class="el" href="a00291.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="a00291.html">tbb::task</a>)</td><td><a class="el" href="a00291.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="a00291.html">tbb::task</a>)</td><td><a class="el" href="a00291.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="a00291.html">tbb::task</a>)</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#025f18118c057c4c8db87ff2ce8df975">is_cancelled</a>() const </td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#c26718b3b247cd13deb1a741902e7105">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00291.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#f9169402702f56bf519448aaf34450aa">is_stolen_task</a>() const </td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#713c338c8eeaebdc5a6b10a69c039b06">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#314e98ee4347ccec83efcb9ee22e8596">parent</a>() const </td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">ready</a> enum value</td><td><a class="el" href="a00291.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">recycle</a> enum value</td><td><a class="el" href="a00291.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#db399855177438bbc9cc61d508dae8d2">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#a67a79e18f62b43a623a00cfbd76db4c">recycle_as_continuation</a>()</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#3b290d14109704e2b69dc1ac980a7a76">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#4f1be9bbcdb487830dbe298b68d85144">recycle_to_reexecute</a>()</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">reexecute</a> enum value</td><td><a class="el" href="a00291.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#ad774f55eaec008ae02b236423209ced">ref_count</a>() const </td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#bd43e8d6249738efafd12d6a4c72c5e3">self</a>()</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#dca19d7a45487a7d67a0db517e2b57c9">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00291.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="a00291.html">tbb::task</a>)</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#9ac8d1542d67d9d80121ff986801ac26">set_group_priority</a>(priority_t p)</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#06a4206a57e8e12a439b14d6d41cfd92">set_ref_count</a>(int count)</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#3ce28ca9baa771cfc37ecd72e69c4f3c">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#894ab68378e502776d8220eea7ce9fa1">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00291.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#ce8ce689c26a4ddf343829bc3c73290a">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#c33c7edbaec67aa8a56f48986a9dc69f">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#0af7b2d7e6e8b4333b2accfce3dfb374">state</a>() const </td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#4a3c415562d17905390ea5b49d12293e">state_type</a> enum name</td><td><a class="el" href="a00291.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#2bce8ec6e44706e70128f5cf91b76e67">task</a>()</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#53d2615ad9c38859b4c8080936600283">wait_for_all</a>()</td><td><a class="el" href="a00291.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00291.html#98245ee0473f84cb19dbbf8c81134908">~task</a>()</td><td><a class="el" href="a00291.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
new file mode 100644
index 0000000..5f217df
--- /dev/null
+++ b/doc/html/a00121.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="a00294.html">tbb::task_list</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00294.html#fce446ee13e025969945328f3ff59b95">clear</a>()</td><td><a class="el" href="a00294.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00294.html#f3ac31e092814b90929f81bb30441959">empty</a>() const </td><td><a class="el" href="a00294.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="a00294.html">tbb::task_list</a>)</td><td><a class="el" href="a00294.html">tbb::task_list</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00294.html#5fe85df5ed524418389d34051750347d">pop_front</a>()</td><td><a class="el" href="a00294.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00294.html#4cd34756bc4763dafb8c84838a0124ff">push_back</a>(task &task)</td><td><a class="el" href="a00294.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="a00294.html">tbb::task_list</a>)</td><td><a class="el" href="a00294.html">tbb::task_list</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00294.html#416341c2047eaef50417b41eaf7e9de6">task_list</a>()</td><td><a class="el" href="a00294.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00294.html#6d438f1499a02db1e59c24ab6043e5ba">~task_list</a>()</td><td><a class="el" href="a00294.html">tbb::task_list</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/a00128.html b/doc/html/a00128.html
new file mode 100644
index 0000000..471ab26
--- /dev/null
+++ b/doc/html/a00128.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::task_scheduler_init Member List</h1>This is the complete list of members for <a class="el" href="a00295.html">tbb::task_scheduler_init</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00295.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a></td><td><a class="el" href="a00295.html">tbb::task_scheduler_init</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00295.html#ba00714c33a41a3c2216f48613971cab">default_num_threads</a>()</td><td><a class="el" href="a00295.html">tbb::task_scheduler_init</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00295.html#e6c860f1e559026ff3ef4599c0d6c514">deferred</a></td><td><a class="el" href="a00295.html">tbb::task_scheduler_init</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00295.html#d476053cc712e572554823492a5229ce">initialize</a>(int number_of_threads=automatic)</td><td><a class="el" href="a00295.html">tbb::task_scheduler_init</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00295.html#d5ed214a8bb53b0466ed91ff4734b9a3">initialize</a>(int number_of_threads, stack_size_type thread_stack_size)</td><td><a class="el" href="a00295.html">tbb::task_scheduler_init</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00295.html#12752282977029f23416642bc03e8b74">is_active</a>() const </td><td><a class="el" href="a00295.html">tbb::task_scheduler_init</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00295.html#421600bf9bf9338bcf937063f2ff0e90">task_scheduler_init</a>(int number_of_threads=automatic, stack_size_type thread_stack_size=0)</td><td><a class="el" href="a00295.html">tbb::task_scheduler_init</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00295.html#f73257e04cb7fb9bd5be2b635d9016f1">terminate</a>()</td><td><a class="el" href="a00295.html">tbb::task_scheduler_init</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00295.html#4da6c86292d80c703a66c1f6f5299488">~task_scheduler_init</a>()</td><td><a class="el" href="a00295.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.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00130.html b/doc/html/a00130.html
new file mode 100644
index 0000000..57505e7
--- /dev/null
+++ b/doc/html/a00130.html
@@ -0,0 +1,53 @@
+<!DOCTYPE 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< T > Member List</h1>This is the complete list of members for <a class="el" href="a00296.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="a00296.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00296.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="a00296.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00296.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00296.html#f6cb487b1bdce0b581f265a77dca6d53">allocate</a>(size_type n, const void *=0)</td><td><a class="el" href="a00296.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00296.html#78701e7454ef8e1a25b5acd364367080">allocator_type</a>()</td><td><a class="el" href="a00296.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="a00296.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00296.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="a00296.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00296.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00296.html#ab228ab9e324ed041c2226e1d717df5f">construct</a>(pointer p, const value_type &value)</td><td><a class="el" href="a00296.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00296.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">deallocate</a>(pointer p, size_type)</td><td><a class="el" href="a00296.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00296.html#ef133522bf55f05a605bee0763208281">destroy</a>(pointer p)</td><td><a class="el" href="a00296.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="a00296.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00296.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00296.html#09a7f81fb2c3055aaecf058b11538544">malloc_type</a> enum name</td><td><a class="el" href="a00296.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00296.html#f059ca2c96243024f0d562ee3a87a3a5">max_size</a>() const </td><td><a class="el" href="a00296.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="a00296.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00296.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00296.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00296.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="a00296.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00296.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="a00296.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00296.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="a00296.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00296.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>tbb_allocator</b>() (defined in <a class="el" href="a00296.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00296.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="a00296.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00296.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="a00296.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00296.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="a00296.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00296.html">tbb::tbb_allocator< T ></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/a00132.html b/doc/html/a00132.html
new file mode 100644
index 0000000..be7e3bd
--- /dev/null
+++ b/doc/html/a00132.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="a00297.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="a00297.html">tbb::tbb_allocator< void ></a>)</td><td><a class="el" href="a00297.html">tbb::tbb_allocator< void ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00297.html">tbb::tbb_allocator< void ></a>)</td><td><a class="el" href="a00297.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="a00297.html">tbb::tbb_allocator< void ></a>)</td><td><a class="el" href="a00297.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/a00134.html b/doc/html/a00134.html
new file mode 100644
index 0000000..4814540
--- /dev/null
+++ b/doc/html/a00134.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="a00306.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="a00306.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00306.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="a00306.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00306.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="a00306.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00306.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="a00306.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00306.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="a00306.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00306.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="a00306.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00306.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="a00306.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00306.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="a00306.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00306.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="a00306.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00306.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="a00306.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00306.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="a00306.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00306.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="a00306.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00306.html">tbb::zero_allocator< T, Allocator ></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/a00136.html b/doc/html/a00136.html
new file mode 100644
index 0000000..7ee6ceb
--- /dev/null
+++ b/doc/html/a00136.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::zero_allocator< void, Allocator > Member List</h1>This is the complete list of members for <a class="el" href="a00307.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="a00307.html">tbb::zero_allocator< void, Allocator ></a>)</td><td><a class="el" href="a00307.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="a00307.html">tbb::zero_allocator< void, Allocator ></a>)</td><td><a class="el" href="a00307.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="a00307.html">tbb::zero_allocator< void, Allocator ></a>)</td><td><a class="el" href="a00307.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="a00307.html">tbb::zero_allocator< void, Allocator ></a>)</td><td><a class="el" href="a00307.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
new file mode 100644
index 0000000..d775f50
--- /dev/null
+++ b/doc/html/a00138.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="a00220.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="a00220.html">tbb::bad_last_alloc</a>)</td><td><a class="el" href="a00220.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="a00220.html">tbb::bad_last_alloc</a>)</td><td><a class="el" href="a00220.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
new file mode 100644
index 0000000..8bf5c2b
--- /dev/null
+++ b/doc/html/a00139.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="a00252.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="a00252.html">tbb::improper_lock</a>)</td><td><a class="el" href="a00252.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
index 75465f4..74f9a7c 100644
--- a/doc/html/a00140.html
+++ b/doc/html/a00140.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::affinity_partitioner Class Reference</title>
+<title>Member List</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -20,40 +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>
-<div class="nav">
-<a class="el" href="a00267.html">tbb</a>::<a class="el" href="a00140.html">affinity_partitioner</a></div>
-<h1>tbb::affinity_partitioner Class Reference</h1><!-- doxytag: class="tbb::affinity_partitioner" -->An affinity partitioner.  
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00409.html">partitioner.h</a>></code>
-<p>
-<a href="a00048.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a47f7e0208a2bf68f35b51b27d2ddf2a"></a><!-- doxytag: member="tbb::affinity_partitioner::internal::start_for" ref="a47f7e0208a2bf68f35b51b27d2ddf2a" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>internal::start_for</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e8f710e431b62c2a48914bd99d0fe034"></a><!-- doxytag: member="tbb::affinity_partitioner::internal::start_reduce" ref="e8f710e431b62c2a48914bd99d0fe034" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>internal::start_reduce</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="181db51277e9b15dd0ec4a0617ab1f92"></a><!-- doxytag: member="tbb::affinity_partitioner::internal::start_reduce_with_affinity" ref="181db51277e9b15dd0ec4a0617ab1f92" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>internal::start_reduce_with_affinity</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="76d97ae6ad98db0acfc8ed8cb7c76705"></a><!-- doxytag: member="tbb::affinity_partitioner::internal::start_scan" ref="76d97ae6ad98db0acfc8ed8cb7c76705" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>internal::start_scan</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e9575467e391b90e0703fadf573dbad7"></a><!-- doxytag: member="tbb::affinity_partitioner::internal::affinity_partition_type" ref="e9575467e391b90e0703fadf573dbad7" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>internal::affinity_partition_type</b></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-An affinity partitioner. 
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00409.html">partitioner.h</a></ul>
-<hr>
+<h1>tbb::missing_wait Member List</h1>This is the complete list of members for <a class="el" href="a00256.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="a00256.html">tbb::missing_wait</a>)</td><td><a class="el" href="a00256.html">tbb::missing_wait</a></td><td></td></tr>
+</table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00141.html b/doc/html/a00141.html
index 62575be..1437180 100644
--- a/doc/html/a00141.html
+++ b/doc/html/a00141.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::aligned_space< T, N > Class Template Reference</title>
+<title>Member List</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -20,41 +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>
-<div class="nav">
-<a class="el" href="a00267.html">tbb</a>::<a class="el" href="a00141.html">aligned_space</a></div>
-<h1>tbb::aligned_space< T, N > Class Template Reference<br>
-<small>
-[<a class="el" href="a00277.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="a00311.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="a00141.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="a00141.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="a00311.html">aligned_space.h</a></ul>
-<hr>
+<h1>tbb::invalid_multiple_scheduling Member List</h1>This is the complete list of members for <a class="el" href="a00253.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="a00253.html">tbb::invalid_multiple_scheduling</a>)</td><td><a class="el" href="a00253.html">tbb::invalid_multiple_scheduling</a></td><td></td></tr>
+</table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00142.html b/doc/html/a00142.html
index 679900d..5b13d33 100644
--- a/doc/html/a00142.html
+++ b/doc/html/a00142.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::atomic< T > Struct Template Reference</title>
+<title>Member List</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -20,39 +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>
-<div class="nav">
-<a class="el" href="a00267.html">tbb</a>::<a class="el" href="a00142.html">atomic</a></div>
-<h1>tbb::atomic< T > Struct Template Reference<br>
-<small>
-[<a class="el" href="a00278.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="a00312.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="a00142.html">atomic</a>< T > & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00142.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="a00312.html">atomic.h</a></ul>
-<hr>
+<h1>tbb::tbb_exception Member List</h1>This is the complete list of members for <a class="el" href="a00298.html">tbb::tbb_exception</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00298.html#66c94938eca8bf88b76f3eccaaf215d8">destroy</a>()=0</td><td><a class="el" href="a00298.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00298.html#3e3482bf264d4ca4dde046cd9c02c766">move</a>()=0</td><td><a class="el" href="a00298.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00298.html#d00f6497e552fee978a02bfcbebf46e2">name</a>() const =0</td><td><a class="el" href="a00298.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00298.html#3f2da7f3d8a6e4c1df522af1213afb5a">operator delete</a>(void *p)</td><td><a class="el" href="a00298.html">tbb::tbb_exception</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00298.html#8588e07fa49692f4d734e4f2e4f048f4">throw_self</a>()=0</td><td><a class="el" href="a00298.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00298.html#e8157689ecb66bc6c72d3618bf3cc371">what</a>() const =0</td><td><a class="el" href="a00298.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
+</table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00143.html b/doc/html/a00143.html
index fddbba3..ca4d66e 100644
--- a/doc/html/a00143.html
+++ b/doc/html/a00143.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::atomic< void * > Struct Template Reference</title>
+<title>Member List</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -20,34 +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>
-<div class="nav">
-<a class="el" href="a00267.html">tbb</a>::<a class="el" href="a00143.html">atomic< void * ></a></div>
-<h1>tbb::atomic< void * > Struct Template Reference</h1><!-- doxytag: class="tbb::atomic< void * >" -->Specialization for <a class="el" href="a00143.html">atomic<void*></a>, for sake of not allowing arithmetic or operator->.  
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00312.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="a00142.html">atomic</a>< void * > & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00142.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="a00143.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="a00312.html">atomic.h</a></ul>
-<hr>
+<h1>tbb::captured_exception Member List</h1>This is the complete list of members for <a class="el" href="a00228.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="a00228.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00228.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="a00228.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00228.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="a00228.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00228.html">tbb::captured_exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00228.html#93d875d3555502ff6f18513525de204c">destroy</a>()</td><td><a class="el" href="a00228.html">tbb::captured_exception</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00228.html#837a50b8f6a800bda225c39d1699643f">move</a>()</td><td><a class="el" href="a00228.html">tbb::captured_exception</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00228.html#5af82fd677449c5ca727fa1d7e16f9f5">name</a>() const </td><td><a class="el" href="a00228.html">tbb::captured_exception</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00298.html#3f2da7f3d8a6e4c1df522af1213afb5a">operator delete</a>(void *p)</td><td><a class="el" href="a00298.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="a00228.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00228.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="a00228.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00228.html">tbb::captured_exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00228.html#2dd1be66ab32fa27e0ddef5707fa67ef">throw_self</a>()</td><td><a class="el" href="a00228.html">tbb::captured_exception</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00228.html#6b5988ef74a1fe2a58998d110b3633e0">what</a>() const </td><td><a class="el" href="a00228.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="a00228.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00228.html">tbb::captured_exception</a></td><td></td></tr>
+</table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00144.html b/doc/html/a00144.html
index a238209..4340eee 100644
--- a/doc/html/a00144.html
+++ b/doc/html/a00144.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::atomic_backoff Class Reference</title>
+<title>Member List</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -20,37 +20,23 @@
     <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="a00267.html">tbb</a>::<b>internal</b>::<a class="el" href="a00144.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="a00460.html">tbb_machine.h</a>></code>
-<p>
-<a href="a00102.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a174ea93e3bd3d5cce82389c2f28d037"></a><!-- doxytag: member="tbb::internal::atomic_backoff::pause" ref="a174ea93e3bd3d5cce82389c2f28d037" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.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="a00460.html">tbb_machine.h</a></ul>
-<hr>
+<h1>tbb::movable_exception< ExceptionData > Member List</h1>This is the complete list of members for <a class="el" href="a00257.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="a00257.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00257.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="a00257.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00257.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00257.html#7a46873119d9f85a7b0009c13e41a258">destroy</a>()</td><td><a class="el" href="a00257.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="a00257.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00257.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="a00257.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00257.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00257.html#1aea0ad179d6f0481fe7f3495f66adf9">move</a>()</td><td><a class="el" href="a00257.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00257.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a></td><td><a class="el" href="a00257.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00257.html#bc5f5c4739b17ac5211ac58226c2f5a5">name</a>() const </td><td><a class="el" href="a00257.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00298.html#3f2da7f3d8a6e4c1df522af1213afb5a">operator delete</a>(void *p)</td><td><a class="el" href="a00298.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="a00257.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00257.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00257.html#17cffba35811c92b7e65d63506b69602">throw_self</a>()</td><td><a class="el" href="a00257.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00257.html#b33a89bccf0c63106f1270c7bfaaf54f">what</a>() const </td><td><a class="el" href="a00257.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="a00257.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00257.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline]</code></td></tr>
+</table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00145.html b/doc/html/a00145.html
index c6a13b3..0ccbfcf 100644
--- a/doc/html/a00145.html
+++ b/doc/html/a00145.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::auto_partitioner Class Reference</title>
+<title>Member List</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -20,42 +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>
-<div class="nav">
-<a class="el" href="a00267.html">tbb</a>::<a class="el" href="a00145.html">auto_partitioner</a></div>
-<h1>tbb::auto_partitioner Class Reference<br>
-<small>
-[<a class="el" href="a00275.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="a00409.html">partitioner.h</a>></code>
-<p>
-<a href="a00046.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a47f7e0208a2bf68f35b51b27d2ddf2a"></a><!-- doxytag: member="tbb::auto_partitioner::internal::start_for" ref="a47f7e0208a2bf68f35b51b27d2ddf2a" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>internal::start_for</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e8f710e431b62c2a48914bd99d0fe034"></a><!-- doxytag: member="tbb::auto_partitioner::internal::start_reduce" ref="e8f710e431b62c2a48914bd99d0fe034" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>internal::start_reduce</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="76d97ae6ad98db0acfc8ed8cb7c76705"></a><!-- doxytag: member="tbb::auto_partitioner::internal::start_scan" ref="76d97ae6ad98db0acfc8ed8cb7c76705" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>internal::start_scan</b></td></tr>
-
-<tr><td 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>
-An auto partitioner. 
-<p>
-The range is initial divided into several large chunks. Chunks are further subdivided into VICTIM_CHUNKS pieces if they are stolen and divisible. 
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00409.html">partitioner.h</a></ul>
-<hr>
+<h1>tbb::internal::tbb_exception_ptr Member List</h1>This is the complete list of members for <a class="el" href="a00299.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="a00299.html">tbb::internal::tbb_exception_ptr</a>)</td><td><a class="el" href="a00299.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="a00299.html">tbb::internal::tbb_exception_ptr</a>)</td><td><a class="el" href="a00299.html">tbb::internal::tbb_exception_ptr</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00299.html#c35e5db8e9cdff5d1387db5b0bad2e4a">allocate</a>(captured_exception &src)</td><td><a class="el" href="a00299.html">tbb::internal::tbb_exception_ptr</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00299.html#921875bbacd2c8a5f324c7da7a415262">destroy</a>()</td><td><a class="el" href="a00299.html">tbb::internal::tbb_exception_ptr</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00299.html#292832fd5c523e3d8081a22247840a1d">throw_self</a>()</td><td><a class="el" href="a00299.html">tbb::internal::tbb_exception_ptr</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00146.html b/doc/html/a00146.html
index 7eabe80..3ee0912 100644
--- a/doc/html/a00146.html
+++ b/doc/html/a00146.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::bad_last_alloc Class Reference</title>
+<title>Member List</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -20,28 +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>
-<div class="nav">
-<a class="el" href="a00267.html">tbb</a>::<a class="el" href="a00146.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="a00459.html">tbb_exception.h</a>></code>
-<p>
-<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="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="a00459.html">tbb_exception.h</a></ul>
-<hr>
+<h1>tbb::internal::atomic_backoff Member List</h1>This is the complete list of members for <a class="el" href="a00218.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="a00218.html">tbb::internal::atomic_backoff</a>)</td><td><a class="el" href="a00218.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="a00218.html">tbb::internal::atomic_backoff</a>)</td><td><a class="el" href="a00218.html">tbb::internal::atomic_backoff</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00218.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>()</td><td><a class="el" href="a00218.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="a00218.html">tbb::internal::atomic_backoff</a>)</td><td><a class="el" href="a00218.html">tbb::internal::atomic_backoff</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00147.html b/doc/html/a00147.html
deleted file mode 100644
index ae2a156..0000000
--- a/doc/html/a00147.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="a00267.html">tbb</a>::<a class="el" href="a00147.html">blocked_range</a></div>
-<h1>tbb::blocked_range< Value > Class Template Reference<br>
-<small>
-[<a class="el" href="a00275.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="a00320.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="a00147.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="a00147.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="a00147.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="a00147.html#14795a36ead1414b4371dbe1a4656359">blocked_range</a> (Value begin_, Value end_, <a class="el" href="a00147.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="a00147.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.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="a00147.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.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="a00147.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.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="a00147.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.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="a00147.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="a00147.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="a00147.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">blocked_range</a> (<a class="el" href="a00147.html">blocked_range</a> &r, <a class="el" href="a00198.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="a00147.html">tbb::blocked_range</a>< Value >::<a class="el" href="a00147.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="a00147.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="a00147.html">tbb::blocked_range</a>< Value >::<a class="el" href="a00147.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="a00147.html">tbb::blocked_range</a>< Value >::<a class="el" href="a00147.html">blocked_range</a>           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00147.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="a00198.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="a00147.html#8b929d93ddc13f148b11bceef3a3bdf8">end()</a><<a class="el" href="a00147.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="a00147.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="a00147.html#8b929d93ddc13f148b11bceef3a3bdf8">end()</a><<a class="el" href="a00147.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="a00147.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> <a class="el" href="a00147.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="a00147.html#8b929d93ddc13f148b11bceef3a3bdf8">end()</a><<a class="el" href="a00147.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="a00320.html">blocked_range.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the 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
deleted file mode 100644
index 2baf543..0000000
--- a/doc/html/a00148.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="a00267.html">tbb</a>::<a class="el" href="a00148.html">blocked_range2d</a></div>
-<h1>tbb::blocked_range2d< RowValue, ColValue > Class Template Reference<br>
-<small>
-[<a class="el" href="a00275.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="a00321.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="a00147.html">blocked_range</a>< RowValue > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html#a807a22fe658ec38b8edfd69521d0383">row_range_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Type for size of an iteation range. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="750d5c6ac9915443df477a30031c07fd"></a><!-- doxytag: member="tbb::blocked_range2d::col_range_type" ref="750d5c6ac9915443df477a30031c07fd" args="" -->
-typedef <a class="el" href="a00147.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="a00147.html#f5707bffea38eee5c9680f37358afb8e">row_range_type::size_type</a> row_grainsize, ColValue col_begin, ColValue col_end, typename <a class="el" href="a00147.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="a00148.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="a00148.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="a00148.html">blocked_range2d</a> &r, <a class="el" href="a00198.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="a00147.html">row_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.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="a00147.html">col_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.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="a00321.html">blocked_range2d.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00149.html b/doc/html/a00149.html
deleted file mode 100644
index e0cdf24..0000000
--- a/doc/html/a00149.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="a00267.html">tbb</a>::<a class="el" href="a00149.html">blocked_range3d</a></div>
-<h1>tbb::blocked_range3d< PageValue, RowValue, ColValue > Class Template Reference<br>
-<small>
-[<a class="el" href="a00275.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="a00322.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="a00147.html">blocked_range</a>< PageValue > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00149.html#b8ebf17a552ba47825e9b3887855b719">page_range_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Type for size of an iteation range. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4edc39b1a76c84c8f43ea8bff3e88007"></a><!-- doxytag: member="tbb::blocked_range3d::row_range_type" ref="4edc39b1a76c84c8f43ea8bff3e88007" args="" -->
-typedef <a class="el" href="a00147.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="a00147.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="a00147.html#f5707bffea38eee5c9680f37358afb8e">page_range_type::size_type</a> page_grainsize, RowValue row_begin, RowValue row_end, typename <a class="el" href="a00147.html#f5707bffea38eee5c9680f37358afb8e">row_range_type::size_type</a> row_grainsize, ColValue col_begin, ColValue col_end, typename <a class="el" href="a00147.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="a00149.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="a00149.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="a00149.html">blocked_range3d</a> &r, <a class="el" href="a00198.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="a00147.html">page_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00149.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="a00147.html">row_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00149.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="a00147.html">col_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00149.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="a00322.html">blocked_range3d.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the 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
deleted file mode 100644
index 15f547d..0000000
--- a/doc/html/a00150.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="a00267.html">tbb</a>::<a class="el" href="a00150.html">cache_aligned_allocator</a></div>
-<h1>tbb::cache_aligned_allocator< T > Class Template Reference<br>
-<small>
-[<a class="el" href="a00277.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="a00323.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="a00150.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="a00150.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="a00150.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="a00150.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="a00150.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="a00150.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="a00150.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="a00323.html">cache_aligned_allocator.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00151.html b/doc/html/a00151.html
deleted file mode 100644
index c670332..0000000
--- a/doc/html/a00151.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="a00267.html">tbb</a>::<a class="el" href="a00151.html">cache_aligned_allocator< void ></a></div>
-<h1>tbb::cache_aligned_allocator< void > Class Template Reference<br>
-<small>
-[<a class="el" href="a00277.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="a00323.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="a00323.html">cache_aligned_allocator.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00152.html b/doc/html/a00152.html
deleted file mode 100644
index b8bdd7d..0000000
--- a/doc/html/a00152.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="a00267.html">tbb</a>::<a class="el" href="a00152.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="a00459.html">tbb_exception.h</a>></code>
-<p>
-<p>Inheritance diagram for tbb::captured_exception:
-<p><center><img src="a00152.png" usemap="#tbb::captured_exception_map" border="0" alt=""></center>
-<map name="tbb::captured_exception_map">
-<area href="a00206.html" alt="tbb::tbb_exception" shape="rect" coords="0,0,146,24">
-</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 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="a00152.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="a00152.html">captured_exception</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00152.html">captured_exception</a> &src)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00152.html">captured_exception</a> *__TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.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="a00152.html#93d875d3555502ff6f18513525de204c">destroy</a> ()  throw ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroys objects created by the <a class="el" href="a00152.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="a00152.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="a00152.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="a00152.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="a00152.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="a00206.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="a00152.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="a00206.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="a00152.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="a00206.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="a00206.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="a00459.html">tbb_exception.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the 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
index bae449c..0f8bd97 100644
--- a/doc/html/a00153.html
+++ b/doc/html/a00153.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::combinable< T > Class Template Reference</title>
+<title>Member List</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -20,62 +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>
-<div class="nav">
-<a class="el" href="a00267.html">tbb</a>::<a class="el" href="a00153.html">combinable</a></div>
-<h1>tbb::combinable< T > Class Template Reference<br>
-<small>
-[<a class="el" href="a00276.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="a00325.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="a00153.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="a00153.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="a00153.html">combinable</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00153.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="a00325.html">combinable.h</a></ul>
-<hr>
+<h1>tbb::internal::work_around_alignment_bug< Size, T > Member List</h1>This is the complete list of members for <a class="el" href="a00305.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="a00305.html">tbb::internal::work_around_alignment_bug< Size, T ></a>)</td><td><a class="el" href="a00305.html">tbb::internal::work_around_alignment_bug< Size, T ></a></td><td><code> [static]</code></td></tr>
+</table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00154.html b/doc/html/a00154.html
deleted file mode 100644
index 861ec22..0000000
--- a/doc/html/a00154.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="a00267.html">tbb</a>::<a class="el" href="a00154.html">concurrent_bounded_queue</a></div>
-<h1>tbb::concurrent_bounded_queue< T, A > Class Template Reference<br>
-<small>
-[<a class="el" href="a00276.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="a00336.html">concurrent_queue.h</a>></code>
-<p>
-<p>Inheritance diagram for tbb::concurrent_bounded_queue< T, A >:
-<p><center><img src="a00154.png" usemap="#tbb::concurrent_bounded_queue< T, A >_map" border="0" alt=""></center>
-<map name="tbb::concurrent_bounded_queue< T, A >_map">
-<area href="a00160.html" alt="tbb::deprecated::concurrent_queue< T, A >" shape="rect" coords="0,56,257,80">
-</map>
-<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="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="a00154.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="a00154.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="a00154.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="a00154.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="a00154.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="a00154.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="a00154.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="a00154.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="a00154.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a> (const <a class="el" href="a00154.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> &a=<a class="el" href="a00154.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="a00154.html#7b7fb414d2eaa8a7f5d68fc4cd63ac50">concurrent_bounded_queue</a> (const <a class="el" href="a00154.html">concurrent_bounded_queue</a> &src, const <a class="el" href="a00154.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> &a=<a class="el" href="a00154.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="a00154.html#a5e04dcd7db9fd9b583b4e7df832246a">concurrent_bounded_queue</a> (InputIterator begin, InputIterator end, const <a class="el" href="a00154.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> &a=<a class="el" href="a00154.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="a00154.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="a00154.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="a00154.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="a00154.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="a00154.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="a00154.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00154.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="a00154.html#f64924f2ee9225c368a270fc3c394db9">empty</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Equivalent to <a class="el" href="a00154.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="a00154.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00154.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="a00154.html#f3c6c934f85fd02aedbc83a16943193b">set_capacity</a> (<a class="el" href="a00154.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="a00154.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00154.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="a00154.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="a00154.html">tbb::concurrent_bounded_queue</a>< T, A >::<a class="el" href="a00154.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a>          </td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Integral type for representing size of the queue. 
-<p>
-Notice that the size_type is a signed integral type. This is because the size can be negative if there are pending pops without corresponding pushes. 
-</div>
-</div><p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="41f4c6bd7a82ab070e840bbf81b0b123"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::pop" ref="41f4c6bd7a82ab070e840bbf81b0b123" args="(T &destination)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, class A = cache_aligned_allocator<T>> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void <a class="el" href="a00154.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="a00154.html">tbb::concurrent_bounded_queue</a>< T, A >::set_capacity           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00154.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="a00154.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> <a class="el" href="a00154.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="a00154.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="a00154.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="a00154.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="a00336.html">concurrent_queue.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00155.html b/doc/html/a00155.html
deleted file mode 100644
index e4f5e66..0000000
--- a/doc/html/a00155.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::interface4::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="a00267.html">tbb</a>::<b>interface4</b>::<a class="el" href="a00155.html">concurrent_hash_map</a></div>
-<h1>tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator > Class Template Reference<br>
-<small>
-[<a class="el" href="a00276.html">Containers</a>]</small>
-</h1><!-- doxytag: class="tbb::interface4::concurrent_hash_map" -->Unordered map from Key to T.  
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00326.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="33b3b94e17dab45c97b246bca3625655"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::key_type" ref="33b3b94e17dab45c97b246bca3625655" 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="a5d75ef053d5e69de88ae7e941a743ec"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::mapped_type" ref="a5d75ef053d5e69de88ae7e941a743ec" 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="01ebd1df398d3823ca6ea8fcb6b068ae"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::value_type" ref="01ebd1df398d3823ca6ea8fcb6b068ae" 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="ae6bb63bc9cf97d63e78d208ae0e479d"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::size_type" ref="ae6bb63bc9cf97d63e78d208ae0e479d" 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="2f5093a93592b0a30fda935711f9f788"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::difference_type" ref="2f5093a93592b0a30fda935711f9f788" 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="1d1ffb83cae339007dc8d5b2e4e3cea8"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::pointer" ref="1d1ffb83cae339007dc8d5b2e4e3cea8" 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="ecf3dc1d6d8290a71639967ffa933343"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::const_pointer" ref="ecf3dc1d6d8290a71639967ffa933343" 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="14a3d74308b04a355b0689eb019ee683"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::reference" ref="14a3d74308b04a355b0689eb019ee683" 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="1f6fcb68889829bca708d57f7b9e2da4"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::const_reference" ref="1f6fcb68889829bca708d57f7b9e2da4" 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="118b95ebef79ac195fb99babbf335e8c"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::iterator" ref="118b95ebef79ac195fb99babbf335e8c" args="" -->
-typedef internal::hash_map_iterator<<br>
- <a class="el" href="a00155.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="5fec1af5576448740eb5c6119a30c6a9"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::const_iterator" ref="5fec1af5576448740eb5c6119a30c6a9" args="" -->
-typedef internal::hash_map_iterator<<br>
- <a class="el" href="a00155.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="aa3d1bdabd5e9a15174624946048a2c8"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::range_type" ref="aa3d1bdabd5e9a15174624946048a2c8" 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="20981e8295ff79f4e3d8b76a16c42851"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::const_range_type" ref="20981e8295ff79f4e3d8b76a16c42851" 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="f8d6e7e809e96f48fd039a54fc4df630"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::allocator_type" ref="f8d6e7e809e96f48fd039a54fc4df630" 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="d827bb5e4f61de1916ab67d51c7c6e60"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::concurrent_hash_map" ref="d827bb5e4f61de1916ab67d51c7c6e60" args="(const allocator_type &a=allocator_type())" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#d827bb5e4f61de1916ab67d51c7c6e60">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="a4612d5c7233712d455496641e9b31ff"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::concurrent_hash_map" ref="a4612d5c7233712d455496641e9b31ff" args="(size_type n, const allocator_type &a=allocator_type())" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#a4612d5c7233712d455496641e9b31ff">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="df0cd14eaddb17f10929c91519e65be9"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::concurrent_hash_map" ref="df0cd14eaddb17f10929c91519e65be9" args="(const concurrent_hash_map &table, const allocator_type &a=allocator_type())" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#df0cd14eaddb17f10929c91519e65be9">concurrent_hash_map</a> (const <a class="el" href="a00155.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="3bfe75fcb350ce39cf610c164f233edc"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::concurrent_hash_map" ref="3bfe75fcb350ce39cf610c164f233edc" 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="a00155.html#3bfe75fcb350ce39cf610c164f233edc">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="2c0c42a2e1b5282b6739157df9ce2304"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::operator=" ref="2c0c42a2e1b5282b6739157df9ce2304" args="(const concurrent_hash_map &table)" -->
-<a class="el" href="a00155.html">concurrent_hash_map</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#2c0c42a2e1b5282b6739157df9ce2304">operator=</a> (const <a class="el" href="a00155.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="a00155.html#13f3f2e8de7564be03882c31559493c9">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="#13f3f2e8de7564be03882c31559493c9"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a9f89be8fe28835749529d91081a2511"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::clear" ref="a9f89be8fe28835749529d91081a2511" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#a9f89be8fe28835749529d91081a2511">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="a1ac58997d8fbf242b266e3691573481"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::~concurrent_hash_map" ref="a1ac58997d8fbf242b266e3691573481" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#a1ac58997d8fbf242b266e3691573481">~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="1d279026ce93bbef47a5b8a028cd387b"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::range" ref="1d279026ce93bbef47a5b8a028cd387b" 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="728c7aef8f1326f3f9ca6b4a6d1155cf"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::range" ref="728c7aef8f1326f3f9ca6b4a6d1155cf" 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="4a3c58cf1234b74ca796dcf555d32f53"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::begin" ref="4a3c58cf1234b74ca796dcf555d32f53" 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="28c690486d8db5783475f5b1a59d21bc"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::end" ref="28c690486d8db5783475f5b1a59d21bc" 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="aa51c059c92aaf259916be74b928adb2"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::begin" ref="aa51c059c92aaf259916be74b928adb2" 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="d2610bf00a3f631719308bdb59876f08"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::end" ref="d2610bf00a3f631719308bdb59876f08" 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="5faacd9a290b122947a21f72c676a0b9"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::equal_range" ref="5faacd9a290b122947a21f72c676a0b9" 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="4abad08a1788b57a78698f16fab92838"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::equal_range" ref="4abad08a1788b57a78698f16fab92838" 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="17fd8c5fe8c6a86075f34aa4e8412ba3"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::size" ref="17fd8c5fe8c6a86075f34aa4e8412ba3" args="() const " -->
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#17fd8c5fe8c6a86075f34aa4e8412ba3">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="6cab7d029a3e73a653ef0faeac4d1586"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::empty" ref="6cab7d029a3e73a653ef0faeac4d1586" args="() const " -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#6cab7d029a3e73a653ef0faeac4d1586">empty</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">True if <a class="el" href="a00155.html#17fd8c5fe8c6a86075f34aa4e8412ba3">size()</a>==0. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1e45d3cbd1e2ae06f365f1b48e0df0b5"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::max_size" ref="1e45d3cbd1e2ae06f365f1b48e0df0b5" args="() const " -->
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#1e45d3cbd1e2ae06f365f1b48e0df0b5">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="414d15033d36c63aa3a40666dc4d6f5e"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::bucket_count" ref="414d15033d36c63aa3a40666dc4d6f5e" args="() const " -->
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#414d15033d36c63aa3a40666dc4d6f5e">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="199208eed6f09e200cda364f906be0fe"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::get_allocator" ref="199208eed6f09e200cda364f906be0fe" args="() const " -->
-allocator_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#199208eed6f09e200cda364f906be0fe">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="eddb0d2efe0b4f25a85c059e1c3dac15"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::swap" ref="eddb0d2efe0b4f25a85c059e1c3dac15" args="(concurrent_hash_map &table)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#eddb0d2efe0b4f25a85c059e1c3dac15">swap</a> (<a class="el" href="a00155.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="74f5ef06a06c5e619f156a1c76c04969"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::count" ref="74f5ef06a06c5e619f156a1c76c04969" args="(const Key &key) const " -->
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#74f5ef06a06c5e619f156a1c76c04969">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="a00155.html#64338d7f2e35df586af4cb0145cd910f">find</a> (<a class="el" href="a00158.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="#64338d7f2e35df586af4cb0145cd910f"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#bce7bdf46435115a95cca2aa73c5da83">find</a> (<a class="el" href="a00156.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="#bce7bdf46435115a95cca2aa73c5da83"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#58c38b27273de6c670568633c0931854">insert</a> (<a class="el" href="a00158.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="#58c38b27273de6c670568633c0931854"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#ccfecaa3e71d92be61fb3d811dd264eb">insert</a> (<a class="el" href="a00156.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="#ccfecaa3e71d92be61fb3d811dd264eb"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#d4a2816129e38c53128c6d0c7b6b7370">insert</a> (<a class="el" href="a00158.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="#d4a2816129e38c53128c6d0c7b6b7370"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#a657e61cd2b13164764ca2708875784a">insert</a> (<a class="el" href="a00156.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="#a657e61cd2b13164764ca2708875784a"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#52bffd1066b3d7b793945bc6fa1a71a1">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="#52bffd1066b3d7b793945bc6fa1a71a1"></a><br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="cfe172677e5987004ef4a03e22fa338a"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::insert" ref="cfe172677e5987004ef4a03e22fa338a" 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="a00155.html#cfe172677e5987004ef4a03e22fa338a">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="a00155.html#034c3b3ee419edee78e0f2f2b1f0d7ca">erase</a> (const Key &key)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Erase item.  <a href="#034c3b3ee419edee78e0f2f2b1f0d7ca"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#da7e4a50f6bb06191817425ec85fe760">erase</a> (<a class="el" href="a00158.html">const_accessor</a> &item_accessor)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Erase item by <a class="el" href="a00158.html">const_accessor</a>.  <a href="#da7e4a50f6bb06191817425ec85fe760"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#0f500842d0cf791f8fa61662edb1b311">erase</a> (<a class="el" href="a00156.html">accessor</a> &item_accessor)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Erase item by accessor.  <a href="#0f500842d0cf791f8fa61662edb1b311"></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="6bea55a4e94be2ab299de06dc266f3a3"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::node_allocator_type" ref="6bea55a4e94be2ab299de06dc266f3a3" 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="53a98a10a2adb33d91a286a487d0cd78"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::delete_node" ref="53a98a10a2adb33d91a286a487d0cd78" 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="6d30c4c2698ea07ed6dd0e9eaf774b11"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::search_bucket" ref="6d30c4c2698ea07ed6dd0e9eaf774b11" 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="571d635fd206d9985cf20a1a659ea476"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::rehash_bucket" ref="571d635fd206d9985cf20a1a659ea476" 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="1f22480a290ddc6c145888d8f985531a"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::lookup" ref="1f22480a290ddc6c145888d8f985531a" 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="a00155.html#1f22480a290ddc6c145888d8f985531a">lookup</a> (bool op_insert, const Key &key, const T *t, <a class="el" href="a00158.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="faad2108bd2be75e52293486af59f11e"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::exclude" ref="faad2108bd2be75e52293486af59f11e" args="(const_accessor &item_accessor, bool readonly)" -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#faad2108bd2be75e52293486af59f11e">exclude</a> (<a class="el" href="a00158.html">const_accessor</a> &item_accessor, bool readonly)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">delete item by accessor <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="976c57edfb7f22b9f91a2e11f141eb4a"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::internal_equal_range" ref="976c57edfb7f22b9f91a2e11f141eb4a" 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="a00155.html#976c57edfb7f22b9f91a2e11f141eb4a">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="3c27779fe66b79505390d084310d997e"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::internal_copy" ref="3c27779fe66b79505390d084310d997e" args="(const concurrent_hash_map &source)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#3c27779fe66b79505390d084310d997e">internal_copy</a> (const <a class="el" href="a00155.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="cf43170691e36146a1bff61e3cf895ce"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::internal_copy" ref="cf43170691e36146a1bff61e3cf895ce" 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="a00155.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="252e91d8029f6308db7179557e3b1436"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::my_allocator" ref="252e91d8029f6308db7179557e3b1436" 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="f738f241c8500ce3dbf0f9028ca8b602"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::my_hash_compare" ref="f738f241c8500ce3dbf0f9028ca8b602" 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::interface4::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::interface4::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::interface4::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="a00156.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="a00156.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.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="a00157.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html">const_accessor</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Combines data access, locking, and garbage collection.  <a href="a00158.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::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></h3>
-
-Unordered map from Key to T. 
-<p>
-<a class="el" href="a00155.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="a00155.html#58c38b27273de6c670568633c0931854">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="a00155.html#2c0c42a2e1b5282b6739157df9ce2304">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="a00155.html#58c38b27273de6c670568633c0931854">insert()</a> methods</li><li>Added <a class="el" href="a00155.html#199208eed6f09e200cda364f906be0fe">get_allocator()</a></li><li>Added <a class="el" href="a00155.html#eddb0d2efe0b4f25a85c059e1c3dac15">swap()</a></li [...]
-</dd></dl>
-
-<p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="0f500842d0cf791f8fa61662edb1b311"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::erase" ref="0f500842d0cf791f8fa61662edb1b311" 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="a00155.html">tbb::interface4::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::erase           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00156.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="da7e4a50f6bb06191817425ec85fe760"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::erase" ref="da7e4a50f6bb06191817425ec85fe760" 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="a00155.html">tbb::interface4::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::erase           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00158.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="a00158.html">const_accessor</a>. 
-<p>
-Return true if item was erased by particularly this call. 
-</div>
-</div><p>
-<a class="anchor" name="034c3b3ee419edee78e0f2f2b1f0d7ca"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::erase" ref="034c3b3ee419edee78e0f2f2b1f0d7ca" 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="a00155.html">tbb::interface4::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="bce7bdf46435115a95cca2aa73c5da83"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::find" ref="bce7bdf46435115a95cca2aa73c5da83" 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="a00155.html">tbb::interface4::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::find           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00156.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="64338d7f2e35df586af4cb0145cd910f"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::find" ref="64338d7f2e35df586af4cb0145cd910f" 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="a00155.html">tbb::interface4::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::find           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00158.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="52bffd1066b3d7b793945bc6fa1a71a1"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::insert" ref="52bffd1066b3d7b793945bc6fa1a71a1" 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="a00155.html">tbb::interface4::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="a657e61cd2b13164764ca2708875784a"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::insert" ref="a657e61cd2b13164764ca2708875784a" 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="a00155.html">tbb::interface4::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::insert           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00156.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="d4a2816129e38c53128c6d0c7b6b7370"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::insert" ref="d4a2816129e38c53128c6d0c7b6b7370" 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="a00155.html">tbb::interface4::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::insert           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00158.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="ccfecaa3e71d92be61fb3d811dd264eb"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::insert" ref="ccfecaa3e71d92be61fb3d811dd264eb" 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="a00155.html">tbb::interface4::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::insert           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00156.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="58c38b27273de6c670568633c0931854"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::insert" ref="58c38b27273de6c670568633c0931854" 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="a00155.html">tbb::interface4::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::insert           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00158.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::interface4::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="a00155.html">tbb::interface4::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="13f3f2e8de7564be03882c31559493c9"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::rehash" ref="13f3f2e8de7564be03882c31559493c9" 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="a00155.html">tbb::interface4::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="a00155.html#64338d7f2e35df586af4cb0145cd910f">find()</a> and <a class="el" href="a00155.html#74f5ef06a06c5e619f156a1c76c04969">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="a00326.html">concurrent_hash_map.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00156.html b/doc/html/a00156.html
deleted file mode 100644
index 564906d..0000000
--- a/doc/html/a00156.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::interface4::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="a00267.html">tbb</a>::<b>interface4</b>::<a class="el" href="a00155.html">concurrent_hash_map</a>::<a class="el" href="a00156.html">accessor</a></div>
-<h1>tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor Class Reference</h1><!-- doxytag: class="tbb::interface4::concurrent_hash_map::accessor" --><!-- doxytag: inherits="tbb::interface4::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="a00326.html">concurrent_hash_map.h</a>></code>
-<p>
-<p>Inheritance diagram for tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor:
-<p><center><img src="a00156.png" usemap="#tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor_map" border="0" alt=""></center>
-<map name="tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor_map">
-<area href="a00158.html" alt="tbb::interface4::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="49eec74f272bab187d176c0d9d16a7fe"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::accessor::value_type" ref="49eec74f272bab187d176c0d9d16a7fe" args="" -->
-typedef concurrent_hash_map::value_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#49eec74f272bab187d176c0d9d16a7fe">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="e8938f0cd1211e88a1d73527ed3636c4"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::accessor::operator *" ref="e8938f0cd1211e88a1d73527ed3636c4" args="() const " -->
-reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#e8938f0cd1211e88a1d73527ed3636c4">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="fcebc32c020202cc37e60eadef157569"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::accessor::operator->" ref="fcebc32c020202cc37e60eadef157569" args="() const " -->
-pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#fcebc32c020202cc37e60eadef157569">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::interface4::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="a00326.html">concurrent_hash_map.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00156.png b/doc/html/a00156.png
deleted file mode 100644
index a40bd94..0000000
Binary files a/doc/html/a00156.png and /dev/null differ
diff --git a/doc/html/a00157.html b/doc/html/a00157.html
deleted file mode 100644
index c4054ce..0000000
--- a/doc/html/a00157.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::interface4::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="a00267.html">tbb</a>::<b>interface4</b>::<a class="el" href="a00155.html">concurrent_hash_map</a>::<a class="el" href="a00157.html">bucket_accessor</a></div>
-<h1>tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor Class Reference</h1><!-- doxytag: class="tbb::interface4::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="a00326.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="5aa0b492fb4260a940ea7bda2ef486e2"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::bucket_accessor::bucket_accessor" ref="5aa0b492fb4260a940ea7bda2ef486e2" 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="a00155.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="26b4fe0ca87a7ad4852cb787db880119"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::bucket_accessor::acquire" ref="26b4fe0ca87a7ad4852cb787db880119" args="(concurrent_hash_map *base, const hashcode_t h, bool writer=false)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#26b4fe0ca87a7ad4852cb787db880119">acquire</a> (<a class="el" href="a00155.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="fc194e3a186dc935a5fb513cc9f8e898"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::bucket_accessor::is_writer" ref="fc194e3a186dc935a5fb513cc9f8e898" args="()" -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#fc194e3a186dc935a5fb513cc9f8e898">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="57c6110bd20e95c06de5a199de988941"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::bucket_accessor::operator()" ref="57c6110bd20e95c06de5a199de988941" args="()" -->
-bucket * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#57c6110bd20e95c06de5a199de988941">operator()</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">get bucket pointer <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8f7f0dc61f528de29d06e6054b4a9835"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::bucket_accessor::upgrade_to_writer" ref="8f7f0dc61f528de29d06e6054b4a9835" args="()" -->
-bool </td><td class="memItemRight" valign="bottom"><b>upgrade_to_writer</b> ()</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Key, typename T, typename HashCompare, typename Allocator><br>
- class tbb::interface4::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="a00326.html">concurrent_hash_map.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the 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
deleted file mode 100644
index 1cd874b..0000000
--- a/doc/html/a00158.html
+++ /dev/null
@@ -1,91 +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::interface4::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="a00267.html">tbb</a>::<b>interface4</b>::<a class="el" href="a00155.html">concurrent_hash_map</a>::<a class="el" href="a00158.html">const_accessor</a></div>
-<h1>tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor Class Reference</h1><!-- doxytag: class="tbb::interface4::concurrent_hash_map::const_accessor" -->Combines data access, locking, and garbage collection.  
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00326.html">concurrent_hash_map.h</a>></code>
-<p>
-<p>Inheritance diagram for tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor:
-<p><center><img src="a00158.png" usemap="#tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor_map" border="0" alt=""></center>
-<map name="tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor_map">
-<area href="a00156.html" alt="tbb::interface4::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="48647ca0d79c1233b997f5768403c926"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::const_accessor::value_type" ref="48647ca0d79c1233b997f5768403c926" args="" -->
-typedef const concurrent_hash_map::value_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#48647ca0d79c1233b997f5768403c926">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="5cce3104cb0a52e08d2131370871c614"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::const_accessor::empty" ref="5cce3104cb0a52e08d2131370871c614" args="() const " -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#5cce3104cb0a52e08d2131370871c614">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="d5ce4f88d8870290238a8ad621e6f270"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::const_accessor::release" ref="d5ce4f88d8870290238a8ad621e6f270" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#d5ce4f88d8870290238a8ad621e6f270">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="30f31106840700a4c3664b9cb1c31ca7"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::const_accessor::operator *" ref="30f31106840700a4c3664b9cb1c31ca7" args="() const " -->
-const_reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#30f31106840700a4c3664b9cb1c31ca7">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::interface4::concurrent_hash_map::const_accessor::operator->" ref="3d03a48ecb8cd9549bd8be64b09c9b0d" args="() const " -->
-const_pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.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="a9ead65cca68d4c49c7ef64d7899a4c8"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::const_accessor::const_accessor" ref="a9ead65cca68d4c49c7ef64d7899a4c8" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#a9ead65cca68d4c49c7ef64d7899a4c8">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="752b0c1ec74b94786403a75e42917d01"></a><!-- doxytag: member="tbb::interface4::concurrent_hash_map::const_accessor::~const_accessor" ref="752b0c1ec74b94786403a75e42917d01" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#752b0c1ec74b94786403a75e42917d01">~const_accessor</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy result after releasing the underlying reference. <br></td></tr>
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d062d8ecb243a6ec62fa30bca52a1bcf"></a><!-- doxytag: member="tbb::interface4::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::interface4::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::interface4::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="a00326.html">concurrent_hash_map.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the 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.png b/doc/html/a00158.png
deleted file mode 100644
index f39e102..0000000
Binary files a/doc/html/a00158.png and /dev/null differ
diff --git a/doc/html/a00159.html b/doc/html/a00159.html
index ba24fd5..39fd259 100644
--- a/doc/html/a00159.html
+++ b/doc/html/a00159.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::strict_ppl::concurrent_queue< T, A > Class Template Reference</title>
+<title>Member List</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -20,147 +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>
-<div class="nav">
-<a class="el" href="a00267.html">tbb</a>::<a class="el" href="a00274.html">strict_ppl</a>::<a class="el" href="a00159.html">concurrent_queue</a></div>
-<h1>tbb::strict_ppl::concurrent_queue< T, A > Class Template Reference<br>
-<small>
-[<a class="el" href="a00276.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="a00336.html">concurrent_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="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="a00159.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="a00159.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="a00159.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="a00159.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="a00159.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="a00159.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="a00159.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="a00159.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="a00159.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a> (const <a class="el" href="a00159.html#5a3956341728eaa558d8827063718cac">allocator_type</a> &a=<a class="el" href="a00159.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="a00159.html#25209656c84f2f9b030e2f9162713341">concurrent_queue</a> (InputIterator begin, InputIterator end, const <a class="el" href="a00159.html#5a3956341728eaa558d8827063718cac">allocator_type</a> &a=<a class="el" href="a00159.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="a00159.html#8a6b98ea11a867db8ac868f0113ca429">concurrent_queue</a> (const <a class="el" href="a00159.html">concurrent_queue</a> &src, const <a class="el" href="a00159.html#5a3956341728eaa558d8827063718cac">allocator_type</a> &a=<a class="el" href="a00159.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="a00159.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="a00159.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="a00159.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="a00159.html#8fc30e93f8342a1960357f71e4fe8a2b">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00159.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="a00159.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="a00159.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="a00159.html#5a3956341728eaa558d8827063718cac">allocator_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00159.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="a00159.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="a00336.html">concurrent_queue.h</a></ul>
-<hr>
+<h1>tbb::tick_count Member List</h1>This is the complete list of members for <a class="el" href="a00302.html">tbb::tick_count</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00302.html#fb7f78ca61cf28398645ace66e284473">now</a>()</td><td><a class="el" href="a00302.html">tbb::tick_count</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00302.html#09dde78a4100800c11bb883d6204b586">operator-</a>(const tick_count &t1, const tick_count &t0)</td><td><a class="el" href="a00302.html">tbb::tick_count</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00302.html#34593326ae4191e02a13c7cbdab9de4c">tick_count</a>()</td><td><a class="el" href="a00302.html">tbb::tick_count</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00160.html b/doc/html/a00160.html
index e61f478..29ad763 100644
--- a/doc/html/a00160.html
+++ b/doc/html/a00160.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::deprecated::concurrent_queue< T, A > Class Template Reference</title>
+<title>Member List</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -20,132 +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>
-<div class="nav">
-<a class="el" href="a00267.html">tbb</a>::<b>deprecated</b>::<a class="el" href="a00160.html">concurrent_queue</a></div>
-<h1>tbb::deprecated::concurrent_queue< T, A > Class Template Reference<br>
-<small>
-[<a class="el" href="a00276.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="a00336.html">concurrent_queue.h</a>></code>
-<p>
-<p>Inheritance diagram for tbb::deprecated::concurrent_queue< T, A >:
-<p><center><img src="a00160.png" usemap="#tbb::deprecated::concurrent_queue< T, A >_map" border="0" alt=""></center>
-<map name="tbb::deprecated::concurrent_queue< T, A >_map">
-<area href="a00154.html" alt="tbb::concurrent_bounded_queue< T, A >" shape="rect" coords="0,0,257,24">
-</map>
-<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="8861a9cdf232a20b5f2569754a281871"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::iterator" ref="8861a9cdf232a20b5f2569754a281871" args="" -->
-typedef <a class="el" href="a00154.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="a00154.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="a00160.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="a00160.html#fc092b9082f233482f3513fc3bb670f7">concurrent_queue</a> (const <a class="el" href="a00160.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="a00160.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="a00160.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="a00160.html#48da3536245318af6cb5fd58bac78039">pop_if_present</a> (T &destination)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Attempt to dequeue an item from head of queue.  <a href="#48da3536245318af6cb5fd58bac78039"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ed7202cd273ae36463e6ac57e9472670"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::begin" ref="ed7202cd273ae36463e6ac57e9472670" args="()" -->
-iterator </td><td class="memItemRight" valign="bottom"><b>begin</b> ()</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="35fbb0d7e135545eb1daec2b4ae894cd"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::end" ref="35fbb0d7e135545eb1daec2b4ae894cd" args="()" -->
-iterator </td><td class="memItemRight" valign="bottom"><b>end</b> ()</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="62f31fe653e1158e64ddb0e163d0335c"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::begin" ref="62f31fe653e1158e64ddb0e163d0335c" args="() const " -->
-const_iterator </td><td class="memItemRight" valign="bottom"><b>begin</b> () const </td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3d42ddc4a6fe42350750a930302863d1"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::end" ref="3d42ddc4a6fe42350750a930302863d1" args="() const " -->
-const_iterator </td><td class="memItemRight" valign="bottom"><b>end</b> () const </td></tr>
-
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="05bffad9626d51abbd4bb82ae2a1cceb"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::internal::concurrent_queue_iterator" ref="05bffad9626d51abbd4bb82ae2a1cceb" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>internal::concurrent_queue_iterator</b></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-<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="a00160.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="a00154.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="a00160.html">tbb::deprecated::concurrent_queue</a>< T, A >::push_if_not_full           </td>
-          <td>(</td>
-          <td class="paramtype">const T & </td>
-          <td class="paramname"> <em>source</em>          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Enqueue an item at tail of queue if queue is not already full. 
-<p>
-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="a00336.html">concurrent_queue.h</a></ul>
-<hr>
+<h1>tbb::tick_count::interval_t Member List</h1>This is the complete list of members for <a class="el" href="a00303.html">tbb::tick_count::interval_t</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00303.html#75a9a0949f8a8a84d6758835f1b48dad">interval_t</a>()</td><td><a class="el" href="a00303.html">tbb::tick_count::interval_t</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00303.html#1a21a428e00cced2e6a49e0f5f2258bf">interval_t</a>(double sec)</td><td><a class="el" href="a00303.html">tbb::tick_count::interval_t</a></td><td><code> [inline, explicit]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00303.html#5871ead1ca230efbe52a5008470e6428">operator+</a>(const interval_t &i, const interval_t &j)</td><td><a class="el" href="a00303.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00303.html#cd9814947902e26463a69a111530f81b">operator+=</a>(const interval_t &i)</td><td><a class="el" href="a00303.html">tbb::tick_count::interval_t</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00303.html#09dde78a4100800c11bb883d6204b586">operator-</a>(const tick_count &t1, const tick_count &t0)</td><td><a class="el" href="a00303.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00303.html#fa509691e1d689830931e36edd274f76">operator-</a>(const interval_t &i, const interval_t &j)</td><td><a class="el" href="a00303.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00303.html#35ff7eaf7c2031b4a991402ac9ecb940">operator-=</a>(const interval_t &i)</td><td><a class="el" href="a00303.html">tbb::tick_count::interval_t</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00303.html#d5d8429c0bc59cf6131b2abc7929fa59">seconds</a>() const </td><td><a class="el" href="a00303.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="a00303.html">tbb::tick_count::interval_t</a>)</td><td><a class="el" href="a00303.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
+</table><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00161.html b/doc/html/a00161.html
deleted file mode 100644
index 07b22f5..0000000
--- a/doc/html/a00161.html
+++ /dev/null
@@ -1,596 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::concurrent_vector< T, A > Class Template Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="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="a00267.html">tbb</a>::<a class="el" href="a00161.html">concurrent_vector</a></div>
-<h1>tbb::concurrent_vector< T, A > Class Template Reference<br>
-<small>
-[<a class="el" href="a00276.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="a00342.html">concurrent_vector.h</a>></code>
-<p>
-<a href="a00026.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="a00161.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="a00161.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="a00161.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="a00161.html#dd8a200b99a8088435a37934b58fe335">concurrent_vector</a> (const <a class="el" href="a00161.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="a00161.html#64432f13f7b29bfe4acfb5568f34f3a8">concurrent_vector</a> (const <a class="el" href="a00161.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="a00161.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="a00161.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="a00161.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="a00161.html">concurrent_vector</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#691f0f3cda3e489c37a657016e375eaf">operator=</a> (const <a class="el" href="a00161.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="a00161.html">concurrent_vector</a> & </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00161.html#19f4ab88a01b0fd056af3bba463e7bd6">operator=</a> (const <a class="el" href="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.html#1693d1da41b1a8235871be9c6633be35">compact</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">An alias for <a class="el" href="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.html#96c9c4bd968ed3edb8dd276854d2dae0">swap</a> (<a class="el" href="a00161.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="a00161.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="a00161.html#da2444b28bb840d38f60d0030333a5fc">~concurrent_vector</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Clear and destroy vector. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bb5ae659871478f1f5c68039e1273e12"></a><!-- doxytag: member="tbb::concurrent_vector::internal_vector_base" ref="bb5ae659871478f1f5c68039e1273e12" args="() const " -->
-const internal::concurrent_vector_base_v3 & </td><td class="memItemRight" valign="bottom"><b>internal_vector_base</b> () const </td></tr>
-
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="30086a58bff79a91103723be20916b96"></a><!-- doxytag: member="tbb::concurrent_vector::internal::vector_iterator" ref="30086a58bff79a91103723be20916b96" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>internal::vector_iterator</b></td></tr>
-
-<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>generic_range_type</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>internal_loop_guide</b></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Exception-aware helper class for filling a segment by exception-danger operators of user class. <br></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename T, class A><br>
- class tbb::concurrent_vector< T, A ></h3>
-
-Concurrent vector container. 
-<p>
-<a class="el" href="a00161.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="a00161.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="a00161.html#715fe313c4a9c22731cc404dd80c9ec9">concurrent_vector::size()</a> and <a class="el" href="a00161.html#47fe588214dd5fa06ab6e8ab78d83874">grow_to_at_least()</a> methods to assure elements are allocated.</li><li>Methods <a class="el" href="a00161.html#c0b51160e5a764982ec97a455f94f2c6">end()</a>/rbegin()/back() are partly thread-safe since they use <a class="el" href="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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. 
-<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="a00342.html">concurrent_vector.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00162.html b/doc/html/a00162.html
deleted file mode 100644
index 774ea02..0000000
--- a/doc/html/a00162.html
+++ /dev/null
@@ -1,54 +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::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>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="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="a00267.html">tbb</a>::<a class="el" href="a00162.html">empty_task</a></div>
-<h1>tbb::empty_task Class Reference<br>
-<small>
-[<a class="el" href="a00280.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="a00433.html">task.h</a>></code>
-<p>
-<p>Inheritance diagram for tbb::empty_task:
-<p><center><img src="a00162.png" usemap="#tbb::empty_task_map" border="0" alt=""></center>
-<map name="tbb::empty_task_map">
-<area href="a00199.html" alt="tbb::task" shape="rect" coords="0,0,97,24">
-</map>
-<a href="a00076.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>
-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="a00433.html">task.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00163.html b/doc/html/a00163.html
deleted file mode 100644
index 65c82ce..0000000
--- a/doc/html/a00163.html
+++ /dev/null
@@ -1,197 +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::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>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="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="a00267.html">tbb</a>::<b>interface6</b>::<a class="el" href="a00163.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="a00276.html">Containers</a>]</small>
-</h1><!-- doxytag: class="tbb::interface6::enumerable_thread_specific" -->The <a class="el" href="a00163.html">enumerable_thread_specific</a> container.  
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00354.html">enumerable_thread_specific.h</a>></code>
-<p>
-<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="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="a00163.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="a00161.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="a00161.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="a00163.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="a00163.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="a00163.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="a00163.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="a00163.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="a00163.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="a00163.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="a00163.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="a00163.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="a00163.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="a00163.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="a00163.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="a00163.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="a00163.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="a00163.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="a00163.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="a00163.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="a00163.html">enumerable_thread_specific</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00163.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="a00163.html">enumerable_thread_specific</a> & </td><td class="memTemplItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00163.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="a00163.html">enumerable_thread_specific</a> container. 
-<p>
-<a class="el" href="a00163.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="a00163.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="a00163.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="a00163.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="a00354.html">enumerable_thread_specific.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the 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 8f0e1c6..0000000
--- a/doc/html/a00164.html
+++ /dev/null
@@ -1,156 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::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="a00267.html">tbb</a>::<a class="el" href="a00164.html">filter</a></div>
-<h1>tbb::filter Class Reference<br>
-<small>
-[<a class="el" href="a00275.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="a00414.html">pipeline.h</a>></code>
-<p>
-<p>Inheritance diagram for tbb::filter:
-<p><center><img src="a00164.png" usemap="#tbb::filter_map" border="0" alt=""></center>
-<map name="tbb::filter_map">
-<area href="a00209.html" alt="tbb::thread_bound_filter" shape="rect" coords="0,56,145,80">
-</map>
-<a href="a00049.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><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="a00164.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="a00164.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="a00164.html#15c29cae5d237e6d63dbfe5c94af89d5">is_bound</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">True if filter is thread-bound. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.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="a00164.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="a00164.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>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>
-
-</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>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00414.html">pipeline.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the 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
deleted file mode 100644
index a0ff3f0..0000000
--- a/doc/html/a00165.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::interface5::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>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="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="a00267.html">tbb</a>::<b>interface5</b>::<a class="el" href="a00165.html">filter_t</a></div>
-<h1>tbb::interface5::filter_t< T, U > Class Template Reference</h1><!-- doxytag: class="tbb::interface5::filter_t" -->Class representing a chain of type-safe pipeline filters.  
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00414.html">pipeline.h</a>></code>
-<p>
-<a href="a00053.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e03acdfacd859b954ee45c41fad09992"></a><!-- doxytag: member="tbb::interface5::filter_t::filter_t" ref="e03acdfacd859b954ee45c41fad09992" args="(const filter_t< T, U > &rhs)" -->
- </td><td class="memItemRight" valign="bottom"><b>filter_t</b> (const <a class="el" href="a00165.html">filter_t</a>< T, U > &rhs)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="08960002b559318d985ab1c90344ed06"></a><!-- doxytag: member="tbb::interface5::filter_t::filter_t" ref="08960002b559318d985ab1c90344ed06" 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="a022e50a3f46111e385d8859699d5b33"></a><!-- doxytag: member="tbb::interface5::filter_t::operator=" ref="a022e50a3f46111e385d8859699d5b33" args="(const filter_t< T, U > &rhs)" -->
-void </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00165.html">filter_t</a>< T, U > &rhs)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9785b1fbc87683bcfe0383b117b41a69"></a><!-- doxytag: member="tbb::interface5::filter_t::clear" ref="9785b1fbc87683bcfe0383b117b41a69" 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::interface5::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::interface5::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="a00165.html">filter_t</a>< T_, U_ > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00165.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::interface5::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="a00165.html">filter_t</a>< T_, U_ > </td><td class="memTemplItemRight" valign="bottom"><b>operator &</b> (const <a class="el" href="a00165.html">filter_t</a>< T_, V_ > &, const <a class="el" href="a00165.html">filter_t</a>< V_, U_ > &)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename T, typename U><br>
- class tbb::interface5::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="a00414.html">pipeline.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00166.html b/doc/html/a00166.html
deleted file mode 100644
index a536980..0000000
--- a/doc/html/a00166.html
+++ /dev/null
@@ -1,53 +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::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>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="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="a00267.html">tbb</a>::<a class="el" href="a00166.html">final_scan_tag</a></div>
-<h1>tbb::final_scan_tag Struct Reference<br>
-<small>
-[<a class="el" href="a00275.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="a00396.html">parallel_scan.h</a>></code>
-<p>
-<a href="a00042.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>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>
-Used to indicate that the final scan is being performed. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00396.html">parallel_scan.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00167.html b/doc/html/a00167.html
deleted file mode 100644
index 45f1df3..0000000
--- a/doc/html/a00167.html
+++ /dev/null
@@ -1,54 +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::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>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="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="a00267.html">tbb</a>::<b>interface5</b>::<a class="el" href="a00167.html">flow_control</a></div>
-<h1>tbb::interface5::flow_control Class Reference</h1><!-- doxytag: class="tbb::interface5::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="a00414.html">pipeline.h</a>></code>
-<p>
-<a href="a00052.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f907b38fcfbb48d2e949147fa3379037"></a><!-- doxytag: member="tbb::interface5::flow_control::stop" ref="f907b38fcfbb48d2e949147fa3379037" 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::interface5::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>
-input_filter control to signal end-of-input for parallel_pipeline 
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00414.html">pipeline.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the 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 cc97337..0000000
--- a/doc/html/a00168.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::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>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="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="a00267.html">tbb</a>::<a class="el" href="a00168.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="a00459.html">tbb_exception.h</a>></code>
-<p>
-<a href="a00095.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="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>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Exception for PPL locks. 
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00459.html">tbb_exception.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00169.html b/doc/html/a00169.html
deleted file mode 100644
index 4907b53..0000000
--- a/doc/html/a00169.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::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>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="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="a00267.html">tbb</a>::<a class="el" href="a00169.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="a00459.html">tbb_exception.h</a>></code>
-<p>
-<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="57082ccac880db17144db76c0f94701e"></a><!-- doxytag: member="tbb::invalid_multiple_scheduling::what" ref="57082ccac880db17144db76c0f94701e" args="() const " -->
-const char * </td><td class="memItemRight" valign="bottom"><b>what</b> () const   throw ()</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Exception for repeated scheduling of the same task_handle. 
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00459.html">tbb_exception.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00170.html b/doc/html/a00170.html
deleted file mode 100644
index 9bff25f..0000000
--- a/doc/html/a00170.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::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>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="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="a00267.html">tbb</a>::<a class="el" href="a00170.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="a00459.html">tbb_exception.h</a>></code>
-<p>
-<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 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>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Exception for missing wait on structured_task_group. 
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00459.html">tbb_exception.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00171.html b/doc/html/a00171.html
deleted file mode 100644
index 05eb181..0000000
--- a/doc/html/a00171.html
+++ /dev/null
@@ -1,171 +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::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>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="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="a00267.html">tbb</a>::<a class="el" href="a00171.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="a00459.html">tbb_exception.h</a>></code>
-<p>
-<p>Inheritance diagram for tbb::movable_exception< ExceptionData >:
-<p><center><img src="a00171.png" usemap="#tbb::movable_exception< ExceptionData >_map" border="0" alt=""></center>
-<map name="tbb::movable_exception< ExceptionData >_map">
-<area href="a00206.html" alt="tbb::tbb_exception" shape="rect" coords="0,0,248,24">
-</map>
-<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="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="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="a00171.html">movable_exception</a> &src)  throw ()</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="dfafefe27f2afaa7c7894ca9c71cc568"></a><!-- doxytag: member="tbb::movable_exception::operator=" ref="dfafefe27f2afaa7c7894ca9c71cc568" args="(const movable_exception &src)" -->
-const <a class="el" href="a00171.html">movable_exception</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00171.html">movable_exception</a> &src)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="47114cbc20c8e13cac3108749a3e085d"></a><!-- doxytag: member="tbb::movable_exception::data" ref="47114cbc20c8e13cac3108749a3e085d" args="()" -->
-ExceptionData & </td><td class="memItemRight" valign="bottom"><b>data</b> ()  throw ()</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7d93c000d862d2558efd9a34817adbce"></a><!-- doxytag: member="tbb::movable_exception::data" ref="7d93c000d862d2558efd9a34817adbce" args="() const " -->
-const ExceptionData & </td><td class="memItemRight" valign="bottom"><b>data</b> () const   throw ()</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bc5f5c4739b17ac5211ac58226c2f5a5"></a><!-- doxytag: member="tbb::movable_exception::name" ref="bc5f5c4739b17ac5211ac58226c2f5a5" args="() const " -->
-const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#bc5f5c4739b17ac5211ac58226c2f5a5">name</a> () const   throw ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns RTTI name of the originally intercepted exception. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b33a89bccf0c63106f1270c7bfaaf54f"></a><!-- doxytag: member="tbb::movable_exception::what" ref="b33a89bccf0c63106f1270c7bfaaf54f" args="() const " -->
-const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#b33a89bccf0c63106f1270c7bfaaf54f">what</a> () const   throw ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns the result of originally intercepted exception's <a class="el" href="a00171.html#b33a89bccf0c63106f1270c7bfaaf54f">what()</a> method. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00171.html">movable_exception</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#1aea0ad179d6f0481fe7f3495f66adf9">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="#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="a00171.html#7a46873119d9f85a7b0009c13e41a258">destroy</a> ()  throw ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroys objects created by the <a class="el" href="a00171.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="a00171.html#17cffba35811c92b7e65d63506b69602">throw_self</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="a00171.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">User data. <br></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename ExceptionData><br>
- class tbb::movable_exception< ExceptionData ></h3>
-
-Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread. 
-<p>
-Code using TBB can instantiate this template with an arbitrary ExceptionData type and throw this exception object. Such exceptions are intercepted by the TBB scheduler and delivered to the root thread (). <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="a00206.html">tbb::tbb_exception</a> </dd></dl>
-
-<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="a00171.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">
-
-<p>
-Destroys objects created by the <a class="el" href="a00171.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="a00206.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="a00171.html">movable_exception</a>* <a class="el" href="a00171.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">
-
-<p>
-Creates and returns pointer to the deep copy of this exception object. 
-<p>
-Move semantics is allowed. 
-<p>
-Implements <a class="el" href="a00206.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="a00171.html">tbb::movable_exception</a>< ExceptionData >::throw_self           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline, virtual]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-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="a00206.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="a00459.html">tbb_exception.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00172.html b/doc/html/a00172.html
deleted file mode 100644
index f1fdb78..0000000
--- a/doc/html/a00172.html
+++ /dev/null
@@ -1,136 +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::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="a00267.html">tbb</a>::<a class="el" href="a00172.html">mutex</a></div>
-<h1>tbb::mutex Class Reference<br>
-<small>
-[<a class="el" href="a00278.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="a00367.html">mutex.h</a>></code>
-<p>
-<a href="a00034.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="a00172.html#9f1ec84d5815263ceae853f06ddb4cac">native_handle_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 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="a00172.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="a00172.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="a00172.html#4331652c79dea1c1131bd59ab161b234">try_lock</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Try acquiring lock (non-blocking).  <a href="#4331652c79dea1c1131bd59ab161b234"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5fc9ef443ae75d966695546be399cc6b"></a><!-- doxytag: member="tbb::mutex::unlock" ref="5fc9ef443ae75d966695546be399cc6b" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00172.html#5fc9ef443ae75d966695546be399cc6b">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="caf34349c0fbe7b44f1a2ca0a3150dd0"></a><!-- doxytag: member="tbb::mutex::native_handle" ref="caf34349c0fbe7b44f1a2ca0a3150dd0" args="()" -->
-<a class="el" href="a00172.html#9f1ec84d5815263ceae853f06ddb4cac">native_handle_type</a> </td><td class="memItemRight" valign="bottom"><b>native_handle</b> ()</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="a00172.html#795649a185b0d6af6dc81c5f378616dd">set_state</a> (state_t to)</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="d4558e5a7c5b8d8e158ec7a1079669bd"></a><!-- doxytag: member="tbb::mutex::is_recursive_mutex" ref="d4558e5a7c5b8d8e158ec7a1079669bd" args="" -->
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = false</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f023a29c61451d02359095cbff0f3d45"></a><!-- doxytag: member="tbb::mutex::is_fair_mutex" ref="f023a29c61451d02359095cbff0f3d45" args="" -->
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = false</td></tr>
-
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a36f15b770a1bb0b56e33d7fa75ebd1a"></a><!-- doxytag: member="tbb::mutex::scoped_lock" ref="a36f15b770a1bb0b56e33d7fa75ebd1a" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></td></tr>
-
-<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00173.html">scoped_lock</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00173.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. 
-<p>
-For testing purposes only. 
-<p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="4331652c79dea1c1131bd59ab161b234"></a><!-- doxytag: member="tbb::mutex::try_lock" ref="4331652c79dea1c1131bd59ab161b234" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool tbb::mutex::try_lock           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Try acquiring lock (non-blocking). 
-<p>
-Return true if lock acquired; false otherwise. 
-</div>
-</div><p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00367.html">mutex.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00173.html b/doc/html/a00173.html
deleted file mode 100644
index acdd664..0000000
--- a/doc/html/a00173.html
+++ /dev/null
@@ -1,77 +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::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="a00267.html">tbb</a>::<a class="el" href="a00172.html">mutex</a>::<a class="el" href="a00173.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="a00367.html">mutex.h</a>></code>
-<p>
-<a href="a00035.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1d403ae51b484df5d86d85ae38f11e6e"></a><!-- doxytag: member="tbb::mutex::scoped_lock::scoped_lock" ref="1d403ae51b484df5d86d85ae38f11e6e" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00173.html#1d403ae51b484df5d86d85ae38f11e6e">scoped_lock</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a mutex. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><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="a00173.html#605a6b9af0f8cdabdf81825e0de99600">scoped_lock</a> (<a class="el" href="a00172.html">mutex</a> &<a class="el" href="a00172.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="0ebbbecaf4311e9df7362cb76ceaa368"></a><!-- doxytag: member="tbb::mutex::scoped_lock::~scoped_lock" ref="0ebbbecaf4311e9df7362cb76ceaa368" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00173.html#0ebbbecaf4311e9df7362cb76ceaa368">~scoped_lock</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock (if lock is held). <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="862e022841cdc522e4296a5533b22efd"></a><!-- doxytag: member="tbb::mutex::scoped_lock::acquire" ref="862e022841cdc522e4296a5533b22efd" args="(mutex &mutex)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00173.html#862e022841cdc522e4296a5533b22efd">acquire</a> (<a class="el" href="a00172.html">mutex</a> &<a class="el" href="a00172.html">mutex</a>)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="591e0c49b82bcedffcbe0923f1b915ec"></a><!-- doxytag: member="tbb::mutex::scoped_lock::try_acquire" ref="591e0c49b82bcedffcbe0923f1b915ec" args="(mutex &mutex)" -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00173.html#591e0c49b82bcedffcbe0923f1b915ec">try_acquire</a> (<a class="el" href="a00172.html">mutex</a> &<a class="el" href="a00172.html">mutex</a>)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Try acquire lock on given mutex. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0d51d18cd99df3b2e93bf07378d0992c"></a><!-- doxytag: member="tbb::mutex::scoped_lock::release" ref="0d51d18cd99df3b2e93bf07378d0992c" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00173.html#0d51d18cd99df3b2e93bf07378d0992c">release</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br></td></tr>
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="93062a14ad2e50e2b7b485b913170779"></a><!-- doxytag: member="tbb::mutex::scoped_lock::mutex" ref="93062a14ad2e50e2b7b485b913170779" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>mutex</b></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-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="a00367.html">mutex.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00174.html b/doc/html/a00174.html
deleted file mode 100644
index d491ee8..0000000
--- a/doc/html/a00174.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::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>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="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="a00267.html">tbb</a>::<a class="el" href="a00174.html">null_mutex</a></div>
-<h1>tbb::null_mutex Class Reference<br>
-<small>
-[<a class="el" href="a00278.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="a00369.html">null_mutex.h</a>></code>
-<p>
-<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 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="a00175.html">scoped_lock</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Represents acquisition of a mutex.  <a href="a00175.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="a00174.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="a00369.html">null_mutex.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00175.html b/doc/html/a00175.html
deleted file mode 100644
index 6a938c6..0000000
--- a/doc/html/a00175.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::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>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="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="a00267.html">tbb</a>::<a class="el" href="a00174.html">null_mutex</a>::<a class="el" href="a00175.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="a00369.html">null_mutex.h</a>></code>
-<p>
-<a href="a00037.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public 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="a00174.html">null_mutex</a> &)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f6889f00ca3946906e89e856988bb890"></a><!-- doxytag: member="tbb::null_mutex::scoped_lock::acquire" ref="f6889f00ca3946906e89e856988bb890" args="(null_mutex &)" -->
-void </td><td class="memItemRight" valign="bottom"><b>acquire</b> (<a class="el" href="a00174.html">null_mutex</a> &)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="90eb562a9de52b33362a6fe237b3df42"></a><!-- doxytag: member="tbb::null_mutex::scoped_lock::try_acquire" ref="90eb562a9de52b33362a6fe237b3df42" args="(null_mutex &)" -->
-bool </td><td class="memItemRight" valign="bottom"><b>try_acquire</b> (<a class="el" href="a00174.html">null_mutex</a> &)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b29fdf07b4c295850a6e433001c2c6a7"></a><!-- doxytag: member="tbb::null_mutex::scoped_lock::release" ref="b29fdf07b4c295850a6e433001c2c6a7" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><b>release</b> ()</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Represents acquisition of a mutex. 
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00369.html">null_mutex.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00176.html b/doc/html/a00176.html
deleted file mode 100644
index fd0aa0a..0000000
--- a/doc/html/a00176.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::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>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="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="a00267.html">tbb</a>::<a class="el" href="a00176.html">null_rw_mutex</a></div>
-<h1>tbb::null_rw_mutex Class Reference<br>
-<small>
-[<a class="el" href="a00278.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="a00370.html">null_rw_mutex.h</a>></code>
-<p>
-<a href="a00038.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>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 class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e33ac3b047901e69e7997a16e221a330"></a><!-- doxytag: member="tbb::null_rw_mutex::is_recursive_mutex" ref="e33ac3b047901e69e7997a16e221a330" args="" -->
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = true</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e5248faf1412f9283185a0b5d72d7456"></a><!-- doxytag: member="tbb::null_rw_mutex::is_fair_mutex" ref="e5248faf1412f9283185a0b5d72d7456" args="" -->
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = true</td></tr>
-
-<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html">scoped_lock</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Represents acquisition of a mutex.  <a href="a00177.html#_details">More...</a><br></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-A rw mutex which does nothing. 
-<p>
-A <a class="el" href="a00176.html">null_rw_mutex</a> is a rw mutex that does nothing and simulates successful operation. 
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00370.html">null_rw_mutex.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00177.html b/doc/html/a00177.html
deleted file mode 100644
index 3405736..0000000
--- a/doc/html/a00177.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::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>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="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="a00267.html">tbb</a>::<a class="el" href="a00176.html">null_rw_mutex</a>::<a class="el" href="a00177.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="a00370.html">null_rw_mutex.h</a>></code>
-<p>
-<a href="a00039.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="a00176.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="a00176.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="a00176.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. 
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00370.html">null_rw_mutex.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00178.html b/doc/html/a00178.html
deleted file mode 100644
index 38b69aa..0000000
--- a/doc/html/a00178.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::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>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="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="a00267.html">tbb</a>::<a class="el" href="a00178.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="a00371.html">parallel_do.h</a>></code>
-<p>
-<a href="a00040.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="a00178.html#40baaf0f6856f4491dd0adf896c93516">add</a> (const Item &item)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Add a work item to a running parallel_do. <br></td></tr>
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b381179b22f5f5e8511470c73d64b37f"></a><!-- doxytag: member="tbb::parallel_do_feeder::internal::parallel_do_feeder_impl" ref="b381179b22f5f5e8511470c73d64b37f" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>internal::parallel_do_feeder_impl</b></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Item><br>
- class tbb::parallel_do_feeder< Item ></h3>
-
-Class the user supplied algorithm body uses to add new tasks. 
-<p>
-<dl compact><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>Item</em> </td><td>Work item type </td></tr>
-  </table>
-</dl>
-
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00371.html">parallel_do.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the 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
deleted file mode 100644
index df15ef5..0000000
--- a/doc/html/a00179.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>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>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="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="a00267.html">tbb</a>::<a class="el" href="a00179.html">parallel_while</a></div>
-<h1>tbb::parallel_while< Body > Class Template Reference<br>
-<small>
-[<a class="el" href="a00275.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="a00405.html">parallel_while.h</a>></code>
-<p>
-<a href="a00043.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>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="a00179.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="a00179.html#36e26ba3880c7bcf804a97ba0cbe133f">parallel_while</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct empty non-running parallel while. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6fcfc973cc56b79c6d0fbb8a31be7e84"></a><!-- doxytag: member="tbb::parallel_while::~parallel_while" ref="6fcfc973cc56b79c6d0fbb8a31be7e84" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00179.html#6fcfc973cc56b79c6d0fbb8a31be7e84">~parallel_while</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="a00179.html#b32a0a6e5e09ebb7fad3e6652c19afe5">run</a> (Stream &stream, const Body &body)</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="a00179.html#e131c560057a58229992b61eb8dba4c6">add</a> (const <a class="el" href="a00179.html#fa297e53d3af2a101e712bc200233e9c">value_type</a> &item)</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>
-
-Parallel iteration over a stream, with optional addition of more work. 
-<p>
-The Body b has the requirement: <br>
- "b(v)" <br>
- "b.argument_type" <br>
- where v is an argument_type 
-<p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="e131c560057a58229992b61eb8dba4c6"></a><!-- doxytag: member="tbb::parallel_while::add" ref="e131c560057a58229992b61eb8dba4c6" args="(const value_type &item)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Body> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void <a class="el" href="a00179.html">tbb::parallel_while</a>< Body >::add           </td>
-          <td>(</td>
-          <td class="paramtype">const <a class="el" href="a00179.html#fa297e53d3af2a101e712bc200233e9c">value_type</a> & </td>
-          <td class="paramname"> <em>item</em>          </td>
-          <td> ) </td>
-          <td width="100%"></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Add a work item while running. 
-<p>
-Should be executed only by body.apply or a thread spawned therefrom. 
-</div>
-</div><p>
-<a class="anchor" name="b32a0a6e5e09ebb7fad3e6652c19afe5"></a><!-- doxytag: member="tbb::parallel_while::run" ref="b32a0a6e5e09ebb7fad3e6652c19afe5" args="(Stream &stream, const Body &body)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Body> </div>
-<div class="memtemplate">
-template<typename Stream> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void <a class="el" href="a00179.html">tbb::parallel_while</a>< Body >::run           </td>
-          <td>(</td>
-          <td class="paramtype">Stream & </td>
-          <td class="paramname"> <em>stream</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Body & </td>
-          <td class="paramname"> <em>body</em></td><td> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td><td width="100%"></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Apply body.apply to each item in the stream. 
-<p>
-A Stream s has the requirements <br>
- "S::value_type" <br>
- "s.pop_if_present(value) is convertible to bool 
-</div>
-</div><p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00405.html">parallel_while.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00180.html b/doc/html/a00180.html
deleted file mode 100644
index 63434d8..0000000
--- a/doc/html/a00180.html
+++ /dev/null
@@ -1,111 +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::pipeline 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="a00267.html">tbb</a>::<a class="el" href="a00180.html">pipeline</a></div>
-<h1>tbb::pipeline Class Reference<br>
-<small>
-[<a class="el" href="a00275.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="a00414.html">pipeline.h</a>></code>
-<p>
-<a href="a00051.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="596dc3beba27099c4c8581cb419e1a59"></a><!-- doxytag: member="tbb::pipeline::pipeline" ref="596dc3beba27099c4c8581cb419e1a59" args="()" -->
-__TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00180.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="a00180.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="a00180.html#38fb5c9c8395dd6f89a4ae2011a83e0d">add_filter</a> (<a class="el" href="a00164.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="a00180.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="a00180.html#93d7fec8cd607b803dd2d79fb46bd260">run</a> (size_t max_number_of_live_tokens, <a class="el" href="a00201.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="a00180.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="589421589ec2788c2c39c0bc6272a09a"></a><!-- doxytag: member="tbb::pipeline::tbb::interface5::internal::pipeline_proxy" ref="589421589ec2788c2c39c0bc6272a09a" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>tbb::interface5::internal::pipeline_proxy</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">
-
-<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="a00414.html">pipeline.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00181.html b/doc/html/a00181.html
deleted file mode 100644
index 76df8ff..0000000
--- a/doc/html/a00181.html
+++ /dev/null
@@ -1,53 +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::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>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="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="a00267.html">tbb</a>::<a class="el" href="a00181.html">pre_scan_tag</a></div>
-<h1>tbb::pre_scan_tag Struct Reference<br>
-<small>
-[<a class="el" href="a00275.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="a00396.html">parallel_scan.h</a>></code>
-<p>
-<a href="a00041.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d45d2cf548e51140ad6faafbea8ca6b5"></a><!-- doxytag: member="tbb::pre_scan_tag::is_final_scan" ref="d45d2cf548e51140ad6faafbea8ca6b5" args="()" -->
-static bool </td><td class="memItemRight" valign="bottom"><b>is_final_scan</b> ()</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Used to indicate that the initial scan is being performed. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00396.html">parallel_scan.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00182.html b/doc/html/a00182.html
deleted file mode 100644
index a3bde33..0000000
--- a/doc/html/a00182.html
+++ /dev/null
@@ -1,75 +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::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>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="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="a00267.html">tbb</a>::<a class="el" href="a00182.html">queuing_mutex</a></div>
-<h1>tbb::queuing_mutex Class Reference<br>
-<small>
-[<a class="el" href="a00278.html">Synchronization</a>]</small>
-</h1><!-- doxytag: class="tbb::queuing_mutex" -->Queuing lock with local-only spinning.  
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00426.html">queuing_mutex.h</a>></code>
-<p>
-<a href="a00054.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public 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="a00182.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>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a36f15b770a1bb0b56e33d7fa75ebd1a"></a><!-- doxytag: member="tbb::queuing_mutex::scoped_lock" ref="a36f15b770a1bb0b56e33d7fa75ebd1a" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></td></tr>
-
-<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00183.html">scoped_lock</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00183.html#_details">More...</a><br></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Queuing lock with local-only spinning. 
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00426.html">queuing_mutex.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00183.html b/doc/html/a00183.html
deleted file mode 100644
index ffdc301..0000000
--- a/doc/html/a00183.html
+++ /dev/null
@@ -1,94 +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::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>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="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="a00267.html">tbb</a>::<a class="el" href="a00182.html">queuing_mutex</a>::<a class="el" href="a00183.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="a00426.html">queuing_mutex.h</a>></code>
-<p>
-<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>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="a00183.html#db0fa3967491014572e24d6607bdc971">scoped_lock</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="a00183.html#9b51ef972f5618ac17caadb58841ab6d">scoped_lock</a> (<a class="el" href="a00182.html">queuing_mutex</a> &m)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ac2c576a93570957d694192a5f491443"></a><!-- doxytag: member="tbb::queuing_mutex::scoped_lock::~scoped_lock" ref="ac2c576a93570957d694192a5f491443" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00183.html#ac2c576a93570957d694192a5f491443">~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="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="a00183.html#533e4fc8355ee321206a0609c42d909d">acquire</a> (<a class="el" href="a00182.html">queuing_mutex</a> &m)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="a00183.html#e5a014fb817599386a87170cf2cf51a9">try_acquire</a> (<a class="el" href="a00182.html">queuing_mutex</a> &m)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex if free (i.e. non-blocking). <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3bf2b8c87ff22115be9b2eac179f2d30"></a><!-- doxytag: member="tbb::queuing_mutex::scoped_lock::release" ref="3bf2b8c87ff22115be9b2eac179f2d30" args="()" -->
-void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00183.html#3bf2b8c87ff22115be9b2eac179f2d30">release</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-The scoped locking pattern. 
-<p>
-It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks. 
-<p>
-<hr><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" name="db0fa3967491014572e24d6607bdc971"></a><!-- doxytag: member="tbb::queuing_mutex::scoped_lock::scoped_lock" ref="db0fa3967491014572e24d6607bdc971" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">tbb::queuing_mutex::scoped_lock::scoped_lock           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Construct lock that has not acquired a mutex. 
-<p>
-Equivalent to zero-initialization of *this. 
-</div>
-</div><p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00426.html">queuing_mutex.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00184.html b/doc/html/a00184.html
deleted file mode 100644
index e799d05..0000000
--- a/doc/html/a00184.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>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>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="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="a00267.html">tbb</a>::<a class="el" href="a00184.html">queuing_rw_mutex</a></div>
-<h1>tbb::queuing_rw_mutex Class Reference<br>
-<small>
-[<a class="el" href="a00278.html">Synchronization</a>]</small>
-</h1><!-- doxytag: class="tbb::queuing_rw_mutex" -->Reader-writer lock with local-only spinning.  
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00427.html">queuing_rw_mutex.h</a>></code>
-<p>
-<a href="a00056.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public 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="a00184.html#85c90877c3447690ac4e2ac4ff8dea5e">queuing_rw_mutex</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct unacquired mutex. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1ba73e3d95cfdf8323880bc623af9099"></a><!-- doxytag: member="tbb::queuing_rw_mutex::~queuing_rw_mutex" ref="1ba73e3d95cfdf8323880bc623af9099" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00184.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="a00185.html">scoped_lock</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00185.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> 
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00427.html">queuing_rw_mutex.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00185.html b/doc/html/a00185.html
deleted file mode 100644
index e6c23ec..0000000
--- a/doc/html/a00185.html
+++ /dev/null
@@ -1,123 +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::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>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="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="a00267.html">tbb</a>::<a class="el" href="a00184.html">queuing_rw_mutex</a>::<a class="el" href="a00185.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="a00427.html">queuing_rw_mutex.h</a>></code>
-<p>
-<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 Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00185.html#c62e365be7bcbba091c9ea7454a4d22c">scoped_lock</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a mutex.  <a href="#c62e365be7bcbba091c9ea7454a4d22c"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><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="a00185.html#fbb8798792d3aebb136c46fc63d2529e">scoped_lock</a> (<a class="el" href="a00184.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="a00185.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="a00185.html#a8dd5ab8686e76de21587544dbb681e0">acquire</a> (<a class="el" href="a00184.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="a00185.html#2e4ff6c9ec2fee6682f95290d1f42baa">try_acquire</a> (<a class="el" href="a00184.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="a00185.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="a00185.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="a00185.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. 
-<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="a00427.html">queuing_rw_mutex.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00186.html b/doc/html/a00186.html
deleted file mode 100644
index 00d8f54..0000000
--- a/doc/html/a00186.html
+++ /dev/null
@@ -1,221 +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::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>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="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="a00267.html">tbb</a>::<b>interface5</b>::<a class="el" href="a00186.html">reader_writer_lock</a></div>
-<h1>tbb::interface5::reader_writer_lock Class Reference<br>
-<small>
-[<a class="el" href="a00278.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="a00428.html">reader_writer_lock.h</a>></code>
-<p>
-<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="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="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="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="a00186.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="a00186.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="a00186.html#c1431c4293e777efd9aab9a95c2a46e1">reader_writer_lock</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructs a new <a class="el" href="a00186.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="a00186.html#5135f64f7b7339017f33d956445edbee">~reader_writer_lock</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destructs a <a class="el" href="a00186.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="a00186.html#2653d1a2d560059a51219a8ceab3ade9">lock</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquires the <a class="el" href="a00186.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="a00186.html#721eb173e154ab38292273e9266a9b07">try_lock</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Tries to acquire the <a class="el" href="a00186.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="a00186.html#d9d16a24d9f6c3dada73c6b9ff214f5b">lock_read</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquires the <a class="el" href="a00186.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="a00186.html#595fb23952e3b89426b1f7938dea9b11">try_lock_read</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Tries to acquire the <a class="el" href="a00186.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="a00186.html#5113b32689305599b2c36b5831547704">unlock</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Releases the <a class="el" href="a00186.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">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html">scoped_lock</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped lock pattern for write locks.  <a href="a00187.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00188.html">scoped_lock_read</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped lock pattern for read locks.  <a href="a00188.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="a00186.html#6f921f0d7c1812ceb5674418c8b6ccaf">tbb::interface5::reader_writer_lock::status_t</a>          </td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<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="a00187.html">scoped_lock</a> status:<p>
-waiting ----------> waiting_nonblocking | _____________/ | V V V active -----------------> invalid<p>
-State diagram for <a class="el" href="a00188.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="a00186.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="a00168.html">improper_lock</a> The context tries to acquire a <a class="el" href="a00186.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="a00186.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="a00168.html">improper_lock</a> The context tries to acquire a <a class="el" href="a00186.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="a00186.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="a00186.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="a00186.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="a00428.html">reader_writer_lock.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00187.html b/doc/html/a00187.html
deleted file mode 100644
index e2b1ba3..0000000
--- a/doc/html/a00187.html
+++ /dev/null
@@ -1,67 +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::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>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="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="a00267.html">tbb</a>::<b>interface5</b>::<a class="el" href="a00186.html">reader_writer_lock</a>::<a class="el" href="a00187.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="a00428.html">reader_writer_lock.h</a>></code>
-<p>
-<a href="a00059.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public 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="a00187.html#cf19f20e082887c1bb0ba6b0911c3583">scoped_lock</a> (<a class="el" href="a00186.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="a00187.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 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>
-
-</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 is also serves as the node for queuing locks. 
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00428.html">reader_writer_lock.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00188.html b/doc/html/a00188.html
deleted file mode 100644
index 50186d0..0000000
--- a/doc/html/a00188.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::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>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="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="a00267.html">tbb</a>::<b>interface5</b>::<a class="el" href="a00186.html">reader_writer_lock</a>::<a class="el" href="a00188.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="a00428.html">reader_writer_lock.h</a>></code>
-<p>
-<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"><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="a00188.html#87ab0dc8f7216e6ba0f7acd6aec33064">scoped_lock_read</a> (<a class="el" href="a00186.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="a00188.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 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>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-The scoped lock pattern for read locks. 
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00428.html">reader_writer_lock.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00189.html b/doc/html/a00189.html
deleted file mode 100644
index 5ec864e..0000000
--- a/doc/html/a00189.html
+++ /dev/null
@@ -1,118 +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::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>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="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="a00267.html">tbb</a>::<a class="el" href="a00189.html">recursive_mutex</a></div>
-<h1>tbb::recursive_mutex Class Reference<br>
-<small>
-[<a class="el" href="a00278.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="a00429.html">recursive_mutex.h</a>></code>
-<p>
-<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="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="a00189.html#889fa8cc32dd707eef7c0f52dda09c0d">native_handle_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="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 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="a00189.html#d2fceb7f95c24a8cd1457d4527e4b8c6">recursive_mutex</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct unacquired <a class="el" href="a00189.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="a00189.html#4c342c69d47f4bb0b393535dee4015d6">lock</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.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="a00189.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="a00189.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="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f01aacad6b9b9d51573c0803323182fe"></a><!-- doxytag: member="tbb::recursive_mutex::is_fair_mutex" ref="f01aacad6b9b9d51573c0803323182fe" args="" -->
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = false</td></tr>
-
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a36f15b770a1bb0b56e33d7fa75ebd1a"></a><!-- doxytag: member="tbb::recursive_mutex::scoped_lock" ref="a36f15b770a1bb0b56e33d7fa75ebd1a" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></td></tr>
-
-<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00190.html">scoped_lock</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00190.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">
-
-<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="a00429.html">recursive_mutex.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00190.html b/doc/html/a00190.html
deleted file mode 100644
index 9a901db..0000000
--- a/doc/html/a00190.html
+++ /dev/null
@@ -1,77 +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::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>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="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="a00267.html">tbb</a>::<a class="el" href="a00189.html">recursive_mutex</a>::<a class="el" href="a00190.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="a00429.html">recursive_mutex.h</a>></code>
-<p>
-<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 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="a00190.html#d82d4d36fbf9727a493d26ae50855fe7">scoped_lock</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a <a class="el" href="a00189.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="a00190.html#dec17713c4c1321ac8fec66816d0c602">scoped_lock</a> (<a class="el" href="a00189.html">recursive_mutex</a> &<a class="el" href="a00172.html">mutex</a>)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c1197ffb8f3cd9d4fed71d7e06265b7c"></a><!-- doxytag: member="tbb::recursive_mutex::scoped_lock::~scoped_lock" ref="c1197ffb8f3cd9d4fed71d7e06265b7c" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00190.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="a00190.html#7fb04da37cccf8c99b1f9102d9074f9a">acquire</a> (<a class="el" href="a00189.html">recursive_mutex</a> &<a class="el" href="a00172.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="a00190.html#36bfc3e93e3ef6340abef4901444d340">try_acquire</a> (<a class="el" href="a00189.html">recursive_mutex</a> &<a class="el" href="a00172.html">mutex</a>)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Try acquire lock on given <a class="el" href="a00189.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="a00190.html#ac480ea0e9d5ea0345a67d57008b6263">release</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br></td></tr>
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="459818b78a3e9985dc5a9d5638b6593e"></a><!-- doxytag: member="tbb::recursive_mutex::scoped_lock::recursive_mutex" ref="459818b78a3e9985dc5a9d5638b6593e" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>recursive_mutex</b></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-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="a00429.html">recursive_mutex.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00191.html b/doc/html/a00191.html
deleted file mode 100644
index f81e926..0000000
--- a/doc/html/a00191.html
+++ /dev/null
@@ -1,112 +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::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>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="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="a00267.html">tbb</a>::<a class="el" href="a00191.html">scalable_allocator</a></div>
-<h1>tbb::scalable_allocator< T > Class Template Reference<br>
-<small>
-[<a class="el" href="a00277.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="a00430.html">scalable_allocator.h</a>></code>
-<p>
-<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="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="a00191.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="a00191.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="a00191.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="a00191.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="a00191.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="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ae824c87fcc35467057fd3304c5e97ba"></a><!-- doxytag: member="tbb::scalable_allocator::construct" ref="ae824c87fcc35467057fd3304c5e97ba" args="(pointer p, const value_type &value)" -->
-void </td><td class="memItemRight" valign="bottom"><b>construct</b> (pointer p, const value_type &value)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="743f878b04a492bf7ae0e82a64dc20c8"></a><!-- doxytag: member="tbb::scalable_allocator::destroy" ref="743f878b04a492bf7ae0e82a64dc20c8" args="(pointer p)" -->
-void </td><td class="memItemRight" valign="bottom"><b>destroy</b> (pointer p)</td></tr>
-
-<tr><td 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::scalable_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="a00430.html">scalable_allocator.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00192.html b/doc/html/a00192.html
deleted file mode 100644
index 15d0809..0000000
--- a/doc/html/a00192.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::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>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="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="a00267.html">tbb</a>::<a class="el" href="a00192.html">scalable_allocator< void ></a></div>
-<h1>tbb::scalable_allocator< void > Class Template Reference<br>
-<small>
-[<a class="el" href="a00277.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="a00430.html">scalable_allocator.h</a>></code>
-<p>
-<a href="a00065.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2046816029c2c7856f7684aed2af9cff"></a><!-- doxytag: member="tbb::scalable_allocator< void >::pointer" ref="2046816029c2c7856f7684aed2af9cff" args="" -->
-typedef void * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="591c568d23f8aadf6ea8d1dc939c4e75"></a><!-- doxytag: member="tbb::scalable_allocator< void >::const_pointer" ref="591c568d23f8aadf6ea8d1dc939c4e75" args="" -->
-typedef const void * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="64dbab666af0740c30b77edac9f157ce"></a><!-- doxytag: member="tbb::scalable_allocator< void >::value_type" ref="64dbab666af0740c30b77edac9f157ce" args="" -->
-typedef void </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
-
-<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><b>rebind</b></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<><br>
- class tbb::scalable_allocator< void ></h3>
-
-Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. 
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00430.html">scalable_allocator.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00193.html b/doc/html/a00193.html
deleted file mode 100644
index 185befb..0000000
--- a/doc/html/a00193.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::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="a00267.html">tbb</a>::<a class="el" href="a00193.html">simple_partitioner</a></div>
-<h1>tbb::simple_partitioner Class Reference<br>
-<small>
-[<a class="el" href="a00275.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="a00409.html">partitioner.h</a>></code>
-<p>
-<a href="a00044.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a47f7e0208a2bf68f35b51b27d2ddf2a"></a><!-- doxytag: member="tbb::simple_partitioner::internal::start_for" ref="a47f7e0208a2bf68f35b51b27d2ddf2a" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>internal::start_for</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e8f710e431b62c2a48914bd99d0fe034"></a><!-- doxytag: member="tbb::simple_partitioner::internal::start_reduce" ref="e8f710e431b62c2a48914bd99d0fe034" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>internal::start_reduce</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="a00409.html">partitioner.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00194.html b/doc/html/a00194.html
deleted file mode 100644
index b533ca6..0000000
--- a/doc/html/a00194.html
+++ /dev/null
@@ -1,131 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>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="a00267.html">tbb</a>::<a class="el" href="a00194.html">spin_mutex</a></div>
-<h1>tbb::spin_mutex Class Reference<br>
-<small>
-[<a class="el" href="a00278.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="a00431.html">spin_mutex.h</a>></code>
-<p>
-<a href="a00067.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="a00194.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="a00194.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="a00194.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="a00194.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="a00195.html">scoped_lock</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Represents acquisition of a mutex.  <a href="a00195.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="a00194.html">spin_mutex</a> is a spin mutex that fits in a single byte. It should be used only for locking short critical sections (typically <20 instructions) when fairness is not an issue. If zero-initialized, the mutex is considered unheld. 
-<p>
-<hr><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" name="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="a00431.html">spin_mutex.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00195.html b/doc/html/a00195.html
deleted file mode 100644
index b8e2928..0000000
--- a/doc/html/a00195.html
+++ /dev/null
@@ -1,97 +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::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="a00267.html">tbb</a>::<a class="el" href="a00194.html">spin_mutex</a>::<a class="el" href="a00195.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="a00431.html">spin_mutex.h</a>></code>
-<p>
-<a href="a00068.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="29ae680ae7f5e685c2e15535b9c855b3"></a><!-- doxytag: member="tbb::spin_mutex::scoped_lock::scoped_lock" ref="29ae680ae7f5e685c2e15535b9c855b3" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00195.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="a00195.html#5ce6807050a9e8f87bcb4a65dccb12ef">scoped_lock</a> (<a class="el" href="a00194.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="a00195.html#3ee3c338732b1f64b0b32a757807a30d">acquire</a> (<a class="el" href="a00194.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="a00195.html#9297ec188534b45dc0ca48f2f39a0501">try_acquire</a> (<a class="el" href="a00194.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="a00195.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="a00195.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="a00194.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="a00431.html">spin_mutex.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00196.html b/doc/html/a00196.html
deleted file mode 100644
index 974baff..0000000
--- a/doc/html/a00196.html
+++ /dev/null
@@ -1,133 +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::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="a00267.html">tbb</a>::<a class="el" href="a00196.html">spin_rw_mutex_v3</a></div>
-<h1>tbb::spin_rw_mutex_v3 Class Reference<br>
-<small>
-[<a class="el" href="a00278.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="a00432.html">spin_rw_mutex.h</a>></code>
-<p>
-<a href="a00069.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>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="a00196.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="a00196.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="a00196.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="a00196.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="a00196.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="a00196.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="a00196.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="a00197.html">scoped_lock</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00197.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="a00432.html">spin_rw_mutex.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00197.html b/doc/html/a00197.html
deleted file mode 100644
index 117bb7c..0000000
--- a/doc/html/a00197.html
+++ /dev/null
@@ -1,123 +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::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="a00267.html">tbb</a>::<a class="el" href="a00196.html">spin_rw_mutex_v3</a>::<a class="el" href="a00197.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="a00432.html">spin_rw_mutex.h</a>></code>
-<p>
-<a href="a00070.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.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="a00197.html#42a92d4f8fdde425b111cfa8a9228071">scoped_lock</a> (<a class="el" href="a00196.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="a00197.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="a00197.html#b0b646ec5be02a127d159bbb7ca65353">acquire</a> (<a class="el" href="a00196.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="a00197.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="a00197.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="a00197.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="a00197.html#9879626968d9b9a04cd2ec0fb2e84ae1">try_acquire</a> (<a class="el" href="a00196.html">spin_rw_mutex</a> &m, bool write=true)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Try acquire lock on given mutex. <br></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-The scoped locking pattern. 
-<p>
-It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks. 
-<p>
-<hr><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" name="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 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="a00432.html">spin_rw_mutex.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00198.html b/doc/html/a00198.html
deleted file mode 100644
index 269a537..0000000
--- a/doc/html/a00198.html
+++ /dev/null
@@ -1,51 +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::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="a00267.html">tbb</a>::<a class="el" href="a00198.html">split</a></div>
-<h1>tbb::split Class Reference<br>
-<small>
-[<a class="el" href="a00275.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="a00465.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="a00465.html">tbb_stddef.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00199.html b/doc/html/a00199.html
deleted file mode 100644
index b6920f2..0000000
--- a/doc/html/a00199.html
+++ /dev/null
@@ -1,536 +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::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="a00267.html">tbb</a>::<a class="el" href="a00199.html">task</a></div>
-<h1>tbb::task Class Reference<br>
-<small>
-[<a class="el" href="a00280.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="a00433.html">task.h</a>></code>
-<p>
-<p>Inheritance diagram for tbb::task:
-<p><center><img src="a00199.png" usemap="#tbb::task_map" border="0" alt=""></center>
-<map name="tbb::task_map">
-<area href="a00162.html" alt="tbb::empty_task" shape="rect" coords="0,56,97,80">
-</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">typedef internal::affinity_id </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.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="a00199.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="a00199.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="a00199.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="a00199.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="a00199.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="a00199.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="a00199.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="a00199.html#4a3c415562d17905390ea5b49d12293e">state_type</a> { <br>
-  <a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">executing</a>, 
-<a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">reexecute</a>, 
-<a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">ready</a>, 
-<a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">allocated</a>, 
-<br>
-  <a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">freed</a>, 
-<a class="el" href="a00199.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="a00199.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="a00199.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="a00199.html">task</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.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="a00199.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="a00199.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="a00199.html#dfaacf92685e5f86393bf657b2853bf8">destroy</a> (<a class="el" href="a00199.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="a00199.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="a00199.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="a00199.html#db399855177438bbc9cc61d508dae8d2">recycle_as_child_of</a> (<a class="el" href="a00199.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="a00199.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="a00199.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="a00199.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="a00199.html#f5fb43c7ad0de5a4b95703cebc39e345">increment_ref_count</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Atomically increment reference count.  <a href="#f5fb43c7ad0de5a4b95703cebc39e345"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ef4680f5c148020c5e7e43ddef44cd5d">decrement_ref_count</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Atomically decrement reference count.  <a href="#ef4680f5c148020c5e7e43ddef44cd5d"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><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="a00199.html#3ce28ca9baa771cfc37ecd72e69c4f3c">spawn_and_wait_for_all</a> (<a class="el" href="a00199.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="a00199.html#894ab68378e502776d8220eea7ce9fa1">spawn_and_wait_for_all</a> (<a class="el" href="a00202.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="a00199.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="a00199.html">task</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#314e98ee4347ccec83efcb9ee22e8596">parent</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">task on whose behalf this task is working, or NULL if this is a root. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d8c36a93f3972590fbb65ff1cef3173b"></a><!-- doxytag: member="tbb::task::context" ref="d8c36a93f3972590fbb65ff1cef3173b" args="()" -->
-<a class="el" href="a00201.html">task_group_context</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#d8c36a93f3972590fbb65ff1cef3173b">context</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Shared context that is used to communicate asynchronous state changes. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f9169402702f56bf519448aaf34450aa"></a><!-- doxytag: member="tbb::task::is_stolen_task" ref="f9169402702f56bf519448aaf34450aa" args="() const " -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.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="a00199.html#4a3c415562d17905390ea5b49d12293e">state_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.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="a00199.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="a00199.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="a00199.html#dca19d7a45487a7d67a0db517e2b57c9">set_affinity</a> (<a class="el" href="a00199.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="a00199.html#d61bb32389d3857bf7511d69beaafb76">affinity_id</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.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="a00199.html#713c338c8eeaebdc5a6b10a69c039b06">note_affinity</a> (<a class="el" href="a00199.html#d61bb32389d3857bf7511d69beaafb76">affinity_id</a> id)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Invoked by scheduler to notify task that it ran on unexpected thread.  <a href="#713c338c8eeaebdc5a6b10a69c039b06"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.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="a00199.html#025f18118c057c4c8db87ff2ce8df975">is_cancelled</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns true if the context received cancellation request. <br></td></tr>
-<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="23acb0da0afd690da797f9f882027d34"></a><!-- doxytag: member="tbb::task::allocate_root" ref="23acb0da0afd690da797f9f882027d34" args="()" -->
-static internal::allocate_root_proxy </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.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="a00199.html#8ccc518caf31075a3e073996d2d240a4">allocate_root</a> (<a class="el" href="a00201.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="a00199.html#ce8ce689c26a4ddf343829bc3c73290a">spawn_root_and_wait</a> (<a class="el" href="a00199.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="a00199.html#c33c7edbaec67aa8a56f48986a9dc69f">spawn_root_and_wait</a> (<a class="el" href="a00202.html">task_list</a> &root_list)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Spawn root tasks on list and wait for all of them to finish.  <a href="#c33c7edbaec67aa8a56f48986a9dc69f"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8365d063c0cc9d7bd616bca47256b93c"></a><!-- doxytag: member="tbb::task::enqueue" ref="8365d063c0cc9d7bd616bca47256b93c" args="(task &t)" -->
-static void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#8365d063c0cc9d7bd616bca47256b93c">enqueue</a> (<a class="el" href="a00199.html">task</a> &t)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Enqueue task for starvation-resistant execution. <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="a00199.html">task</a> &__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.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="a00199.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="a00199.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="a00199.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="a00199.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="ef4680f5c148020c5e7e43ddef44cd5d"></a><!-- doxytag: member="tbb::task::decrement_ref_count" ref="ef4680f5c148020c5e7e43ddef44cd5d" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">int tbb::task::decrement_ref_count           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Atomically decrement reference count. 
-<p>
-Has release 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="a00199.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="a00199.html#22c298cd40937a431a06777423f002f6">execute()</a> method runs. However, sometimes a task needs to be explicitly deallocated, such as when a root task is used as the parent in spawn_and_wait_for_all. 
-</div>
-</div><p>
-<a class="anchor" name="f5fb43c7ad0de5a4b95703cebc39e345"></a><!-- doxytag: member="tbb::task::increment_ref_count" ref="f5fb43c7ad0de5a4b95703cebc39e345" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::task::increment_ref_count           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Atomically increment reference count. 
-<p>
-Has acquire semantics 
-</div>
-</div><p>
-<a class="anchor" name="713c338c8eeaebdc5a6b10a69c039b06"></a><!-- doxytag: member="tbb::task::note_affinity" ref="713c338c8eeaebdc5a6b10a69c039b06" args="(affinity_id id)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">virtual void __TBB_EXPORTED_METHOD tbb::task::note_affinity           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00199.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="a00199.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="a00199.html#22c298cd40937a431a06777423f002f6">execute()</a> returns. Typically, this is done by having method <a class="el" href="a00199.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 decendants 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="a00199.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="a00202.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="a00433.html">task.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00200.html b/doc/html/a00200.html
deleted file mode 100644
index 1dfcd93..0000000
--- a/doc/html/a00200.html
+++ /dev/null
@@ -1,48 +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::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="a00267.html">tbb</a>::<b>interface5</b>::<b>internal</b>::<a class="el" href="a00200.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="a00433.html">task.h</a>></code>
-<p>
-<a href="a00072.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="a00433.html">task.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00201.html b/doc/html/a00201.html
deleted file mode 100644
index 47812cf..0000000
--- a/doc/html/a00201.html
+++ /dev/null
@@ -1,231 +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::task_group_context Class Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="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="a00267.html">tbb</a>::<a class="el" href="a00201.html">task_group_context</a></div>
-<h1>tbb::task_group_context Class Reference<br>
-<small>
-[<a class="el" href="a00280.html">Task Scheduling</a>]</small>
-</h1><!-- doxytag: class="tbb::task_group_context" -->Used to form groups of tasks.  
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00433.html">task.h</a>></code>
-<p>
-<a href="a00073.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d5af85179a348162d4ddd66b6fc0d60fb4fda16c4f77defd3d0f6aad87fceed4"></a><!-- doxytag: member="tbb::task_group_context::isolated" ref="d5af85179a348162d4ddd66b6fc0d60fb4fda16c4f77defd3d0f6aad87fceed4" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>isolated</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d5af85179a348162d4ddd66b6fc0d60fc7f37e067ba1fca8a5c809d20522662b"></a><!-- doxytag: member="tbb::task_group_context::bound" ref="d5af85179a348162d4ddd66b6fc0d60fc7f37e067ba1fca8a5c809d20522662b" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>bound</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b8dce4661b346756cb4f584529ecd0ebf774f9c21343eba6303927b5ae0be44c"></a><!-- doxytag: member="tbb::task_group_context::exact_exception" ref="b8dce4661b346756cb4f584529ecd0ebf774f9c21343eba6303927b5ae0be44c" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>exact_exception</b> = 0x0001ul << traits_offset</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b8dce4661b346756cb4f584529ecd0eb4002d8f90c8c9f7c3f80ad349aee7cce"></a><!-- doxytag: member="tbb::task_group_context::concurrent_wait" ref="b8dce4661b346756cb4f584529ecd0eb4002d8f90c8c9f7c3f80ad349aee7cce" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>concurrent_wait</b> = 0x0004ul << traits_offset</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><b>default_traits</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>kind_type</b> { <b>isolated</b>, 
-<b>bound</b>
- }</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>traits_type</b> { <b>exact_exception</b> =  0x0001ul << traits_offset, 
-<b>concurrent_wait</b> =  0x0004ul << traits_offset, 
-<b>default_traits</b>
- }</td></tr>
-
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#19fee08fb8ac98adccfe69c1aa63c491">task_group_context</a> (kind_type relation_with_parent=bound, uintptr_t traits=default_traits)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Default & binding constructor.  <a href="#19fee08fb8ac98adccfe69c1aa63c491"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#6d30d16bf1cd22f86c6afaf29c2b430c">reset</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Forcefully reinitializes the context after the task tree it was associated with is completed.  <a href="#6d30d16bf1cd22f86c6afaf29c2b430c"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#8bcdfdf4e6bfb76125b6de15c00b571d">cancel_group_execution</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Initiates cancellation of all tasks in this cancellation group and its subordinate groups.  <a href="#8bcdfdf4e6bfb76125b6de15c00b571d"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4db72f16210b0a991b2c134d6763a4cc"></a><!-- doxytag: member="tbb::task_group_context::is_group_execution_cancelled" ref="4db72f16210b0a991b2c134d6763a4cc" args="() const " -->
-bool __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#4db72f16210b0a991b2c134d6763a4cc">is_group_execution_cancelled</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns true if the context received cancellation request. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#d97c8a03615594b71b4ef06ff75cf561">register_pending_exception</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Records the pending exception, and cancels the task group.  <a href="#d97c8a03615594b71b4ef06ff75cf561"></a><br></td></tr>
-<tr><td colspan="2"><br><h2>Protected Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#49a55352084fd44b8863d182e839e6dc">init</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Out-of-line part of the constructor.  <a href="#49a55352084fd44b8863d182e839e6dc"></a><br></td></tr>
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e656073628561c8fd68f6134d527e2de"></a><!-- doxytag: member="tbb::task_group_context::task" ref="e656073628561c8fd68f6134d527e2de" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>task</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ecedb9436fb30df30cb3a52c64bb97e5"></a><!-- doxytag: member="tbb::task_group_context::internal::allocate_root_with_context_proxy" ref="ecedb9436fb30df30cb3a52c64bb97e5" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>internal::allocate_root_with_context_proxy</b></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Used to form groups of tasks. 
-<p>
-The context services explicit cancellation requests from user code, and unhandled exceptions intercepted during tasks execution. Intercepting an exception results in generating internal cancellation requests (which is processed in exactly the same way as external ones).<p>
-The context is associated with one or more root tasks and defines the cancellation group that includes all the descendants of the corresponding root task(s). Association is established when a context object is passed as an argument to the <a class="el" href="a00199.html#23acb0da0afd690da797f9f882027d34">task::allocate_root()</a> method. See <a class="el" href="a00201.html#19fee08fb8ac98adccfe69c1aa63c491">task_group_context::task_group_context</a> for more details.<p>
-The context can be bound to another one, and other contexts can be bound to it, forming a tree-like structure: parent -> this -> children. Arrows here designate cancellation propagation direction. If a task in a cancellation group is canceled all the other tasks in this group and groups bound to it (as children) get canceled too.<p>
-IMPLEMENTATION NOTE: When adding new members to <a class="el" href="a00201.html">task_group_context</a> or changing types of existing ones, update the size of both padding buffers (_leading_padding and _trailing_padding) appropriately. See also VERSIONING NOTE at the constructor definition below. 
-<p>
-<hr><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" name="19fee08fb8ac98adccfe69c1aa63c491"></a><!-- doxytag: member="tbb::task_group_context::task_group_context" ref="19fee08fb8ac98adccfe69c1aa63c491" args="(kind_type relation_with_parent=bound, uintptr_t traits=default_traits)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">tbb::task_group_context::task_group_context           </td>
-          <td>(</td>
-          <td class="paramtype">kind_type </td>
-          <td class="paramname"> <em>relation_with_parent</em> = <code>bound</code>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">uintptr_t </td>
-          <td class="paramname"> <em>traits</em> = <code>default_traits</code></td><td> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td><td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Default & binding constructor. 
-<p>
-By default a bound context is created. That is this context will be bound (as child) to the context of the task calling task::allocate_root(this_context) method. Cancellation requests passed to the parent context are propagated to all the contexts bound to it.<p>
-If task_group_context::isolated is used as the argument, then the tasks associated with this context will never be affected by events in any other context.<p>
-Creating isolated contexts involve much less overhead, but they have limited utility. Normally when an exception occurs in an algorithm that has nested ones running, it is desirably to have all the nested algorithms canceled as well. Such a behavior requires nested algorithms to use bound contexts.<p>
-There is one good place where using isolated algorithms is beneficial. It is a master thread. That is if a particular algorithm is invoked directly from the master thread (not from a TBB task), supplying it with explicitly created isolated context will result in a faster algorithm startup.<p>
-VERSIONING NOTE: Implementation(s) of <a class="el" href="a00201.html">task_group_context</a> constructor(s) cannot be made entirely out-of-line because the run-time version must be set by the user code. This will become critically important for binary compatibility, if we ever have to change the size of the context object.<p>
-Boosting the runtime version will also be necessary whenever new fields are introduced in the currently unused padding areas or the meaning of the existing fields is changed or extended. 
-</div>
-</div><p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="8bcdfdf4e6bfb76125b6de15c00b571d"></a><!-- doxytag: member="tbb::task_group_context::cancel_group_execution" ref="8bcdfdf4e6bfb76125b6de15c00b571d" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool __TBB_EXPORTED_METHOD tbb::task_group_context::cancel_group_execution           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Initiates cancellation of all tasks in this cancellation group and its subordinate groups. 
-<p>
-<dl compact><dt><b>Returns:</b></dt><dd>false if cancellation has already been requested, true otherwise.</dd></dl>
-Note that canceling never fails. When false is returned, it just means that another thread (or this one) has already sent cancellation request to this context or to one of its ancestors (if this context is bound). It is guaranteed that when this method is concurrently called on the same not yet cancelled context, true will be returned by one and only one invocation. 
-</div>
-</div><p>
-<a class="anchor" name="49a55352084fd44b8863d182e839e6dc"></a><!-- doxytag: member="tbb::task_group_context::init" ref="49a55352084fd44b8863d182e839e6dc" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void __TBB_EXPORTED_METHOD tbb::task_group_context::init           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"><code> [protected]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Out-of-line part of the constructor. 
-<p>
-Singled out to ensure backward binary compatibility of the future versions. 
-</div>
-</div><p>
-<a class="anchor" name="d97c8a03615594b71b4ef06ff75cf561"></a><!-- doxytag: member="tbb::task_group_context::register_pending_exception" ref="d97c8a03615594b71b4ef06ff75cf561" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void __TBB_EXPORTED_METHOD tbb::task_group_context::register_pending_exception           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Records the pending exception, and cancels the task group. 
-<p>
-May be called only from inside a catch-block. If the context is already canceled, does nothing. The method brings the task group associated with this context exactly into the state it would be in, if one of its tasks threw the currently pending exception during its execution. In other words, it emulates the actions of the scheduler's dispatch loop exception handler. 
-</div>
-</div><p>
-<a class="anchor" name="6d30d16bf1cd22f86c6afaf29c2b430c"></a><!-- doxytag: member="tbb::task_group_context::reset" ref="6d30d16bf1cd22f86c6afaf29c2b430c" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void __TBB_EXPORTED_METHOD tbb::task_group_context::reset           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Forcefully reinitializes the context after the task tree it was associated with is completed. 
-<p>
-Because the method assumes that all the tasks that used to be associated with this context have already finished, calling it while the context is still in use somewhere in the task hierarchy leads to undefined behavior.<p>
-IMPORTANT: This method is not thread safe!<p>
-The method does not change the context's parent if it is set. 
-</div>
-</div><p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00433.html">task.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00202.html b/doc/html/a00202.html
deleted file mode 100644
index 304599f..0000000
--- a/doc/html/a00202.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>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="a00267.html">tbb</a>::<a class="el" href="a00202.html">task_list</a></div>
-<h1>tbb::task_list Class Reference<br>
-<small>
-[<a class="el" href="a00280.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="a00433.html">task.h</a>></code>
-<p>
-<a href="a00077.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="416341c2047eaef50417b41eaf7e9de6"></a><!-- doxytag: member="tbb::task_list::task_list" ref="416341c2047eaef50417b41eaf7e9de6" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.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="a00202.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="a00202.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="a00202.html#4cd34756bc4763dafb8c84838a0124ff">push_back</a> (<a class="el" href="a00199.html">task</a> &<a class="el" href="a00199.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="a00199.html">task</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.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="a00202.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="a00433.html">task.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00203.html b/doc/html/a00203.html
deleted file mode 100644
index 9e46fe6..0000000
--- a/doc/html/a00203.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>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="a00267.html">tbb</a>::<a class="el" href="a00203.html">task_scheduler_init</a></div>
-<h1>tbb::task_scheduler_init Class Reference<br>
-<small>
-[<a class="el" href="a00280.html">Task Scheduling</a>]</small>
-</h1><!-- doxytag: class="tbb::task_scheduler_init" -->Class representing reference to tbb scheduler.  
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00449.html">task_scheduler_init.h</a>></code>
-<p>
-<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">void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html#d476053cc712e572554823492a5229ce">initialize</a> (int number_of_threads=<a class="el" href="a00203.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="a00203.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="a00203.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="a00203.html#421600bf9bf9338bcf937063f2ff0e90">task_scheduler_init</a> (int number_of_threads=<a class="el" href="a00203.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 intialize(number_of_threads). <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4da6c86292d80c703a66c1f6f5299488"></a><!-- doxytag: member="tbb::task_scheduler_init::~task_scheduler_init" ref="4da6c86292d80c703a66c1f6f5299488" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.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="a00203.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="a00203.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="a00203.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="a00203.html#e6c860f1e559026ff3ef4599c0d6c514">deferred</a> = -2</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Argument to <a class="el" href="a00203.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 representing reference to tbb scheduler. 
-<p>
-A thread must construct a <a class="el" href="a00203.html">task_scheduler_init</a>, and keep it alive, during the time that it uses the services of class task. 
-<p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="ba00714c33a41a3c2216f48613971cab"></a><!-- doxytag: member="tbb::task_scheduler_init::default_num_threads" ref="ba00714c33a41a3c2216f48613971cab" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static int __TBB_EXPORTED_FUNC tbb::task_scheduler_init::default_num_threads           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Returns the number of threads tbb scheduler would create if initialized by default. 
-<p>
-Result returned by this method does not depend on whether the scheduler has already been initialized.<p>
-Because tbb 2.0 does not support blocking tasks yet, you may use this method to boost the number of threads in the tbb's internal pool, if your tasks are doing I/O operations. The optimal number of additional threads depends on how much time your tasks spend in the blocked state. 
-</div>
-</div><p>
-<a class="anchor" name="d5ed214a8bb53b0466ed91ff4734b9a3"></a><!-- doxytag: member="tbb::task_scheduler_init::initialize" ref="d5ed214a8bb53b0466ed91ff4734b9a3" args="(int number_of_threads, stack_size_type thread_stack_size)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void __TBB_EXPORTED_METHOD tbb::task_scheduler_init::initialize           </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>number_of_threads</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">stack_size_type </td>
-          <td class="paramname"> <em>thread_stack_size</em></td><td> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td><td width="100%"></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-The overloaded method with stack size parameter. 
-<p>
-Overloading is necessary to preserve ABI compatibility 
-</div>
-</div><p>
-<a class="anchor" name="d476053cc712e572554823492a5229ce"></a><!-- doxytag: member="tbb::task_scheduler_init::initialize" ref="d476053cc712e572554823492a5229ce" args="(int number_of_threads=automatic)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void __TBB_EXPORTED_METHOD tbb::task_scheduler_init::initialize           </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>number_of_threads</em> = <code><a class="el" href="a00203.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a></code>          </td>
-          <td> ) </td>
-          <td width="100%"></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Ensure that scheduler exists for this thread. 
-<p>
-A value of -1 lets tbb decide on the number of threads, which is typically the number of hardware threads. For production code, the default value of -1 should be used, particularly if the client code is mixed with third party clients that might also use tbb.<p>
-The number_of_threads is ignored if any other task_scheduler_inits currently exist. A thread may construct multiple task_scheduler_inits. Doing so does no harm because the underlying scheduler is reference counted. 
-</div>
-</div><p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00449.html">task_scheduler_init.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00204.html b/doc/html/a00204.html
deleted file mode 100644
index c445927..0000000
--- a/doc/html/a00204.html
+++ /dev/null
@@ -1,130 +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::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>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="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="a00267.html">tbb</a>::<a class="el" href="a00204.html">tbb_allocator</a></div>
-<h1>tbb::tbb_allocator< T > Class Template Reference<br>
-<small>
-[<a class="el" href="a00277.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="a00453.html">tbb_allocator.h</a>></code>
-<p>
-<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="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="a00204.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="a00204.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="a00204.html">tbb_allocator</a>< U > &)  throw ()</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="08d3822344271d0a1c2e64e8c9c16b58"></a><!-- doxytag: member="tbb::tbb_allocator::address" ref="08d3822344271d0a1c2e64e8c9c16b58" args="(reference x) const " -->
-pointer </td><td class="memItemRight" valign="bottom"><b>address</b> (reference x) const </td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2b388f25858f783d995d61506de24656"></a><!-- doxytag: member="tbb::tbb_allocator::address" ref="2b388f25858f783d995d61506de24656" args="(const_reference x) const " -->
-const_pointer </td><td class="memItemRight" valign="bottom"><b>address</b> (const_reference x) const </td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f6cb487b1bdce0b581f265a77dca6d53"></a><!-- doxytag: member="tbb::tbb_allocator::allocate" ref="f6cb487b1bdce0b581f265a77dca6d53" args="(size_type n, const void *=0)" -->
-pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#f6cb487b1bdce0b581f265a77dca6d53">allocate</a> (size_type n, const void *=0)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate space for n objects. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fdd011fdf2f9ad07006dc7c0a7ec1da2"></a><!-- doxytag: member="tbb::tbb_allocator::deallocate" ref="fdd011fdf2f9ad07006dc7c0a7ec1da2" args="(pointer p, size_type)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">deallocate</a> (pointer p, size_type)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Free previously allocated block of memory. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f059ca2c96243024f0d562ee3a87a3a5"></a><!-- doxytag: member="tbb::tbb_allocator::max_size" ref="f059ca2c96243024f0d562ee3a87a3a5" args="() const " -->
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#f059ca2c96243024f0d562ee3a87a3a5">max_size</a> () const   throw ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Largest value for which method allocate might succeed. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ab228ab9e324ed041c2226e1d717df5f"></a><!-- doxytag: member="tbb::tbb_allocator::construct" ref="ab228ab9e324ed041c2226e1d717df5f" args="(pointer p, const value_type &value)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#ab228ab9e324ed041c2226e1d717df5f">construct</a> (pointer p, const value_type &value)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Copy-construct value at location pointed to by p. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ef133522bf55f05a605bee0763208281"></a><!-- doxytag: member="tbb::tbb_allocator::destroy" ref="ef133522bf55f05a605bee0763208281" args="(pointer p)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#ef133522bf55f05a605bee0763208281">destroy</a> (pointer p)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy value at location pointed to by p. <br></td></tr>
-<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="78701e7454ef8e1a25b5acd364367080"></a><!-- doxytag: member="tbb::tbb_allocator::allocator_type" ref="78701e7454ef8e1a25b5acd364367080" args="()" -->
-static <a class="el" href="a00204.html#09a7f81fb2c3055aaecf058b11538544">malloc_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#78701e7454ef8e1a25b5acd364367080">allocator_type</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns current allocator. <br></td></tr>
-<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><b>rebind</b></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<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>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00453.html">tbb_allocator.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00205.html b/doc/html/a00205.html
deleted file mode 100644
index 15e6ac8..0000000
--- a/doc/html/a00205.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::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>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="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="a00267.html">tbb</a>::<a class="el" href="a00205.html">tbb_allocator< void ></a></div>
-<h1>tbb::tbb_allocator< void > Class Template Reference<br>
-<small>
-[<a class="el" href="a00277.html">Memory Allocation</a>]</small>
-</h1><!-- doxytag: class="tbb::tbb_allocator< void >" -->Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00453.html">tbb_allocator.h</a>></code>
-<p>
-<a href="a00088.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public 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="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="81595a776b9d206a92caa526cad9c637"></a><!-- doxytag: member="tbb::tbb_allocator< void >::value_type" ref="81595a776b9d206a92caa526cad9c637" args="" -->
-typedef void </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
-
-<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><b>rebind</b></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<><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="a00453.html">tbb_allocator.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00206.html b/doc/html/a00206.html
deleted file mode 100644
index ef07af1..0000000
--- a/doc/html/a00206.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>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="a00267.html">tbb</a>::<a class="el" href="a00206.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="a00459.html">tbb_exception.h</a>></code>
-<p>
-<p>Inheritance diagram for tbb::tbb_exception:
-<p><center><img src="a00206.png" usemap="#tbb::tbb_exception_map" border="0" alt=""></center>
-<map name="tbb::tbb_exception_map">
-<area href="a00152.html" alt="tbb::captured_exception" shape="rect" coords="0,56,248,80">
-<area href="a00171.html" alt="tbb::movable_exception< ExceptionData >" shape="rect" coords="258,56,506,80">
-</map>
-<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">virtual <a class="el" href="a00206.html">tbb_exception</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00206.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="a00206.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="a00206.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="a00206.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="a00206.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="a00206.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="a00206.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="a00206.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="a00206.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="a00201.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="a00152.html">tbb::captured_exception</a> and template class <a class="el" href="a00171.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="a00206.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="a00152.html#93d875d3555502ff6f18513525de204c">tbb::captured_exception</a>, and <a class="el" href="a00171.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="a00206.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="a00152.html#837a50b8f6a800bda225c39d1699643f">tbb::captured_exception</a>, and <a class="el" href="a00171.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="a00206.html#3e3482bf264d4ca4dde046cd9c02c766">move()</a> operation on an exception thrown out of TBB scheduler.<p>
-When overriding method <a class="el" href="a00206.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="a00152.html#2dd1be66ab32fa27e0ddef5707fa67ef">tbb::captured_exception</a>, and <a class="el" href="a00171.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="a00459.html">tbb_exception.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00207.html b/doc/html/a00207.html
deleted file mode 100644
index 642e1eb..0000000
--- a/doc/html/a00207.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::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="a00267.html">tbb</a>::<b>internal</b>::<a class="el" href="a00207.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="a00459.html">tbb_exception.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>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="a00207.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="a00207.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="a00207.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="a00207.html">tbb_exception_ptr</a> * </td><td class="memItemRight" valign="bottom"><b>allocate</b> (const <a class="el" href="a00206.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="a00207.html">tbb_exception_ptr</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00207.html#c35e5db8e9cdff5d1387db5b0bad2e4a">allocate</a> (<a class="el" href="a00152.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="a00459.html">tbb_exception.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00208.html b/doc/html/a00208.html
deleted file mode 100644
index 2ca1daf..0000000
--- a/doc/html/a00208.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::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="a00267.html">tbb</a>::<a class="el" href="a00208.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="a00326.html">concurrent_hash_map.h</a>></code>
-<p>
-<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>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="a00326.html">concurrent_hash_map.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00209.html b/doc/html/a00209.html
deleted file mode 100644
index 825fb0d..0000000
--- a/doc/html/a00209.html
+++ /dev/null
@@ -1,123 +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::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="a00267.html">tbb</a>::<a class="el" href="a00209.html">thread_bound_filter</a></div>
-<h1>tbb::thread_bound_filter Class Reference<br>
-<small>
-[<a class="el" href="a00275.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="a00414.html">pipeline.h</a>></code>
-<p>
-<p>Inheritance diagram for tbb::thread_bound_filter:
-<p><center><img src="a00209.png" usemap="#tbb::thread_bound_filter_map" border="0" alt=""></center>
-<map name="tbb::thread_bound_filter_map">
-<area href="a00164.html" alt="tbb::filter" shape="rect" coords="0,0,145,24">
-</map>
-<a href="a00050.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public 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="a00209.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="a00209.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="a00414.html">pipeline.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00210.html b/doc/html/a00210.html
deleted file mode 100644
index f4c6fa2..0000000
--- a/doc/html/a00210.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::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="a00267.html">tbb</a>::<a class="el" href="a00210.html">tick_count</a></div>
-<h1>tbb::tick_count Class Reference<br>
-<small>
-[<a class="el" href="a00279.html">Timing</a>]</small>
-</h1><!-- doxytag: class="tbb::tick_count" -->Absolute timestamp.  
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00482.html">tick_count.h</a>></code>
-<p>
-<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 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="a00210.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="a00210.html">tick_count</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00210.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="a00211.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00210.html#09dde78a4100800c11bb883d6204b586">operator-</a> (const <a class="el" href="a00210.html">tick_count</a> &t1, const <a class="el" href="a00210.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="a00211.html">interval_t</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Relative time interval.  <a href="a00211.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="a00482.html">tick_count.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00211.html b/doc/html/a00211.html
deleted file mode 100644
index 67770bb..0000000
--- a/doc/html/a00211.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>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="a00267.html">tbb</a>::<a class="el" href="a00210.html">tick_count</a>::<a class="el" href="a00211.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="a00482.html">tick_count.h</a>></code>
-<p>
-<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 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="a00211.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="a00211.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="a00211.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="a00211.html">interval_t</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#cd9814947902e26463a69a111530f81b">operator+=</a> (const <a class="el" href="a00211.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="a00211.html">interval_t</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#35ff7eaf7c2031b4a991402ac9ecb940">operator-=</a> (const <a class="el" href="a00211.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="a00211.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="a00211.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#09dde78a4100800c11bb883d6204b586">operator-</a> (const <a class="el" href="a00210.html">tick_count</a> &t1, const <a class="el" href="a00210.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="a00211.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#5871ead1ca230efbe52a5008470e6428">operator+</a> (const <a class="el" href="a00211.html">interval_t</a> &i, const <a class="el" href="a00211.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="a00211.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#fa509691e1d689830931e36edd274f76">operator-</a> (const <a class="el" href="a00211.html">interval_t</a> &i, const <a class="el" href="a00211.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="a00482.html">tick_count.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00212.html b/doc/html/a00212.html
index 0351df6..227c7e5 100644
--- a/doc/html/a00212.html
+++ b/doc/html/a00212.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::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,32 +21,36 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00267.html">tbb</a>::<b>internal</b>::<a class="el" href="a00212.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="a00362.html">tbb</a>::<a class="el" href="a00212.html">affinity_partitioner</a></div>
+<h1>tbb::affinity_partitioner Class Reference</h1><!-- doxytag: class="tbb::affinity_partitioner" -->An affinity partitioner.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00460.html">tbb_machine.h</a>></code>
+<code>#include <<a class="el" href="a00541.html">partitioner.h</a>></code>
 <p>
-<a href="a00109.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>Static Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="137d1b1dd94016bc52e423dc33c4fd1d"></a><!-- doxytag: member="tbb::internal::work_around_alignment_bug::alignment" ref="137d1b1dd94016bc52e423dc33c4fd1d" args="" -->
-static const size_t </td><td class="memItemRight" valign="bottom"><b>alignment</b> = __alignof(T)</td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a47f7e0208a2bf68f35b51b27d2ddf2a"></a><!-- doxytag: member="tbb::affinity_partitioner::internal::start_for" ref="a47f7e0208a2bf68f35b51b27d2ddf2a" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>internal::start_for</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e8f710e431b62c2a48914bd99d0fe034"></a><!-- doxytag: member="tbb::affinity_partitioner::internal::start_reduce" ref="e8f710e431b62c2a48914bd99d0fe034" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>internal::start_reduce</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="76d97ae6ad98db0acfc8ed8cb7c76705"></a><!-- doxytag: member="tbb::affinity_partitioner::internal::start_scan" ref="76d97ae6ad98db0acfc8ed8cb7c76705" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>internal::start_scan</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e9575467e391b90e0703fadf573dbad7"></a><!-- doxytag: member="tbb::affinity_partitioner::internal::affinity_partition_type" ref="e9575467e391b90e0703fadf573dbad7" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>internal::affinity_partition_type</b></td></tr>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-<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). 
+An affinity partitioner. 
 <p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00460.html">tbb_machine.h</a></ul>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00541.html">partitioner.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00213.html b/doc/html/a00213.html
index b757b16..e204096 100644
--- a/doc/html/a00213.html
+++ b/doc/html/a00213.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::interface6::internal::aggregated_operation< Derived > 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,33 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00267.html">tbb</a>::<a class="el" href="a00213.html">zero_allocator</a></div>
-<h1>tbb::zero_allocator< T, Allocator > Class Template Reference<br>
-<small>
-[<a class="el" href="a00277.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="a00362.html">tbb</a>::<b>interface6</b>::<b>internal</b>::<a class="el" href="a00213.html">aggregated_operation</a></div>
+<h1>tbb::interface6::internal::aggregated_operation< Derived > Class Template Reference</h1><!-- doxytag: class="tbb::interface6::internal::aggregated_operation" --><a class="el" href="a00213.html">aggregated_operation</a> base class  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00453.html">tbb_allocator.h</a>></code>
+<code>#include <<a class="el" href="a00377.html">_aggregator_internal.h</a>></code>
 <p>
-<a href="a00090.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00001.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public 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 colspan="2"><br><h2>Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="57a1b5d43be94cd9e4c3c59081736638"></a><!-- doxytag: member="tbb::interface6::internal::aggregated_operation::status" ref="57a1b5d43be94cd9e4c3c59081736638" args="" -->
+uintptr_t </td><td class="memItemRight" valign="bottom"><b>status</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="a00213.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="a00213.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>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0bd4c85d1b47b2a410bfe1a266f22dee"></a><!-- doxytag: member="tbb::interface6::internal::aggregated_operation::next" ref="0bd4c85d1b47b2a410bfe1a266f22dee" args="" -->
+Derived * </td><td class="memItemRight" valign="bottom"><b>next</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<typename Derived><br>
+ class tbb::interface6::internal::aggregated_operation< Derived ></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. 
+<a class="el" href="a00213.html">aggregated_operation</a> base class 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00453.html">tbb_allocator.h</a></ul>
+<li><a class="el" href="a00377.html">_aggregator_internal.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00214.html b/doc/html/a00214.html
index 39c15e1..a01624b 100644
--- a/doc/html/a00214.html
+++ b/doc/html/a00214.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::interface6::internal::aggregator< handler_type, operation_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,45 +21,60 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00267.html">tbb</a>::<a class="el" href="a00214.html">zero_allocator< void, Allocator ></a></div>
-<h1>tbb::zero_allocator< void, Allocator > Class Template Reference<br>
-<small>
-[<a class="el" href="a00277.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="a00362.html">tbb</a>::<b>interface6</b>::<b>internal</b>::<a class="el" href="a00214.html">aggregator</a></div>
+<h1>tbb::interface6::internal::aggregator< handler_type, operation_type > Class Template Reference</h1><!-- doxytag: class="tbb::interface6::internal::aggregator" -->Aggregator base class.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00453.html">tbb_allocator.h</a>></code>
+<code>#include <<a class="el" href="a00377.html">_aggregator_internal.h</a>></code>
 <p>
-<a href="a00092.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00002.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ce4f3bf06e8aaf8020fa443297eff5f7"></a><!-- doxytag: member="tbb::zero_allocator< void, Allocator >::base_allocator_type" ref="ce4f3bf06e8aaf8020fa443297eff5f7" args="" -->
-typedef Allocator< void > </td><td class="memItemRight" valign="bottom"><b>base_allocator_type</b></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1893fb7ba6824ca9b135d2ef005f97bb"></a><!-- doxytag: member="tbb::interface6::internal::aggregator::initialize_handler" ref="1893fb7ba6824ca9b135d2ef005f97bb" args="(handler_type h)" -->
+void </td><td class="memItemRight" valign="bottom"><b>initialize_handler</b> (handler_type h)</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>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#282d5a2f1216b185c91ed23d00119481">execute</a> (operation_type *op)</td></tr>
 
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Place operation in list.  <a href="#282d5a2f1216b185c91ed23d00119481"></a><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 handler_type, typename operation_type><br>
+ class tbb::interface6::internal::aggregator< handler_type, operation_type ></h3>
 
-Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. 
+Aggregator base class. 
+<p>
+An aggregator for collecting operations coming from multiple sources and executing them serially on a single thread. operation_type must be derived from <a class="el" href="a00213.html">aggregated_operation</a>. 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. 
+<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="282d5a2f1216b185c91ed23d00119481"></a><!-- doxytag: member="tbb::interface6::internal::aggregator::execute" ref="282d5a2f1216b185c91ed23d00119481" args="(operation_type *op)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename handler_type, typename operation_type> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void <a class="el" href="a00214.html">tbb::interface6::internal::aggregator</a>< handler_type, operation_type >::execute           </td>
+          <td>(</td>
+          <td class="paramtype">operation_type * </td>
+          <td class="paramname"> <em>op</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Place operation in list. 
 <p>
+Place operation in list and either handle list or wait for operation to complete. 
+</div>
+</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00453.html">tbb_allocator.h</a></ul>
+<li><a class="el" href="a00377.html">_aggregator_internal.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00215.html b/doc/html/a00215.html
new file mode 100644
index 0000000..2af4a45
--- /dev/null
+++ b/doc/html/a00215.html
@@ -0,0 +1,63 @@
+<!DOCTYPE HTML 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="a00362.html">tbb</a>::<a class="el" href="a00215.html">aligned_space</a></div>
+<h1>tbb::aligned_space< T, N > Class Template Reference<br>
+<small>
+[<a class="el" href="a00373.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="a00409.html">aligned_space.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="0d702fc6b9e9d061ace3501b3c861cdf"></a><!-- doxytag: member="tbb::aligned_space::begin" ref="0d702fc6b9e9d061ace3501b3c861cdf" args="()" -->
+T * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00215.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="a00215.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="a00409.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/a00216.html b/doc/html/a00216.html
new file mode 100644
index 0000000..c19731e
--- /dev/null
+++ b/doc/html/a00216.html
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML 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="a00362.html">tbb</a>::<a class="el" href="a00216.html">atomic</a></div>
+<h1>tbb::atomic< T > Struct Template Reference<br>
+<small>
+[<a class="el" href="a00374.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="a00410.html">atomic.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 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="a00216.html">atomic</a>< T > & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00216.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="a00410.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/a00217.html b/doc/html/a00217.html
new file mode 100644
index 0000000..336e89d
--- /dev/null
+++ b/doc/html/a00217.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::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="a00362.html">tbb</a>::<a class="el" href="a00217.html">atomic< void * ></a></div>
+<h1>tbb::atomic< void * > Struct Template Reference</h1><!-- doxytag: class="tbb::atomic< void * >" -->Specialization for <a class="el" href="a00217.html">atomic<void*></a>, for sake of not allowing arithmetic or operator->.  
+<a href="#_details">More...</a>
+<p>
+<code>#include <<a class="el" href="a00410.html">atomic.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 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="a00216.html">atomic</a>< void * > & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00216.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="a00217.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="a00410.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/a00218.html b/doc/html/a00218.html
new file mode 100644
index 0000000..1187034
--- /dev/null
+++ b/doc/html/a00218.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>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="a00362.html">tbb</a>::<b>internal</b>::<a class="el" href="a00218.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="a00146.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="a00218.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/a00219.html b/doc/html/a00219.html
new file mode 100644
index 0000000..672c260
--- /dev/null
+++ b/doc/html/a00219.html
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML 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="a00362.html">tbb</a>::<a class="el" href="a00219.html">auto_partitioner</a></div>
+<h1>tbb::auto_partitioner Class Reference<br>
+<small>
+[<a class="el" href="a00371.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="a00541.html">partitioner.h</a>></code>
+<p>
+<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="a47f7e0208a2bf68f35b51b27d2ddf2a"></a><!-- doxytag: member="tbb::auto_partitioner::internal::start_for" ref="a47f7e0208a2bf68f35b51b27d2ddf2a" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>internal::start_for</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e8f710e431b62c2a48914bd99d0fe034"></a><!-- doxytag: member="tbb::auto_partitioner::internal::start_reduce" ref="e8f710e431b62c2a48914bd99d0fe034" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>internal::start_reduce</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="76d97ae6ad98db0acfc8ed8cb7c76705"></a><!-- doxytag: member="tbb::auto_partitioner::internal::start_scan" ref="76d97ae6ad98db0acfc8ed8cb7c76705" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>internal::start_scan</b></td></tr>
+
+<tr><td 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>
+An auto partitioner. 
+<p>
+The range is initial divided into several large chunks. Chunks are further subdivided into VICTIM_CHUNKS pieces if they are stolen and divisible. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00541.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/a00220.html b/doc/html/a00220.html
new file mode 100644
index 0000000..f9c96cb
--- /dev/null
+++ b/doc/html/a00220.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::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="a00362.html">tbb</a>::<a class="el" href="a00220.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/a00221.html b/doc/html/a00221.html
new file mode 100644
index 0000000..e1f320b
--- /dev/null
+++ b/doc/html/a00221.html
@@ -0,0 +1,224 @@
+<!DOCTYPE HTML 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="a00362.html">tbb</a>::<a class="el" href="a00221.html">blocked_range</a></div>
+<h1>tbb::blocked_range< Value > Class Template Reference<br>
+<small>
+[<a class="el" href="a00371.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="a00418.html">blocked_range.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">typedef Value </td><td class="memItemRight" valign="bottom"><a class="el" href="a00221.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="a00221.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="a00221.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="a00221.html#14795a36ead1414b4371dbe1a4656359">blocked_range</a> (Value begin_, Value end_, <a class="el" href="a00221.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="a00221.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00221.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="a00221.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00221.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="a00221.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00221.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="a00221.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00221.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="a00221.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="a00221.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="a00221.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">blocked_range</a> (<a class="el" href="a00221.html">blocked_range</a> &r, <a class="el" href="a00290.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="a00221.html">tbb::blocked_range</a>< Value >::<a class="el" href="a00221.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="a00221.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="a00221.html">tbb::blocked_range</a>< Value >::<a class="el" href="a00221.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="a00221.html">tbb::blocked_range</a>< Value >::<a class="el" href="a00221.html">blocked_range</a>           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00221.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="a00290.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="a00221.html#8b929d93ddc13f148b11bceef3a3bdf8">end()</a><<a class="el" href="a00221.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="a00221.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="a00221.html#8b929d93ddc13f148b11bceef3a3bdf8">end()</a><<a class="el" href="a00221.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="a00221.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> <a class="el" href="a00221.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="a00221.html#8b929d93ddc13f148b11bceef3a3bdf8">end()</a><<a class="el" href="a00221.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="a00418.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/a00222.html b/doc/html/a00222.html
new file mode 100644
index 0000000..6d70406
--- /dev/null
+++ b/doc/html/a00222.html
@@ -0,0 +1,86 @@
+<!DOCTYPE HTML 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="a00362.html">tbb</a>::<a class="el" href="a00222.html">blocked_range2d</a></div>
+<h1>tbb::blocked_range2d< RowValue, ColValue > Class Template Reference<br>
+<small>
+[<a class="el" href="a00371.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="a00419.html">blocked_range2d.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="a807a22fe658ec38b8edfd69521d0383"></a><!-- doxytag: member="tbb::blocked_range2d::row_range_type" ref="a807a22fe658ec38b8edfd69521d0383" args="" -->
+typedef <a class="el" href="a00221.html">blocked_range</a>< RowValue > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html#a807a22fe658ec38b8edfd69521d0383">row_range_type</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Type for size of an iteation range. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="750d5c6ac9915443df477a30031c07fd"></a><!-- doxytag: member="tbb::blocked_range2d::col_range_type" ref="750d5c6ac9915443df477a30031c07fd" args="" -->
+typedef <a class="el" href="a00221.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="a00221.html#f5707bffea38eee5c9680f37358afb8e">row_range_type::size_type</a> row_grainsize, ColValue col_begin, ColValue col_end, typename <a class="el" href="a00221.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="a00222.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="a00222.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="a00222.html">blocked_range2d</a> &r, <a class="el" href="a00290.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="a00221.html">row_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.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="a00221.html">col_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.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="a00419.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/a00223.html b/doc/html/a00223.html
new file mode 100644
index 0000000..26f7ea9
--- /dev/null
+++ b/doc/html/a00223.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::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="a00362.html">tbb</a>::<a class="el" href="a00223.html">blocked_range3d</a></div>
+<h1>tbb::blocked_range3d< PageValue, RowValue, ColValue > Class Template Reference<br>
+<small>
+[<a class="el" href="a00371.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="a00420.html">blocked_range3d.h</a>></code>
+<p>
+<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 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="a00221.html">blocked_range</a>< PageValue > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00223.html#b8ebf17a552ba47825e9b3887855b719">page_range_type</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Type for size of an iteation range. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4edc39b1a76c84c8f43ea8bff3e88007"></a><!-- doxytag: member="tbb::blocked_range3d::row_range_type" ref="4edc39b1a76c84c8f43ea8bff3e88007" args="" -->
+typedef <a class="el" href="a00221.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="a00221.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="a00221.html#f5707bffea38eee5c9680f37358afb8e">page_range_type::size_type</a> page_grainsize, RowValue row_begin, RowValue row_end, typename <a class="el" href="a00221.html#f5707bffea38eee5c9680f37358afb8e">row_range_type::size_type</a> row_grainsize, ColValue col_begin, ColValue col_end, typename <a class="el" href="a00221.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="a00223.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="a00223.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="a00223.html">blocked_range3d</a> &r, <a class="el" href="a00290.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="a00221.html">page_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00223.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="a00221.html">row_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00223.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="a00221.html">col_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00223.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="a00420.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/a00224.html b/doc/html/a00224.html
new file mode 100644
index 0000000..439fab8
--- /dev/null
+++ b/doc/html/a00224.html
@@ -0,0 +1,86 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::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="a00362.html">tbb</a>::<a class="el" href="a00224.html">broadcast_node</a></div>
+<h1>tbb::broadcast_node< T > Class Template Reference</h1><!-- doxytag: class="tbb::broadcast_node" --><!-- doxytag: inherits="tbb::graph_node,tbb::receiver,tbb::sender" -->Forwards messages of type T to all successors.  
+<a href="#_details">More...</a>
+<p>
+<code>#include <<a class="el" href="a00466.html">graph.h</a>></code>
+<p>
+<p>Inheritance diagram for tbb::broadcast_node< T >:
+<p><center><img src="a00224.png" usemap="#tbb::broadcast_node< T >_map" border="0" alt=""></center>
+<map name="tbb::broadcast_node< T >_map">
+<area href="a00251.html" alt="tbb::graph_node" shape="rect" coords="0,0,157,24">
+<area href="a00277.html" alt="tbb::receiver< T >" shape="rect" coords="167,0,324,24">
+<area href="a00282.html" alt="tbb::sender< T >" shape="rect" coords="334,0,491,24">
+</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>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="59ea89dbeab816742e6dc6af467e6c3f"></a><!-- doxytag: member="tbb::broadcast_node::input_type" ref="59ea89dbeab816742e6dc6af467e6c3f" args="" -->
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00224.html#59ea89dbeab816742e6dc6af467e6c3f">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="b844ca1ee578a54bc11ff28467b12e7d"></a><!-- doxytag: member="tbb::broadcast_node::output_type" ref="b844ca1ee578a54bc11ff28467b12e7d" args="" -->
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00224.html#b844ca1ee578a54bc11ff28467b12e7d">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="4dd13b81f6361fc244abe7cbcacd048c"></a><!-- doxytag: member="tbb::broadcast_node::predecessor_type" ref="4dd13b81f6361fc244abe7cbcacd048c" args="" -->
+typedef <a class="el" href="a00282.html">sender</a>< <a class="el" href="a00224.html#59ea89dbeab816742e6dc6af467e6c3f">input_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00224.html#4dd13b81f6361fc244abe7cbcacd048c">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="453928c367d813cb481f1b9aa1e1742a"></a><!-- doxytag: member="tbb::broadcast_node::successor_type" ref="453928c367d813cb481f1b9aa1e1742a" args="" -->
+typedef <a class="el" href="a00277.html">receiver</a>< <a class="el" href="a00224.html#b844ca1ee578a54bc11ff28467b12e7d">output_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00224.html#453928c367d813cb481f1b9aa1e1742a">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="3f4149fa6b984b2138cb5ed40a2ddc6c"></a><!-- doxytag: member="tbb::broadcast_node::register_successor" ref="3f4149fa6b984b2138cb5ed40a2ddc6c" args="(receiver< T > &r)" -->
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00224.html#3f4149fa6b984b2138cb5ed40a2ddc6c">register_successor</a> (<a class="el" href="a00277.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="eefb3210bb9727765ea7385ba163c2a6"></a><!-- doxytag: member="tbb::broadcast_node::remove_successor" ref="eefb3210bb9727765ea7385ba163c2a6" args="(receiver< T > &r)" -->
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00224.html#eefb3210bb9727765ea7385ba163c2a6">remove_successor</a> (<a class="el" href="a00277.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="9b211e02554d6b39dc04f7e7f4e00073"></a><!-- doxytag: member="tbb::broadcast_node::try_put" ref="9b211e02554d6b39dc04f7e7f4e00073" args="(T t)" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00224.html#9b211e02554d6b39dc04f7e7f4e00073">try_put</a> (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::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="a00466.html">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/a00224.png b/doc/html/a00224.png
new file mode 100644
index 0000000..820bcba
Binary files /dev/null and b/doc/html/a00224.png differ
diff --git a/doc/html/a00225.html b/doc/html/a00225.html
new file mode 100644
index 0000000..fae9f13
--- /dev/null
+++ b/doc/html/a00225.html
@@ -0,0 +1,431 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::buffer_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="a00362.html">tbb</a>::<a class="el" href="a00225.html">buffer_node</a></div>
+<h1>tbb::buffer_node< T > Class Template Reference</h1><!-- doxytag: class="tbb::buffer_node" --><!-- doxytag: inherits="tbb::graph_node,tbb::receiver,tbb::sender" -->Forwards messages in arbitrary order.  
+<a href="#_details">More...</a>
+<p>
+<code>#include <<a class="el" href="a00466.html">graph.h</a>></code>
+<p>
+<p>Inheritance diagram for tbb::buffer_node< T >:
+<p><center><img src="a00225.png" usemap="#tbb::buffer_node< T >_map" border="0" alt=""></center>
+<map name="tbb::buffer_node< T >_map">
+<area href="a00251.html" alt="tbb::graph_node" shape="rect" coords="0,0,242,24">
+<area href="a00277.html" alt="tbb::receiver< T >" shape="rect" coords="252,0,494,24">
+<area href="a00282.html" alt="tbb::sender< T >" shape="rect" coords="504,0,746,24">
+<area href="a00268.html" alt="tbb::priority_queue_node< T, Compare >" shape="rect" coords="126,112,368,136">
+<area href="a00269.html" alt="tbb::queue_node< T >" shape="rect" coords="378,112,620,136">
+<area href="a00283.html" alt="tbb::sequencer_node< T >" shape="rect" coords="378,168,620,192">
+</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>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="90de308ba6abefb74c537a62ed0f1ca3"></a><!-- doxytag: member="tbb::buffer_node::input_type" ref="90de308ba6abefb74c537a62ed0f1ca3" args="" -->
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html#90de308ba6abefb74c537a62ed0f1ca3">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="28c06a61dbad153f2e989efbf43016c5"></a><!-- doxytag: member="tbb::buffer_node::output_type" ref="28c06a61dbad153f2e989efbf43016c5" args="" -->
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html#28c06a61dbad153f2e989efbf43016c5">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="688cf819089ee2fac2b9de2e050adea7"></a><!-- doxytag: member="tbb::buffer_node::predecessor_type" ref="688cf819089ee2fac2b9de2e050adea7" args="" -->
+typedef <a class="el" href="a00282.html">sender</a>< <a class="el" href="a00225.html#90de308ba6abefb74c537a62ed0f1ca3">input_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html#688cf819089ee2fac2b9de2e050adea7">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="5e23f4f377ff4e1f53e71fd909a65771"></a><!-- doxytag: member="tbb::buffer_node::successor_type" ref="5e23f4f377ff4e1f53e71fd909a65771" args="" -->
+typedef <a class="el" href="a00277.html">receiver</a>< <a class="el" href="a00225.html#28c06a61dbad153f2e989efbf43016c5">output_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html#5e23f4f377ff4e1f53e71fd909a65771">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="7360978fa427d054bc6cde05c80e5e9f"></a><!-- doxytag: member="tbb::buffer_node::buffer_node" ref="7360978fa427d054bc6cde05c80e5e9f" args="(graph &g)" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html#7360978fa427d054bc6cde05c80e5e9f">buffer_node</a> (<a class="el" href="a00250.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">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html#cd2ef588b0ee6eb8d23ee169e00c73a9">register_successor</a> (<a class="el" href="a00277.html">receiver</a>< <a class="el" href="a00225.html#28c06a61dbad153f2e989efbf43016c5">output_type</a> > &r)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Adds a new successor.  <a href="#cd2ef588b0ee6eb8d23ee169e00c73a9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html#415428db02e74a479fb056a8ed72ba53">remove_successor</a> (<a class="el" href="a00277.html">receiver</a>< <a class="el" href="a00225.html#28c06a61dbad153f2e989efbf43016c5">output_type</a> > &r)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Removes a successor.  <a href="#415428db02e74a479fb056a8ed72ba53"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html#b68bdec127703dbfb2d93d685abbfd67">try_get</a> (T &v)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Request an item from the <a class="el" href="a00225.html">buffer_node</a>.  <a href="#b68bdec127703dbfb2d93d685abbfd67"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html#11ebad4c72082a1a03ecccd3afab4ae2">try_reserve</a> (T &v)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Reserves an item.  <a href="#11ebad4c72082a1a03ecccd3afab4ae2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html#435e29a66f0719d4822a0a8dc78a0405">try_release</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Release a reserved item.  <a href="#435e29a66f0719d4822a0a8dc78a0405"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html#46b8b257a97e2192a2b11743279e8ffe">try_consume</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Consumes a reserved item.  <a href="#46b8b257a97e2192a2b11743279e8ffe"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html#f74899ffb67687998168ad428f586b64">try_put</a> (T t)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Receive an item.  <a href="#f74899ffb67687998168ad428f586b64"></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="7650a28da77a86b18e91510023475192"></a><!-- doxytag: member="tbb::buffer_node::size_type" ref="7650a28da77a86b18e91510023475192" 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="ad0e26a3248e66762998ff71b759df9f"></a><!-- doxytag: member="tbb::buffer_node::item_type" ref="ad0e26a3248e66762998ff71b759df9f" args="" -->
+typedef std::pair< T, bool > </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="4560fc3c7118b2520aa1bc5f62dd60e036bd5780cc2e6c71263d7926c5e631a7"></a><!-- doxytag: member="tbb::buffer_node::reg_succ" ref="4560fc3c7118b2520aa1bc5f62dd60e036bd5780cc2e6c71263d7926c5e631a7" 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="4560fc3c7118b2520aa1bc5f62dd60e0b1c420e37f5e6aa824a5c553352485cb"></a><!-- doxytag: member="tbb::buffer_node::rem_succ" ref="4560fc3c7118b2520aa1bc5f62dd60e0b1c420e37f5e6aa824a5c553352485cb" 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="4560fc3c7118b2520aa1bc5f62dd60e05c53e265b1aab0b49efbe9be4963a6fe"></a><!-- doxytag: member="tbb::buffer_node::req_item" ref="4560fc3c7118b2520aa1bc5f62dd60e05c53e265b1aab0b49efbe9be4963a6fe" 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="4560fc3c7118b2520aa1bc5f62dd60e021f5de223fc34b414c41c8f2a4c2c376"></a><!-- doxytag: member="tbb::buffer_node::res_item" ref="4560fc3c7118b2520aa1bc5f62dd60e021f5de223fc34b414c41c8f2a4c2c376" 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="4560fc3c7118b2520aa1bc5f62dd60e012dafb1a5c2d5073b11845440100e3bf"></a><!-- doxytag: member="tbb::buffer_node::rel_res" ref="4560fc3c7118b2520aa1bc5f62dd60e012dafb1a5c2d5073b11845440100e3bf" 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="4560fc3c7118b2520aa1bc5f62dd60e0b1a6a5c39512d70a4458dabbbf677267"></a><!-- doxytag: member="tbb::buffer_node::con_res" ref="4560fc3c7118b2520aa1bc5f62dd60e0b1a6a5c39512d70a4458dabbbf677267" 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="4560fc3c7118b2520aa1bc5f62dd60e021a9fe988ff484f1033a739cde97eb9d"></a><!-- doxytag: member="tbb::buffer_node::put_item" ref="4560fc3c7118b2520aa1bc5f62dd60e021a9fe988ff484f1033a739cde97eb9d" 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="4560fc3c7118b2520aa1bc5f62dd60e0ec6665fcffc5a6c0f658baad182f52c5"></a><!-- doxytag: member="tbb::buffer_node::try_fwd" ref="4560fc3c7118b2520aa1bc5f62dd60e0ec6665fcffc5a6c0f658baad182f52c5" 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="5d9b0dd3eb6f5fb930ef9c831fc2687b94f11e3700304f854a3981371820c9bf"></a><!-- doxytag: member="tbb::buffer_node::WAIT" ref="5d9b0dd3eb6f5fb930ef9c831fc2687b94f11e3700304f854a3981371820c9bf" 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="5d9b0dd3eb6f5fb930ef9c831fc2687bca6c186a8b172a894745873277f103d2"></a><!-- doxytag: member="tbb::buffer_node::SUCCEEDED" ref="5d9b0dd3eb6f5fb930ef9c831fc2687bca6c186a8b172a894745873277f103d2" 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="5d9b0dd3eb6f5fb930ef9c831fc2687b1f741448d944a5fbe12628a89ffab06f"></a><!-- doxytag: member="tbb::buffer_node::FAILED" ref="5d9b0dd3eb6f5fb930ef9c831fc2687b1f741448d944a5fbe12628a89ffab06f" 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="fe41bdb6b830ffec654561414a6f96f9"></a><!-- doxytag: member="tbb::buffer_node::handle_operations" ref="fe41bdb6b830ffec654561414a6f96f9" 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="3a31b3b55bee417de3af09c7b45b9ad6"></a><!-- doxytag: member="tbb::buffer_node::forward" ref="3a31b3b55bee417de3af09c7b45b9ad6" args="()" -->
+virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html#3a31b3b55bee417de3af09c7b45b9ad6">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="017f16c8d6e0fb65d0d3a61aec86b3e2"></a><!-- doxytag: member="tbb::buffer_node::internal_reg_succ" ref="017f16c8d6e0fb65d0d3a61aec86b3e2" args="(buffer_operation *op)" -->
+virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html#017f16c8d6e0fb65d0d3a61aec86b3e2">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="a75f731cf9fc93f7487eb72de3fcf7b1"></a><!-- doxytag: member="tbb::buffer_node::internal_rem_succ" ref="a75f731cf9fc93f7487eb72de3fcf7b1" args="(buffer_operation *op)" -->
+virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html#a75f731cf9fc93f7487eb72de3fcf7b1">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="a3cb61d8a98bc4bc860b1cb04944b4f8"></a><!-- doxytag: member="tbb::buffer_node::internal_forward" ref="a3cb61d8a98bc4bc860b1cb04944b4f8" args="(buffer_operation *op)" -->
+virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html#a3cb61d8a98bc4bc860b1cb04944b4f8">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="fac0c0e9be7255747118f126dd9f6d39"></a><!-- doxytag: member="tbb::buffer_node::internal_push" ref="fac0c0e9be7255747118f126dd9f6d39" 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="e4cf171d5bcf707786ef6a51977e2601"></a><!-- doxytag: member="tbb::buffer_node::internal_pop" ref="e4cf171d5bcf707786ef6a51977e2601" 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="263221e903d306c9b411c87a2f558a02"></a><!-- doxytag: member="tbb::buffer_node::internal_reserve" ref="263221e903d306c9b411c87a2f558a02" 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="81321b083181f57543c8ce3f61da9777"></a><!-- doxytag: member="tbb::buffer_node::internal_consume" ref="81321b083181f57543c8ce3f61da9777" 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="153ec83b01b797aabc13599c57effc01"></a><!-- doxytag: member="tbb::buffer_node::internal_release" ref="153ec83b01b797aabc13599c57effc01" args="(buffer_operation *op)" -->
+virtual void </td><td class="memItemRight" valign="bottom"><b>internal_release</b> (buffer_operation *op)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3ec9d33aa9f1e9292d5952e3eb477ca1"></a><!-- doxytag: member="tbb::buffer_node::grow_my_array" ref="3ec9d33aa9f1e9292d5952e3eb477ca1" args="(size_t minimum_size)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html#3ec9d33aa9f1e9292d5952e3eb477ca1">grow_my_array</a> (size_t minimum_size)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Grows the internal array. <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="3cd68b585af1cba2311322a1cc008f0f"></a><!-- doxytag: member="tbb::buffer_node::my_successors" ref="3cd68b585af1cba2311322a1cc008f0f" args="" -->
+internal::round_robin_cache<<br>
+ T, <a class="el" href="a00262.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="a4cb1a21519885a4709af34e889d7cc7"></a><!-- doxytag: member="tbb::buffer_node::my_parent" ref="a4cb1a21519885a4709af34e889d7cc7" args="" -->
+<a class="el" href="a00291.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="c746e9fd9b31e8554ac8edd4a8a4a55e"></a><!-- doxytag: member="tbb::buffer_node::my_array" ref="c746e9fd9b31e8554ac8edd4a8a4a55e" args="" -->
+item_type * </td><td class="memItemRight" valign="bottom"><b>my_array</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7218ccd1547224f4025b43b66f00072f"></a><!-- doxytag: member="tbb::buffer_node::my_array_size" ref="7218ccd1547224f4025b43b66f00072f" args="" -->
+size_type </td><td class="memItemRight" valign="bottom"><b>my_array_size</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="41e23e9ab9deb975d1abaf62dd8f28e1"></a><!-- doxytag: member="tbb::buffer_node::my_head" ref="41e23e9ab9deb975d1abaf62dd8f28e1" args="" -->
+size_type </td><td class="memItemRight" valign="bottom"><b>my_head</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bf042c91faf597e80867449bff116037"></a><!-- doxytag: member="tbb::buffer_node::my_tail" ref="bf042c91faf597e80867449bff116037" args="" -->
+size_type </td><td class="memItemRight" valign="bottom"><b>my_tail</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="26778eaf1e96a93141f704eb66a40a27"></a><!-- doxytag: member="tbb::buffer_node::my_mutex" ref="26778eaf1e96a93141f704eb66a40a27" args="" -->
+<a class="el" href="a00286.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="4014dadf54bae347d8b72201abdac680"></a><!-- doxytag: member="tbb::buffer_node::my_reserved" ref="4014dadf54bae347d8b72201abdac680" args="" -->
+bool </td><td class="memItemRight" valign="bottom"><b>my_reserved</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2278ecdc5a18582a2b50759b16430480"></a><!-- doxytag: member="tbb::buffer_node::my_reserved_id" ref="2278ecdc5a18582a2b50759b16430480" args="" -->
+size_type </td><td class="memItemRight" valign="bottom"><b>my_reserved_id</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e8ab9d2d97b1fd58aec401243a1dc4cd"></a><!-- doxytag: member="tbb::buffer_node::forwarder_busy" ref="e8ab9d2d97b1fd58aec401243a1dc4cd" 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="480281137c9d1ecfbb2e2cdacdafd4f5"></a><!-- doxytag: member="tbb::buffer_node::my_aggregator" ref="480281137c9d1ecfbb2e2cdacdafd4f5" args="" -->
+internal::aggregator< my_functor_t,<br>
+ buffer_operation > </td><td class="memItemRight" valign="bottom"><b>my_aggregator</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="f4390dbfe8bf638d6b279bd67e687a8c"></a><!-- doxytag: member="tbb::buffer_node::initial_buffer_size" ref="f4390dbfe8bf638d6b279bd67e687a8c" args="" -->
+static const size_type </td><td class="memItemRight" valign="bottom"><b>initial_buffer_size</b> = 4</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="b8d43e5c9a739e9493cf9581ac80a363"></a><!-- doxytag: member="tbb::buffer_node::internal::forward_task< buffer_node< T > >" ref="b8d43e5c9a739e9493cf9581ac80a363" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>internal::forward_task< buffer_node< T > ></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>
+
+<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><br>
+ class tbb::buffer_node< T ></h3>
+
+Forwards messages in arbitrary order. 
+<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="cd2ef588b0ee6eb8d23ee169e00c73a9"></a><!-- doxytag: member="tbb::buffer_node::register_successor" ref="cd2ef588b0ee6eb8d23ee169e00c73a9" 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 <a class="el" href="a00225.html">tbb::buffer_node</a>< T >::register_successor           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00277.html">receiver</a>< <a class="el" href="a00225.html#28c06a61dbad153f2e989efbf43016c5">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="a00282.html#be48ac70174cf8e08e2b0279cd6343d3">tbb::sender< T ></a>.
+</div>
+</div><p>
+<a class="anchor" name="415428db02e74a479fb056a8ed72ba53"></a><!-- doxytag: member="tbb::buffer_node::remove_successor" ref="415428db02e74a479fb056a8ed72ba53" 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 <a class="el" href="a00225.html">tbb::buffer_node</a>< T >::remove_successor           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00277.html">receiver</a>< <a class="el" href="a00225.html#28c06a61dbad153f2e989efbf43016c5">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="a00282.html#3f345427e812e8741370308ff88f30bf">tbb::sender< T ></a>.
+</div>
+</div><p>
+<a class="anchor" name="46b8b257a97e2192a2b11743279e8ffe"></a><!-- doxytag: member="tbb::buffer_node::try_consume" ref="46b8b257a97e2192a2b11743279e8ffe" 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="a00225.html">tbb::buffer_node</a>< T >::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="a00282.html#add46946c4c7330422733432e4032fac">tbb::sender< T ></a>.
+</div>
+</div><p>
+<a class="anchor" name="b68bdec127703dbfb2d93d685abbfd67"></a><!-- doxytag: member="tbb::buffer_node::try_get" ref="b68bdec127703dbfb2d93d685abbfd67" args="(T &v)" -->
+<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="a00225.html">tbb::buffer_node</a>< T >::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="a00225.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="a00282.html#bf8c9235810354f3353a899c982645de">tbb::sender< T ></a>.
+</div>
+</div><p>
+<a class="anchor" name="f74899ffb67687998168ad428f586b64"></a><!-- doxytag: member="tbb::buffer_node::try_put" ref="f74899ffb67687998168ad428f586b64" args="(T t)" -->
+<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="a00225.html">tbb::buffer_node</a>< T >::try_put           </td>
+          <td>(</td>
+          <td class="paramtype">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="a00277.html#6e5422b03b4570138f227b3d5d0073b8">tbb::receiver< T ></a>.
+</div>
+</div><p>
+<a class="anchor" name="435e29a66f0719d4822a0a8dc78a0405"></a><!-- doxytag: member="tbb::buffer_node::try_release" ref="435e29a66f0719d4822a0a8dc78a0405" 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="a00225.html">tbb::buffer_node</a>< T >::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="a00282.html#28c41df1c0c7ed485b4a691ec8f30098">tbb::sender< T ></a>.
+</div>
+</div><p>
+<a class="anchor" name="11ebad4c72082a1a03ecccd3afab4ae2"></a><!-- doxytag: member="tbb::buffer_node::try_reserve" ref="11ebad4c72082a1a03ecccd3afab4ae2" args="(T &v)" -->
+<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="a00225.html">tbb::buffer_node</a>< T >::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="a00282.html#3506c7275aeeb2fc3ba5d5f10ee0adac">tbb::sender< T ></a>.
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00466.html">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/a00225.png b/doc/html/a00225.png
new file mode 100644
index 0000000..db5c56e
Binary files /dev/null and b/doc/html/a00225.png differ
diff --git a/doc/html/a00226.html b/doc/html/a00226.html
new file mode 100644
index 0000000..80abee9
--- /dev/null
+++ b/doc/html/a00226.html
@@ -0,0 +1,114 @@
+<!DOCTYPE HTML 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="a00362.html">tbb</a>::<a class="el" href="a00226.html">cache_aligned_allocator</a></div>
+<h1>tbb::cache_aligned_allocator< T > Class Template Reference<br>
+<small>
+[<a class="el" href="a00373.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="a00421.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="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="a00226.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="a00226.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="a00226.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="a00226.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="a00226.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="a00226.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="a00226.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="a00421.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/a00227.html b/doc/html/a00227.html
new file mode 100644
index 0000000..039cc2c
--- /dev/null
+++ b/doc/html/a00227.html
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML 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="a00362.html">tbb</a>::<a class="el" href="a00227.html">cache_aligned_allocator< void ></a></div>
+<h1>tbb::cache_aligned_allocator< void > Class Template Reference<br>
+<small>
+[<a class="el" href="a00373.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="a00421.html">cache_aligned_allocator.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 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="a00421.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/a00228.html b/doc/html/a00228.html
new file mode 100644
index 0000000..90a926d
--- /dev/null
+++ b/doc/html/a00228.html
@@ -0,0 +1,157 @@
+<!DOCTYPE HTML 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="a00362.html">tbb</a>::<a class="el" href="a00228.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="a00228.png" usemap="#tbb::captured_exception_map" border="0" alt=""></center>
+<map name="tbb::captured_exception_map">
+<area href="a00298.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="a00228.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="a00228.html">captured_exception</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00228.html">captured_exception</a> &src)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00228.html">captured_exception</a> *__TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.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="a00228.html#93d875d3555502ff6f18513525de204c">destroy</a> ()  throw ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroys objects created by the <a class="el" href="a00228.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="a00228.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="a00228.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="a00228.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="a00228.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="a00298.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="a00228.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="a00298.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="a00228.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="a00298.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="a00298.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/a00152.png b/doc/html/a00228.png
similarity index 100%
rename from doc/html/a00152.png
rename to doc/html/a00228.png
diff --git a/doc/html/a00229.html b/doc/html/a00229.html
new file mode 100644
index 0000000..a728010
--- /dev/null
+++ b/doc/html/a00229.html
@@ -0,0 +1,84 @@
+<!DOCTYPE HTML 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="a00362.html">tbb</a>::<a class="el" href="a00229.html">combinable</a></div>
+<h1>tbb::combinable< T > Class Template Reference<br>
+<small>
+[<a class="el" href="a00372.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="a00423.html">combinable.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 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="a00229.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="a00229.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="a00229.html">combinable</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00229.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="a00423.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/a00230.html b/doc/html/a00230.html
new file mode 100644
index 0000000..ca39e2d
--- /dev/null
+++ b/doc/html/a00230.html
@@ -0,0 +1,306 @@
+<!DOCTYPE HTML 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="a00362.html">tbb</a>::<a class="el" href="a00230.html">concurrent_bounded_queue</a></div>
+<h1>tbb::concurrent_bounded_queue< T, A > Class Template Reference<br>
+<small>
+[<a class="el" href="a00372.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="a00436.html">concurrent_queue.h</a>></code>
+<p>
+<p>Inheritance diagram for tbb::concurrent_bounded_queue< T, A >:
+<p><center><img src="a00230.png" usemap="#tbb::concurrent_bounded_queue< T, A >_map" border="0" alt=""></center>
+<map name="tbb::concurrent_bounded_queue< T, A >_map">
+<area href="a00237.html" alt="tbb::deprecated::concurrent_queue< T, A >" shape="rect" coords="0,56,257,80">
+</map>
+<a href="a00025.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="a00230.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="a00230.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="a00230.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="a00230.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="a00230.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="a00230.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="a00230.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="a00230.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="a00230.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a> (const <a class="el" href="a00230.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> &a=<a class="el" href="a00230.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="a00230.html#7b7fb414d2eaa8a7f5d68fc4cd63ac50">concurrent_bounded_queue</a> (const <a class="el" href="a00230.html">concurrent_bounded_queue</a> &src, const <a class="el" href="a00230.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> &a=<a class="el" href="a00230.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="a00230.html#a5e04dcd7db9fd9b583b4e7df832246a">concurrent_bounded_queue</a> (InputIterator begin, InputIterator end, const <a class="el" href="a00230.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> &a=<a class="el" href="a00230.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="a00230.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="a00230.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="a00230.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="a00230.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="a00230.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="a00230.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.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="a00230.html#f64924f2ee9225c368a270fc3c394db9">empty</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Equivalent to <a class="el" href="a00230.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="a00230.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.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="a00230.html#f3c6c934f85fd02aedbc83a16943193b">set_capacity</a> (<a class="el" href="a00230.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="a00230.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.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="a00230.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="a00230.html">tbb::concurrent_bounded_queue</a>< T, A >::<a class="el" href="a00230.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="a00230.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="a00230.html">tbb::concurrent_bounded_queue</a>< T, A >::set_capacity           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00230.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="a00230.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> <a class="el" href="a00230.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="a00230.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="a00230.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="a00230.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="a00436.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/a00154.png b/doc/html/a00230.png
similarity index 100%
rename from doc/html/a00154.png
rename to doc/html/a00230.png
diff --git a/doc/html/a00231.html b/doc/html/a00231.html
new file mode 100644
index 0000000..ba8315f
--- /dev/null
+++ b/doc/html/a00231.html
@@ -0,0 +1,646 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::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="a00362.html">tbb</a>::<b>interface5</b>::<a class="el" href="a00231.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="a00372.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="a00424.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 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="a00231.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="a00231.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="a00231.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="a00231.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="a00231.html#6fb14710893308fb47aaeee55ee30dc3">concurrent_hash_map</a> (const <a class="el" href="a00231.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="a00231.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="a00231.html">concurrent_hash_map</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#088d1aaccc816884a49e38f7065622c8">operator=</a> (const <a class="el" href="a00231.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="a00231.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="a00231.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="a00231.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="a00231.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="a00231.html#61ff2e5bb44e5469366fd5295e5d0ebe">empty</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">True if <a class="el" href="a00231.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="a00231.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="a00231.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="a00231.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="a00231.html#076f8d9e16110aac5f558777aa744eb6">swap</a> (<a class="el" href="a00231.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="a00231.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="a00231.html#2afcc33dade7bb24e008d60c0df38230">find</a> (<a class="el" href="a00234.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="a00231.html#7bc475d1968f7f0af3d736d7e8a0d7df">find</a> (<a class="el" href="a00232.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="a00231.html#47fe0e60151a9bd7a444db827772a4e6">insert</a> (<a class="el" href="a00234.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="a00231.html#54e0955ecd11575b4c07166838a72893">insert</a> (<a class="el" href="a00232.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="a00231.html#091efd2d12fdad4fe9e54d9629a9dfc3">insert</a> (<a class="el" href="a00234.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="a00231.html#39183d78d6e8425917555ab542ab92de">insert</a> (<a class="el" href="a00232.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="a00231.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="a00231.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="a00231.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="a00231.html#e698ef3d70b2d1a29a7a5551784d3653">erase</a> (<a class="el" href="a00234.html">const_accessor</a> &item_accessor)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Erase item by <a class="el" href="a00234.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="a00231.html#5f12d150d421420965db07368666a84f">erase</a> (<a class="el" href="a00232.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="a00231.html#3f3413264a99174a224ef96f6c4ea769">lookup</a> (bool op_insert, const Key &key, const T *t, <a class="el" href="a00234.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="a00231.html#0c964214eb38f54603aa75fdff6d2709">exclude</a> (<a class="el" href="a00234.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="a00231.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="a00231.html#72c9c9e9655fcf096f5f0ed9c8ba6669">internal_copy</a> (const <a class="el" href="a00231.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="a00231.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="a00232.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="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="a00233.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="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">const_accessor</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Combines data access, locking, and garbage collection.  <a href="a00234.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="a00231.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="a00231.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="a00231.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="a00231.html#47fe0e60151a9bd7a444db827772a4e6">insert()</a> methods</li><li>Added <a class="el" href="a00231.html#6cbcacb4a256a85bf89576c101373ca7">get_allocator()</a></li><li>Added <a class="el" href="a00231.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="a00231.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::erase           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00232.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="a00231.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::erase           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00234.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="a00234.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="a00231.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="a00231.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::find           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00232.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="a00231.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::find           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00234.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="a00231.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="a00231.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::insert           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00232.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="a00231.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::insert           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00234.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="a00231.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::insert           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00232.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="a00231.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::insert           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00234.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="a00231.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="a00231.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="a00231.html#2afcc33dade7bb24e008d60c0df38230">find()</a> and <a class="el" href="a00231.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="a00424.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/a00232.html b/doc/html/a00232.html
new file mode 100644
index 0000000..b32b01b
--- /dev/null
+++ b/doc/html/a00232.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::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="a00362.html">tbb</a>::<b>interface5</b>::<a class="el" href="a00231.html">concurrent_hash_map</a>::<a class="el" href="a00232.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="a00424.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="a00232.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="a00234.html" alt="tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor" shape="rect" coords="0,0,530,24">
+</map>
+<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="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="a00232.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="a00232.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="a00232.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="a00424.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/a00232.png b/doc/html/a00232.png
new file mode 100644
index 0000000..9fd6a57
Binary files /dev/null and b/doc/html/a00232.png differ
diff --git a/doc/html/a00233.html b/doc/html/a00233.html
new file mode 100644
index 0000000..797a6fb
--- /dev/null
+++ b/doc/html/a00233.html
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML 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="a00362.html">tbb</a>::<b>interface5</b>::<a class="el" href="a00231.html">concurrent_hash_map</a>::<a class="el" href="a00233.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="a00424.html">concurrent_hash_map.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>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="a00231.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="a00233.html#d11c77f4d70a94d4fb344492bbf18007">acquire</a> (<a class="el" href="a00231.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="a00233.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="a00233.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="a00424.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/a00234.html b/doc/html/a00234.html
new file mode 100644
index 0000000..769ef55
--- /dev/null
+++ b/doc/html/a00234.html
@@ -0,0 +1,102 @@
+<!DOCTYPE HTML 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="a00362.html">tbb</a>::<b>interface5</b>::<a class="el" href="a00231.html">concurrent_hash_map</a>::<a class="el" href="a00234.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="a00424.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="a00234.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="a00232.html" alt="tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor" shape="rect" coords="0,56,530,80">
+</map>
+<a href="a00018.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="a00234.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="a00234.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="a00234.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="a00234.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="a00234.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="a00234.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="a00234.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="a00424.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/a00234.png b/doc/html/a00234.png
new file mode 100644
index 0000000..f3e6df6
Binary files /dev/null and b/doc/html/a00234.png differ
diff --git a/doc/html/a00235.html b/doc/html/a00235.html
new file mode 100644
index 0000000..5091712
--- /dev/null
+++ b/doc/html/a00235.html
@@ -0,0 +1,303 @@
+<!DOCTYPE HTML 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="a00362.html">tbb</a>::<b>interface5</b>::<a class="el" href="a00235.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="a00433.html">concurrent_priority_queue.h</a>></code>
+<p>
+<a href="a00020.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public 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="a00235.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="a00235.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="a00235.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="a00235.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="a00235.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="a00235.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="a00235.html#eefa40599afe00ea393897d8f5662e65">concurrent_priority_queue</a> (const <a class="el" href="a00235.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a> &a=<a class="el" href="a00235.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a>())</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructs a new <a class="el" href="a00235.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="a00235.html#4555b4a55415a70024c4004b51e9f385">concurrent_priority_queue</a> (<a class="el" href="a00235.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> init_capacity, const <a class="el" href="a00235.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a> &a=<a class="el" href="a00235.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a>())</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructs a new <a class="el" href="a00235.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="a00235.html#9147cb4207017c260a0c3929c12cd40f">concurrent_priority_queue</a> (InputIterator begin, InputIterator end, const <a class="el" href="a00235.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a> &a=<a class="el" href="a00235.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="a00235.html#509419e320f200456d89dc54a65140b3">concurrent_priority_queue</a> (const <a class="el" href="a00235.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"><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)" -->
+ </td><td class="memItemRight" valign="bottom"><b>concurrent_priority_queue</b> (const <a class="el" href="a00235.html">concurrent_priority_queue</a> &src, const <a class="el" href="a00235.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a> &a)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00235.html">concurrent_priority_queue</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#2ab7f7808891027ac0f0f5b3a4be51e9">operator=</a> (const <a class="el" href="a00235.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="a00235.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="a00235.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.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"><a class="el" href="a00235.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#e5d6a0aca1579ecebb716bbe53514963">capacity</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns the current capacity (i.e. allocated storage) of the queue.  <a href="#e5d6a0aca1579ecebb716bbe53514963"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d905af7b8f6defff562f5ae9c3275763"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::push" ref="d905af7b8f6defff562f5ae9c3275763" args="(const_reference elem)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#d905af7b8f6defff562f5ae9c3275763">push</a> (<a class="el" href="a00235.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. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#e036461a29cc40902a2bb79abf9f5146">try_pop</a> (<a class="el" href="a00235.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"><a class="anchor" name="e7c59f011c4cca83ff210aefe7c9d868"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::reserve" ref="e7c59f011c4cca83ff210aefe7c9d868" args="(size_type new_cap)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#e7c59f011c4cca83ff210aefe7c9d868">reserve</a> (<a class="el" href="a00235.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> new_cap)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">If current capacity is less than new_cap, increases capacity to new_cap. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.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"><a class="anchor" name="28d113288fc7e0c04c9053ec7de61368"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::shrink_to_fit" ref="28d113288fc7e0c04c9053ec7de61368" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#28d113288fc7e0c04c9053ec7de61368">shrink_to_fit</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Shrink queue capacity to current contents; not thread-safe. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0ecdc6a04aa259374425d424ca2a6082"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::swap" ref="0ecdc6a04aa259374425d424ca2a6082" args="(concurrent_priority_queue &q)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#0ecdc6a04aa259374425d424ca2a6082">swap</a> (<a class="el" href="a00235.html">concurrent_priority_queue</a> &q)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Swap this queue with another; not thread-safe. <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="a00235.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.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="a00235.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::<a class="el" href="a00235.html">concurrent_priority_queue</a>           </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="a00235.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>
+State of this queue may not reflect results of pending operations on the copied queue. 
+</div>
+</div><p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="e5d6a0aca1579ecebb716bbe53514963"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::capacity" ref="e5d6a0aca1579ecebb716bbe53514963" 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="a00235.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> <a class="el" href="a00235.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::capacity           </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 capacity (i.e. allocated storage) of the queue. 
+<p>
+Returned value may not reflect results of pending operations. 
+</div>
+</div><p>
+<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="a00235.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>
+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="a00235.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. 
+</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="a00235.html">concurrent_priority_queue</a>& <a class="el" href="a00235.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::operator=           </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="a00235.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>
+State of this queue may not reflect results of pending operations on the copied queue. 
+</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="a00235.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> <a class="el" href="a00235.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. 
+</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="a00235.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::try_pop           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00235.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. 
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00433.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/a00236.html b/doc/html/a00236.html
new file mode 100644
index 0000000..dcd1fc8
--- /dev/null
+++ b/doc/html/a00236.html
@@ -0,0 +1,169 @@
+<!DOCTYPE HTML 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="a00362.html">tbb</a>::<a class="el" href="a00370.html">strict_ppl</a>::<a class="el" href="a00236.html">concurrent_queue</a></div>
+<h1>tbb::strict_ppl::concurrent_queue< T, A > Class Template Reference<br>
+<small>
+[<a class="el" href="a00372.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="a00436.html">concurrent_queue.h</a>></code>
+<p>
+<a href="a00024.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="a00236.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="a00236.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="a00236.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="a00236.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="a00236.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="a00236.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="a00236.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="a00236.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="a00236.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a> (const <a class="el" href="a00236.html#5a3956341728eaa558d8827063718cac">allocator_type</a> &a=<a class="el" href="a00236.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="a00236.html#25209656c84f2f9b030e2f9162713341">concurrent_queue</a> (InputIterator begin, InputIterator end, const <a class="el" href="a00236.html#5a3956341728eaa558d8827063718cac">allocator_type</a> &a=<a class="el" href="a00236.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="a00236.html#8a6b98ea11a867db8ac868f0113ca429">concurrent_queue</a> (const <a class="el" href="a00236.html">concurrent_queue</a> &src, const <a class="el" href="a00236.html#5a3956341728eaa558d8827063718cac">allocator_type</a> &a=<a class="el" href="a00236.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="a00236.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="a00236.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="a00236.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="a00236.html#8fc30e93f8342a1960357f71e4fe8a2b">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.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="a00236.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="a00236.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="a00236.html#5a3956341728eaa558d8827063718cac">allocator_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.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="a00236.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="a00436.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/a00237.html b/doc/html/a00237.html
new file mode 100644
index 0000000..8c3ddb9
--- /dev/null
+++ b/doc/html/a00237.html
@@ -0,0 +1,154 @@
+<!DOCTYPE HTML 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>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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="a00362.html">tbb</a>::<b>deprecated</b>::<a class="el" href="a00237.html">concurrent_queue</a></div>
+<h1>tbb::deprecated::concurrent_queue< T, A > Class Template Reference<br>
+<small>
+[<a class="el" href="a00372.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="a00436.html">concurrent_queue.h</a>></code>
+<p>
+<p>Inheritance diagram for tbb::deprecated::concurrent_queue< T, A >:
+<p><center><img src="a00237.png" usemap="#tbb::deprecated::concurrent_queue< T, A >_map" border="0" alt=""></center>
+<map name="tbb::deprecated::concurrent_queue< T, A >_map">
+<area href="a00230.html" alt="tbb::concurrent_bounded_queue< T, A >" shape="rect" coords="0,0,257,24">
+</map>
+<a href="a00027.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8861a9cdf232a20b5f2569754a281871"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::iterator" ref="8861a9cdf232a20b5f2569754a281871" args="" -->
+typedef <a class="el" href="a00230.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="a00230.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="a00237.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="a00237.html#fc092b9082f233482f3513fc3bb670f7">concurrent_queue</a> (const <a class="el" href="a00237.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="a00237.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="a00237.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="a00237.html#48da3536245318af6cb5fd58bac78039">pop_if_present</a> (T &destination)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Attempt to dequeue an item from head of queue.  <a href="#48da3536245318af6cb5fd58bac78039"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ed7202cd273ae36463e6ac57e9472670"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::begin" ref="ed7202cd273ae36463e6ac57e9472670" args="()" -->
+iterator </td><td class="memItemRight" valign="bottom"><b>begin</b> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="35fbb0d7e135545eb1daec2b4ae894cd"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::end" ref="35fbb0d7e135545eb1daec2b4ae894cd" args="()" -->
+iterator </td><td class="memItemRight" valign="bottom"><b>end</b> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="62f31fe653e1158e64ddb0e163d0335c"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::begin" ref="62f31fe653e1158e64ddb0e163d0335c" args="() const " -->
+const_iterator </td><td class="memItemRight" valign="bottom"><b>begin</b> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3d42ddc4a6fe42350750a930302863d1"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::end" ref="3d42ddc4a6fe42350750a930302863d1" args="() const " -->
+const_iterator </td><td class="memItemRight" valign="bottom"><b>end</b> () const </td></tr>
+
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="05bffad9626d51abbd4bb82ae2a1cceb"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::internal::concurrent_queue_iterator" ref="05bffad9626d51abbd4bb82ae2a1cceb" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>internal::concurrent_queue_iterator</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<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="a00237.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="a00230.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="a00237.html">tbb::deprecated::concurrent_queue</a>< T, A >::push_if_not_full           </td>
+          <td>(</td>
+          <td class="paramtype">const T & </td>
+          <td class="paramname"> <em>source</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Enqueue an item at tail of queue if queue is not already full. 
+<p>
+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="a00436.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/a00160.png b/doc/html/a00237.png
similarity index 100%
rename from doc/html/a00160.png
rename to doc/html/a00237.png
diff --git a/doc/html/a00238.html b/doc/html/a00238.html
new file mode 100644
index 0000000..fccb7a7
--- /dev/null
+++ b/doc/html/a00238.html
@@ -0,0 +1,596 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::concurrent_vector< T, A > Class Template Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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="a00362.html">tbb</a>::<a class="el" href="a00238.html">concurrent_vector</a></div>
+<h1>tbb::concurrent_vector< T, A > Class Template Reference<br>
+<small>
+[<a class="el" href="a00372.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="a00442.html">concurrent_vector.h</a>></code>
+<p>
+<a href="a00032.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public 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="a00238.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="a00238.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="a00238.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="a00238.html#dd8a200b99a8088435a37934b58fe335">concurrent_vector</a> (const <a class="el" href="a00238.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="a00238.html#64432f13f7b29bfe4acfb5568f34f3a8">concurrent_vector</a> (const <a class="el" href="a00238.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="a00238.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="a00238.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="a00238.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="a00238.html">concurrent_vector</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00238.html#691f0f3cda3e489c37a657016e375eaf">operator=</a> (const <a class="el" href="a00238.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="a00238.html">concurrent_vector</a> & </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00238.html#19f4ab88a01b0fd056af3bba463e7bd6">operator=</a> (const <a class="el" href="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.html#1693d1da41b1a8235871be9c6633be35">compact</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">An alias for <a class="el" href="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.html#96c9c4bd968ed3edb8dd276854d2dae0">swap</a> (<a class="el" href="a00238.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="a00238.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="a00238.html#da2444b28bb840d38f60d0030333a5fc">~concurrent_vector</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Clear and destroy vector. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bb5ae659871478f1f5c68039e1273e12"></a><!-- doxytag: member="tbb::concurrent_vector::internal_vector_base" ref="bb5ae659871478f1f5c68039e1273e12" args="() const " -->
+const internal::concurrent_vector_base_v3 & </td><td class="memItemRight" valign="bottom"><b>internal_vector_base</b> () const </td></tr>
+
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="30086a58bff79a91103723be20916b96"></a><!-- doxytag: member="tbb::concurrent_vector::internal::vector_iterator" ref="30086a58bff79a91103723be20916b96" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>internal::vector_iterator</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>generic_range_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>internal_loop_guide</b></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Exception-aware helper class for filling a segment by exception-danger operators of user class. <br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template<typename T, class A><br>
+ class tbb::concurrent_vector< T, A ></h3>
+
+Concurrent vector container. 
+<p>
+<a class="el" href="a00238.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="a00238.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="a00238.html#715fe313c4a9c22731cc404dd80c9ec9">concurrent_vector::size()</a> and <a class="el" href="a00238.html#47fe588214dd5fa06ab6e8ab78d83874">grow_to_at_least()</a> methods to assure elements are allocated.</li><li>Methods <a class="el" href="a00238.html#c0b51160e5a764982ec97a455f94f2c6">end()</a>/rbegin()/back() are partly thread-safe since they use <a class="el" href="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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. 
+<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="a00442.html">concurrent_vector.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
new file mode 100644
index 0000000..76b45e0
--- /dev/null
+++ b/doc/html/a00239.html
@@ -0,0 +1,46 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::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>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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="a00362.html">tbb</a>::<a class="el" href="a00239.html">continue_msg</a></div>
+<h1>tbb::continue_msg Class Reference</h1><!-- doxytag: class="tbb::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="a00466.html">graph.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>
+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="a00466.html">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/a00240.html b/doc/html/a00240.html
new file mode 100644
index 0000000..91b7c12
--- /dev/null
+++ b/doc/html/a00240.html
@@ -0,0 +1,71 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::continue_node 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="a00362.html">tbb</a>::<a class="el" href="a00240.html">continue_node</a></div>
+<h1>tbb::continue_node Class Reference</h1><!-- doxytag: class="tbb::continue_node" --><!-- doxytag: inherits="tbb::executable_node" -->Broadcasts completion message when it receives completion messages from all predecessors. Then resets.  
+<a href="#_details">More...</a>
+<p>
+<code>#include <<a class="el" href="a00466.html">graph.h</a>></code>
+<p>
+<p>Inheritance diagram for tbb::continue_node:
+<p><center><img src="a00240.png" usemap="#tbb::continue_node_map" border="0" alt=""></center>
+<map name="tbb::continue_node_map">
+<area href="a00244.html" alt="tbb::executable_node< Output >" shape="rect" coords="0,56,192,80">
+<area href="a00251.html" alt="tbb::graph_node" shape="rect" coords="0,0,192,24">
+</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="5354c2c718362e50e73dd58d66f38d21"></a><!-- doxytag: member="tbb::continue_node::input_type" ref="5354c2c718362e50e73dd58d66f38d21" args="" -->
+typedef <a class="el" href="a00239.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="629da75fac31aa16474edbd7bbc403d4"></a><!-- doxytag: member="tbb::continue_node::output_type" ref="629da75fac31aa16474edbd7bbc403d4" args="" -->
+typedef <a class="el" href="a00239.html">continue_msg</a> </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="315d3789ba8da7d1d0f2f5144d579fe3"></a><!-- doxytag: member="tbb::continue_node::predecessor_type" ref="315d3789ba8da7d1d0f2f5144d579fe3" args="" -->
+typedef <a class="el" href="a00282.html">sender</a>< <a class="el" href="a00239.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="920267f71ed69be5e962f9a4da2e9e66"></a><!-- doxytag: member="tbb::continue_node::successor_type" ref="920267f71ed69be5e962f9a4da2e9e66" args="" -->
+typedef <a class="el" href="a00277.html">receiver</a>< <a class="el" href="a00239.html">output_type</a> > </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="f2808a5f31fccc06ad24d54f47170091"></a><!-- doxytag: member="tbb::continue_node::continue_node" ref="f2808a5f31fccc06ad24d54f47170091" args="(graph &g)" -->
+ </td><td class="memItemRight" valign="bottom"><b>continue_node</b> (<a class="el" href="a00250.html">graph</a> &g)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Broadcasts completion message when it receives completion messages from all predecessors. Then resets. 
+<p>
+Is equivalent to an executable_node< continue_msg > with an empty_body 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00466.html">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/a00240.png b/doc/html/a00240.png
new file mode 100644
index 0000000..d27b46c
Binary files /dev/null and b/doc/html/a00240.png differ
diff --git a/doc/html/a00241.html b/doc/html/a00241.html
new file mode 100644
index 0000000..34c57f4
--- /dev/null
+++ b/doc/html/a00241.html
@@ -0,0 +1,161 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::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>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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="a00362.html">tbb</a>::<a class="el" href="a00241.html">continue_receiver</a></div>
+<h1>tbb::continue_receiver Class Reference</h1><!-- doxytag: class="tbb::continue_receiver" --><!-- doxytag: inherits="tbb::receiver" -->Base class for receivers of completion messages.  
+<a href="#_details">More...</a>
+<p>
+<code>#include <<a class="el" href="a00466.html">graph.h</a>></code>
+<p>
+<p>Inheritance diagram for tbb::continue_receiver:
+<p><center><img src="a00241.png" usemap="#tbb::continue_receiver_map" border="0" alt=""></center>
+<map name="tbb::continue_receiver_map">
+<area href="a00277.html" alt="tbb::receiver< T >" shape="rect" coords="0,0,138,24">
+</map>
+<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="21acef0b97b53d92f637619012837b30"></a><!-- doxytag: member="tbb::continue_receiver::input_type" ref="21acef0b97b53d92f637619012837b30" args="" -->
+typedef <a class="el" href="a00239.html">continue_msg</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html#21acef0b97b53d92f637619012837b30">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="52fa92968dd48560d59798ca7ba6a3a2"></a><!-- doxytag: member="tbb::continue_receiver::predecessor_type" ref="52fa92968dd48560d59798ca7ba6a3a2" args="" -->
+typedef <a class="el" href="a00282.html">sender</a>< <a class="el" href="a00239.html">continue_msg</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html#52fa92968dd48560d59798ca7ba6a3a2">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="799d383813261426d881b10247caadba"></a><!-- doxytag: member="tbb::continue_receiver::continue_receiver" ref="799d383813261426d881b10247caadba" args="(int number_of_predecessors=0)" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html#799d383813261426d881b10247caadba">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="9a38edb7e1e3c9be4e3848145c51a617"></a><!-- doxytag: member="tbb::continue_receiver::~continue_receiver" ref="9a38edb7e1e3c9be4e3848145c51a617" args="()" -->
+virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html#9a38edb7e1e3c9be4e3848145c51a617">~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="b9fa9290cbb871f8780f9d69e1ec3b4e"></a><!-- doxytag: member="tbb::continue_receiver::register_predecessor" ref="b9fa9290cbb871f8780f9d69e1ec3b4e" args="(predecessor_type &)" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html#b9fa9290cbb871f8780f9d69e1ec3b4e">register_predecessor</a> (<a class="el" href="a00282.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="a00241.html#02411d8d13b380062548aff133752cc5">remove_predecessor</a> (<a class="el" href="a00282.html">predecessor_type</a> &)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Decrements the trigger threshold.  <a href="#02411d8d13b380062548aff133752cc5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html#a7f8b9cc6286eb2cd8d429d6279da64d">try_put</a> (<a class="el" href="a00239.html">input_type</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Puts a <a class="el" href="a00239.html">continue_msg</a> to the receiver.  <a href="#a7f8b9cc6286eb2cd8d429d6279da64d"></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="a00241.html#e6bf1d21e670b78ea00c71fccbe17c78">execute</a> ()=0</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Does whatever should happen when the threshold is reached.  <a href="#e6bf1d21e670b78ea00c71fccbe17c78"></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="ddee0bc66101010aa5552db4230ca9ac"></a><!-- doxytag: member="tbb::continue_receiver::my_mutex" ref="ddee0bc66101010aa5552db4230ca9ac" args="" -->
+<a class="el" href="a00286.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="c87649e54a1d77fbe386fa13b193e8ed"></a><!-- doxytag: member="tbb::continue_receiver::my_predecessor_count" ref="c87649e54a1d77fbe386fa13b193e8ed" 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="4f541d914398f99cff17521251742f53"></a><!-- doxytag: member="tbb::continue_receiver::my_current_count" ref="4f541d914398f99cff17521251742f53" args="" -->
+int </td><td class="memItemRight" valign="bottom"><b>my_current_count</b></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="e6bf1d21e670b78ea00c71fccbe17c78"></a><!-- doxytag: member="tbb::continue_receiver::execute" ref="e6bf1d21e670b78ea00c71fccbe17c78" args="()=0" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual void tbb::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="a00241.html#a7f8b9cc6286eb2cd8d429d6279da64d">try_put()</a>. 
+</div>
+</div><p>
+<a class="anchor" name="02411d8d13b380062548aff133752cc5"></a><!-- doxytag: member="tbb::continue_receiver::remove_predecessor" ref="02411d8d13b380062548aff133752cc5" args="(predecessor_type &)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool tbb::continue_receiver::remove_predecessor           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00282.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="a7f8b9cc6286eb2cd8d429d6279da64d"></a><!-- doxytag: member="tbb::continue_receiver::try_put" ref="a7f8b9cc6286eb2cd8d429d6279da64d" args="(input_type)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool tbb::continue_receiver::try_put           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00239.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>
+Puts a <a class="el" href="a00239.html">continue_msg</a> to the receiver. 
+<p>
+If the message causes the message count to reach the predecessor count, <a class="el" href="a00241.html#e6bf1d21e670b78ea00c71fccbe17c78">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="a00466.html">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/a00241.png b/doc/html/a00241.png
new file mode 100644
index 0000000..8c138ee
Binary files /dev/null and b/doc/html/a00241.png differ
diff --git a/doc/html/a00242.html b/doc/html/a00242.html
new file mode 100644
index 0000000..c4a2f60
--- /dev/null
+++ b/doc/html/a00242.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>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>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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="a00362.html">tbb</a>::<a class="el" href="a00242.html">empty_task</a></div>
+<h1>tbb::empty_task Class Reference<br>
+<small>
+[<a class="el" href="a00376.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="a00567.html">task.h</a>></code>
+<p>
+<p>Inheritance diagram for tbb::empty_task:
+<p><center><img src="a00242.png" usemap="#tbb::empty_task_map" border="0" alt=""></center>
+<map name="tbb::empty_task_map">
+<area href="a00291.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">
+<tr><td></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+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="a00567.html">task.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/a00162.png b/doc/html/a00242.png
similarity index 100%
rename from doc/html/a00162.png
rename to doc/html/a00242.png
diff --git a/doc/html/a00243.html b/doc/html/a00243.html
new file mode 100644
index 0000000..069ebf5
--- /dev/null
+++ b/doc/html/a00243.html
@@ -0,0 +1,197 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::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>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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="a00362.html">tbb</a>::<b>interface6</b>::<a class="el" href="a00243.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="a00372.html">Containers</a>]</small>
+</h1><!-- doxytag: class="tbb::interface6::enumerable_thread_specific" -->The <a class="el" href="a00243.html">enumerable_thread_specific</a> container.  
+<a href="#_details">More...</a>
+<p>
+<code>#include <<a class="el" href="a00454.html">enumerable_thread_specific.h</a>></code>
+<p>
+<a href="a00037.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="a00243.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="a00238.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="a00238.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="a00243.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="a00243.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="a00243.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="a00243.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="a00243.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="a00243.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="a00243.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="a00243.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="a00243.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="a00243.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="a00243.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="a00243.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="a00243.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="a00243.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="a00243.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="a00243.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="a00243.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="a00243.html">enumerable_thread_specific</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00243.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="a00243.html">enumerable_thread_specific</a> & </td><td class="memTemplItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00243.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="a00243.html">enumerable_thread_specific</a> container. 
+<p>
+<a class="el" href="a00243.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="a00243.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="a00243.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="a00243.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="a00454.html">enumerable_thread_specific.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
new file mode 100644
index 0000000..0e33679
--- /dev/null
+++ b/doc/html/a00244.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::executable_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="a00362.html">tbb</a>::<a class="el" href="a00244.html">executable_node</a></div>
+<h1>tbb::executable_node< Output > Class Template Reference</h1><!-- doxytag: class="tbb::executable_node" --><!-- doxytag: inherits="tbb::graph_node" -->Implements an executable node that supports <a class="el" href="a00239.html">continue_msg</a> -> Output.  
+<a href="#_details">More...</a>
+<p>
+<code>#include <<a class="el" href="a00466.html">graph.h</a>></code>
+<p>
+<p>Inheritance diagram for tbb::executable_node< Output >:
+<p><center><img src="a00244.png" usemap="#tbb::executable_node< Output >_map" border="0" alt=""></center>
+<map name="tbb::executable_node< Output >_map">
+<area href="a00251.html" alt="tbb::graph_node" shape="rect" coords="0,0,192,24">
+<area href="a00240.html" alt="tbb::continue_node" shape="rect" coords="0,112,192,136">
+</map>
+<a href="a00050.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2ff2aa9a54056c999963717dcf5e539d"></a><!-- doxytag: member="tbb::executable_node::input_type" ref="2ff2aa9a54056c999963717dcf5e539d" args="" -->
+typedef <a class="el" href="a00239.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="09edc2515bc199f58b29b7a54e45f4d5"></a><!-- doxytag: member="tbb::executable_node::output_type" ref="09edc2515bc199f58b29b7a54e45f4d5" 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="85c2d48065a194e75175a5a4e55ea0dd"></a><!-- doxytag: member="tbb::executable_node::predecessor_type" ref="85c2d48065a194e75175a5a4e55ea0dd" args="" -->
+typedef <a class="el" href="a00282.html">sender</a>< <a class="el" href="a00239.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="f38af33d6c53ca2822af6b739686f6b3"></a><!-- doxytag: member="tbb::executable_node::successor_type" ref="f38af33d6c53ca2822af6b739686f6b3" args="" -->
+typedef <a class="el" href="a00277.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="memTemplParams" nowrap colspan="2"><a class="anchor" name="73d4304b322a25ed0df468e607dd1dac"></a><!-- doxytag: member="tbb::executable_node::executable_node" ref="73d4304b322a25ed0df468e607dd1dac" 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="a00244.html#73d4304b322a25ed0df468e607dd1dac">executable_node</a> (<a class="el" href="a00250.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="a00239.html">continue_msg</a> -> Output. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="c13030111d34feeafd9cdb1dd21584f1"></a><!-- doxytag: member="tbb::executable_node::executable_node" ref="c13030111d34feeafd9cdb1dd21584f1" 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="a00244.html#c13030111d34feeafd9cdb1dd21584f1">executable_node</a> (<a class="el" href="a00250.html">graph</a> &g, int number_of_predecessors, Body body)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructor for executable node with <a class="el" href="a00239.html">continue_msg</a> -> Output. <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="bde6744db670181fe37a34decce95c56"></a><!-- doxytag: member="tbb::executable_node::successors" ref="bde6744db670181fe37a34decce95c56" args="()" -->
+internal::broadcast_cache<<br>
+ output_type > & </td><td class="memItemRight" valign="bottom"><b>successors</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="1b9b210a5ae77091dd1ed18cc36e6967"></a><!-- doxytag: member="tbb::executable_node::my_successors" ref="1b9b210a5ae77091dd1ed18cc36e6967" args="" -->
+internal::broadcast_cache<<br>
+ output_type > </td><td class="memItemRight" valign="bottom"><b>my_successors</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template<typename Output><br>
+ class tbb::executable_node< Output ></h3>
+
+Implements an executable node that supports <a class="el" href="a00239.html">continue_msg</a> -> Output. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00466.html">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/a00244.png b/doc/html/a00244.png
new file mode 100644
index 0000000..a8702b0
Binary files /dev/null and b/doc/html/a00244.png differ
diff --git a/doc/html/a00245.html b/doc/html/a00245.html
new file mode 100644
index 0000000..d4d7390
--- /dev/null
+++ b/doc/html/a00245.html
@@ -0,0 +1,236 @@
+<!DOCTYPE HTML 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>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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="a00362.html">tbb</a>::<a class="el" href="a00245.html">filter</a></div>
+<h1>tbb::filter Class Reference<br>
+<small>
+[<a class="el" href="a00371.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="a00546.html">pipeline.h</a>></code>
+<p>
+<p>Inheritance diagram for tbb::filter:
+<p><center><img src="a00245.png" usemap="#tbb::filter_map" border="0" alt=""></center>
+<map name="tbb::filter_map">
+<area href="a00301.html" alt="tbb::thread_bound_filter" shape="rect" coords="0,56,145,80">
+</map>
+<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="fcfec27656a69ff2072802ac001e936f"></a><!-- doxytag: member="tbb::filter::is_serial" ref="fcfec27656a69ff2072802ac001e936f" args="() const " -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00245.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="a00245.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="a00245.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="a00245.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="a00245.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="a00245.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="a00245.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="a00245.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="a00245.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="a00245.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="a00245.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="a00245.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="a00245.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>
+
+</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="a00245.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="a00245.html#2e5eb65f95d8050186278077e433c5b1">tbb::filter::filter_is_out_of_order</a> = 0x1<<4<code> [static, protected]</code>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+4th bit distinguishes ordered vs unordered filters. 
+<p>
+The bit was not set for parallel filters in TBB 2.1 and earlier, but <a class="el" href="a00245.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="a00546.html">pipeline.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/a00164.png b/doc/html/a00245.png
similarity index 100%
rename from doc/html/a00164.png
rename to doc/html/a00245.png
diff --git a/doc/html/a00246.html b/doc/html/a00246.html
new file mode 100644
index 0000000..52c4d77
--- /dev/null
+++ b/doc/html/a00246.html
@@ -0,0 +1,76 @@
+<!DOCTYPE HTML 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>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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="a00362.html">tbb</a>::<b>interface6</b>::<a class="el" href="a00246.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="a00546.html">pipeline.h</a>></code>
+<p>
+<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="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="a00246.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="a00246.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="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="a00246.html">filter_t</a>< T_, U_ > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00246.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="a00246.html">filter_t</a>< T_, U_ > </td><td class="memTemplItemRight" valign="bottom"><b>operator &</b> (const <a class="el" href="a00246.html">filter_t</a>< T_, V_ > &, const <a class="el" href="a00246.html">filter_t</a>< V_, U_ > &)</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. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00546.html">pipeline.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
new file mode 100644
index 0000000..8209ed4
--- /dev/null
+++ b/doc/html/a00247.html
@@ -0,0 +1,53 @@
+<!DOCTYPE HTML 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>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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="a00362.html">tbb</a>::<a class="el" href="a00247.html">final_scan_tag</a></div>
+<h1>tbb::final_scan_tag Struct Reference<br>
+<small>
+[<a class="el" href="a00371.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="a00528.html">parallel_scan.h</a>></code>
+<p>
+<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>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>
+Used to indicate that the final scan is being performed. 
+<p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00528.html">parallel_scan.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
index 9b2a84c..b394217 100644
--- a/doc/html/a00248.html
+++ b/doc/html/a00248.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 File 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>
@@ -10,65 +10,42 @@
     <li><a href="index.html"><span>Main Page</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>scalable_allocator.h File Reference</h1>
+<div class="nav">
+<a class="el" href="a00362.html">tbb</a>::<b>interface6</b>::<a class="el" href="a00248.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>
-<a href="a00430.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<code>#include <<a class="el" href="a00546.html">pipeline.h</a>></code>
+<p>
+<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>Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00267.html">tbb</a></td></tr>
-
-<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00191.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="a00191.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><b>tbb::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="a00192.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="a00192.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><b>tbb::scalable_allocator< void >::rebind< U ></b></td></tr>
-
-<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void *__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00277.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="a00277.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="a00277.html#g951bbbbd2d041acb59ba5fa910b52543">scalable_realloc</a> (void *ptr, size_t size)</td></tr>
+<tr><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">void *__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00277.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="a00277.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="a00277.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="a00277.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="a00277.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="a00277.html#g0965ce1b4b7835f92869c7fd867265f7">scalable_msize</a> (void *ptr)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="906ebb461ecb0446989739fd0399e4b8"></a><!-- doxytag: member="scalable_allocator.h::operator==" ref="906ebb461ecb0446989739fd0399e4b8" args="(const scalable_allocator< T > &, const scalable_allocator< U > &)" -->
-template<typename T, typename U> </td></tr>
-<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>
+<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>
+input_filter control to signal end-of-input for parallel_pipeline 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00546.html">pipeline.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00249.html b/doc/html/a00249.html
new file mode 100644
index 0000000..8ab2586
--- /dev/null
+++ b/doc/html/a00249.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::function_node< Input, 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="a00362.html">tbb</a>::<a class="el" href="a00249.html">function_node</a></div>
+<h1>tbb::function_node< Input, Output > Class Template Reference</h1><!-- doxytag: class="tbb::function_node" --><!-- doxytag: inherits="tbb::graph_node" -->Implements a function node that supports Input -> Output.  
+<a href="#_details">More...</a>
+<p>
+<code>#include <<a class="el" href="a00466.html">graph.h</a>></code>
+<p>
+<p>Inheritance diagram for tbb::function_node< Input, Output >:
+<p><center><img src="a00249.png" usemap="#tbb::function_node< Input, Output >_map" border="0" alt=""></center>
+<map name="tbb::function_node< Input, Output >_map">
+<area href="a00251.html" alt="tbb::graph_node" shape="rect" coords="0,0,212,24">
+</map>
+<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="6e6329f2e501fe2ca3af68ab506ae970"></a><!-- doxytag: member="tbb::function_node::input_type" ref="6e6329f2e501fe2ca3af68ab506ae970" 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="8fdb5893b95c7127cecad4e549a4f293"></a><!-- doxytag: member="tbb::function_node::output_type" ref="8fdb5893b95c7127cecad4e549a4f293" 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="4283fbbd6c585e11d22c0fe199262e5d"></a><!-- doxytag: member="tbb::function_node::predecessor_type" ref="4283fbbd6c585e11d22c0fe199262e5d" args="" -->
+typedef <a class="el" href="a00282.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="277107a970082cf30bc73fe11232e27c"></a><!-- doxytag: member="tbb::function_node::successor_type" ref="277107a970082cf30bc73fe11232e27c" args="" -->
+typedef <a class="el" href="a00277.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="memTemplParams" nowrap colspan="2"><a class="anchor" name="7bde12e8ee43d4cafbdd5b1fc2031e2b"></a><!-- doxytag: member="tbb::function_node::function_node" ref="7bde12e8ee43d4cafbdd5b1fc2031e2b" 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="a00249.html#7bde12e8ee43d4cafbdd5b1fc2031e2b">function_node</a> (<a class="el" href="a00250.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 colspan="2"><br><h2>Protected Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0d66f79bb45d6ae8e9fc97a4118451d5"></a><!-- doxytag: member="tbb::function_node::successors" ref="0d66f79bb45d6ae8e9fc97a4118451d5" args="()" -->
+internal::broadcast_cache<<br>
+ output_type > & </td><td class="memItemRight" valign="bottom"><b>successors</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="0b7de4c1337a7aec27adff1becea08d5"></a><!-- doxytag: member="tbb::function_node::my_successors" ref="0b7de4c1337a7aec27adff1becea08d5" args="" -->
+internal::broadcast_cache<<br>
+ output_type > </td><td class="memItemRight" valign="bottom"><b>my_successors</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template<typename Input, typename Output = continue_msg><br>
+ class tbb::function_node< Input, Output ></h3>
+
+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="a00466.html">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/a00249.png b/doc/html/a00249.png
new file mode 100644
index 0000000..3b8737b
Binary files /dev/null and b/doc/html/a00249.png differ
diff --git a/doc/html/a00250.html b/doc/html/a00250.html
new file mode 100644
index 0000000..41b9add
--- /dev/null
+++ b/doc/html/a00250.html
@@ -0,0 +1,237 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::graph 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="a00362.html">tbb</a>::<a class="el" href="a00250.html">graph</a></div>
+<h1>tbb::graph Class Reference</h1><!-- doxytag: class="tbb::graph" -->The graph class.  
+<a href="#_details">More...</a>
+<p>
+<code>#include <<a class="el" href="a00466.html">graph.h</a>></code>
+<p>
+<a href="a00045.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="633b9b55e3248b785efd13264261f0e54431a30e2ba83c24deee35ce1218f08e"></a><!-- doxytag: member="tbb::graph::unlimited" ref="633b9b55e3248b785efd13264261f0e54431a30e2ba83c24deee35ce1218f08e" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>unlimited</b> = 0</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="633b9b55e3248b785efd13264261f0e57fa790f3b0f0dd6330e4f91ffa85759a"></a><!-- doxytag: member="tbb::graph::serial" ref="633b9b55e3248b785efd13264261f0e57fa790f3b0f0dd6330e4f91ffa85759a" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>serial</b> = 1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#633b9b55e3248b785efd13264261f0e5">concurrency</a> { <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>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1ba8311506558a2419101722f5d49ba9"></a><!-- doxytag: member="tbb::graph::graph" ref="1ba8311506558a2419101722f5d49ba9" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#1ba8311506558a2419101722f5d49ba9">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="a00250.html#55332084e7884a26ff288b8fe960030d">~graph</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroys the graph.  <a href="#55332084e7884a26ff288b8fe960030d"></a><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#1e5c5ae6538ec714cee107d1004705b9">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="#1e5c5ae6538ec714cee107d1004705b9"></a><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#ff3b6a3ef2ae1e661dcdb398c227b43c">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="#ff3b6a3ef2ae1e661dcdb398c227b43c"></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="a00250.html#4c5e8dc5a45e641d534d6206838cfa7f">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="#4c5e8dc5a45e641d534d6206838cfa7f"></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="a00250.html#71213dd18099298dc74731e293c8286a">run</a> (Body body)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Spawns a task that runs a function object.  <a href="#71213dd18099298dc74731e293c8286a"></a><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#bafd6349fdc6563ffa02746866e30bec">wait_for_all</a> ()</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="#bafd6349fdc6563ffa02746866e30bec"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="34d61d8b6560e5b2eb42e0112701db0f"></a><!-- doxytag: member="tbb::graph::root_task" ref="34d61d8b6560e5b2eb42e0112701db0f" args="()" -->
+<a class="el" href="a00291.html">task</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#34d61d8b6560e5b2eb42e0112701db0f">root_task</a> ()</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="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>run_task</b></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="55332084e7884a26ff288b8fe960030d"></a><!-- doxytag: member="tbb::graph::~graph" ref="55332084e7884a26ff288b8fe960030d" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">tbb::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="ff3b6a3ef2ae1e661dcdb398c227b43c"></a><!-- doxytag: member="tbb::graph::decrement_wait_count" ref="ff3b6a3ef2ae1e661dcdb398c227b43c" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::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="1e5c5ae6538ec714cee107d1004705b9"></a><!-- doxytag: member="tbb::graph::increment_wait_count" ref="1e5c5ae6538ec714cee107d1004705b9" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::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="71213dd18099298dc74731e293c8286a"></a><!-- doxytag: member="tbb::graph::run" ref="71213dd18099298dc74731e293c8286a" 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::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="a00250.html#bafd6349fdc6563ffa02746866e30bec">wait_for_all()</a> on the graph. For example a one-off source. 
+</div>
+</div><p>
+<a class="anchor" name="4c5e8dc5a45e641d534d6206838cfa7f"></a><!-- doxytag: member="tbb::graph::run" ref="4c5e8dc5a45e641d534d6206838cfa7f" 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::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="a00250.html#bafd6349fdc6563ffa02746866e30bec">wait_for_all()</a> on the graph. For example a one-off source. 
+</div>
+</div><p>
+<a class="anchor" name="bafd6349fdc6563ffa02746866e30bec"></a><!-- doxytag: member="tbb::graph::wait_for_all" ref="bafd6349fdc6563ffa02746866e30bec" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::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="a00466.html">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/a00251.html b/doc/html/a00251.html
new file mode 100644
index 0000000..43671de
--- /dev/null
+++ b/doc/html/a00251.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::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>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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="a00362.html">tbb</a>::<a class="el" href="a00251.html">graph_node</a></div>
+<h1>tbb::graph_node Class Reference</h1><!-- doxytag: class="tbb::graph_node" -->The base of all graph nodes. Allows them to be stored in a collection for deletion.  
+<a href="#_details">More...</a>
+<p>
+<code>#include <<a class="el" href="a00466.html">graph.h</a>></code>
+<p>
+<p>Inheritance diagram for tbb::graph_node:
+<p><center><img src="a00251.png" usemap="#tbb::graph_node_map" border="0" alt=""></center>
+<map name="tbb::graph_node_map">
+<area href="a00224.html" alt="tbb::broadcast_node< T >" shape="rect" coords="4716,56,9422,80">
+<area href="a00225.html" alt="tbb::buffer_node< T >" shape="rect" coords="4716,112,9422,136">
+<area href="a00244.html" alt="tbb::executable_node< Output >" shape="rect" coords="4716,168,9422,192">
+<area href="a00244.html" alt="tbb::executable_node< tbb::continue_msg >" shape="rect" coords="4716,224,9422,248">
+<area href="a00249.html" alt="tbb::function_node< Input, Output >" shape="rect" coords="4716,280,9422,304">
+<area href="a00254.html" alt="tbb::internal::join_node_base< JP, InputTuple, OutputTuple >" shape="rect" coords="4716,336,9422,360">
+<area href="a00254.html" alt="tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type > >, OutputTuple >" shape="rect" coords="4716,392,9422,416">
+<area href="a00254.html" alt="tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type > >, OutputTuple >" shape="rect" coords="4716,448,9422,472">
+<area href="a00254.html" alt="tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 3, OutputTuple >::type > >, OutputTuple >" shape="rect" coords="4716,504,9422,528">
+<area href="a00254.html" alt="tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 3, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 4, OutputTuple >::type > >, OutputTuple >" shape= [...]
+<area href="a00254.html" alt="tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 3, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 4, OutputTuple >::type >, tbb::internal::two_phas [...]
+<area href="a00254.html" alt="tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 3, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 4, OutputTuple >::type >, tbb::internal::two_phas [...]
+<area href="a00254.html" alt="tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 3, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 4, OutputTuple >::type >, tbb::internal::two_phas [...]
+<area href="a00254.html" alt="tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 3, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 4, OutputTuple >::type >, tbb::internal::two_phas [...]
+<area href="a00254.html" alt="tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 3, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 4, OutputTuple >::type >, tbb::internal::two_phas [...]
+<area href="a00255.html" alt="tbb::limiter_node< T >" shape="rect" coords="4716,896,9422,920">
+<area href="a00285.html" alt="tbb::source_node< Output >" shape="rect" coords="4716,952,9422,976">
+</map>
+<a href="a00040.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>
+The base of all graph nodes. Allows them to be stored in a collection for deletion. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00466.html">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/a00251.png b/doc/html/a00251.png
new file mode 100644
index 0000000..31daf9e
Binary files /dev/null and b/doc/html/a00251.png differ
diff --git a/doc/html/a00252.html b/doc/html/a00252.html
new file mode 100644
index 0000000..9fdf1d3
--- /dev/null
+++ b/doc/html/a00252.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::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>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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="a00362.html">tbb</a>::<a class="el" href="a00252.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="a00593.html">tbb_exception.h</a>></code>
+<p>
+<a href="a00139.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="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>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Exception for PPL locks. 
+<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/a00253.html b/doc/html/a00253.html
new file mode 100644
index 0000000..0637f2d
--- /dev/null
+++ b/doc/html/a00253.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::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>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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="a00362.html">tbb</a>::<a class="el" href="a00253.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="a00593.html">tbb_exception.h</a>></code>
+<p>
+<a href="a00141.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>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Exception for repeated scheduling of the same task_handle. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="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/a00254.html b/doc/html/a00254.html
new file mode 100644
index 0000000..82fd7ad
--- /dev/null
+++ b/doc/html/a00254.html
@@ -0,0 +1,91 @@
+<!DOCTYPE HTML 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::join_node_base< JP, InputTuple, OutputTuple > 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="a00362.html">tbb</a>::<b>internal</b>::<a class="el" href="a00254.html">join_node_base</a></div>
+<h1>tbb::internal::join_node_base< JP, InputTuple, OutputTuple > Class Template Reference</h1><!-- doxytag: class="tbb::internal::join_node_base" --><!-- doxytag: inherits="tbb::graph_node,tbb::sender< OutputTuple >" --><a class="el" href="a00254.html">join_node_base</a>  
+<a href="#_details">More...</a>
+<p>
+<code>#include <<a class="el" href="a00466.html">graph.h</a>></code>
+<p>
+<p>Inheritance diagram for tbb::internal::join_node_base< JP, InputTuple, OutputTuple >:
+<p><center><img src="a00254.png" usemap="#tbb::internal::join_node_base< JP, InputTuple, OutputTuple >_map" border="0" alt=""></center>
+<map name="tbb::internal::join_node_base< JP, InputTuple, OutputTuple >_map">
+<area href="a00251.html" alt="tbb::graph_node" shape="rect" coords="0,0,355,24">
+<area href="a00282.html" alt="tbb::sender< OutputTuple >" shape="rect" coords="365,0,720,24">
+</map>
+<a href="a00067.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="578893d923f91b7e44a15dea8b0d7082"></a><!-- doxytag: member="tbb::internal::join_node_base::output_type" ref="578893d923f91b7e44a15dea8b0d7082" args="" -->
+typedef OutputTuple </td><td class="memItemRight" valign="bottom"><a class="el" href="a00254.html#578893d923f91b7e44a15dea8b0d7082">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="1212cbaa293a93c3bf334da1539556bd"></a><!-- doxytag: member="tbb::internal::join_node_base::successor_type" ref="1212cbaa293a93c3bf334da1539556bd" args="" -->
+typedef <a class="el" href="a00277.html">receiver</a>< <a class="el" href="a00254.html#578893d923f91b7e44a15dea8b0d7082">output_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00254.html#1212cbaa293a93c3bf334da1539556bd">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="caa4c6d62f43e839024d99fb49ff4d25"></a><!-- doxytag: member="tbb::internal::join_node_base::input_ports_type" ref="caa4c6d62f43e839024d99fb49ff4d25" args="" -->
+typedef join_node_FE< JP,<br>
+ InputTuple, OutputTuple > </td><td class="memItemRight" valign="bottom"><b>input_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="74c044c29d83c8b70496ea2d40a3e8cf"></a><!-- doxytag: member="tbb::internal::join_node_base::join_node_base" ref="74c044c29d83c8b70496ea2d40a3e8cf" args="(graph &g)" -->
+ </td><td class="memItemRight" valign="bottom"><b>join_node_base</b> (<a class="el" href="a00250.html">graph</a> &g)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4fe2bd006dbd111d1f1785ee6571dde6"></a><!-- doxytag: member="tbb::internal::join_node_base::register_successor" ref="4fe2bd006dbd111d1f1785ee6571dde6" args="(successor_type &r)" -->
+bool </td><td class="memItemRight" valign="bottom"><b>register_successor</b> (<a class="el" href="a00277.html">successor_type</a> &r)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="c3902ed788ea0c808de846b23d661548"></a><!-- doxytag: member="tbb::internal::join_node_base::input_port" ref="c3902ed788ea0c808de846b23d661548" args="(void)" -->
+template<size_t N> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="a00277.html">receiver</a>< typename std::tuple_element<<br>
+ N, OutputTuple >::value > & </td><td class="memTemplItemRight" valign="bottom"><b>input_port</b> (void)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="46a9a783464d2739bb9dadfe794d8098"></a><!-- doxytag: member="tbb::internal::join_node_base::remove_successor" ref="46a9a783464d2739bb9dadfe794d8098" args="(successor_type &r)" -->
+bool </td><td class="memItemRight" valign="bottom"><b>remove_successor</b> (<a class="el" href="a00277.html">successor_type</a> &r)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="50c0e6465ac929a2e94d4e62a13ebeff"></a><!-- doxytag: member="tbb::internal::join_node_base::try_get" ref="50c0e6465ac929a2e94d4e62a13ebeff" args="(output_type &v)" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00254.html#50c0e6465ac929a2e94d4e62a13ebeff">try_get</a> (<a class="el" href="a00254.html#578893d923f91b7e44a15dea8b0d7082">output_type</a> &v)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Request an item from the sender. <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="d7392be41db39cc27f6b52b4809c5f75"></a><!-- doxytag: member="tbb::internal::join_node_base::forward_task< join_node_base< JP, InputTuple, OutputTuple > >" ref="d7392be41db39cc27f6b52b4809c5f75" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>forward_task< join_node_base< JP, InputTuple, OutputTuple > ></b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template<join_policy JP, typename InputTuple, typename OutputTuple><br>
+ class tbb::internal::join_node_base< JP, InputTuple, OutputTuple ></h3>
+
+<a class="el" href="a00254.html">join_node_base</a> 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00466.html">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/a00254.png b/doc/html/a00254.png
new file mode 100644
index 0000000..53a922f
Binary files /dev/null and b/doc/html/a00254.png differ
diff --git a/doc/html/a00255.html b/doc/html/a00255.html
new file mode 100644
index 0000000..9d68537
--- /dev/null
+++ b/doc/html/a00255.html
@@ -0,0 +1,139 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::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>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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="a00362.html">tbb</a>::<a class="el" href="a00255.html">limiter_node</a></div>
+<h1>tbb::limiter_node< T > Class Template Reference</h1><!-- doxytag: class="tbb::limiter_node" --><!-- doxytag: inherits="tbb::graph_node,tbb::receiver,tbb::sender" -->Forwards messages only if the threshold has not been reached.  
+<a href="#_details">More...</a>
+<p>
+<code>#include <<a class="el" href="a00466.html">graph.h</a>></code>
+<p>
+<p>Inheritance diagram for tbb::limiter_node< T >:
+<p><center><img src="a00255.png" usemap="#tbb::limiter_node< T >_map" border="0" alt=""></center>
+<map name="tbb::limiter_node< T >_map">
+<area href="a00251.html" alt="tbb::graph_node" shape="rect" coords="0,0,134,24">
+<area href="a00277.html" alt="tbb::receiver< T >" shape="rect" coords="144,0,278,24">
+<area href="a00282.html" alt="tbb::sender< T >" shape="rect" coords="288,0,422,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="f654b8974c613e8fd3de5a40e181d5ff"></a><!-- doxytag: member="tbb::limiter_node::input_type" ref="f654b8974c613e8fd3de5a40e181d5ff" args="" -->
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00255.html#f654b8974c613e8fd3de5a40e181d5ff">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="370f88278dec6f584c1d08a375f9b4cd"></a><!-- doxytag: member="tbb::limiter_node::output_type" ref="370f88278dec6f584c1d08a375f9b4cd" args="" -->
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00255.html#370f88278dec6f584c1d08a375f9b4cd">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="fd88ce7670e7107aef2161b45f156185"></a><!-- doxytag: member="tbb::limiter_node::predecessor_type" ref="fd88ce7670e7107aef2161b45f156185" args="" -->
+typedef <a class="el" href="a00282.html">sender</a>< <a class="el" href="a00255.html#f654b8974c613e8fd3de5a40e181d5ff">input_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00255.html#fd88ce7670e7107aef2161b45f156185">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="754182cc1e5b403201495bc1fd45674b"></a><!-- doxytag: member="tbb::limiter_node::successor_type" ref="754182cc1e5b403201495bc1fd45674b" args="" -->
+typedef <a class="el" href="a00277.html">receiver</a>< <a class="el" href="a00255.html#370f88278dec6f584c1d08a375f9b4cd">output_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00255.html#754182cc1e5b403201495bc1fd45674b">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="f0139fc645a51ce30b7aebb59c38a4ed"></a><!-- doxytag: member="tbb::limiter_node::limiter_node" ref="f0139fc645a51ce30b7aebb59c38a4ed" args="(graph &g, size_t threshold, int number_of_decrement_predecessors=0)" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00255.html#f0139fc645a51ce30b7aebb59c38a4ed">limiter_node</a> (<a class="el" href="a00250.html">graph</a> &g, size_t threshold, int number_of_decrement_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="b8b9dbfbfc52750fa0c6bb8849681e86"></a><!-- doxytag: member="tbb::limiter_node::register_successor" ref="b8b9dbfbfc52750fa0c6bb8849681e86" args="(receiver< output_type > &r)" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00255.html#b8b9dbfbfc52750fa0c6bb8849681e86">register_successor</a> (<a class="el" href="a00277.html">receiver</a>< <a class="el" href="a00255.html#370f88278dec6f584c1d08a375f9b4cd">output_type</a> > &r)</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="a00255.html#047d77f583e789e6d3ac6a52aba3168b">remove_successor</a> (<a class="el" href="a00277.html">receiver</a>< <a class="el" href="a00255.html#370f88278dec6f584c1d08a375f9b4cd">output_type</a> > &r)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Removes a successor from this node.  <a href="#047d77f583e789e6d3ac6a52aba3168b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a38facb46cde854cb7408bf9f3bf8999"></a><!-- doxytag: member="tbb::limiter_node::try_put" ref="a38facb46cde854cb7408bf9f3bf8999" args="(T t)" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00255.html#a38facb46cde854cb7408bf9f3bf8999">try_put</a> (T t)</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="fb9909b87538f5c881c7cb7577436d14"></a><!-- doxytag: member="tbb::limiter_node::register_predecessor" ref="fb9909b87538f5c881c7cb7577436d14" args="(predecessor_type &src)" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00255.html#fb9909b87538f5c881c7cb7577436d14">register_predecessor</a> (<a class="el" href="a00282.html">predecessor_type</a> &src)</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="a05cf39b2825183e9c0393890fbbbb41"></a><!-- doxytag: member="tbb::limiter_node::remove_predecessor" ref="a05cf39b2825183e9c0393890fbbbb41" args="(predecessor_type &src)" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00255.html#a05cf39b2825183e9c0393890fbbbb41">remove_predecessor</a> (<a class="el" href="a00282.html">predecessor_type</a> &src)</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="181fa37d3e3c68ec3819ea46beed79a2"></a><!-- doxytag: member="tbb::limiter_node::decrement" ref="181fa37d3e3c68ec3819ea46beed79a2" args="" -->
+internal::decrementer< <a class="el" href="a00255.html">limiter_node</a><<br>
+ T > > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00255.html#181fa37d3e3c68ec3819ea46beed79a2">decrement</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::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="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b43677b60c786d1071a7efd6f195c3be"></a><!-- doxytag: member="tbb::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>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template<typename T><br>
+ class tbb::limiter_node< T ></h3>
+
+Forwards messages only if the threshold has not been reached. 
+<p>
+This node forwards items until its threshold is reached. It contains no buffering. If the downstream node rejects, the message is dropped. 
+<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="047d77f583e789e6d3ac6a52aba3168b"></a><!-- doxytag: member="tbb::limiter_node::remove_successor" ref="047d77f583e789e6d3ac6a52aba3168b" 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 <a class="el" href="a00255.html">tbb::limiter_node</a>< T >::remove_successor           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00277.html">receiver</a>< <a class="el" href="a00255.html#370f88278dec6f584c1d08a375f9b4cd">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 from this node. 
+<p>
+r.remove_predecessor(*this) is also called. 
+<p>
+Implements <a class="el" href="a00282.html#3f345427e812e8741370308ff88f30bf">tbb::sender< T ></a>.
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00466.html">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/a00255.png b/doc/html/a00255.png
new file mode 100644
index 0000000..1683483
Binary files /dev/null and b/doc/html/a00255.png differ
diff --git a/doc/html/a00256.html b/doc/html/a00256.html
new file mode 100644
index 0000000..14fb16f
--- /dev/null
+++ b/doc/html/a00256.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::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>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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="a00362.html">tbb</a>::<a class="el" href="a00256.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="a00593.html">tbb_exception.h</a>></code>
+<p>
+<a href="a00140.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="fe3f8527f9013266dc845a4ff22dd2cf"></a><!-- doxytag: member="tbb::missing_wait::what" ref="fe3f8527f9013266dc845a4ff22dd2cf" args="() const " -->
+const char * </td><td class="memItemRight" valign="bottom"><b>what</b> () const   throw ()</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Exception for missing wait on structured_task_group. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="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/a00257.html b/doc/html/a00257.html
new file mode 100644
index 0000000..b0adee3
--- /dev/null
+++ b/doc/html/a00257.html
@@ -0,0 +1,171 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>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>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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="a00362.html">tbb</a>::<a class="el" href="a00257.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="a00593.html">tbb_exception.h</a>></code>
+<p>
+<p>Inheritance diagram for tbb::movable_exception< ExceptionData >:
+<p><center><img src="a00257.png" usemap="#tbb::movable_exception< ExceptionData >_map" border="0" alt=""></center>
+<map name="tbb::movable_exception< ExceptionData >_map">
+<area href="a00298.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">
+<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="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="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="a00257.html">movable_exception</a> &src)  throw ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="dfafefe27f2afaa7c7894ca9c71cc568"></a><!-- doxytag: member="tbb::movable_exception::operator=" ref="dfafefe27f2afaa7c7894ca9c71cc568" args="(const movable_exception &src)" -->
+const <a class="el" href="a00257.html">movable_exception</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00257.html">movable_exception</a> &src)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="47114cbc20c8e13cac3108749a3e085d"></a><!-- doxytag: member="tbb::movable_exception::data" ref="47114cbc20c8e13cac3108749a3e085d" args="()" -->
+ExceptionData & </td><td class="memItemRight" valign="bottom"><b>data</b> ()  throw ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7d93c000d862d2558efd9a34817adbce"></a><!-- doxytag: member="tbb::movable_exception::data" ref="7d93c000d862d2558efd9a34817adbce" args="() const " -->
+const ExceptionData & </td><td class="memItemRight" valign="bottom"><b>data</b> () const   throw ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bc5f5c4739b17ac5211ac58226c2f5a5"></a><!-- doxytag: member="tbb::movable_exception::name" ref="bc5f5c4739b17ac5211ac58226c2f5a5" args="() const " -->
+const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00257.html#bc5f5c4739b17ac5211ac58226c2f5a5">name</a> () const   throw ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns RTTI name of the originally intercepted exception. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b33a89bccf0c63106f1270c7bfaaf54f"></a><!-- doxytag: member="tbb::movable_exception::what" ref="b33a89bccf0c63106f1270c7bfaaf54f" args="() const " -->
+const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00257.html#b33a89bccf0c63106f1270c7bfaaf54f">what</a> () const   throw ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns the result of originally intercepted exception's <a class="el" href="a00257.html#b33a89bccf0c63106f1270c7bfaaf54f">what()</a> method. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00257.html">movable_exception</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00257.html#1aea0ad179d6f0481fe7f3495f66adf9">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="#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="a00257.html#7a46873119d9f85a7b0009c13e41a258">destroy</a> ()  throw ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroys objects created by the <a class="el" href="a00257.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="a00257.html#17cffba35811c92b7e65d63506b69602">throw_self</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="a00257.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">User data. <br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template<typename ExceptionData><br>
+ class tbb::movable_exception< ExceptionData ></h3>
+
+Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread. 
+<p>
+Code using TBB can instantiate this template with an arbitrary ExceptionData type and throw this exception object. Such exceptions are intercepted by the TBB scheduler and delivered to the root thread (). <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="a00298.html">tbb::tbb_exception</a> </dd></dl>
+
+<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="a00257.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">
+
+<p>
+Destroys objects created by the <a class="el" href="a00257.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="a00298.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="a00257.html">movable_exception</a>* <a class="el" href="a00257.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">
+
+<p>
+Creates and returns pointer to the deep copy of this exception object. 
+<p>
+Move semantics is allowed. 
+<p>
+Implements <a class="el" href="a00298.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="a00257.html">tbb::movable_exception</a>< ExceptionData >::throw_self           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+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="a00298.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/a00171.png b/doc/html/a00257.png
similarity index 100%
rename from doc/html/a00171.png
rename to doc/html/a00257.png
diff --git a/doc/html/a00258.html b/doc/html/a00258.html
new file mode 100644
index 0000000..b2eaf43
--- /dev/null
+++ b/doc/html/a00258.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>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>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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="a00362.html">tbb</a>::<a class="el" href="a00258.html">mutex</a></div>
+<h1>tbb::mutex Class Reference<br>
+<small>
+[<a class="el" href="a00374.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="a00499.html">mutex.h</a>></code>
+<p>
+<a href="a00078.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public 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="a00258.html#9f1ec84d5815263ceae853f06ddb4cac">native_handle_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 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="a00258.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="a00258.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="a00258.html#4331652c79dea1c1131bd59ab161b234">try_lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Try acquiring lock (non-blocking).  <a href="#4331652c79dea1c1131bd59ab161b234"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5fc9ef443ae75d966695546be399cc6b"></a><!-- doxytag: member="tbb::mutex::unlock" ref="5fc9ef443ae75d966695546be399cc6b" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00258.html#5fc9ef443ae75d966695546be399cc6b">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="caf34349c0fbe7b44f1a2ca0a3150dd0"></a><!-- doxytag: member="tbb::mutex::native_handle" ref="caf34349c0fbe7b44f1a2ca0a3150dd0" args="()" -->
+<a class="el" href="a00258.html#9f1ec84d5815263ceae853f06ddb4cac">native_handle_type</a> </td><td class="memItemRight" valign="bottom"><b>native_handle</b> ()</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="a00258.html#795649a185b0d6af6dc81c5f378616dd">set_state</a> (state_t to)</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="d4558e5a7c5b8d8e158ec7a1079669bd"></a><!-- doxytag: member="tbb::mutex::is_recursive_mutex" ref="d4558e5a7c5b8d8e158ec7a1079669bd" args="" -->
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = false</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f023a29c61451d02359095cbff0f3d45"></a><!-- doxytag: member="tbb::mutex::is_fair_mutex" ref="f023a29c61451d02359095cbff0f3d45" args="" -->
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = false</td></tr>
+
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a36f15b770a1bb0b56e33d7fa75ebd1a"></a><!-- doxytag: member="tbb::mutex::scoped_lock" ref="a36f15b770a1bb0b56e33d7fa75ebd1a" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00259.html">scoped_lock</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00259.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. 
+<p>
+For testing purposes only. 
+<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="4331652c79dea1c1131bd59ab161b234"></a><!-- doxytag: member="tbb::mutex::try_lock" ref="4331652c79dea1c1131bd59ab161b234" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool tbb::mutex::try_lock           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Try acquiring lock (non-blocking). 
+<p>
+Return true if lock acquired; false otherwise. 
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00499.html">mutex.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/a00259.html b/doc/html/a00259.html
new file mode 100644
index 0000000..acd000a
--- /dev/null
+++ b/doc/html/a00259.html
@@ -0,0 +1,77 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::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="a00362.html">tbb</a>::<a class="el" href="a00258.html">mutex</a>::<a class="el" href="a00259.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="a00499.html">mutex.h</a>></code>
+<p>
+<a href="a00079.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1d403ae51b484df5d86d85ae38f11e6e"></a><!-- doxytag: member="tbb::mutex::scoped_lock::scoped_lock" ref="1d403ae51b484df5d86d85ae38f11e6e" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00259.html#1d403ae51b484df5d86d85ae38f11e6e">scoped_lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a mutex. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><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="a00259.html#605a6b9af0f8cdabdf81825e0de99600">scoped_lock</a> (<a class="el" href="a00258.html">mutex</a> &<a class="el" href="a00258.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="0ebbbecaf4311e9df7362cb76ceaa368"></a><!-- doxytag: member="tbb::mutex::scoped_lock::~scoped_lock" ref="0ebbbecaf4311e9df7362cb76ceaa368" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00259.html#0ebbbecaf4311e9df7362cb76ceaa368">~scoped_lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock (if lock is held). <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="862e022841cdc522e4296a5533b22efd"></a><!-- doxytag: member="tbb::mutex::scoped_lock::acquire" ref="862e022841cdc522e4296a5533b22efd" args="(mutex &mutex)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00259.html#862e022841cdc522e4296a5533b22efd">acquire</a> (<a class="el" href="a00258.html">mutex</a> &<a class="el" href="a00258.html">mutex</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="591e0c49b82bcedffcbe0923f1b915ec"></a><!-- doxytag: member="tbb::mutex::scoped_lock::try_acquire" ref="591e0c49b82bcedffcbe0923f1b915ec" args="(mutex &mutex)" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00259.html#591e0c49b82bcedffcbe0923f1b915ec">try_acquire</a> (<a class="el" href="a00258.html">mutex</a> &<a class="el" href="a00258.html">mutex</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Try acquire lock on given mutex. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0d51d18cd99df3b2e93bf07378d0992c"></a><!-- doxytag: member="tbb::mutex::scoped_lock::release" ref="0d51d18cd99df3b2e93bf07378d0992c" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00259.html#0d51d18cd99df3b2e93bf07378d0992c">release</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br></td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="93062a14ad2e50e2b7b485b913170779"></a><!-- doxytag: member="tbb::mutex::scoped_lock::mutex" ref="93062a14ad2e50e2b7b485b913170779" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>mutex</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+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="a00499.html">mutex.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/a00260.html b/doc/html/a00260.html
new file mode 100644
index 0000000..cfb1ce9
--- /dev/null
+++ b/doc/html/a00260.html
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML 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>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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="a00362.html">tbb</a>::<a class="el" href="a00260.html">null_mutex</a></div>
+<h1>tbb::null_mutex Class Reference<br>
+<small>
+[<a class="el" href="a00374.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="a00501.html">null_mutex.h</a>></code>
+<p>
+<a href="a00080.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>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="a00261.html">scoped_lock</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Represents acquisition of a mutex.  <a href="a00261.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="a00260.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="a00501.html">null_mutex.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/a00261.html b/doc/html/a00261.html
new file mode 100644
index 0000000..4f7621e
--- /dev/null
+++ b/doc/html/a00261.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>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>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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="a00362.html">tbb</a>::<a class="el" href="a00260.html">null_mutex</a>::<a class="el" href="a00261.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="a00501.html">null_mutex.h</a>></code>
+<p>
+<a href="a00081.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="a00260.html">null_mutex</a> &)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f6889f00ca3946906e89e856988bb890"></a><!-- doxytag: member="tbb::null_mutex::scoped_lock::acquire" ref="f6889f00ca3946906e89e856988bb890" args="(null_mutex &)" -->
+void </td><td class="memItemRight" valign="bottom"><b>acquire</b> (<a class="el" href="a00260.html">null_mutex</a> &)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="90eb562a9de52b33362a6fe237b3df42"></a><!-- doxytag: member="tbb::null_mutex::scoped_lock::try_acquire" ref="90eb562a9de52b33362a6fe237b3df42" args="(null_mutex &)" -->
+bool </td><td class="memItemRight" valign="bottom"><b>try_acquire</b> (<a class="el" href="a00260.html">null_mutex</a> &)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b29fdf07b4c295850a6e433001c2c6a7"></a><!-- doxytag: member="tbb::null_mutex::scoped_lock::release" ref="b29fdf07b4c295850a6e433001c2c6a7" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><b>release</b> ()</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Represents acquisition of a mutex. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00501.html">null_mutex.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/a00262.html b/doc/html/a00262.html
new file mode 100644
index 0000000..684d1ea
--- /dev/null
+++ b/doc/html/a00262.html
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML 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>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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="a00362.html">tbb</a>::<a class="el" href="a00262.html">null_rw_mutex</a></div>
+<h1>tbb::null_rw_mutex Class Reference<br>
+<small>
+[<a class="el" href="a00374.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="a00502.html">null_rw_mutex.h</a>></code>
+<p>
+<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>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 class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e33ac3b047901e69e7997a16e221a330"></a><!-- doxytag: member="tbb::null_rw_mutex::is_recursive_mutex" ref="e33ac3b047901e69e7997a16e221a330" args="" -->
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = true</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e5248faf1412f9283185a0b5d72d7456"></a><!-- doxytag: member="tbb::null_rw_mutex::is_fair_mutex" ref="e5248faf1412f9283185a0b5d72d7456" args="" -->
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = true</td></tr>
+
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00263.html">scoped_lock</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Represents acquisition of a mutex.  <a href="a00263.html#_details">More...</a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+A rw mutex which does nothing. 
+<p>
+A <a class="el" href="a00262.html">null_rw_mutex</a> is a rw mutex that does nothing and simulates successful operation. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00502.html">null_rw_mutex.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/a00263.html b/doc/html/a00263.html
new file mode 100644
index 0000000..fdf6e21
--- /dev/null
+++ b/doc/html/a00263.html
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML 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>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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="a00362.html">tbb</a>::<a class="el" href="a00262.html">null_rw_mutex</a>::<a class="el" href="a00263.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="a00502.html">null_rw_mutex.h</a>></code>
+<p>
+<a href="a00083.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public 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="a00262.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="a00262.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="a00262.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. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00502.html">null_rw_mutex.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/a00264.html b/doc/html/a00264.html
new file mode 100644
index 0000000..36e896b
--- /dev/null
+++ b/doc/html/a00264.html
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML 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>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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="a00362.html">tbb</a>::<a class="el" href="a00264.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="a00503.html">parallel_do.h</a>></code>
+<p>
+<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="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="a00264.html#40baaf0f6856f4491dd0adf896c93516">add</a> (const Item &item)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Add a work item to a running parallel_do. <br></td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b381179b22f5f5e8511470c73d64b37f"></a><!-- doxytag: member="tbb::parallel_do_feeder::internal::parallel_do_feeder_impl" ref="b381179b22f5f5e8511470c73d64b37f" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>internal::parallel_do_feeder_impl</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template<typename Item><br>
+ class tbb::parallel_do_feeder< Item ></h3>
+
+Class the user supplied algorithm body uses to add new tasks. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>Item</em> </td><td>Work item type </td></tr>
+  </table>
+</dl>
+
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00503.html">parallel_do.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/a00265.html b/doc/html/a00265.html
new file mode 100644
index 0000000..20ed470
--- /dev/null
+++ b/doc/html/a00265.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>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>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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="a00362.html">tbb</a>::<a class="el" href="a00265.html">parallel_while</a></div>
+<h1>tbb::parallel_while< Body > Class Template Reference<br>
+<small>
+[<a class="el" href="a00371.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="a00537.html">parallel_while.h</a>></code>
+<p>
+<a href="a00087.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="a00265.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="a00265.html#36e26ba3880c7bcf804a97ba0cbe133f">parallel_while</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct empty non-running parallel while. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6fcfc973cc56b79c6d0fbb8a31be7e84"></a><!-- doxytag: member="tbb::parallel_while::~parallel_while" ref="6fcfc973cc56b79c6d0fbb8a31be7e84" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00265.html#6fcfc973cc56b79c6d0fbb8a31be7e84">~parallel_while</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="a00265.html#b32a0a6e5e09ebb7fad3e6652c19afe5">run</a> (Stream &stream, const Body &body)</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="a00265.html#e131c560057a58229992b61eb8dba4c6">add</a> (const <a class="el" href="a00265.html#fa297e53d3af2a101e712bc200233e9c">value_type</a> &item)</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>
+
+Parallel iteration over a stream, with optional addition of more work. 
+<p>
+The Body b has the requirement: <br>
+ "b(v)" <br>
+ "b.argument_type" <br>
+ where v is an argument_type 
+<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="e131c560057a58229992b61eb8dba4c6"></a><!-- doxytag: member="tbb::parallel_while::add" ref="e131c560057a58229992b61eb8dba4c6" args="(const value_type &item)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Body> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void <a class="el" href="a00265.html">tbb::parallel_while</a>< Body >::add           </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="a00265.html#fa297e53d3af2a101e712bc200233e9c">value_type</a> & </td>
+          <td class="paramname"> <em>item</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Add a work item while running. 
+<p>
+Should be executed only by body.apply or a thread spawned therefrom. 
+</div>
+</div><p>
+<a class="anchor" name="b32a0a6e5e09ebb7fad3e6652c19afe5"></a><!-- doxytag: member="tbb::parallel_while::run" ref="b32a0a6e5e09ebb7fad3e6652c19afe5" args="(Stream &stream, const Body &body)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Body> </div>
+<div class="memtemplate">
+template<typename Stream> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void <a class="el" href="a00265.html">tbb::parallel_while</a>< Body >::run           </td>
+          <td>(</td>
+          <td class="paramtype">Stream & </td>
+          <td class="paramname"> <em>stream</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Body & </td>
+          <td class="paramname"> <em>body</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Apply body.apply to each item in the stream. 
+<p>
+A Stream s has the requirements <br>
+ "S::value_type" <br>
+ "s.pop_if_present(value) is convertible to bool 
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00537.html">parallel_while.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/a00266.html b/doc/html/a00266.html
new file mode 100644
index 0000000..20bed39
--- /dev/null
+++ b/doc/html/a00266.html
@@ -0,0 +1,111 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::pipeline 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="a00362.html">tbb</a>::<a class="el" href="a00266.html">pipeline</a></div>
+<h1>tbb::pipeline Class Reference<br>
+<small>
+[<a class="el" href="a00371.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="a00546.html">pipeline.h</a>></code>
+<p>
+<a href="a00095.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="a00266.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="a00266.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="a00266.html#38fb5c9c8395dd6f89a4ae2011a83e0d">add_filter</a> (<a class="el" href="a00245.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="a00266.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="a00266.html#93d7fec8cd607b803dd2d79fb46bd260">run</a> (size_t max_number_of_live_tokens, <a class="el" href="a00293.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="a00266.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>
+
+</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">
+
+<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="a00546.html">pipeline.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/a00267.html b/doc/html/a00267.html
index 7ce88df..7ce5427 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 Namespace 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>
@@ -9,657 +9,42 @@
   <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="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="namespaces.html"><span>Namespace List</span></a></li>
-    <li><a href="namespacemembers.html"><span>Namespace 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>tbb Namespace Reference</h1>The namespace tbb contains all components of the library.  
+<div class="nav">
+<a class="el" href="a00362.html">tbb</a>::<a class="el" href="a00267.html">pre_scan_tag</a></div>
+<h1>tbb::pre_scan_tag Struct Reference<br>
+<small>
+[<a class="el" href="a00371.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>
-<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="a00141.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="a00141.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="a00142.html">atomic</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Primary template for atomic.  <a href="a00142.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="a00143.html">atomic< void * ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Specialization for <a class="el" href="a00143.html">atomic<void*></a>, for sake of not allowing arithmetic or operator->.  <a href="a00143.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html">blocked_range</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A range over which to iterate.  <a href="a00147.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.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="a00148.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00149.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="a00149.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.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="a00150.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.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="a00151.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html">combinable</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Thread-local storage with optional reduction.  <a href="a00153.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="a00208.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="a00208.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00154.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="a00154.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_hash</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html">concurrent_vector</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Concurrent vector container.  <a href="a00161.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00172.html">mutex</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Wrapper around the platform's native reader-writer lock.  <a href="a00172.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html">null_mutex</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A mutex which does nothing.  <a href="a00174.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html">null_rw_mutex</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A rw mutex which does nothing.  <a href="a00176.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00178.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="a00178.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00181.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="a00181.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="a00166.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="a00166.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00179.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="a00179.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html">simple_partitioner</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A simple partitioner.  <a href="a00193.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00145.html">auto_partitioner</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">An auto partitioner.  <a href="a00145.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00140.html">affinity_partitioner</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">An affinity partitioner.  <a href="a00140.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html">filter</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A stage in a pipeline.  <a href="a00164.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.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="a00209.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00180.html">pipeline</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A processing pipeline that applies filters to items.  <a href="a00180.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html">queuing_mutex</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Queuing lock with local-only spinning.  <a href="a00182.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00184.html">queuing_rw_mutex</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Reader-writer lock with local-only spinning.  <a href="a00184.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html">recursive_mutex</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Mutex that allows recursive mutex acquisition.  <a href="a00189.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00191.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="a00191.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00192.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="a00192.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00194.html">spin_mutex</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A lock that occupies a single byte.  <a href="a00194.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.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="a00196.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html">task_group_context</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Used to form groups of tasks.  <a href="a00201.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html">task</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Base class for user-defined tasks.  <a href="a00199.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00162.html">empty_task</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">task that does nothing. Useful for synchronization.  <a href="a00162.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html">task_list</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A list of children.  <a href="a00202.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><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="a00203.html">task_scheduler_init</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Class representing reference to tbb scheduler.  <a href="a00203.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.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="a00204.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.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="a00205.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00213.html">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="a00213.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.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="a00214.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html">bad_last_alloc</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Exception for concurrent containers.  <a href="a00146.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00168.html">improper_lock</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Exception for PPL locks.  <a href="a00168.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html">missing_wait</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Exception for missing wait on structured_task_group.  <a href="a00170.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.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="a00169.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00206.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="a00206.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.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="a00152.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.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="a00171.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00198.html">split</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Dummy type that distinguishes splitting constructor from copy constructor.  <a href="a00198.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00210.html">tick_count</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Absolute timestamp.  <a href="a00210.html#_details">More...</a><br></td></tr>
-<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00274.html">strict_ppl</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <br></td></tr>
-
+<code>#include <<a class="el" href="a00528.html">parallel_scan.h</a>></code>
 <p>
-<tr><td colspan="2"><br><h2>parallel_do</h2></td></tr>
-<tr><td colspan="2">See also requirements on <a class="el" href="parallel_do_body_req.html">parallel_do Body</a>. <br><br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g3383e2703977012b6f384d673410f1f7"></a><!-- doxytag: member="tbb::parallel_do" ref="g3383e2703977012b6f384d673410f1f7" args="(Iterator first, Iterator last, const Body &body)" -->
-template<typename Iterator, typename Body> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00275.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="a00275.html#g2617dc9b88b3285a7212599d49f74228">parallel_do</a> (Iterator first, Iterator last, const Body &body, <a class="el" href="a00201.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="a00275.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="a00275.html#g13cac5dd55c7533bccea43a51c33d0e5">parallel_for</a> (const Range &range, const Body &body, const <a class="el" href="a00193.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="a00275.html#ga7ac75d532389b55b9247f3fdb0b00d1">parallel_for</a> (const Range &range, const Body &body, const <a class="el" href="a00145.html">auto_partitioner</a> &partitioner)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with <a class="el" href="a00145.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="a00275.html#g9cd1b210ceb1c040f30e390b4a21bde8">parallel_for</a> (const Range &range, const Body &body, <a class="el" href="a00140.html">affinity_partitioner</a> &partitioner)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with <a class="el" href="a00140.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="a00275.html#g2d317a5e0078cd193125439fed60dfdc">parallel_for</a> (const Range &range, const Body &body, const <a class="el" href="a00193.html">simple_partitioner</a> &partitioner, <a class="el" href="a00201.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="a00275.html#g1c0700e3f85e83a788ff3ede88ebb7e9">parallel_for</a> (const Range &range, const Body &body, const <a class="el" href="a00145.html">auto_partitioner</a> &partitioner, <a class="el" href="a00201.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="a00145.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="a00275.html#g04b4696b67370c01353ff5974c8f1196">parallel_for</a> (const Range &range, const Body &body, <a class="el" href="a00140.html">affinity_partitioner</a> &partitioner, <a class="el" href="a00201.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="a00140.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="a00275.html#gcd40c32f319747e61a8f73fcfc452001">parallel_for_each</a> (InputIterator first, InputIterator last, const Function &f, <a class="el" href="a00201.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="a00275.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="a00275.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a> (const F0 &f0, const F1 &f1, <a class="el" href="a00201.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="a00201.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="a00201.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="a00201.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="a00201.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="a00201.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="a00201.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="a00201.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="a00201.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="a00275.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="a00275.html#gec1b7c03f9da909bef5db12e3d41bed3">parallel_reduce</a> (const Range &range, Body &body, const <a class="el" href="a00193.html">simple_partitioner</a> &partitioner)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00193.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="a00275.html#g18a19157e6245992fc00ca0adeb7dd37">parallel_reduce</a> (const Range &range, Body &body, const <a class="el" href="a00145.html">auto_partitioner</a> &partitioner)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00145.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="a00275.html#gc61e73fcc36c92d79a217fc355ff4a6b">parallel_reduce</a> (const Range &range, Body &body, <a class="el" href="a00140.html">affinity_partitioner</a> &partitioner)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00140.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="a00275.html#g45cb00c42a18e334bbde8b7535afe460">parallel_reduce</a> (const Range &range, Body &body, const <a class="el" href="a00193.html">simple_partitioner</a> &partitioner, <a class="el" href="a00201.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="a00275.html#g1c1ea1d7c61b3c225e92c70d669a53a5">parallel_reduce</a> (const Range &range, Body &body, const <a class="el" href="a00145.html">auto_partitioner</a> &partitioner, <a class="el" href="a00201.html">task_group_context</a> &context)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00145.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="a00275.html#gd9ac3a3811060314695f33b703c6e11b">parallel_reduce</a> (const Range &range, Body &body, <a class="el" href="a00140.html">affinity_partitioner</a> &partitioner, <a class="el" href="a00201.html">task_group_context</a> &context)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00140.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="a00275.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="a00275.html#gaddffeec0e892ac3d6fc7fc2053e1eca">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const <a class="el" href="a00193.html">simple_partitioner</a> &partitioner)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00193.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="a00275.html#gb175401f0729e40dd2c5860a17c14385">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const <a class="el" href="a00145.html">auto_partitioner</a> &partitioner)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00145.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="a00275.html#gb7f1f1828ae2b330ce05b8513a495154">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, <a class="el" href="a00140.html">affinity_partitioner</a> &partitioner)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00140.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="a00275.html#gfbc0cc2026d87f11a96bcd62788f5bb5">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const <a class="el" href="a00193.html">simple_partitioner</a> &partitioner, <a class="el" href="a00201.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="a00275.html#g630c90a399937d9d4ae70ff883186dfd">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const <a class="el" href="a00145.html">auto_partitioner</a> &partitioner, <a class="el" href="a00201.html">task_group_context</a> &context)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00145.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="a00275.html#g496bd7eadb3b97495ccb5655ef90319e">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, <a class="el" href="a00140.html">affinity_partitioner</a> &partitioner, <a class="el" href="a00201.html">task_group_context</a> &context)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00140.html">affinity_partitioner</a> and user-supplied context. <br></td></tr>
-<tr><td colspan="2"><br><h2>parallel_scan</h2></td></tr>
-<tr><td colspan="2">See also requirements on <a class="el" href="range_req.html">Range</a> and <a class="el" href="parallel_scan_body_req.html">parallel_scan Body</a>. <br><br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ged143f31dd3d96ded02ab3db915b91c7"></a><!-- doxytag: member="tbb::parallel_scan" ref="ged143f31dd3d96ded02ab3db915b91c7" args="(const Range &range, Body &body)" -->
-template<typename Range, typename Body> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00275.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="a00275.html#gc9fac8870b2e6365fb337014404529df">parallel_scan</a> (const Range &range, Body &body, const <a class="el" href="a00193.html">simple_partitioner</a> &partitioner)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with <a class="el" href="a00193.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="a00275.html#g62fde400a37bbca1a2fddc8e3d22f556">parallel_scan</a> (const Range &range, Body &body, const <a class="el" href="a00145.html">auto_partitioner</a> &partitioner)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with <a class="el" href="a00145.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="a00275.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="a00275.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="a00275.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="a00275.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="a00196.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="a00267.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="a00267.html#a8686246bb5d3664bd07563749970fef">memory_semantics</a> { <a class="el" href="a00267.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">__TBB_full_fence</a>, 
-<a class="el" href="a00267.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>, 
-<a class="el" href="a00267.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>
- }</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Specifies memory fencing.  <a href="a00267.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="a00267.html#a8622ae61b7e7737dac26542e181178e">ets_key_usage_type</a> { <b>ets_key_per_instance</b>, 
-<b>ets_no_key</b>
- }</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">enum for selecting between single key and key-per-instance versions <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>task_group_status</b> { <b>not_complete</b>, 
-<b>complete</b>, 
-<b>canceled</b>
- }</td></tr>
-
-<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2e067bc86f20023cf3034f2ac310927b"></a><!-- doxytag: member="tbb::__TBB_DECL_ATOMIC" ref="2e067bc86f20023cf3034f2ac310927b" args="(__TBB_LONG_LONG) __TBB_DECL_ATOMIC(unsigned __TBB_LONG_LONG) __TBB_DECL_ATOMIC(long) __TBB_DECL_ATOMIC(unsigned long) __TBB_DECL_ATOMIC_ALT(unsigned" -->
- </td><td class="memItemRight" valign="bottom"><b>__TBB_DECL_ATOMIC</b> (__TBB_LONG_LONG) __TBB_DECL_ATOMIC(unsigned __TBB_LONG_LONG) __TBB_DECL_ATOMIC(long) __TBB_DECL_ATOMIC(unsigned long) __TBB_DECL_ATOMIC_ALT(unsigned</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ad165cf61abbe349d413df2589679add"></a><!-- doxytag: member="tbb::__TBB_DECL_ATOMIC_ALT" ref="ad165cf61abbe349d413df2589679add" args="(int, ptrdiff_t) __TBB_DECL_ATOMIC(unsigned) __TBB_DECL_ATOMIC(int) __TBB_DECL_ATOMIC(unsigned short) __TBB_DECL_ATOMIC(short) __TBB_DECL_ATOMIC(char) __TBB_DECL_ATOMIC(signed char) __TBB_DECL_ATOMIC(unsigned char) __TBB_DECL_ATOMIC(wchar_t) template< typename T > st [...]
-size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00267.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="a00142.html">atomic</a>< T * ></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Specialization for atomic<T*> with arithmetic and operator->. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="7af9509624a62ea848afe775f892ed12"></a><!-- doxytag: member="tbb::operator==" ref="7af9509624a62ea848afe775f892ed12" args="(const cache_aligned_allocator< T > &, const cache_aligned_allocator< U > &)" -->
-template<typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00150.html">cache_aligned_allocator</a>< T > &, const <a class="el" href="a00150.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="a00150.html">cache_aligned_allocator</a>< T > &, const <a class="el" href="a00150.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="a00155.html">concurrent_hash_map</a>< Key, T, HashCompare, A1 > &a, const <a class="el" href="a00155.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="a00155.html">concurrent_hash_map</a>< Key, T, HashCompare, A1 > &a, const <a class="el" href="a00155.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="a00155.html">concurrent_hash_map</a>< Key, T, HashCompare, A > &a, <a class="el" href="a00155.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="a00161.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00161.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="a00161.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00161.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="a00161.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00161.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="a00161.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00161.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="a00161.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00161.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="a00161.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00161.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="a00161.html">concurrent_vector</a>< T, A > &a, <a class="el" href="a00161.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="a00191.html">scalable_allocator</a>< T > &, const <a class="el" href="a00191.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="a00191.html">scalable_allocator</a>< T > &, const <a class="el" href="a00191.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="a00204.html">tbb_allocator</a>< T > &, const <a class="el" href="a00204.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="a00204.html">tbb_allocator</a>< T > &, const <a class="el" href="a00204.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="a00213.html">zero_allocator</a>< T1, B1 > &a, const <a class="el" href="a00213.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="a00213.html">zero_allocator</a>< T1, B1 > &a, const <a class="el" href="a00213.html">zero_allocator</a>< T2, B2 > &b)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="823fa1c15dd829d1d9167157450ddcd9"></a><!-- doxytag: member="tbb::set_assertion_handler" ref="823fa1c15dd829d1d9167157450ddcd9" args="(assertion_handler_type new_handler)" -->
-<a class="el" href="a00267.html#ed375248ff6019a70ca0f9da528e5d0b">assertion_handler_type</a> __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00267.html#823fa1c15dd829d1d9167157450ddcd9">set_assertion_handler</a> (<a class="el" href="a00267.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="a00267.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="a00267.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="a00211.html">tick_count::interval_t</a> </td><td class="memItemRight" valign="bottom"><b>operator-</b> (const <a class="el" href="a00210.html">tick_count</a> &t1, const <a class="el" href="a00210.html">tick_count</a> &t0)</td></tr>
+<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>Static Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d45d2cf548e51140ad6faafbea8ca6b5"></a><!-- doxytag: member="tbb::pre_scan_tag::is_final_scan" ref="d45d2cf548e51140ad6faafbea8ca6b5" args="()" -->
+static bool </td><td class="memItemRight" valign="bottom"><b>is_final_scan</b> ()</td></tr>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-The namespace tbb contains all components of the library. <hr><h2>Enumeration Type Documentation</h2>
-<a class="anchor" name="a8686246bb5d3664bd07563749970fef"></a><!-- doxytag: member="tbb::memory_semantics" ref="a8686246bb5d3664bd07563749970fef" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">enum <a class="el" href="a00267.html#a8686246bb5d3664bd07563749970fef">tbb::memory_semantics</a>          </td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Specifies memory fencing. 
-<p>
-<dl compact><dt><b>Enumerator: </b></dt><dd>
-<table border="0" cellspacing="2" cellpadding="0">
-<tr><td valign="top"><em><a class="anchor" name="a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c"></a><!-- doxytag: member="__TBB_full_fence" ref="a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c" args="" -->__TBB_full_fence</em> </td><td>
-For internal use only. </td></tr>
-<tr><td valign="top"><em><a class="anchor" name="a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7"></a><!-- doxytag: member="acquire" ref="a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7" args="" -->acquire</em> </td><td>
-Acquire fence. </td></tr>
-<tr><td valign="top"><em><a class="anchor" name="a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70"></a><!-- doxytag: member="release" ref="a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70" args="" -->release</em> </td><td>
-Release fence. </td></tr>
-</table>
-</dl>
-
-</div>
-</div><p>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="3d1252787be39b4aef311f1cadaff9e8"></a><!-- doxytag: member="tbb::assertion_failure" ref="3d1252787be39b4aef311f1cadaff9e8" args="(const char *filename, int line, const char *expression, const char *comment)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void __TBB_EXPORTED_FUNC tbb::assertion_failure           </td>
-          <td>(</td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>filename</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>line</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>expression</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>comment</em></td><td> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td><td width="100%"></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Process an assertion failure. 
-<p>
-Normally called from __TBB_ASSERT macro. If assertion handler is null, print message for assertion failure and abort. Otherwise call the assertion handler. 
-</div>
-</div><p>
-<a class="anchor" name="a6858b22e90041c9c4669674ff39b056"></a><!-- doxytag: member="tbb::TBB_runtime_interface_version" ref="a6858b22e90041c9c4669674ff39b056" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">int __TBB_EXPORTED_FUNC tbb::TBB_runtime_interface_version           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-The function returns the interface version of the TBB shared library being used. 
+Used to indicate that the initial scan is being performed. 
 <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>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00528.html">parallel_scan.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00268.html b/doc/html/a00268.html
new file mode 100644
index 0000000..8cc1111
--- /dev/null
+++ b/doc/html/a00268.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::priority_queue_node< T, Compare > 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="a00362.html">tbb</a>::<a class="el" href="a00268.html">priority_queue_node</a></div>
+<h1>tbb::priority_queue_node< T, Compare > Class Template Reference</h1><!-- doxytag: class="tbb::priority_queue_node" --><!-- doxytag: inherits="tbb::buffer_node" -->Forwards messages in priority order.  
+<a href="#_details">More...</a>
+<p>
+<code>#include <<a class="el" href="a00466.html">graph.h</a>></code>
+<p>
+<p>Inheritance diagram for tbb::priority_queue_node< T, Compare >:
+<p><center><img src="a00268.png" usemap="#tbb::priority_queue_node< T, Compare >_map" border="0" alt=""></center>
+<map name="tbb::priority_queue_node< T, Compare >_map">
+<area href="a00225.html" alt="tbb::buffer_node< T >" shape="rect" coords="252,56,494,80">
+<area href="a00251.html" alt="tbb::graph_node" shape="rect" coords="0,0,242,24">
+<area href="a00277.html" alt="tbb::receiver< T >" shape="rect" coords="252,0,494,24">
+<area href="a00282.html" alt="tbb::sender< T >" shape="rect" coords="504,0,746,24">
+</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 Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="40fdedd4829aeae3ebd1a5fdaf39b23d"></a><!-- doxytag: member="tbb::priority_queue_node::input_type" ref="40fdedd4829aeae3ebd1a5fdaf39b23d" args="" -->
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00268.html#40fdedd4829aeae3ebd1a5fdaf39b23d">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="3b3fa4479416e7cb6d4a6a4b175c2b15"></a><!-- doxytag: member="tbb::priority_queue_node::output_type" ref="3b3fa4479416e7cb6d4a6a4b175c2b15" args="" -->
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00268.html#3b3fa4479416e7cb6d4a6a4b175c2b15">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="98900a87758cac05500fcbc74113cebf"></a><!-- doxytag: member="tbb::priority_queue_node::predecessor_type" ref="98900a87758cac05500fcbc74113cebf" args="" -->
+typedef <a class="el" href="a00282.html">sender</a>< <a class="el" href="a00268.html#40fdedd4829aeae3ebd1a5fdaf39b23d">input_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00268.html#98900a87758cac05500fcbc74113cebf">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="e01014f2e5ceea292c68f6fe47391c57"></a><!-- doxytag: member="tbb::priority_queue_node::successor_type" ref="e01014f2e5ceea292c68f6fe47391c57" args="" -->
+typedef <a class="el" href="a00277.html">receiver</a>< <a class="el" href="a00268.html#3b3fa4479416e7cb6d4a6a4b175c2b15">output_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00268.html#e01014f2e5ceea292c68f6fe47391c57">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="1630f68674c4b201346a391b1e8d3f5d"></a><!-- doxytag: member="tbb::priority_queue_node::priority_queue_node" ref="1630f68674c4b201346a391b1e8d3f5d" args="(graph &g)" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00268.html#1630f68674c4b201346a391b1e8d3f5d">priority_queue_node</a> (<a class="el" href="a00250.html">graph</a> &g)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">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="de11b7abff98005607d7fa7466faf7b0"></a><!-- doxytag: member="tbb::priority_queue_node::size_type" ref="de11b7abff98005607d7fa7466faf7b0" args="" -->
+typedef <a class="el" href="a00225.html">buffer_node</a>< T <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="9e233a0b91aa4622406999f82f275658"></a><!-- doxytag: member="tbb::priority_queue_node::item_type" ref="9e233a0b91aa4622406999f82f275658" args="" -->
+typedef <a class="el" href="a00225.html">buffer_node</a>< T <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="9da8c5e1d88446a861aaaf833dff9563"></a><!-- doxytag: member="tbb::priority_queue_node::prio_operation" ref="9da8c5e1d88446a861aaaf833dff9563" args="" -->
+typedef <a class="el" href="a00225.html">buffer_node</a>< T <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="d735772d27a4946170769b4a44fc62c2164d37794dce6b5f579b76189b6c0021"></a><!-- doxytag: member="tbb::priority_queue_node::WAIT" ref="d735772d27a4946170769b4a44fc62c2164d37794dce6b5f579b76189b6c0021" 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="d735772d27a4946170769b4a44fc62c2b65b5f4fbcf64463d6db76340f7813b6"></a><!-- doxytag: member="tbb::priority_queue_node::SUCCEEDED" ref="d735772d27a4946170769b4a44fc62c2b65b5f4fbcf64463d6db76340f7813b6" 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="d735772d27a4946170769b4a44fc62c211ee259c9aa9cc587e0e16386f14ce31"></a><!-- doxytag: member="tbb::priority_queue_node::FAILED" ref="d735772d27a4946170769b4a44fc62c211ee259c9aa9cc587e0e16386f14ce31" 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="89ea37a545db6d58f0efba624c5478e5"></a><!-- doxytag: member="tbb::priority_queue_node::handle_operations" ref="89ea37a545db6d58f0efba624c5478e5" 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="79161e73f79cc43b2c2b08367504dfda"></a><!-- doxytag: member="tbb::priority_queue_node::internal_forward" ref="79161e73f79cc43b2c2b08367504dfda" args="(prio_operation *op)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00268.html#79161e73f79cc43b2c2b08367504dfda">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="baf920c99c8b5cdb3274e69180d38721"></a><!-- doxytag: member="tbb::priority_queue_node::internal_push" ref="baf920c99c8b5cdb3274e69180d38721" 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="9ad1406abcb8944fce20fdffc536b802"></a><!-- doxytag: member="tbb::priority_queue_node::internal_pop" ref="9ad1406abcb8944fce20fdffc536b802" 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="2679c01cb715be0fa27daef8ca7abcd6"></a><!-- doxytag: member="tbb::priority_queue_node::internal_reserve" ref="2679c01cb715be0fa27daef8ca7abcd6" 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="f622ca82a370e324131d129007989f17"></a><!-- doxytag: member="tbb::priority_queue_node::internal_consume" ref="f622ca82a370e324131d129007989f17" 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="b72aaba1fed1691779f695b6aa052073"></a><!-- doxytag: member="tbb::priority_queue_node::internal_release" ref="b72aaba1fed1691779f695b6aa052073" 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>
+<h3>template<typename T, typename Compare = std::less<T>><br>
+ class tbb::priority_queue_node< T, Compare ></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="a00466.html">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/a00268.png b/doc/html/a00268.png
new file mode 100644
index 0000000..55c8b1f
Binary files /dev/null and b/doc/html/a00268.png differ
diff --git a/doc/html/a00269.html b/doc/html/a00269.html
new file mode 100644
index 0000000..dec2744
--- /dev/null
+++ b/doc/html/a00269.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>tbb::queue_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="a00362.html">tbb</a>::<a class="el" href="a00269.html">queue_node</a></div>
+<h1>tbb::queue_node< T > Class Template Reference</h1><!-- doxytag: class="tbb::queue_node" --><!-- doxytag: inherits="tbb::buffer_node" -->Forwards messages in FIFO order.  
+<a href="#_details">More...</a>
+<p>
+<code>#include <<a class="el" href="a00466.html">graph.h</a>></code>
+<p>
+<p>Inheritance diagram for tbb::queue_node< T >:
+<p><center><img src="a00269.png" usemap="#tbb::queue_node< T >_map" border="0" alt=""></center>
+<map name="tbb::queue_node< T >_map">
+<area href="a00225.html" alt="tbb::buffer_node< T >" shape="rect" coords="170,56,330,80">
+<area href="a00251.html" alt="tbb::graph_node" shape="rect" coords="0,0,160,24">
+<area href="a00277.html" alt="tbb::receiver< T >" shape="rect" coords="170,0,330,24">
+<area href="a00282.html" alt="tbb::sender< T >" shape="rect" coords="340,0,500,24">
+<area href="a00283.html" alt="tbb::sequencer_node< T >" shape="rect" coords="170,168,330,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="27016487003a4ff2908748c3cf11c1fe"></a><!-- doxytag: member="tbb::queue_node::input_type" ref="27016487003a4ff2908748c3cf11c1fe" args="" -->
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#27016487003a4ff2908748c3cf11c1fe">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="d227f122eebe2f9489ba763ff24fd6fb"></a><!-- doxytag: member="tbb::queue_node::output_type" ref="d227f122eebe2f9489ba763ff24fd6fb" args="" -->
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#d227f122eebe2f9489ba763ff24fd6fb">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="83bc7308a38f1d205377d78ec14931d1"></a><!-- doxytag: member="tbb::queue_node::predecessor_type" ref="83bc7308a38f1d205377d78ec14931d1" args="" -->
+typedef <a class="el" href="a00282.html">sender</a>< <a class="el" href="a00269.html#27016487003a4ff2908748c3cf11c1fe">input_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#83bc7308a38f1d205377d78ec14931d1">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="c3b1d76b66b1292f6a1b6dae52c67a0e"></a><!-- doxytag: member="tbb::queue_node::successor_type" ref="c3b1d76b66b1292f6a1b6dae52c67a0e" args="" -->
+typedef <a class="el" href="a00277.html">receiver</a>< <a class="el" href="a00269.html#d227f122eebe2f9489ba763ff24fd6fb">output_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#c3b1d76b66b1292f6a1b6dae52c67a0e">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="1564c6bf9573b13d6854b0e8f7ce2b68"></a><!-- doxytag: member="tbb::queue_node::queue_node" ref="1564c6bf9573b13d6854b0e8f7ce2b68" args="(graph &g)" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#1564c6bf9573b13d6854b0e8f7ce2b68">queue_node</a> (<a class="el" href="a00250.html">graph</a> &g)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">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="0e7be2008c0a07209fbf44e50f644615"></a><!-- doxytag: member="tbb::queue_node::size_type" ref="0e7be2008c0a07209fbf44e50f644615" args="" -->
+typedef <a class="el" href="a00225.html">buffer_node</a>< T <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="f68f9d697f8dc5304db1e2890b1c6706"></a><!-- doxytag: member="tbb::queue_node::queue_operation" ref="f68f9d697f8dc5304db1e2890b1c6706" args="" -->
+typedef <a class="el" href="a00225.html">buffer_node</a>< T <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="1003f4ce06f418a04dfb1e4ba782a074ad957ef8596b42f852dac7c3efc00fe0"></a><!-- doxytag: member="tbb::queue_node::WAIT" ref="1003f4ce06f418a04dfb1e4ba782a074ad957ef8596b42f852dac7c3efc00fe0" 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="1003f4ce06f418a04dfb1e4ba782a074db31905871417f86773801713c507df9"></a><!-- doxytag: member="tbb::queue_node::SUCCEEDED" ref="1003f4ce06f418a04dfb1e4ba782a074db31905871417f86773801713c507df9" 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="1003f4ce06f418a04dfb1e4ba782a0748dcea56812e8c7a7ae1dd26404bc2d05"></a><!-- doxytag: member="tbb::queue_node::FAILED" ref="1003f4ce06f418a04dfb1e4ba782a0748dcea56812e8c7a7ae1dd26404bc2d05" 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="fb58bac5ac355e5134c51125e601fa2a"></a><!-- doxytag: member="tbb::queue_node::internal_forward" ref="fb58bac5ac355e5134c51125e601fa2a" args="(queue_operation *op)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#fb58bac5ac355e5134c51125e601fa2a">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="6ea932194502a5e3a02f4aad24820f60"></a><!-- doxytag: member="tbb::queue_node::internal_pop" ref="6ea932194502a5e3a02f4aad24820f60" 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="017f4ba18079116367e856e2f0eb42e9"></a><!-- doxytag: member="tbb::queue_node::internal_reserve" ref="017f4ba18079116367e856e2f0eb42e9" 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="7bac37b32f69f4731195f7da1e4524d7"></a><!-- doxytag: member="tbb::queue_node::internal_consume" ref="7bac37b32f69f4731195f7da1e4524d7" 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><br>
+ class tbb::queue_node< T ></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="a00466.html">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/a00269.png b/doc/html/a00269.png
new file mode 100644
index 0000000..c2da07b
Binary files /dev/null and b/doc/html/a00269.png differ
diff --git a/doc/html/a00270.html b/doc/html/a00270.html
new file mode 100644
index 0000000..6824b2a
--- /dev/null
+++ b/doc/html/a00270.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::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>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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="a00362.html">tbb</a>::<a class="el" href="a00270.html">queuing_mutex</a></div>
+<h1>tbb::queuing_mutex Class Reference<br>
+<small>
+[<a class="el" href="a00374.html">Synchronization</a>]</small>
+</h1><!-- doxytag: class="tbb::queuing_mutex" -->Queuing lock with local-only spinning.  
+<a href="#_details">More...</a>
+<p>
+<code>#include <<a class="el" href="a00560.html">queuing_mutex.h</a>></code>
+<p>
+<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"><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="a00270.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>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a36f15b770a1bb0b56e33d7fa75ebd1a"></a><!-- doxytag: member="tbb::queuing_mutex::scoped_lock" ref="a36f15b770a1bb0b56e33d7fa75ebd1a" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00271.html">scoped_lock</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00271.html#_details">More...</a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Queuing lock with local-only spinning. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00560.html">queuing_mutex.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/a00271.html b/doc/html/a00271.html
new file mode 100644
index 0000000..298e651
--- /dev/null
+++ b/doc/html/a00271.html
@@ -0,0 +1,94 @@
+<!DOCTYPE HTML 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>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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="a00362.html">tbb</a>::<a class="el" href="a00270.html">queuing_mutex</a>::<a class="el" href="a00271.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="a00560.html">queuing_mutex.h</a>></code>
+<p>
+<a href="a00099.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00271.html#db0fa3967491014572e24d6607bdc971">scoped_lock</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="a00271.html#9b51ef972f5618ac17caadb58841ab6d">scoped_lock</a> (<a class="el" href="a00270.html">queuing_mutex</a> &m)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ac2c576a93570957d694192a5f491443"></a><!-- doxytag: member="tbb::queuing_mutex::scoped_lock::~scoped_lock" ref="ac2c576a93570957d694192a5f491443" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00271.html#ac2c576a93570957d694192a5f491443">~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="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="a00271.html#533e4fc8355ee321206a0609c42d909d">acquire</a> (<a class="el" href="a00270.html">queuing_mutex</a> &m)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="a00271.html#e5a014fb817599386a87170cf2cf51a9">try_acquire</a> (<a class="el" href="a00270.html">queuing_mutex</a> &m)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex if free (i.e. non-blocking). <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3bf2b8c87ff22115be9b2eac179f2d30"></a><!-- doxytag: member="tbb::queuing_mutex::scoped_lock::release" ref="3bf2b8c87ff22115be9b2eac179f2d30" args="()" -->
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00271.html#3bf2b8c87ff22115be9b2eac179f2d30">release</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+The scoped locking pattern. 
+<p>
+It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks. 
+<p>
+<hr><h2>Constructor & Destructor Documentation</h2>
+<a class="anchor" name="db0fa3967491014572e24d6607bdc971"></a><!-- doxytag: member="tbb::queuing_mutex::scoped_lock::scoped_lock" ref="db0fa3967491014572e24d6607bdc971" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">tbb::queuing_mutex::scoped_lock::scoped_lock           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Construct lock that has not acquired a mutex. 
+<p>
+Equivalent to zero-initialization of *this. 
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00560.html">queuing_mutex.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/a00272.html b/doc/html/a00272.html
new file mode 100644
index 0000000..ef65cd2
--- /dev/null
+++ b/doc/html/a00272.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>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>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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="a00362.html">tbb</a>::<a class="el" href="a00272.html">queuing_rw_mutex</a></div>
+<h1>tbb::queuing_rw_mutex Class Reference<br>
+<small>
+[<a class="el" href="a00374.html">Synchronization</a>]</small>
+</h1><!-- doxytag: class="tbb::queuing_rw_mutex" -->Reader-writer lock with local-only spinning.  
+<a href="#_details">More...</a>
+<p>
+<code>#include <<a class="el" href="a00561.html">queuing_rw_mutex.h</a>></code>
+<p>
+<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="85c90877c3447690ac4e2ac4ff8dea5e"></a><!-- doxytag: member="tbb::queuing_rw_mutex::queuing_rw_mutex" ref="85c90877c3447690ac4e2ac4ff8dea5e" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00272.html#85c90877c3447690ac4e2ac4ff8dea5e">queuing_rw_mutex</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct unacquired mutex. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1ba73e3d95cfdf8323880bc623af9099"></a><!-- doxytag: member="tbb::queuing_rw_mutex::~queuing_rw_mutex" ref="1ba73e3d95cfdf8323880bc623af9099" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00272.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="a00273.html">scoped_lock</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00273.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> 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00561.html">queuing_rw_mutex.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/a00273.html b/doc/html/a00273.html
new file mode 100644
index 0000000..c760ba3
--- /dev/null
+++ b/doc/html/a00273.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::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>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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="a00362.html">tbb</a>::<a class="el" href="a00272.html">queuing_rw_mutex</a>::<a class="el" href="a00273.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="a00561.html">queuing_rw_mutex.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>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="a00273.html#c62e365be7bcbba091c9ea7454a4d22c">scoped_lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a mutex.  <a href="#c62e365be7bcbba091c9ea7454a4d22c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><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="a00273.html#fbb8798792d3aebb136c46fc63d2529e">scoped_lock</a> (<a class="el" href="a00272.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="a00273.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="a00273.html#a8dd5ab8686e76de21587544dbb681e0">acquire</a> (<a class="el" href="a00272.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="a00273.html#2e4ff6c9ec2fee6682f95290d1f42baa">try_acquire</a> (<a class="el" href="a00272.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="a00273.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="a00273.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="a00273.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. 
+<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="a00561.html">queuing_rw_mutex.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/a00274.html b/doc/html/a00274.html
index 576ceec..141f667 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::strict_ppl Namespace 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>
@@ -9,50 +9,210 @@
   <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="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="namespaces.html"><span>Namespace List</span></a></li>
-    <li><a href="namespacemembers.html"><span>Namespace 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>
 <div class="nav">
-<a class="el" href="a00267.html">tbb</a>::<a class="el" href="a00274.html">strict_ppl</a></div>
-<h1>tbb::strict_ppl Namespace Reference</h1>For internal use only.  
+<a class="el" href="a00362.html">tbb</a>::<b>interface5</b>::<a class="el" href="a00274.html">reader_writer_lock</a></div>
+<h1>tbb::interface5::reader_writer_lock Class Reference<br>
+<small>
+[<a class="el" href="a00374.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>
-<table border="0" cellpadding="0" cellspacing="0">
+<code>#include <<a class="el" href="a00562.html">reader_writer_lock.h</a>></code>
+<p>
+<a href="a00102.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00159.html">concurrent_queue</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="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="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="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="a00274.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="a00274.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="a00274.html#c1431c4293e777efd9aab9a95c2a46e1">reader_writer_lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructs a new <a class="el" href="a00274.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="a00274.html#5135f64f7b7339017f33d956445edbee">~reader_writer_lock</a> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A high-performance thread-safe non-blocking concurrent queue.  <a href="a00159.html#_details">More...</a><br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="15c764c70c8a32e7a4b8c291d0cc8dde"></a><!-- doxytag: member="tbb::strict_ppl::parallel_for" ref="15c764c70c8a32e7a4b8c291d0cc8dde" args="(Index first, Index last, Index step, const Function &f)" -->
-template<typename Index, typename Function> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00274.html#15c764c70c8a32e7a4b8c291d0cc8dde">parallel_for</a> (Index first, Index last, Index step, const Function &f)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destructs a <a class="el" href="a00274.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="a00274.html#2653d1a2d560059a51219a8ceab3ade9">lock</a> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over a range of integers with a step provided. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="fb5925ad98ec9608139661cfd2b9b88f"></a><!-- doxytag: member="tbb::strict_ppl::parallel_for" ref="fb5925ad98ec9608139661cfd2b9b88f" args="(Index first, Index last, Index step, const Function &f, tbb::task_group_context &context)" -->
-template<typename Index, typename Function> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_for</b> (Index first, Index last, Index step, const Function &f, <a class="el" href="a00201.html">tbb::task_group_context</a> &context)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquires the <a class="el" href="a00274.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="a00274.html#721eb173e154ab38292273e9266a9b07">try_lock</a> ()</td></tr>
 
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="490399525b1e690ec31d6db964c6b272"></a><!-- doxytag: member="tbb::strict_ppl::parallel_for" ref="490399525b1e690ec31d6db964c6b272" args="(Index first, Index last, const Function &f)" -->
-template<typename Index, typename Function> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00274.html#490399525b1e690ec31d6db964c6b272">parallel_for</a> (Index first, Index last, const Function &f)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Tries to acquire the <a class="el" href="a00274.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="a00274.html#d9d16a24d9f6c3dada73c6b9ff214f5b">lock_read</a> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over a range of integers with a default step value. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="bda0b331c88a836cb756fff0f661d609"></a><!-- doxytag: member="tbb::strict_ppl::parallel_for" ref="bda0b331c88a836cb756fff0f661d609" args="(Index first, Index last, const Function &f, tbb::task_group_context &context)" -->
-template<typename Index, typename Function> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_for</b> (Index first, Index last, const Function &f, <a class="el" href="a00201.html">tbb::task_group_context</a> &context)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquires the <a class="el" href="a00274.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="a00274.html#595fb23952e3b89426b1f7938dea9b11">try_lock_read</a> ()</td></tr>
 
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Tries to acquire the <a class="el" href="a00274.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="a00274.html#5113b32689305599b2c36b5831547704">unlock</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Releases the <a class="el" href="a00274.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">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00275.html">scoped_lock</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped lock pattern for write locks.  <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">scoped_lock_read</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped lock pattern for read locks.  <a href="a00276.html#_details">More...</a><br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-For internal use only. <hr>
+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="a00274.html#6f921f0d7c1812ceb5674418c8b6ccaf">tbb::interface5::reader_writer_lock::status_t</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<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="a00275.html">scoped_lock</a> status:<p>
+waiting ----------> waiting_nonblocking | _____________/ | V V V active -----------------> invalid<p>
+State diagram for <a class="el" href="a00276.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="a00274.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="a00252.html">improper_lock</a> The context tries to acquire a <a class="el" href="a00274.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="a00274.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="a00252.html">improper_lock</a> The context tries to acquire a <a class="el" href="a00274.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="a00274.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="a00274.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="a00274.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="a00562.html">reader_writer_lock.h</a></ul>
+<hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00275.html b/doc/html/a00275.html
index 84943d8..1b98338 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>Algorithms</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>
@@ -10,332 +10,55 @@
     <li><a href="index.html"><span>Main Page</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="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">
+<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="a00362.html">tbb</a>::<b>interface5</b>::<a class="el" href="a00274.html">reader_writer_lock</a>::<a class="el" href="a00275.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="a00562.html">reader_writer_lock.h</a>></code>
+<p>
+<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>Classes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html">tbb::blocked_range< Value ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A range over which to iterate.  <a href="a00147.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.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="a00148.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00149.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="a00149.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="a00181.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="a00181.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="a00166.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="a00166.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00179.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="a00179.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html">tbb::simple_partitioner</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A simple partitioner.  <a href="a00193.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00145.html">tbb::auto_partitioner</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">An auto partitioner.  <a href="a00145.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html">tbb::filter</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A stage in a pipeline.  <a href="a00164.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.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="a00209.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00180.html">tbb::pipeline</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A processing pipeline that applies filters to items.  <a href="a00180.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00198.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="a00198.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="a00275.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="a00275.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="a00275.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="a00275.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="a00275.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="a00145.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="a00275.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="a00140.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="a00275.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="a00275.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="a00145.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="a00275.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="a00140.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="a00275.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="a00275.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="a00275.html#gd3e2998f171494f94c2103f4eb924084">tbb::parallel_invoke</a> (const F0 &f0, const F1 &f1, <a class="el" href="a00201.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="a00201.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="a00201.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="a00201.html">tbb::task_group_context</a> &context)</td></tr>
+<tr><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="a00275.html#cf19f20e082887c1bb0ba6b0911c3583">scoped_lock</a> (<a class="el" href="a00274.html">reader_writer_lock</a> &lock)</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="a00201.html">tbb::task_group_context</a> &context)</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="a00275.html#70246e0260493625ff956fa5926fc71f">~scoped_lock</a> ()</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="a00201.html">tbb::task_group_context</a> &context)</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="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="a00201.html">tbb::task_group_context</a> &context)</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="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="a00201.html">tbb::task_group_context</a> &context)</td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="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="a00201.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="a00275.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="a00275.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="a00193.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="a00275.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="a00145.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="a00275.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="a00140.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="a00275.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="a00275.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="a00145.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="a00275.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="a00140.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="a00275.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="a00275.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="a00193.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="a00275.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="a00145.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="a00275.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="a00140.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="a00275.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="a00275.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="a00145.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="a00275.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="a00140.html">affinity_partitioner</a> and user-supplied context. <br></td></tr>
-<tr><td colspan="2"><br><h2>parallel_scan</h2></td></tr>
-<tr><td colspan="2">See also requirements on <a class="el" href="range_req.html">Range</a> and <a class="el" href="parallel_scan_body_req.html">parallel_scan Body</a>. <br><br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ged143f31dd3d96ded02ab3db915b91c7"></a><!-- doxytag: member="algorithms::parallel_scan" ref="ged143f31dd3d96ded02ab3db915b91c7" args="(const Range &range, Body &body)" -->
-template<typename Range, typename Body> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00275.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="a00275.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="a00193.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="a00275.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="a00145.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="a00275.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="a00275.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="a00275.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">
-
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+The scoped lock pattern for write locks. 
 <p>
-Sorts the data in [begin,end) using the given comparator. 
+Scoped locks help avoid the common problem of forgetting to release the lock. This type is also serves as the node for queuing locks. 
 <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>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00562.html">reader_writer_lock.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00276.html b/doc/html/a00276.html
index b07b762..cb8c4ab 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>Containers</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>
@@ -10,38 +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="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">
+<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="a00362.html">tbb</a>::<b>interface5</b>::<a class="el" href="a00274.html">reader_writer_lock</a>::<a class="el" href="a00276.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="a00562.html">reader_writer_lock.h</a>></code>
+<p>
+<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>Classes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html">tbb::combinable< T ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Thread-local storage with optional reduction.  <a href="a00153.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html">tbb::interface4::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="a00155.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00159.html">tbb::strict_ppl::concurrent_queue< T, A ></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="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="a00276.html#87ab0dc8f7216e6ba0f7acd6aec33064">scoped_lock_read</a> (<a class="el" href="a00274.html">reader_writer_lock</a> &lock)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A high-performance thread-safe non-blocking concurrent queue.  <a href="a00159.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></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="a00276.html#bd21c5f3d555d64d1de8658e15bf4966">~scoped_lock_read</a> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A high-performance thread-safe blocking concurrent bounded queue.  <a href="a00154.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html">tbb::deprecated::concurrent_queue< T, A ></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 class="mdescLeft"> </td><td class="mdescRight">A high-performance thread-safe blocking concurrent bounded queue.  <a href="a00160.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a></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="mdescLeft"> </td><td class="mdescRight">Concurrent vector container.  <a href="a00161.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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">The <a class="el" href="a00163.html">enumerable_thread_specific</a> container.  <a href="a00163.html#_details">More...</a><br></td></tr>
 </table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+The scoped lock pattern for read locks. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00562.html">reader_writer_lock.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00277.html b/doc/html/a00277.html
index ccf8013..8ed75e7 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>Memory Allocation</title>
+<title>tbb::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>
@@ -10,301 +10,75 @@
     <li><a href="index.html"><span>Main Page</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="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="a00141.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="a00141.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.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="a00150.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.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="a00151.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00191.html">tbb::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="a00191.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00192.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="a00192.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.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="a00204.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.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="a00205.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00213.html">tbb::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="a00213.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.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="a00214.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="a00277.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="a00277.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="a00277.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="a00277.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="a00277.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="a00277.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="a00277.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="a00277.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="a00277.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">
-
+<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="a00362.html">tbb</a>::<a class="el" href="a00277.html">receiver</a></div>
+<h1>tbb::receiver< T > Class Template Reference</h1><!-- doxytag: class="tbb::receiver" -->Pure virtual template class that defines a receiver of messages of type T.  
+<a href="#_details">More...</a>
 <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">
-
+<code>#include <<a class="el" href="a00466.html">graph.h</a>></code>
 <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>Inheritance diagram for tbb::receiver< T >:
+<p><center><img src="a00277.png" usemap="#tbb::receiver< T >_map" border="0" alt=""></center>
+<map name="tbb::receiver< T >_map">
+<area href="a00224.html" alt="tbb::broadcast_node< T >" shape="rect" coords="0,56,242,80">
+<area href="a00225.html" alt="tbb::buffer_node< T >" shape="rect" coords="252,56,494,80">
+<area href="a00241.html" alt="tbb::continue_receiver" shape="rect" coords="504,56,746,80">
+<area href="a00304.html" alt="tbb::internal::two_phase_port< T >" shape="rect" coords="756,56,998,80">
+<area href="a00255.html" alt="tbb::limiter_node< T >" shape="rect" coords="1008,56,1250,80">
+<area href="a00268.html" alt="tbb::priority_queue_node< T, Compare >" shape="rect" coords="126,112,368,136">
+<area href="a00269.html" alt="tbb::queue_node< T >" shape="rect" coords="378,112,620,136">
+<area href="a00283.html" alt="tbb::sequencer_node< T >" shape="rect" coords="378,168,620,192">
+</map>
+<a href="a00043.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9cfd5ef0d67d5bbfb5f9a76d75e62765"></a><!-- doxytag: member="tbb::receiver::input_type" ref="9cfd5ef0d67d5bbfb5f9a76d75e62765" args="" -->
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00277.html#9cfd5ef0d67d5bbfb5f9a76d75e62765">input_type</a></td></tr>
 
-<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">
+<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="c802c845b51c6d129153b684d33f7310"></a><!-- doxytag: member="tbb::receiver::predecessor_type" ref="c802c845b51c6d129153b684d33f7310" args="" -->
+typedef <a class="el" href="a00282.html">sender</a>< T > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00277.html#c802c845b51c6d129153b684d33f7310">predecessor_type</a></td></tr>
 
-<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">
+<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="18f74b83abae0ee1e4ce07942797ef27"></a><!-- doxytag: member="tbb::receiver::~receiver" ref="18f74b83abae0ee1e4ce07942797ef27" args="()" -->
+virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="a00277.html#18f74b83abae0ee1e4ce07942797ef27">~receiver</a> ()</td></tr>
 
-<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">
+<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="6e5422b03b4570138f227b3d5d0073b8"></a><!-- doxytag: member="tbb::receiver::try_put" ref="6e5422b03b4570138f227b3d5d0073b8" args="(T t)=0" -->
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00277.html#6e5422b03b4570138f227b3d5d0073b8">try_put</a> (T t)=0</td></tr>
 
-<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">
+<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="14ae737c8fca4c8bf8e1a736dfbac444"></a><!-- doxytag: member="tbb::receiver::register_predecessor" ref="14ae737c8fca4c8bf8e1a736dfbac444" args="(predecessor_type &)" -->
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00277.html#14ae737c8fca4c8bf8e1a736dfbac444">register_predecessor</a> (<a class="el" href="a00282.html">predecessor_type</a> &)</td></tr>
 
-<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">
+<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="d2f23b40b328dc254a7c2a0a30f408e4"></a><!-- doxytag: member="tbb::receiver::remove_predecessor" ref="d2f23b40b328dc254a7c2a0a30f408e4" args="(predecessor_type &)" -->
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00277.html#d2f23b40b328dc254a7c2a0a30f408e4">remove_predecessor</a> (<a class="el" href="a00282.html">predecessor_type</a> &)</td></tr>
 
-<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">
+<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 T><br>
+ class tbb::receiver< T ></h3>
 
+Pure virtual template class that defines a receiver of messages of type T. 
 <p>
-The "realloc" analogue complementing scalable_malloc. 
-</div>
-</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00466.html">graph.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00277.png b/doc/html/a00277.png
new file mode 100644
index 0000000..fdfa4c6
Binary files /dev/null and b/doc/html/a00277.png differ
diff --git a/doc/html/a00278.html b/doc/html/a00278.html
index d292a79..4b1721c 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>Synchronization</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>
@@ -10,47 +10,106 @@
     <li><a href="index.html"><span>Main Page</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="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">
+<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="a00362.html">tbb</a>::<a class="el" href="a00278.html">recursive_mutex</a></div>
+<h1>tbb::recursive_mutex Class Reference<br>
+<small>
+[<a class="el" href="a00374.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="a00563.html">recursive_mutex.h</a>></code>
+<p>
+<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>Classes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html">tbb::atomic< T ></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="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="a00278.html#889fa8cc32dd707eef7c0f52dda09c0d">native_handle_type</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Primary template for atomic.  <a href="a00142.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00172.html">tbb::mutex</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="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="mdescLeft"> </td><td class="mdescRight">Wrapper around the platform's native reader-writer lock.  <a href="a00172.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html">tbb::null_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="d2fceb7f95c24a8cd1457d4527e4b8c6"></a><!-- doxytag: member="tbb::recursive_mutex::recursive_mutex" ref="d2fceb7f95c24a8cd1457d4527e4b8c6" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00278.html#d2fceb7f95c24a8cd1457d4527e4b8c6">recursive_mutex</a> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A mutex which does nothing.  <a href="a00174.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html">tbb::null_rw_mutex</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct unacquired <a class="el" href="a00278.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="a00278.html#4c342c69d47f4bb0b393535dee4015d6">lock</a> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A rw mutex which does nothing.  <a href="a00176.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html">tbb::queuing_mutex</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="a00278.html#86e719b0afee25704af11ab97694d240">try_lock</a> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Queuing lock with local-only spinning.  <a href="a00182.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00184.html">tbb::queuing_rw_mutex</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="a00278.html#f0a96e26b7f074588dc31e32524856ae">unlock</a> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Reader-writer lock with local-only spinning.  <a href="a00184.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00186.html">tbb::interface5::reader_writer_lock</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="a00278.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">Writer-preference reader-writer lock with local-only spinning on readers.  <a href="a00186.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html">tbb::recursive_mutex</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="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">Mutex that allows recursive mutex acquisition.  <a href="a00189.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00194.html">tbb::spin_mutex</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f6149d7541063d8b35afd98df6f0f89d"></a><!-- doxytag: member="tbb::recursive_mutex::is_recursive_mutex" ref="f6149d7541063d8b35afd98df6f0f89d" args="" -->
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = true</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A lock that occupies a single byte.  <a href="a00194.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html">tbb::spin_rw_mutex_v3</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">Fast, unfair, spinning reader-writer lock with backoff and writer-preference.  <a href="a00196.html#_details">More...</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::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="a00279.html">scoped_lock</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00279.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">
+
+<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="a00563.html">recursive_mutex.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00279.html b/doc/html/a00279.html
index 5879d12..353c73f 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>Timing</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>
@@ -10,20 +10,65 @@
     <li><a href="index.html"><span>Main Page</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="annotated.html"><span>Classes</span></a></li>
     <li><a href="files.html"><span>Files</span></a></li>
     <li><a href="pages.html"><span>Related Pages</span></a></li>
   </ul></div>
-<h1>Timing</h1><table border="0" cellpadding="0" cellspacing="0">
+<div class="tabs">
+  <ul>
+    <li><a href="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="a00362.html">tbb</a>::<a class="el" href="a00278.html">recursive_mutex</a>::<a class="el" href="a00279.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="a00563.html">recursive_mutex.h</a>></code>
+<p>
+<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>Classes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00210.html">tbb::tick_count</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="d82d4d36fbf9727a493d26ae50855fe7"></a><!-- doxytag: member="tbb::recursive_mutex::scoped_lock::scoped_lock" ref="d82d4d36fbf9727a493d26ae50855fe7" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#d82d4d36fbf9727a493d26ae50855fe7">scoped_lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a <a class="el" href="a00278.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="a00279.html#dec17713c4c1321ac8fec66816d0c602">scoped_lock</a> (<a class="el" href="a00278.html">recursive_mutex</a> &<a class="el" href="a00258.html">mutex</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c1197ffb8f3cd9d4fed71d7e06265b7c"></a><!-- doxytag: member="tbb::recursive_mutex::scoped_lock::~scoped_lock" ref="c1197ffb8f3cd9d4fed71d7e06265b7c" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.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="a00279.html#7fb04da37cccf8c99b1f9102d9074f9a">acquire</a> (<a class="el" href="a00278.html">recursive_mutex</a> &<a class="el" href="a00258.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="a00279.html#36bfc3e93e3ef6340abef4901444d340">try_acquire</a> (<a class="el" href="a00278.html">recursive_mutex</a> &<a class="el" href="a00258.html">mutex</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Try acquire lock on given <a class="el" href="a00278.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="a00279.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">Absolute timestamp.  <a href="a00210.html#_details">More...</a><br></td></tr>
 </table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+The scoped locking pattern. 
+<p>
+It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00563.html">recursive_mutex.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00280.html b/doc/html/a00280.html
index 200ccea..91d9c3b 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>Task Scheduling</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>
@@ -10,32 +10,100 @@
     <li><a href="index.html"><span>Main Page</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="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">
+<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="a00362.html">tbb</a>::<a class="el" href="a00280.html">scalable_allocator</a></div>
+<h1>tbb::scalable_allocator< T > Class Template Reference<br>
+<small>
+[<a class="el" href="a00373.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="a00564.html">scalable_allocator.h</a>></code>
+<p>
+<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>Classes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html">tbb::task_group_context</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="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="mdescLeft"> </td><td class="mdescRight">Used to form groups of tasks.  <a href="a00201.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html">tbb::task</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="cb96c23f650cf91a73e2810b54c481bb"></a><!-- doxytag: member="tbb::scalable_allocator::difference_type" ref="cb96c23f650cf91a73e2810b54c481bb" args="" -->
+typedef ptrdiff_t </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Base class for user-defined tasks.  <a href="a00199.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00162.html">tbb::empty_task</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="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="a00280.html">scalable_allocator</a> &)  throw ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">task that does nothing. Useful for synchronization.  <a href="a00162.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html">tbb::task_list</a></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="d56dc9f231c59f912297ac3c3b3b93b6"></a><!-- doxytag: member="tbb::scalable_allocator::scalable_allocator" ref="d56dc9f231c59f912297ac3c3b3b93b6" args="(const scalable_allocator< U > &)" -->
+template<typename U> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>scalable_allocator</b> (const <a class="el" href="a00280.html">scalable_allocator</a>< U > &)  throw ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A list of children.  <a href="a00202.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html">tbb::task_scheduler_init</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="78fa13a188b542ea724d45a9dbf5a071"></a><!-- doxytag: member="tbb::scalable_allocator::address" ref="78fa13a188b542ea724d45a9dbf5a071" args="(reference x) const " -->
+pointer </td><td class="memItemRight" valign="bottom"><b>address</b> (reference x) const </td></tr>
+
+<tr><td class="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="a00280.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="a00280.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="a00280.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="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ae824c87fcc35467057fd3304c5e97ba"></a><!-- doxytag: member="tbb::scalable_allocator::construct" ref="ae824c87fcc35467057fd3304c5e97ba" args="(pointer p, const value_type &value)" -->
+void </td><td class="memItemRight" valign="bottom"><b>construct</b> (pointer p, const value_type &value)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="743f878b04a492bf7ae0e82a64dc20c8"></a><!-- doxytag: member="tbb::scalable_allocator::destroy" ref="743f878b04a492bf7ae0e82a64dc20c8" args="(pointer p)" -->
+void </td><td class="memItemRight" valign="bottom"><b>destroy</b> (pointer p)</td></tr>
+
+<tr><td 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">Class representing reference to tbb scheduler.  <a href="a00203.html#_details">More...</a><br></td></tr>
 </table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template<typename T><br>
+ class tbb::scalable_allocator< T ></h3>
+
+Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. 
+<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="a00564.html">scalable_allocator.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00281.html b/doc/html/a00281.html
index 610375a..408f1a1 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>_concurrent_queue_internal.h Source File</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>
@@ -10,927 +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>_concurrent_queue_internal.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_concurrent_queue_internal_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_concurrent_queue_internal_H</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include "tbb_stddef.h"</span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include "tbb_machine.h"</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include "atomic.h"</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include "spin_mutex.h"</span>
-<a name="l00028"></a>00028 <span class="preprocessor">#include "cache_aligned_allocator.h"</span>
-<a name="l00029"></a>00029 <span class="preprocessor">#include "tbb_exception.h"</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include <new></span>
-<a name="l00031"></a>00031 
-<a name="l00032"></a>00032 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
-<a name="l00033"></a>00033 <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="l00034"></a>00034 <span class="preprocessor">    #pragma warning (push)</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4530)</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 <iterator></span>
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
-<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</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><a class="code" href="a00267.html">00045</a> <span class="keyword">namespace </span>tbb {
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 <span class="preprocessor">#if !__TBB_TEMPLATE_FRIENDS_BROKEN</span>
-<a name="l00048"></a>00048 <span class="preprocessor"></span>
-<a name="l00049"></a>00049 <span class="comment">// forward declaration</span>
-<a name="l00050"></a><a class="code" href="a00274.html">00050</a> <span class="keyword">namespace </span>strict_ppl {
-<a name="l00051"></a>00051 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> A> <span class="keyword">class </span><a class="code" href="a00159.html">concurrent_queue</a>;
-<a name="l00052"></a>00052 }
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> A> <span class="keyword">class </span><a class="code" href="a00154.html">concurrent_bounded_queue</a>;
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 <span class="keyword">namespace </span>deprecated {
-<a name="l00057"></a>00057 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> A> <span class="keyword">class </span><a class="code" href="a00159.html">concurrent_queue</a>;
-<a name="l00058"></a>00058 }
-<a name="l00059"></a>00059 <span class="preprocessor">#endif</span>
-<a name="l00060"></a>00060 <span class="preprocessor"></span>
-<a name="l00062"></a>00062 <span class="keyword">namespace </span>strict_ppl {
-<a name="l00063"></a>00063 
-<a name="l00065"></a>00065 <span class="keyword">namespace </span>internal {
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067 <span class="keyword">using namespace </span>tbb::internal;
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069 <span class="keyword">typedef</span> size_t ticket;
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">class </span>micro_queue ;
-<a name="l00072"></a>00072 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">class </span>micro_queue_pop_finalizer ;
-<a name="l00073"></a>00073 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">class </span>concurrent_queue_base_v3;
-<a name="l00074"></a>00074 
-<a name="l00076"></a>00076 
-<a name="l00079"></a>00079 <span class="keyword">struct </span>concurrent_queue_rep_base : no_copy {
-<a name="l00080"></a>00080     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">friend</span> <span class="keyword">class </span>micro_queue;
-<a name="l00081"></a>00081     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_queue_base_v3;
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083 <span class="keyword">protected</span>:
-<a name="l00085"></a>00085     <span class="keyword">static</span> <span class="keyword">const</span> size_t phi = 3;
-<a name="l00086"></a>00086 
-<a name="l00087"></a>00087 <span class="keyword">public</span>:
-<a name="l00088"></a>00088     <span class="comment">// must be power of 2</span>
-<a name="l00089"></a>00089     <span class="keyword">static</span> <span class="keyword">const</span> size_t n_queue = 8;
-<a name="l00090"></a>00090 
-<a name="l00092"></a>00092     <span class="keyword">struct </span>page {
-<a name="l00093"></a>00093         page* next;
-<a name="l00094"></a>00094         uintptr_t mask; 
-<a name="l00095"></a>00095     };
-<a name="l00096"></a>00096 
-<a name="l00097"></a>00097     atomic<ticket> head_counter;
-<a name="l00098"></a>00098     <span class="keywordtype">char</span> pad1[NFS_MaxLineSize-<span class="keyword">sizeof</span>(atomic<ticket>)];
-<a name="l00099"></a>00099     atomic<ticket> tail_counter;
-<a name="l00100"></a>00100     <span class="keywordtype">char</span> pad2[NFS_MaxLineSize-<span class="keyword">sizeof</span>(atomic<ticket>)];
-<a name="l00101"></a>00101 
-<a name="l00103"></a>00103     size_t items_per_page;
-<a name="l00104"></a>00104 
-<a name="l00106"></a>00106     size_t item_size;
-<a name="l00107"></a>00107 
-<a name="l00109"></a>00109     atomic<size_t> n_invalid_entries;
-<a name="l00110"></a>00110 
-<a name="l00111"></a>00111     <span class="keywordtype">char</span> pad3[NFS_MaxLineSize-<span class="keyword">sizeof</span>(size_t)-<span class="keyword">sizeof</span>(size_t)-<span class="keyword">sizeof</span>(atomic<size_t>)];
-<a name="l00112"></a>00112 } ;
-<a name="l00113"></a>00113 
-<a name="l00114"></a>00114 <span class="keyword">inline</span> <span class="keywordtype">bool</span> is_valid_page(<span class="keyword">const</span> concurrent_queue_rep_base::page* p) {
-<a name="l00115"></a>00115     <span class="keywordflow">return</span> uintptr_t(p)>1;
-<a name="l00116"></a>00116 }
-<a name="l00117"></a>00117 
-<a name="l00119"></a>00119 
-<a name="l00122"></a>00122 <span class="keyword">class </span>concurrent_queue_page_allocator
-<a name="l00123"></a>00123 {
-<a name="l00124"></a>00124     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">friend</span> <span class="keyword">class </span>micro_queue ;
-<a name="l00125"></a>00125     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">friend</span> <span class="keyword">class </span>micro_queue_pop_finalizer ;
-<a name="l00126"></a>00126 <span class="keyword">protected</span>:
-<a name="l00127"></a>00127     <span class="keyword">virtual</span> ~concurrent_queue_page_allocator() {}
-<a name="l00128"></a>00128 <span class="keyword">private</span>:
-<a name="l00129"></a>00129     <span class="keyword">virtual</span> concurrent_queue_rep_base::page* allocate_page() = 0;
-<a name="l00130"></a>00130     <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate_page( concurrent_queue_rep_base::page* p ) = 0;
-<a name="l00131"></a>00131 } ;
-<a name="l00132"></a>00132 
-<a name="l00133"></a>00133 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
-<a name="l00134"></a>00134 <span class="preprocessor"></span><span class="comment">// unary minus operator applied to unsigned type, result still unsigned</span>
-<a name="l00135"></a>00135 <span class="preprocessor">#pragma warning( push )</span>
-<a name="l00136"></a>00136 <span class="preprocessor"></span><span class="preprocessor">#pragma warning( disable: 4146 )</span>
-<a name="l00137"></a>00137 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00138"></a>00138 <span class="preprocessor"></span>
-<a name="l00140"></a>00140 
-<a name="l00142"></a>00142 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00143"></a>00143 <span class="keyword">class </span>micro_queue : no_copy {
-<a name="l00144"></a>00144     <span class="keyword">typedef</span> concurrent_queue_rep_base::page page;
-<a name="l00145"></a>00145 
-<a name="l00147"></a>00147     <span class="keyword">class </span>destroyer: no_copy {
-<a name="l00148"></a>00148         T& my_value;
-<a name="l00149"></a>00149     <span class="keyword">public</span>:
-<a name="l00150"></a>00150         destroyer( T& value ) : my_value(value) {}
-<a name="l00151"></a>00151         ~destroyer() {my_value.~T();}          
-<a name="l00152"></a>00152     };
-<a name="l00153"></a>00153 
-<a name="l00154"></a>00154     <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="l00155"></a>00155         <span class="keyword">new</span>( &get_ref(dst,index) ) T(*static_cast<const T*>(src)); 
-<a name="l00156"></a>00156     }
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158     <span class="keywordtype">void</span> copy_item( page& dst, size_t dindex, <span class="keyword">const</span> page& src, size_t sindex ) {
-<a name="l00159"></a>00159         <span class="keyword">new</span>( &get_ref(dst,dindex) ) T( get_ref(const_cast<page&>(src),sindex) );
-<a name="l00160"></a>00160     }
-<a name="l00161"></a>00161 
-<a name="l00162"></a>00162     <span class="keywordtype">void</span> assign_and_destroy_item( <span class="keywordtype">void</span>* dst, page& src, size_t index ) {
-<a name="l00163"></a>00163         T& from = get_ref(src,index);
-<a name="l00164"></a>00164         destroyer d(from);
-<a name="l00165"></a>00165         *static_cast<T*>(dst) = from;
-<a name="l00166"></a>00166     }
-<a name="l00167"></a>00167 
-<a name="l00168"></a>00168     <span class="keywordtype">void</span> spin_wait_until_my_turn( atomic<ticket>& counter, ticket k, concurrent_queue_rep_base& rb ) <span class="keyword">const </span>;
-<a name="l00169"></a>00169 
-<a name="l00170"></a>00170 <span class="keyword">public</span>:
-<a name="l00171"></a>00171     <span class="keyword">friend</span> <span class="keyword">class </span>micro_queue_pop_finalizer<T>;
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173     <span class="keyword">struct </span>padded_page: page {
-<a name="l00175"></a>00175         padded_page(); 
-<a name="l00177"></a>00177         <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> padded_page& );
-<a name="l00179"></a>00179         T last;
-<a name="l00180"></a>00180     };
-<a name="l00181"></a>00181 
-<a name="l00182"></a>00182     <span class="keyword">static</span> T& get_ref( page& p, size_t index ) {
-<a name="l00183"></a>00183         <span class="keywordflow">return</span> (&static_cast<padded_page*>(static_cast<void*>(&p))->last)[index];
-<a name="l00184"></a>00184     }
-<a name="l00185"></a>00185 
-<a name="l00186"></a>00186     atomic<page*> head_page;
-<a name="l00187"></a>00187     atomic<ticket> head_counter;
-<a name="l00188"></a>00188 
-<a name="l00189"></a>00189     atomic<page*> tail_page;
-<a name="l00190"></a>00190     atomic<ticket> tail_counter;
-<a name="l00191"></a>00191 
-<a name="l00192"></a>00192     spin_mutex page_mutex;
-<a name="l00193"></a>00193     
-<a name="l00194"></a>00194     <span class="keywordtype">void</span> push( <span class="keyword">const</span> <span class="keywordtype">void</span>* item, ticket k, concurrent_queue_base_v3<T>& base ) ;
-<a name="l00195"></a>00195 
-<a name="l00196"></a>00196     <span class="keywordtype">bool</span> pop( <span class="keywordtype">void</span>* dst, ticket k, concurrent_queue_base_v3<T>& base ) ;
-<a name="l00197"></a>00197 
-<a name="l00198"></a>00198     micro_queue& assign( <span class="keyword">const</span> micro_queue& src, concurrent_queue_base_v3<T>& base ) ;
-<a name="l00199"></a>00199 
-<a name="l00200"></a>00200     page* make_copy( concurrent_queue_base_v3<T>& base, <span class="keyword">const</span> page* src_page, size_t begin_in_page, size_t end_in_page, ticket& g_index ) ;
-<a name="l00201"></a>00201 
-<a name="l00202"></a>00202     <span class="keywordtype">void</span> invalidate_page_and_rethrow( ticket k ) ;
-<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> T>
-<a name="l00206"></a>00206 <span class="keywordtype">void</span> micro_queue<T>::spin_wait_until_my_turn( atomic<ticket>& counter, ticket k, concurrent_queue_rep_base& rb )<span class="keyword"> const </span>{
-<a name="l00207"></a>00207     atomic_backoff backoff;
-<a name="l00208"></a>00208     <span class="keywordflow">do</span> {
-<a name="l00209"></a>00209         backoff.pause();
-<a name="l00210"></a>00210         <span class="keywordflow">if</span>( counter&1 ) {
-<a name="l00211"></a>00211             ++rb.n_invalid_entries;
-<a name="l00212"></a>00212             throw_exception( eid_bad_last_alloc );
-<a name="l00213"></a>00213         }
-<a name="l00214"></a>00214     } <span class="keywordflow">while</span>( counter!=k ) ;
-<a name="l00215"></a>00215 }
-<a name="l00216"></a>00216 
-<a name="l00217"></a>00217 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00218"></a>00218 <span class="keywordtype">void</span> micro_queue<T>::push( <span class="keyword">const</span> <span class="keywordtype">void</span>* item, ticket k, concurrent_queue_base_v3<T>& base ) {
-<a name="l00219"></a>00219     k &= -concurrent_queue_rep_base::n_queue;
-<a name="l00220"></a>00220     page* p = NULL;
-<a name="l00221"></a>00221     size_t index = k/concurrent_queue_rep_base::n_queue & (base.my_rep->items_per_page-1);
-<a name="l00222"></a>00222     <span class="keywordflow">if</span>( !index ) {
-<a name="l00223"></a>00223         __TBB_TRY {
-<a name="l00224"></a>00224             concurrent_queue_page_allocator& pa = base;
-<a name="l00225"></a>00225             p = pa.allocate_page();
-<a name="l00226"></a>00226         } __TBB_CATCH (...) {
-<a name="l00227"></a>00227             ++base.my_rep->n_invalid_entries;
-<a name="l00228"></a>00228             invalidate_page_and_rethrow( k );
-<a name="l00229"></a>00229         }
-<a name="l00230"></a>00230         p->mask = 0;
-<a name="l00231"></a>00231         p->next = NULL;
-<a name="l00232"></a>00232     }
-<a name="l00233"></a>00233     
-<a name="l00234"></a>00234     <span class="keywordflow">if</span>( tail_counter!=k ) spin_wait_until_my_turn( tail_counter, k, *base.my_rep );
-<a name="l00235"></a>00235         
-<a name="l00236"></a>00236     <span class="keywordflow">if</span>( p ) {
-<a name="l00237"></a>00237         spin_mutex::scoped_lock lock( page_mutex );
-<a name="l00238"></a>00238         page* q = tail_page;
-<a name="l00239"></a>00239         <span class="keywordflow">if</span>( is_valid_page(q) )
-<a name="l00240"></a>00240             q->next = p;
-<a name="l00241"></a>00241         <span class="keywordflow">else</span>
-<a name="l00242"></a>00242             head_page = p; 
-<a name="l00243"></a>00243         tail_page = p;
-<a name="l00244"></a>00244     } <span class="keywordflow">else</span> {
-<a name="l00245"></a>00245         p = tail_page;
-<a name="l00246"></a>00246     }
-<a name="l00247"></a>00247    
-<a name="l00248"></a>00248     __TBB_TRY {
-<a name="l00249"></a>00249         copy_item( *p, index, item );
-<a name="l00250"></a>00250         <span class="comment">// If no exception was thrown, mark item as present.</span>
-<a name="l00251"></a>00251         p->mask |= uintptr_t(1)<<index;
-<a name="l00252"></a>00252         tail_counter += concurrent_queue_rep_base::n_queue; 
-<a name="l00253"></a>00253     } __TBB_CATCH (...) {
-<a name="l00254"></a>00254         ++base.my_rep->n_invalid_entries;
-<a name="l00255"></a>00255         tail_counter += concurrent_queue_rep_base::n_queue; 
-<a name="l00256"></a>00256         __TBB_RETHROW();
-<a name="l00257"></a>00257     }
-<a name="l00258"></a>00258 }
-<a name="l00259"></a>00259 
-<a name="l00260"></a>00260 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00261"></a>00261 <span class="keywordtype">bool</span> micro_queue<T>::pop( <span class="keywordtype">void</span>* dst, ticket k, concurrent_queue_base_v3<T>& base ) {
-<a name="l00262"></a>00262     k &= -concurrent_queue_rep_base::n_queue;
-<a name="l00263"></a>00263     <span class="keywordflow">if</span>( head_counter!=k ) spin_wait_until_eq( head_counter, k );
-<a name="l00264"></a>00264     <span class="keywordflow">if</span>( tail_counter==k ) spin_wait_while_eq( tail_counter, k );
-<a name="l00265"></a>00265     page& p = *head_page;
-<a name="l00266"></a>00266     __TBB_ASSERT( &p, NULL );
-<a name="l00267"></a>00267     size_t index = k/concurrent_queue_rep_base::n_queue & (base.my_rep->items_per_page-1);
-<a name="l00268"></a>00268     <span class="keywordtype">bool</span> success = <span class="keyword">false</span>; 
-<a name="l00269"></a>00269     {
-<a name="l00270"></a>00270         micro_queue_pop_finalizer<T> finalizer( *<span class="keyword">this</span>, base, k+concurrent_queue_rep_base::n_queue, index==base.my_rep->items_per_page-1 ? &p : NULL ); 
-<a name="l00271"></a>00271         <span class="keywordflow">if</span>( p.mask & uintptr_t(1)<<index ) {
-<a name="l00272"></a>00272             success = <span class="keyword">true</span>;
-<a name="l00273"></a>00273             assign_and_destroy_item( dst, p, index );
-<a name="l00274"></a>00274         } <span class="keywordflow">else</span> {
-<a name="l00275"></a>00275             --base.my_rep->n_invalid_entries;
-<a name="l00276"></a>00276         }
-<a name="l00277"></a>00277     }
-<a name="l00278"></a>00278     <span class="keywordflow">return</span> success;
-<a name="l00279"></a>00279 }
-<a name="l00280"></a>00280 
-<a name="l00281"></a>00281 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00282"></a>00282 micro_queue<T>& micro_queue<T>::assign( <span class="keyword">const</span> micro_queue<T>& src, concurrent_queue_base_v3<T>& base ) {
-<a name="l00283"></a>00283     head_counter = src.head_counter;
-<a name="l00284"></a>00284     tail_counter = src.tail_counter;
-<a name="l00285"></a>00285     page_mutex   = src.page_mutex;
-<a name="l00286"></a>00286 
-<a name="l00287"></a>00287     <span class="keyword">const</span> page* srcp = src.head_page;
-<a name="l00288"></a>00288     <span class="keywordflow">if</span>( is_valid_page(srcp) ) {
-<a name="l00289"></a>00289         ticket g_index = head_counter;
-<a name="l00290"></a>00290         __TBB_TRY {
-<a name="l00291"></a>00291             size_t n_items  = (tail_counter-head_counter)/concurrent_queue_rep_base::n_queue;
-<a name="l00292"></a>00292             size_t index = head_counter/concurrent_queue_rep_base::n_queue & (base.my_rep->items_per_page-1);
-<a name="l00293"></a>00293             size_t end_in_first_page = (index+n_items<base.my_rep->items_per_page)?(index+n_items):base.my_rep->items_per_page;
-<a name="l00294"></a>00294 
-<a name="l00295"></a>00295             head_page = make_copy( base, srcp, index, end_in_first_page, g_index );
-<a name="l00296"></a>00296             page* cur_page = head_page;
-<a name="l00297"></a>00297 
-<a name="l00298"></a>00298             <span class="keywordflow">if</span>( srcp != src.tail_page ) {
-<a name="l00299"></a>00299                 <span class="keywordflow">for</span>( srcp = srcp->next; srcp!=src.tail_page; srcp=srcp->next ) {
-<a name="l00300"></a>00300                     cur_page->next = make_copy( base, srcp, 0, base.my_rep->items_per_page, g_index );
-<a name="l00301"></a>00301                     cur_page = cur_page->next;
-<a name="l00302"></a>00302                 }
-<a name="l00303"></a>00303 
-<a name="l00304"></a>00304                 __TBB_ASSERT( srcp==src.tail_page, NULL );
-<a name="l00305"></a>00305                 size_t last_index = tail_counter/concurrent_queue_rep_base::n_queue & (base.my_rep->items_per_page-1);
-<a name="l00306"></a>00306                 <span class="keywordflow">if</span>( last_index==0 ) last_index = base.my_rep->items_per_page;
-<a name="l00307"></a>00307 
-<a name="l00308"></a>00308                 cur_page->next = make_copy( base, srcp, 0, last_index, g_index );
-<a name="l00309"></a>00309                 cur_page = cur_page->next;
-<a name="l00310"></a>00310             }
-<a name="l00311"></a>00311             tail_page = cur_page;
-<a name="l00312"></a>00312         } __TBB_CATCH (...) {
-<a name="l00313"></a>00313             invalidate_page_and_rethrow( g_index );
-<a name="l00314"></a>00314         }
-<a name="l00315"></a>00315     } <span class="keywordflow">else</span> {
-<a name="l00316"></a>00316         head_page = tail_page = NULL;
-<a name="l00317"></a>00317     }
-<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 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00322"></a>00322 <span class="keywordtype">void</span> micro_queue<T>::invalidate_page_and_rethrow( ticket k ) {
-<a name="l00323"></a>00323     <span class="comment">// Append an invalid page at address 1 so that no more pushes are allowed.</span>
-<a name="l00324"></a>00324     page* invalid_page = (page*)uintptr_t(1);
-<a name="l00325"></a>00325     {
-<a name="l00326"></a>00326         spin_mutex::scoped_lock lock( page_mutex );
-<a name="l00327"></a>00327         tail_counter = k+concurrent_queue_rep_base::n_queue+1;
-<a name="l00328"></a>00328         page* q = tail_page;
-<a name="l00329"></a>00329         <span class="keywordflow">if</span>( is_valid_page(q) )
-<a name="l00330"></a>00330             q->next = invalid_page;
-<a name="l00331"></a>00331         <span class="keywordflow">else</span>
-<a name="l00332"></a>00332             head_page = invalid_page;
-<a name="l00333"></a>00333         tail_page = invalid_page;
-<a name="l00334"></a>00334     }
-<a name="l00335"></a>00335     __TBB_RETHROW();
-<a name="l00336"></a>00336 }
-<a name="l00337"></a>00337 
-<a name="l00338"></a>00338 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00339"></a>00339 concurrent_queue_rep_base::page* micro_queue<T>::make_copy( concurrent_queue_base_v3<T>& base, <span class="keyword">const</span> concurrent_queue_rep_base::page* src_page, size_t begin_in_page, size_t end_in_page, ticket& g_index ) {
-<a name="l00340"></a>00340     concurrent_queue_page_allocator& pa = base;
-<a name="l00341"></a>00341     page* new_page = pa.allocate_page();
-<a name="l00342"></a>00342     new_page->next = NULL;
-<a name="l00343"></a>00343     new_page->mask = src_page->mask;
-<a name="l00344"></a>00344     <span class="keywordflow">for</span>( ; begin_in_page!=end_in_page; ++begin_in_page, ++g_index )
-<a name="l00345"></a>00345         <span class="keywordflow">if</span>( new_page->mask & uintptr_t(1)<<begin_in_page )
-<a name="l00346"></a>00346             copy_item( *new_page, begin_in_page, *src_page, begin_in_page );
-<a name="l00347"></a>00347     <span class="keywordflow">return</span> new_page;
-<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> T>
-<a name="l00351"></a>00351 <span class="keyword">class </span>micro_queue_pop_finalizer: no_copy {
-<a name="l00352"></a>00352     <span class="keyword">typedef</span> concurrent_queue_rep_base::page page;
-<a name="l00353"></a>00353     ticket my_ticket;
-<a name="l00354"></a>00354     micro_queue<T>& my_queue;
-<a name="l00355"></a>00355     page* my_page; 
-<a name="l00356"></a>00356     concurrent_queue_page_allocator& allocator;
-<a name="l00357"></a>00357 <span class="keyword">public</span>:
-<a name="l00358"></a>00358     micro_queue_pop_finalizer( micro_queue<T>& queue, concurrent_queue_base_v3<T>& b, ticket k, page* p ) :
-<a name="l00359"></a>00359         my_ticket(k), my_queue(queue), my_page(p), allocator(b)
-<a name="l00360"></a>00360     {}
-<a name="l00361"></a>00361     ~micro_queue_pop_finalizer() ;
-<a name="l00362"></a>00362 };
-<a name="l00363"></a>00363 
-<a name="l00364"></a>00364 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00365"></a>00365 micro_queue_pop_finalizer<T>::~micro_queue_pop_finalizer() {
-<a name="l00366"></a>00366     page* p = my_page;
-<a name="l00367"></a>00367     <span class="keywordflow">if</span>( is_valid_page(p) ) {
-<a name="l00368"></a>00368         spin_mutex::scoped_lock lock( my_queue.page_mutex );
-<a name="l00369"></a>00369         page* q = p->next;
-<a name="l00370"></a>00370         my_queue.head_page = q;
-<a name="l00371"></a>00371         <span class="keywordflow">if</span>( !is_valid_page(q) ) {
-<a name="l00372"></a>00372             my_queue.tail_page = NULL;
-<a name="l00373"></a>00373         }
-<a name="l00374"></a>00374     }
-<a name="l00375"></a>00375     my_queue.head_counter = my_ticket;
-<a name="l00376"></a>00376     <span class="keywordflow">if</span>( is_valid_page(p) ) {
-<a name="l00377"></a>00377         allocator.deallocate_page( p );
-<a name="l00378"></a>00378     }
-<a name="l00379"></a>00379 }
-<a name="l00380"></a>00380 
-<a name="l00381"></a>00381 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
-<a name="l00382"></a>00382 <span class="preprocessor"></span><span class="preprocessor">#pragma warning( pop )</span>
-<a name="l00383"></a>00383 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4146 is back</span>
-<a name="l00384"></a>00384 <span class="preprocessor"></span>
-<a name="l00385"></a>00385 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">class </span>concurrent_queue_iterator_rep ;
-<a name="l00386"></a>00386 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">class </span>concurrent_queue_iterator_base_v3;
-<a name="l00387"></a>00387 
-<a name="l00389"></a>00389 
-<a name="l00392"></a>00392 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00393"></a>00393 <span class="keyword">struct </span>concurrent_queue_rep : <span class="keyword">public</span> concurrent_queue_rep_base {
-<a name="l00394"></a>00394     micro_queue<T> array[n_queue];
-<a name="l00395"></a>00395 
-<a name="l00397"></a>00397     <span class="keyword">static</span> size_t index( ticket k ) {
-<a name="l00398"></a>00398         <span class="keywordflow">return</span> k*phi%n_queue;
-<a name="l00399"></a>00399     }
-<a name="l00400"></a>00400 
-<a name="l00401"></a>00401     micro_queue<T>& choose( ticket k ) {
-<a name="l00402"></a>00402         <span class="comment">// The formula here approximates LRU in a cache-oblivious way.</span>
-<a name="l00403"></a>00403         <span class="keywordflow">return</span> array[index(k)];
-<a name="l00404"></a>00404     }
-<a name="l00405"></a>00405 };
-<a name="l00406"></a>00406 
-<a name="l00408"></a>00408 
-<a name="l00412"></a>00412 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00413"></a>00413 <span class="keyword">class </span>concurrent_queue_base_v3: <span class="keyword">public</span> concurrent_queue_page_allocator {
-<a name="l00415"></a>00415     concurrent_queue_rep<T>* my_rep;
-<a name="l00416"></a>00416 
-<a name="l00417"></a>00417     <span class="keyword">friend</span> <span class="keyword">struct </span>concurrent_queue_rep<T>;
-<a name="l00418"></a>00418     <span class="keyword">friend</span> <span class="keyword">class </span>micro_queue<T>;
-<a name="l00419"></a>00419     <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_queue_iterator_rep<T>;
-<a name="l00420"></a>00420     <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_queue_iterator_base_v3<T>;
-<a name="l00421"></a>00421 
-<a name="l00422"></a>00422 <span class="keyword">protected</span>:
-<a name="l00423"></a>00423     <span class="keyword">typedef</span> <span class="keyword">typename</span> concurrent_queue_rep<T>::page page;
-<a name="l00424"></a>00424 
-<a name="l00425"></a>00425 <span class="keyword">private</span>:
-<a name="l00426"></a>00426     <span class="keyword">typedef</span> <span class="keyword">typename</span> micro_queue<T>::padded_page padded_page;
-<a name="l00427"></a>00427 
-<a name="l00428"></a>00428     <span class="comment">/* override */</span> <span class="keyword">virtual</span> page *allocate_page() {
-<a name="l00429"></a>00429         concurrent_queue_rep<T>& r = *my_rep;
-<a name="l00430"></a>00430         size_t n = <span class="keyword">sizeof</span>(padded_page) + (r.items_per_page-1)*<span class="keyword">sizeof</span>(T);
-<a name="l00431"></a>00431         <span class="keywordflow">return</span> reinterpret_cast<page*>(allocate_block ( n ));
-<a name="l00432"></a>00432     }
-<a name="l00433"></a>00433 
-<a name="l00434"></a>00434     <span class="comment">/* override */</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate_page( concurrent_queue_rep_base::page *p ) {
-<a name="l00435"></a>00435         concurrent_queue_rep<T>& r = *my_rep;
-<a name="l00436"></a>00436         size_t n = <span class="keyword">sizeof</span>(padded_page) + (r.items_per_page-1)*<span class="keyword">sizeof</span>(T);
-<a name="l00437"></a>00437         deallocate_block( reinterpret_cast<void*>(p), n );
-<a name="l00438"></a>00438     }
-<a name="l00439"></a>00439 
-<a name="l00441"></a>00441     <span class="keyword">virtual</span> <span class="keywordtype">void</span> *allocate_block( size_t n ) = 0;
-<a name="l00442"></a>00442 
-<a name="l00444"></a>00444     <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate_block( <span class="keywordtype">void</span> *p, size_t n ) = 0;
-<a name="l00445"></a>00445 
-<a name="l00446"></a>00446 <span class="keyword">protected</span>:
-<a name="l00447"></a>00447     concurrent_queue_base_v3();
-<a name="l00448"></a>00448 
-<a name="l00449"></a>00449     <span class="comment">/* override */</span> <span class="keyword">virtual</span> ~concurrent_queue_base_v3() {
-<a name="l00450"></a>00450 <span class="preprocessor">#if __TBB_USE_ASSERT</span>
-<a name="l00451"></a>00451 <span class="preprocessor"></span>        size_t nq = my_rep->n_queue;
-<a name="l00452"></a>00452         <span class="keywordflow">for</span>( size_t i=0; i<nq; i++ )
-<a name="l00453"></a>00453             __TBB_ASSERT( my_rep->array[i].tail_page==NULL, <span class="stringliteral">"pages were not freed properly"</span> );
-<a name="l00454"></a>00454 #endif <span class="comment">/* __TBB_USE_ASSERT */</span>
-<a name="l00455"></a>00455         cache_aligned_allocator<concurrent_queue_rep<T> >().deallocate(my_rep,1);
-<a name="l00456"></a>00456     }
-<a name="l00457"></a>00457 
-<a name="l00459"></a>00459     <span class="keywordtype">void</span> internal_push( <span class="keyword">const</span> <span class="keywordtype">void</span>* src ) {
-<a name="l00460"></a>00460         concurrent_queue_rep<T>& r = *my_rep;
-<a name="l00461"></a>00461         ticket k = r.tail_counter++;
-<a name="l00462"></a>00462         r.choose(k).push( src, k, *<span class="keyword">this</span> );
-<a name="l00463"></a>00463     }
-<a name="l00464"></a>00464 
-<a name="l00466"></a>00466 
-<a name="l00467"></a>00467     <span class="keywordtype">bool</span> internal_try_pop( <span class="keywordtype">void</span>* dst ) ;
-<a name="l00468"></a>00468 
-<a name="l00470"></a>00470     size_t internal_size() <span class="keyword">const </span>;
-<a name="l00471"></a>00471 
-<a name="l00473"></a>00473     <span class="keywordtype">bool</span> internal_empty() <span class="keyword">const </span>;
-<a name="l00474"></a>00474 
-<a name="l00476"></a>00476     <span class="comment">/* note that the name may be misleading, but it remains so due to a historical accident. */</span>
-<a name="l00477"></a>00477     <span class="keywordtype">void</span> internal_finish_clear() ;
-<a name="l00478"></a>00478 
-<a name="l00480"></a>00480     <span class="keywordtype">void</span> internal_throw_exception()<span class="keyword"> const </span>{
-<a name="l00481"></a>00481         throw_exception( eid_bad_alloc );
-<a name="l00482"></a>00482     }
-<a name="l00483"></a>00483 
-<a name="l00485"></a>00485     <span class="keywordtype">void</span> assign( <span class="keyword">const</span> concurrent_queue_base_v3& src ) ;
-<a name="l00486"></a>00486 };
-<a name="l00487"></a>00487 
-<a name="l00488"></a>00488 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00489"></a>00489 concurrent_queue_base_v3<T>::concurrent_queue_base_v3() {
-<a name="l00490"></a>00490     <span class="keyword">const</span> size_t item_size = <span class="keyword">sizeof</span>(T);
-<a name="l00491"></a>00491     my_rep = cache_aligned_allocator<concurrent_queue_rep<T> >().allocate(1);
-<a name="l00492"></a>00492     __TBB_ASSERT( (size_t)my_rep % NFS_GetLineSize()==0, <span class="stringliteral">"alignment error"</span> );
-<a name="l00493"></a>00493     __TBB_ASSERT( (size_t)&my_rep->head_counter % NFS_GetLineSize()==0, <span class="stringliteral">"alignment error"</span> );
-<a name="l00494"></a>00494     __TBB_ASSERT( (size_t)&my_rep->tail_counter % NFS_GetLineSize()==0, <span class="stringliteral">"alignment error"</span> );
-<a name="l00495"></a>00495     __TBB_ASSERT( (size_t)&my_rep->array % NFS_GetLineSize()==0, <span class="stringliteral">"alignment error"</span> );
-<a name="l00496"></a>00496     memset(my_rep,0,<span class="keyword">sizeof</span>(concurrent_queue_rep<T>));
-<a name="l00497"></a>00497     my_rep->item_size = item_size;
-<a name="l00498"></a>00498     my_rep->items_per_page = item_size<=8 ? 32 :
-<a name="l00499"></a>00499                              item_size<=16 ? 16 : 
-<a name="l00500"></a>00500                              item_size<=32 ? 8 :
-<a name="l00501"></a>00501                              item_size<=64 ? 4 :
-<a name="l00502"></a>00502                              item_size<=128 ? 2 :
-<a name="l00503"></a>00503                              1;
-<a name="l00504"></a>00504 }
-<a name="l00505"></a>00505 
-<a name="l00506"></a>00506 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00507"></a>00507 <span class="keywordtype">bool</span> concurrent_queue_base_v3<T>::internal_try_pop( <span class="keywordtype">void</span>* dst ) {
-<a name="l00508"></a>00508     concurrent_queue_rep<T>& r = *my_rep;
-<a name="l00509"></a>00509     ticket k;
-<a name="l00510"></a>00510     <span class="keywordflow">do</span> {
-<a name="l00511"></a>00511         k = r.head_counter;
-<a name="l00512"></a>00512         <span class="keywordflow">for</span>(;;) {
-<a name="l00513"></a>00513             <span class="keywordflow">if</span>( r.tail_counter<=k ) {
-<a name="l00514"></a>00514                 <span class="comment">// Queue is empty </span>
-<a name="l00515"></a>00515                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00516"></a>00516             }
-<a name="l00517"></a>00517             <span class="comment">// Queue had item with ticket k when we looked.  Attempt to get that item.</span>
-<a name="l00518"></a>00518             ticket tk=k;
-<a name="l00519"></a>00519 <span class="preprocessor">#if defined(_MSC_VER) && defined(_Wp64)</span>
-<a name="l00520"></a>00520 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (push)</span>
-<a name="l00521"></a>00521 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4267)</span>
-<a name="l00522"></a>00522 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00523"></a>00523 <span class="preprocessor"></span>            k = r.head_counter.compare_and_swap( tk+1, tk );
-<a name="l00524"></a>00524 <span class="preprocessor">#if defined(_MSC_VER) && defined(_Wp64)</span>
-<a name="l00525"></a>00525 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
-<a name="l00526"></a>00526 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00527"></a>00527 <span class="preprocessor"></span>            <span class="keywordflow">if</span>( k==tk )
-<a name="l00528"></a>00528                 <span class="keywordflow">break</span>;
-<a name="l00529"></a>00529             <span class="comment">// Another thread snatched the item, retry.</span>
-<a name="l00530"></a>00530         }
-<a name="l00531"></a>00531     } <span class="keywordflow">while</span>( !r.choose( k ).pop( dst, k, *<span class="keyword">this</span> ) );
-<a name="l00532"></a>00532     <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00533"></a>00533 }
-<a name="l00534"></a>00534 
-<a name="l00535"></a>00535 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00536"></a>00536 size_t concurrent_queue_base_v3<T>::internal_size()<span class="keyword"> const </span>{
-<a name="l00537"></a>00537     concurrent_queue_rep<T>& r = *my_rep;
-<a name="l00538"></a>00538     __TBB_ASSERT( <span class="keyword">sizeof</span>(ptrdiff_t)<=<span class="keyword">sizeof</span>(size_t), NULL );
-<a name="l00539"></a>00539     ticket hc = r.head_counter;
-<a name="l00540"></a>00540     size_t nie = r.n_invalid_entries;
-<a name="l00541"></a>00541     ticket tc = r.tail_counter;
-<a name="l00542"></a>00542     __TBB_ASSERT( hc!=tc || !nie, NULL );
-<a name="l00543"></a>00543     ptrdiff_t sz = tc-hc-nie;
-<a name="l00544"></a>00544     <span class="keywordflow">return</span> sz<0 ? 0 :  size_t(sz);
-<a name="l00545"></a>00545 }
-<a name="l00546"></a>00546 
-<a name="l00547"></a>00547 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00548"></a>00548 <span class="keywordtype">bool</span> concurrent_queue_base_v3<T>::internal_empty()<span class="keyword"> const </span>{
-<a name="l00549"></a>00549     concurrent_queue_rep<T>& r = *my_rep;
-<a name="l00550"></a>00550     ticket tc = r.tail_counter;
-<a name="l00551"></a>00551     ticket hc = r.head_counter;
-<a name="l00552"></a>00552     <span class="comment">// if tc!=r.tail_counter, the queue was not empty at some point between the two reads.</span>
-<a name="l00553"></a>00553     <span class="keywordflow">return</span> tc==r.tail_counter && tc==hc+r.n_invalid_entries ;
-<a name="l00554"></a>00554 }
-<a name="l00555"></a>00555 
-<a name="l00556"></a>00556 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00557"></a>00557 <span class="keywordtype">void</span> concurrent_queue_base_v3<T>::internal_finish_clear() {
-<a name="l00558"></a>00558     concurrent_queue_rep<T>& r = *my_rep;
-<a name="l00559"></a>00559     size_t nq = r.n_queue;
-<a name="l00560"></a>00560     <span class="keywordflow">for</span>( size_t i=0; i<nq; ++i ) {
-<a name="l00561"></a>00561         page* tp = r.array[i].tail_page;
-<a name="l00562"></a>00562         <span class="keywordflow">if</span>( is_valid_page(tp) ) {
-<a name="l00563"></a>00563             __TBB_ASSERT( r.array[i].head_page==tp, <span class="stringliteral">"at most one page should remain"</span> );
-<a name="l00564"></a>00564             deallocate_page( tp );
-<a name="l00565"></a>00565             r.array[i].tail_page = NULL;
-<a name="l00566"></a>00566         } <span class="keywordflow">else</span> 
-<a name="l00567"></a>00567             __TBB_ASSERT( !is_valid_page(r.array[i].head_page), <span class="stringliteral">"head page pointer corrupt?"</span> );
-<a name="l00568"></a>00568     }
-<a name="l00569"></a>00569 }
-<a name="l00570"></a>00570 
-<a name="l00571"></a>00571 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00572"></a>00572 <span class="keywordtype">void</span> concurrent_queue_base_v3<T>::assign( <span class="keyword">const</span> concurrent_queue_base_v3& src ) {
-<a name="l00573"></a>00573     concurrent_queue_rep<T>& r = *my_rep;
-<a name="l00574"></a>00574     r.items_per_page = src.my_rep->items_per_page;
-<a name="l00575"></a>00575 
-<a name="l00576"></a>00576     <span class="comment">// copy concurrent_queue_rep.</span>
-<a name="l00577"></a>00577     r.head_counter = src.my_rep->head_counter;
-<a name="l00578"></a>00578     r.tail_counter = src.my_rep->tail_counter;
-<a name="l00579"></a>00579     r.n_invalid_entries = src.my_rep->n_invalid_entries;
-<a name="l00580"></a>00580 
-<a name="l00581"></a>00581     <span class="comment">// copy micro_queues</span>
-<a name="l00582"></a>00582     <span class="keywordflow">for</span>( size_t i = 0; i<r.n_queue; ++i )
-<a name="l00583"></a>00583         r.array[i].assign( src.my_rep->array[i], *<span class="keyword">this</span>);
-<a name="l00584"></a>00584 
-<a name="l00585"></a>00585     __TBB_ASSERT( r.head_counter==src.my_rep->head_counter && r.tail_counter==src.my_rep->tail_counter, 
-<a name="l00586"></a>00586             <span class="stringliteral">"the source concurrent queue should not be concurrently modified."</span> );
-<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> Container, <span class="keyword">typename</span> Value> <span class="keyword">class </span>concurrent_queue_iterator;
-<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">class </span>concurrent_queue_iterator_rep: no_assign {
-<a name="l00593"></a>00593     <span class="keyword">typedef</span> <span class="keyword">typename</span> micro_queue<T>::padded_page padded_page;
-<a name="l00594"></a>00594 <span class="keyword">public</span>:
-<a name="l00595"></a>00595     ticket head_counter;
-<a name="l00596"></a>00596     <span class="keyword">const</span> concurrent_queue_base_v3<T>& my_queue;
-<a name="l00597"></a>00597     <span class="keyword">typename</span> concurrent_queue_base_v3<T>::page* array[concurrent_queue_rep<T>::n_queue];
-<a name="l00598"></a>00598     concurrent_queue_iterator_rep( <span class="keyword">const</span> concurrent_queue_base_v3<T>& queue ) :
-<a name="l00599"></a>00599         head_counter(queue.my_rep->head_counter),
-<a name="l00600"></a>00600         my_queue(queue)
-<a name="l00601"></a>00601     {
-<a name="l00602"></a>00602         <span class="keywordflow">for</span>( size_t k=0; k<concurrent_queue_rep<T>::n_queue; ++k )
-<a name="l00603"></a>00603             array[k] = queue.my_rep->array[k].head_page;
-<a name="l00604"></a>00604     }
-<a name="l00605"></a>00605 
-<a name="l00607"></a>00607     <span class="keywordtype">bool</span> get_item( T*& item, size_t k ) ;
-<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>
-<a name="l00611"></a>00611 <span class="keywordtype">bool</span> concurrent_queue_iterator_rep<T>::get_item( T*& item, size_t k ) {
-<a name="l00612"></a>00612     <span class="keywordflow">if</span>( k==my_queue.my_rep->tail_counter ) {
-<a name="l00613"></a>00613         item = NULL;
-<a name="l00614"></a>00614         <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00615"></a>00615     } <span class="keywordflow">else</span> {
-<a name="l00616"></a>00616         <span class="keyword">typename</span> concurrent_queue_base_v3<T>::page* p = array[concurrent_queue_rep<T>::index(k)];
-<a name="l00617"></a>00617         __TBB_ASSERT(p,NULL);
-<a name="l00618"></a>00618         size_t i = k/concurrent_queue_rep<T>::n_queue & (my_queue.my_rep->items_per_page-1);
-<a name="l00619"></a>00619         item = &micro_queue<T>::get_ref(*p,i);
-<a name="l00620"></a>00620         <span class="keywordflow">return</span> (p->mask & uintptr_t(1)<<i)!=0;
-<a name="l00621"></a>00621     }
-<a name="l00622"></a>00622 }
-<a name="l00623"></a>00623 
-<a name="l00625"></a>00625 
-<a name="l00626"></a>00626 <span class="keyword">template</span><<span class="keyword">typename</span> Value>
-<a name="l00627"></a>00627 <span class="keyword">class </span>concurrent_queue_iterator_base_v3 : no_assign {
-<a name="l00629"></a>00629 
-<a name="l00630"></a>00630     concurrent_queue_iterator_rep<Value>* my_rep;
-<a name="l00631"></a>00631 
-<a name="l00632"></a>00632     <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="l00633"></a>00633     <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> concurrent_queue_iterator<C,T>& i, <span class="keyword">const</span> concurrent_queue_iterator<C,U>& j );
-<a name="l00634"></a>00634 
-<a name="l00635"></a>00635     <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="l00636"></a>00636     <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> concurrent_queue_iterator<C,T>& i, <span class="keyword">const</span> concurrent_queue_iterator<C,U>& j );
-<a name="l00637"></a>00637 <span class="keyword">protected</span>:
-<a name="l00639"></a>00639     Value* my_item;
-<a name="l00640"></a>00640 
-<a name="l00642"></a>00642     concurrent_queue_iterator_base_v3() : my_rep(NULL), my_item(NULL) {
-<a name="l00643"></a>00643 <span class="preprocessor">#if __GNUC__==4&&__GNUC_MINOR__==3</span>
-<a name="l00644"></a>00644 <span class="preprocessor"></span>        <span class="comment">// to get around a possible gcc 4.3 bug</span>
-<a name="l00645"></a>00645         __asm__ __volatile__(<span class="stringliteral">""</span>: : :<span class="stringliteral">"memory"</span>);
-<a name="l00646"></a>00646 <span class="preprocessor">#endif</span>
-<a name="l00647"></a>00647 <span class="preprocessor"></span>    }
-<a name="l00648"></a>00648 
-<a name="l00650"></a>00650     concurrent_queue_iterator_base_v3( <span class="keyword">const</span> concurrent_queue_iterator_base_v3& i )
-<a name="l00651"></a>00651     : no_assign(), my_rep(NULL), my_item(NULL) {
-<a name="l00652"></a>00652         assign(i);
-<a name="l00653"></a>00653     }
-<a name="l00654"></a>00654 
-<a name="l00656"></a>00656     concurrent_queue_iterator_base_v3( <span class="keyword">const</span> concurrent_queue_base_v3<Value>& queue ) ;
-<a name="l00657"></a>00657 
-<a name="l00659"></a>00659     <span class="keywordtype">void</span> assign( <span class="keyword">const</span> concurrent_queue_iterator_base_v3<Value>& other ) ;
-<a name="l00660"></a>00660 
-<a name="l00662"></a>00662     <span class="keywordtype">void</span> advance() ;
-<a name="l00663"></a>00663 
-<a name="l00665"></a>00665     ~concurrent_queue_iterator_base_v3() {
-<a name="l00666"></a>00666         cache_aligned_allocator<concurrent_queue_iterator_rep<Value> >().deallocate(my_rep, 1);
-<a name="l00667"></a>00667         my_rep = NULL;
-<a name="l00668"></a>00668     }
-<a name="l00669"></a>00669 };
-<a name="l00670"></a>00670 
-<a name="l00671"></a>00671 <span class="keyword">template</span><<span class="keyword">typename</span> Value>
-<a name="l00672"></a>00672 concurrent_queue_iterator_base_v3<Value>::concurrent_queue_iterator_base_v3( <span class="keyword">const</span> concurrent_queue_base_v3<Value>& queue ) {
-<a name="l00673"></a>00673     my_rep = cache_aligned_allocator<concurrent_queue_iterator_rep<Value> >().allocate(1);
-<a name="l00674"></a>00674     <span class="keyword">new</span>( my_rep ) concurrent_queue_iterator_rep<Value>(queue);
-<a name="l00675"></a>00675     size_t k = my_rep->head_counter;
-<a name="l00676"></a>00676     <span class="keywordflow">if</span>( !my_rep->get_item(my_item, k) ) advance();
-<a name="l00677"></a>00677 }
-<a name="l00678"></a>00678 
-<a name="l00679"></a>00679 <span class="keyword">template</span><<span class="keyword">typename</span> Value>
-<a name="l00680"></a>00680 <span class="keywordtype">void</span> concurrent_queue_iterator_base_v3<Value>::assign( <span class="keyword">const</span> concurrent_queue_iterator_base_v3<Value>& other ) {
-<a name="l00681"></a>00681     <span class="keywordflow">if</span>( my_rep!=other.my_rep ) {
-<a name="l00682"></a>00682         <span class="keywordflow">if</span>( my_rep ) {
-<a name="l00683"></a>00683             cache_aligned_allocator<concurrent_queue_iterator_rep<Value> >().deallocate(my_rep, 1);
-<a name="l00684"></a>00684             my_rep = NULL;
-<a name="l00685"></a>00685         }
-<a name="l00686"></a>00686         <span class="keywordflow">if</span>( other.my_rep ) {
-<a name="l00687"></a>00687             my_rep = cache_aligned_allocator<concurrent_queue_iterator_rep<Value> >().allocate(1);
-<a name="l00688"></a>00688             <span class="keyword">new</span>( my_rep ) concurrent_queue_iterator_rep<Value>( *other.my_rep );
-<a name="l00689"></a>00689         }
-<a name="l00690"></a>00690     }
-<a name="l00691"></a>00691     my_item = other.my_item;
-<a name="l00692"></a>00692 }
-<a name="l00693"></a>00693 
-<a name="l00694"></a>00694 <span class="keyword">template</span><<span class="keyword">typename</span> Value>
-<a name="l00695"></a>00695 <span class="keywordtype">void</span> concurrent_queue_iterator_base_v3<Value>::advance() {
-<a name="l00696"></a>00696     __TBB_ASSERT( my_item, <span class="stringliteral">"attempt to increment iterator past end of queue"</span> );  
-<a name="l00697"></a>00697     size_t k = my_rep->head_counter;
-<a name="l00698"></a>00698     <span class="keyword">const</span> concurrent_queue_base_v3<Value>& queue = my_rep->my_queue;
-<a name="l00699"></a>00699 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00700"></a>00700 <span class="preprocessor"></span>    Value* tmp;
-<a name="l00701"></a>00701     my_rep->get_item(tmp,k);
-<a name="l00702"></a>00702     __TBB_ASSERT( my_item==tmp, NULL );
-<a name="l00703"></a>00703 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00704"></a>00704     size_t i = k/concurrent_queue_rep<Value>::n_queue & (queue.my_rep->items_per_page-1);
-<a name="l00705"></a>00705     <span class="keywordflow">if</span>( i==queue.my_rep->items_per_page-1 ) {
-<a name="l00706"></a>00706         <span class="keyword">typename</span> concurrent_queue_base_v3<Value>::page*& root = my_rep->array[concurrent_queue_rep<Value>::index(k)];
-<a name="l00707"></a>00707         root = root->next;
-<a name="l00708"></a>00708     }
-<a name="l00709"></a>00709     <span class="comment">// advance k</span>
-<a name="l00710"></a>00710     my_rep->head_counter = ++k;
-<a name="l00711"></a>00711     <span class="keywordflow">if</span>( !my_rep->get_item(my_item, k) ) advance();
-<a name="l00712"></a>00712 }
-<a name="l00713"></a>00713 
-<a name="l00715"></a>00715 
-<a name="l00716"></a>00716 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span>tbb_remove_cv {<span class="keyword">typedef</span> T type;};
-<a name="l00717"></a>00717 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span>tbb_remove_cv<const T> {<span class="keyword">typedef</span> T type;};
-<a name="l00718"></a>00718 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span>tbb_remove_cv<volatile T> {<span class="keyword">typedef</span> T type;};
-<a name="l00719"></a>00719 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span>tbb_remove_cv<const volatile T> {<span class="keyword">typedef</span> T type;};
-<a name="l00720"></a>00720 
-<a name="l00722"></a>00722 
-<a name="l00724"></a>00724 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
-<a name="l00725"></a>00725 <span class="keyword">class </span>concurrent_queue_iterator: <span class="keyword">public</span> concurrent_queue_iterator_base_v3<typename tbb_remove_cv<Value>::type>,
-<a name="l00726"></a>00726         <span class="keyword">public</span> std::iterator<std::forward_iterator_tag,Value> {
-<a name="l00727"></a>00727 <span class="preprocessor">#if !__TBB_TEMPLATE_FRIENDS_BROKEN</span>
-<a name="l00728"></a>00728 <span class="preprocessor"></span>    <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00729"></a>00729     <span class="keyword">friend</span> class ::tbb::strict_ppl::concurrent_queue;
-<a name="l00730"></a>00730 <span class="preprocessor">#else</span>
-<a name="l00731"></a>00731 <span class="preprocessor"></span><span class="keyword">public</span>: <span class="comment">// workaround for MSVC</span>
-<a name="l00732"></a>00732 <span class="preprocessor">#endif </span>
-<a name="l00734"></a>00734 <span class="preprocessor">    concurrent_queue_iterator( const concurrent_queue_base_v3<Value>& queue ) :</span>
-<a name="l00735"></a>00735 <span class="preprocessor"></span>        concurrent_queue_iterator_base_v3<typename tbb_remove_cv<Value>::type>(queue)
-<a name="l00736"></a>00736     {
-<a name="l00737"></a>00737     }
-<a name="l00738"></a>00738 
-<a name="l00739"></a>00739 <span class="keyword">public</span>:
-<a name="l00740"></a>00740     concurrent_queue_iterator() {}
-<a name="l00741"></a>00741 
-<a name="l00742"></a>00742     concurrent_queue_iterator( <span class="keyword">const</span> concurrent_queue_iterator<Container,typename Container::value_type>& other ) :
-<a name="l00743"></a>00743         concurrent_queue_iterator_base_v3<typename tbb_remove_cv<Value>::type>(other)
-<a name="l00744"></a>00744     {}
-<a name="l00745"></a>00745 
-<a name="l00747"></a>00747     concurrent_queue_iterator& operator=( <span class="keyword">const</span> concurrent_queue_iterator& other ) {
-<a name="l00748"></a>00748         assign(other);
-<a name="l00749"></a>00749         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00750"></a>00750     }
-<a name="l00751"></a>00751 
-<a name="l00753"></a>00753     Value& operator*()<span class="keyword"> const </span>{
-<a name="l00754"></a>00754         <span class="keywordflow">return</span> *static_cast<Value*>(this->my_item);
-<a name="l00755"></a>00755     }
-<a name="l00756"></a>00756 
-<a name="l00757"></a>00757     Value* operator->()<span class="keyword"> const </span>{<span class="keywordflow">return</span> &operator*();}
-<a name="l00758"></a>00758 
-<a name="l00760"></a>00760     concurrent_queue_iterator& operator++() {
-<a name="l00761"></a>00761         this->advance();
-<a name="l00762"></a>00762         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00763"></a>00763     }
-<a name="l00764"></a>00764 
-<a name="l00766"></a>00766     Value* operator++(<span class="keywordtype">int</span>) {
-<a name="l00767"></a>00767         Value* result = &operator*();
-<a name="l00768"></a>00768         operator++();
-<a name="l00769"></a>00769         <span class="keywordflow">return</span> result;
-<a name="l00770"></a>00770     }
-<a name="l00771"></a>00771 }; <span class="comment">// concurrent_queue_iterator</span>
-<a name="l00772"></a>00772 
-<a name="l00773"></a>00773 
-<a name="l00774"></a>00774 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00775"></a>00775 <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> concurrent_queue_iterator<C,T>& i, <span class="keyword">const</span> concurrent_queue_iterator<C,U>& j ) {
-<a name="l00776"></a>00776     <span class="keywordflow">return</span> i.my_item==j.my_item;
-<a name="l00777"></a>00777 }
-<a name="l00778"></a>00778 
-<a name="l00779"></a>00779 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00780"></a>00780 <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> concurrent_queue_iterator<C,T>& i, <span class="keyword">const</span> concurrent_queue_iterator<C,U>& j ) {
-<a name="l00781"></a>00781     <span class="keywordflow">return</span> i.my_item!=j.my_item;
-<a name="l00782"></a>00782 }
-<a name="l00783"></a>00783 
-<a name="l00784"></a>00784 } <span class="comment">// namespace internal</span>
-<a name="l00785"></a>00785 
-<a name="l00787"></a>00787 
-<a name="l00788"></a>00788 } <span class="comment">// namespace strict_ppl</span>
-<a name="l00789"></a>00789 
-<a name="l00791"></a>00791 <span class="keyword">namespace </span>internal {
-<a name="l00792"></a>00792 
-<a name="l00793"></a>00793 <span class="keyword">class </span>concurrent_queue_rep;
-<a name="l00794"></a>00794 <span class="keyword">class </span>concurrent_queue_iterator_rep;
-<a name="l00795"></a>00795 <span class="keyword">class </span>concurrent_queue_iterator_base_v3;
-<a name="l00796"></a>00796 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value> <span class="keyword">class </span>concurrent_queue_iterator;
-<a name="l00797"></a>00797 
-<a name="l00799"></a>00799 
-<a name="l00801"></a>00801 <span class="keyword">class </span>concurrent_queue_base_v3: no_copy {
-<a name="l00803"></a>00803     concurrent_queue_rep* my_rep;
-<a name="l00804"></a>00804 
-<a name="l00805"></a>00805     <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_queue_rep;
-<a name="l00806"></a>00806     <span class="keyword">friend</span> <span class="keyword">struct </span>micro_queue;
-<a name="l00807"></a>00807     <span class="keyword">friend</span> <span class="keyword">class </span>micro_queue_pop_finalizer;
-<a name="l00808"></a>00808     <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_queue_iterator_rep;
-<a name="l00809"></a>00809     <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_queue_iterator_base_v3;
-<a name="l00810"></a>00810 <span class="keyword">protected</span>:
-<a name="l00812"></a>00812     <span class="keyword">struct </span>page {
-<a name="l00813"></a>00813         page* next;
-<a name="l00814"></a>00814         uintptr_t mask; 
-<a name="l00815"></a>00815     };
-<a name="l00816"></a>00816 
-<a name="l00818"></a>00818     ptrdiff_t my_capacity;
-<a name="l00819"></a>00819    
-<a name="l00821"></a>00821     size_t items_per_page;
-<a name="l00822"></a>00822 
-<a name="l00824"></a>00824     size_t item_size;
-<a name="l00825"></a>00825 
-<a name="l00826"></a>00826 <span class="preprocessor">#if __TBB_GCC_3_3_PROTECTED_BROKEN</span>
-<a name="l00827"></a>00827 <span class="preprocessor"></span><span class="keyword">public</span>:
-<a name="l00828"></a>00828 <span class="preprocessor">#endif</span>
-<a name="l00829"></a>00829 <span class="preprocessor"></span>    <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00830"></a>00830     <span class="keyword">struct </span>padded_page: page {
-<a name="l00832"></a>00832         padded_page(); 
-<a name="l00834"></a>00834         <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> padded_page& );
-<a name="l00836"></a>00836         T last;
-<a name="l00837"></a>00837     };
-<a name="l00838"></a>00838 
-<a name="l00839"></a>00839 <span class="keyword">private</span>:
-<a name="l00840"></a>00840     <span class="keyword">virtual</span> <span class="keywordtype">void</span> copy_item( page& dst, size_t index, <span class="keyword">const</span> <span class="keywordtype">void</span>* src ) = 0;
-<a name="l00841"></a>00841     <span class="keyword">virtual</span> <span class="keywordtype">void</span> assign_and_destroy_item( <span class="keywordtype">void</span>* dst, page& src, size_t index ) = 0;
-<a name="l00842"></a>00842 <span class="keyword">protected</span>:
-<a name="l00843"></a>00843     __TBB_EXPORTED_METHOD concurrent_queue_base_v3( size_t item_size );
-<a name="l00844"></a>00844     <span class="keyword">virtual</span> __TBB_EXPORTED_METHOD ~concurrent_queue_base_v3();
-<a name="l00845"></a>00845 
-<a name="l00847"></a>00847     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_push( <span class="keyword">const</span> <span class="keywordtype">void</span>* src );
-<a name="l00848"></a>00848 
-<a name="l00850"></a>00850     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_pop( <span class="keywordtype">void</span>* dst );
-<a name="l00851"></a>00851 
-<a name="l00853"></a>00853     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_push_if_not_full( <span class="keyword">const</span> <span class="keywordtype">void</span>* src );
-<a name="l00854"></a>00854 
-<a name="l00856"></a>00856 
-<a name="l00857"></a>00857     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_pop_if_present( <span class="keywordtype">void</span>* dst );
-<a name="l00858"></a>00858 
-<a name="l00860"></a>00860     ptrdiff_t __TBB_EXPORTED_METHOD internal_size() <span class="keyword">const</span>;
-<a name="l00861"></a>00861 
-<a name="l00863"></a>00863     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_empty() <span class="keyword">const</span>;
-<a name="l00864"></a>00864 
-<a name="l00866"></a>00866     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_set_capacity( ptrdiff_t capacity, size_t element_size );
-<a name="l00867"></a>00867 
-<a name="l00869"></a>00869     <span class="keyword">virtual</span> page *allocate_page() = 0;
-<a name="l00870"></a>00870 
-<a name="l00872"></a>00872     <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate_page( page *p ) = 0;
-<a name="l00873"></a>00873 
-<a name="l00875"></a>00875     <span class="comment">/* note that the name may be misleading, but it remains so due to a historical accident. */</span>
-<a name="l00876"></a>00876     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_finish_clear() ;
-<a name="l00877"></a>00877 
-<a name="l00879"></a>00879     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_throw_exception() <span class="keyword">const</span>;
-<a name="l00880"></a>00880 
-<a name="l00882"></a>00882     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD assign( <span class="keyword">const</span> concurrent_queue_base_v3& src ) ;
-<a name="l00883"></a>00883 
-<a name="l00884"></a>00884 <span class="keyword">private</span>:
-<a name="l00885"></a>00885     <span class="keyword">virtual</span> <span class="keywordtype">void</span> copy_page_item( page& dst, size_t dindex, <span class="keyword">const</span> page& src, size_t sindex ) = 0;
-<a name="l00886"></a>00886 };
-<a name="l00887"></a>00887 
-<a name="l00889"></a>00889 
-<a name="l00890"></a>00890 <span class="keyword">class </span>concurrent_queue_iterator_base_v3 {
-<a name="l00892"></a>00892 
-<a name="l00893"></a>00893     concurrent_queue_iterator_rep* my_rep;
-<a name="l00894"></a>00894 
-<a name="l00895"></a>00895     <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="l00896"></a>00896     <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> concurrent_queue_iterator<C,T>& i, <span class="keyword">const</span> concurrent_queue_iterator<C,U>& j );
-<a name="l00897"></a>00897 
-<a name="l00898"></a>00898     <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="l00899"></a>00899     <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> concurrent_queue_iterator<C,T>& i, <span class="keyword">const</span> concurrent_queue_iterator<C,U>& j );
-<a name="l00900"></a>00900 
-<a name="l00901"></a>00901     <span class="keywordtype">void</span> initialize( <span class="keyword">const</span> concurrent_queue_base_v3& queue, size_t offset_of_data );
-<a name="l00902"></a>00902 <span class="keyword">protected</span>:
-<a name="l00904"></a>00904     <span class="keywordtype">void</span>* my_item;
-<a name="l00905"></a>00905 
-<a name="l00907"></a>00907     concurrent_queue_iterator_base_v3() : my_rep(NULL), my_item(NULL) {}
-<a name="l00908"></a>00908 
-<a name="l00910"></a>00910     concurrent_queue_iterator_base_v3( <span class="keyword">const</span> concurrent_queue_iterator_base_v3& i ) : my_rep(NULL), my_item(NULL) {
-<a name="l00911"></a>00911         assign(i);
-<a name="l00912"></a>00912     }
-<a name="l00913"></a>00913 
-<a name="l00915"></a>00915 
-<a name="l00916"></a>00916     __TBB_EXPORTED_METHOD concurrent_queue_iterator_base_v3( <span class="keyword">const</span> concurrent_queue_base_v3& queue );
-<a name="l00917"></a>00917 
-<a name="l00919"></a>00919     __TBB_EXPORTED_METHOD concurrent_queue_iterator_base_v3( <span class="keyword">const</span> concurrent_queue_base_v3& queue, size_t offset_of_data );
-<a name="l00920"></a>00920 
-<a name="l00922"></a>00922     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD assign( <span class="keyword">const</span> concurrent_queue_iterator_base_v3& i );
-<a name="l00923"></a>00923 
-<a name="l00925"></a>00925     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD advance();
-<a name="l00926"></a>00926 
-<a name="l00928"></a>00928     __TBB_EXPORTED_METHOD ~concurrent_queue_iterator_base_v3();
-<a name="l00929"></a>00929 };
-<a name="l00930"></a>00930 
-<a name="l00931"></a>00931 <span class="keyword">typedef</span> concurrent_queue_iterator_base_v3 concurrent_queue_iterator_base;
-<a name="l00932"></a>00932 
-<a name="l00934"></a>00934 
-<a name="l00936"></a>00936 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
-<a name="l00937"></a>00937 <span class="keyword">class </span>concurrent_queue_iterator: <span class="keyword">public</span> concurrent_queue_iterator_base,
-<a name="l00938"></a>00938         <span class="keyword">public</span> std::iterator<std::forward_iterator_tag,Value> {
-<a name="l00939"></a>00939 
-<a name="l00940"></a>00940 <span class="preprocessor">#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)</span>
-<a name="l00941"></a>00941 <span class="preprocessor"></span>    <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00942"></a>00942     <span class="keyword">friend</span> class ::tbb::concurrent_bounded_queue;
-<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     <span class="keyword">friend</span> class ::tbb::deprecated::concurrent_queue;
-<a name="l00946"></a>00946 <span class="preprocessor">#else</span>
-<a name="l00947"></a>00947 <span class="preprocessor"></span><span class="keyword">public</span>: <span class="comment">// workaround for MSVC</span>
-<a name="l00948"></a>00948 <span class="preprocessor">#endif </span>
-<a name="l00950"></a>00950 <span class="preprocessor">    concurrent_queue_iterator( const concurrent_queue_base_v3& queue ) :</span>
-<a name="l00951"></a>00951 <span class="preprocessor"></span>        concurrent_queue_iterator_base_v3(queue,__TBB_offsetof(concurrent_queue_base_v3::padded_page<Value>,last))
-<a name="l00952"></a>00952     {
-<a name="l00953"></a>00953     }
-<a name="l00954"></a>00954 
-<a name="l00955"></a>00955 <span class="keyword">public</span>:
-<a name="l00956"></a>00956     concurrent_queue_iterator() {}
-<a name="l00957"></a>00957 
-<a name="l00960"></a>00960     concurrent_queue_iterator( <span class="keyword">const</span> concurrent_queue_iterator<Container,typename Container::value_type>& other ) :
-<a name="l00961"></a>00961         concurrent_queue_iterator_base_v3(other)
-<a name="l00962"></a>00962     {}
-<a name="l00963"></a>00963 
-<a name="l00965"></a>00965     concurrent_queue_iterator& operator=( <span class="keyword">const</span> concurrent_queue_iterator& other ) {
-<a name="l00966"></a>00966         assign(other);
-<a name="l00967"></a>00967         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00968"></a>00968     }
-<a name="l00969"></a>00969 
-<a name="l00971"></a>00971     Value& operator*()<span class="keyword"> const </span>{
-<a name="l00972"></a>00972         <span class="keywordflow">return</span> *static_cast<Value*>(my_item);
-<a name="l00973"></a>00973     }
-<a name="l00974"></a>00974 
-<a name="l00975"></a>00975     Value* operator->()<span class="keyword"> const </span>{<span class="keywordflow">return</span> &operator*();}
-<a name="l00976"></a>00976 
-<a name="l00978"></a>00978     concurrent_queue_iterator& operator++() {
-<a name="l00979"></a>00979         advance();
-<a name="l00980"></a>00980         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00981"></a>00981     }
-<a name="l00982"></a>00982 
-<a name="l00984"></a>00984     Value* operator++(<span class="keywordtype">int</span>) {
-<a name="l00985"></a>00985         Value* result = &operator*();
-<a name="l00986"></a>00986         operator++();
-<a name="l00987"></a>00987         <span class="keywordflow">return</span> result;
-<a name="l00988"></a>00988     }
-<a name="l00989"></a>00989 }; <span class="comment">// concurrent_queue_iterator</span>
-<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> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00993"></a>00993 <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> concurrent_queue_iterator<C,T>& i, <span class="keyword">const</span> concurrent_queue_iterator<C,U>& j ) {
-<a name="l00994"></a>00994     <span class="keywordflow">return</span> i.my_item==j.my_item;
-<a name="l00995"></a>00995 }
-<a name="l00996"></a>00996 
-<a name="l00997"></a>00997 <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="l00998"></a>00998 <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> concurrent_queue_iterator<C,T>& i, <span class="keyword">const</span> concurrent_queue_iterator<C,U>& j ) {
-<a name="l00999"></a>00999     <span class="keywordflow">return</span> i.my_item!=j.my_item;
-<a name="l01000"></a>01000 }
-<a name="l01001"></a>01001 
-<a name="l01002"></a>01002 } <span class="comment">// namespace internal;</span>
-<a name="l01003"></a>01003 
-<a name="l01005"></a>01005 
-<a name="l01006"></a>01006 } <span class="comment">// namespace tbb</span>
-<a name="l01007"></a>01007 
-<a name="l01008"></a>01008 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_concurrent_queue_internal_H */</span>
-</pre></div><hr>
+<div class="nav">
+<a class="el" href="a00362.html">tbb</a>::<a class="el" href="a00281.html">scalable_allocator< void ></a></div>
+<h1>tbb::scalable_allocator< void > Class Template Reference<br>
+<small>
+[<a class="el" href="a00373.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="a00564.html">scalable_allocator.h</a>></code>
+<p>
+<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 Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2046816029c2c7856f7684aed2af9cff"></a><!-- doxytag: member="tbb::scalable_allocator< void >::pointer" ref="2046816029c2c7856f7684aed2af9cff" args="" -->
+typedef void * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="591c568d23f8aadf6ea8d1dc939c4e75"></a><!-- doxytag: member="tbb::scalable_allocator< void >::const_pointer" ref="591c568d23f8aadf6ea8d1dc939c4e75" args="" -->
+typedef const void * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="64dbab666af0740c30b77edac9f157ce"></a><!-- doxytag: member="tbb::scalable_allocator< void >::value_type" ref="64dbab666af0740c30b77edac9f157ce" args="" -->
+typedef void </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><b>rebind</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template<><br>
+ class tbb::scalable_allocator< void ></h3>
+
+Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00564.html">scalable_allocator.h</a></ul>
+<hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00282.html b/doc/html/a00282.html
new file mode 100644
index 0000000..6357af6
--- /dev/null
+++ b/doc/html/a00282.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::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>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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="a00362.html">tbb</a>::<a class="el" href="a00282.html">sender</a></div>
+<h1>tbb::sender< T > Class Template Reference</h1><!-- doxytag: class="tbb::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="a00466.html">graph.h</a>></code>
+<p>
+<p>Inheritance diagram for tbb::sender< T >:
+<p><center><img src="a00282.png" usemap="#tbb::sender< T >_map" border="0" alt=""></center>
+<map name="tbb::sender< T >_map">
+<area href="a00224.html" alt="tbb::broadcast_node< T >" shape="rect" coords="0,56,242,80">
+<area href="a00225.html" alt="tbb::buffer_node< T >" shape="rect" coords="252,56,494,80">
+<area href="a00255.html" alt="tbb::limiter_node< T >" shape="rect" coords="504,56,746,80">
+<area href="a00268.html" alt="tbb::priority_queue_node< T, Compare >" shape="rect" coords="126,112,368,136">
+<area href="a00269.html" alt="tbb::queue_node< T >" shape="rect" coords="378,112,620,136">
+<area href="a00283.html" alt="tbb::sequencer_node< T >" shape="rect" coords="378,168,620,192">
+</map>
+<a href="a00042.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d3aa21714dfc464e65a471816e38ea89"></a><!-- doxytag: member="tbb::sender::output_type" ref="d3aa21714dfc464e65a471816e38ea89" args="" -->
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00282.html#d3aa21714dfc464e65a471816e38ea89">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="c0746cda7dfd266f01acaf6cd5d4b77d"></a><!-- doxytag: member="tbb::sender::successor_type" ref="c0746cda7dfd266f01acaf6cd5d4b77d" args="" -->
+typedef <a class="el" href="a00277.html">receiver</a>< T > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00282.html#c0746cda7dfd266f01acaf6cd5d4b77d">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="be48ac70174cf8e08e2b0279cd6343d3"></a><!-- doxytag: member="tbb::sender::register_successor" ref="be48ac70174cf8e08e2b0279cd6343d3" args="(successor_type &r)=0" -->
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00282.html#be48ac70174cf8e08e2b0279cd6343d3">register_successor</a> (<a class="el" href="a00277.html">successor_type</a> &r)=0</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="3f345427e812e8741370308ff88f30bf"></a><!-- doxytag: member="tbb::sender::remove_successor" ref="3f345427e812e8741370308ff88f30bf" args="(successor_type &r)=0" -->
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00282.html#3f345427e812e8741370308ff88f30bf">remove_successor</a> (<a class="el" href="a00277.html">successor_type</a> &r)=0</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="bf8c9235810354f3353a899c982645de"></a><!-- doxytag: member="tbb::sender::try_get" ref="bf8c9235810354f3353a899c982645de" args="(T &)" -->
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00282.html#bf8c9235810354f3353a899c982645de">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="3506c7275aeeb2fc3ba5d5f10ee0adac"></a><!-- doxytag: member="tbb::sender::try_reserve" ref="3506c7275aeeb2fc3ba5d5f10ee0adac" args="(T &)" -->
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00282.html#3506c7275aeeb2fc3ba5d5f10ee0adac">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="28c41df1c0c7ed485b4a691ec8f30098"></a><!-- doxytag: member="tbb::sender::try_release" ref="28c41df1c0c7ed485b4a691ec8f30098" args="()" -->
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00282.html#28c41df1c0c7ed485b4a691ec8f30098">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="add46946c4c7330422733432e4032fac"></a><!-- doxytag: member="tbb::sender::try_consume" ref="add46946c4c7330422733432e4032fac" args="()" -->
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00282.html#add46946c4c7330422733432e4032fac">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<typename T><br>
+ class tbb::sender< T ></h3>
+
+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="a00466.html">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/a00282.png b/doc/html/a00282.png
new file mode 100644
index 0000000..d11da04
Binary files /dev/null and b/doc/html/a00282.png differ
diff --git a/doc/html/a00283.html b/doc/html/a00283.html
new file mode 100644
index 0000000..24d25ac
--- /dev/null
+++ b/doc/html/a00283.html
@@ -0,0 +1,108 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::sequencer_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="a00362.html">tbb</a>::<a class="el" href="a00283.html">sequencer_node</a></div>
+<h1>tbb::sequencer_node< T > Class Template Reference</h1><!-- doxytag: class="tbb::sequencer_node" --><!-- doxytag: inherits="tbb::queue_node" -->Forwards messages in sequence order.  
+<a href="#_details">More...</a>
+<p>
+<code>#include <<a class="el" href="a00466.html">graph.h</a>></code>
+<p>
+<p>Inheritance diagram for tbb::sequencer_node< T >:
+<p><center><img src="a00283.png" usemap="#tbb::sequencer_node< T >_map" border="0" alt=""></center>
+<map name="tbb::sequencer_node< T >_map">
+<area href="a00269.html" alt="tbb::queue_node< T >" shape="rect" coords="170,112,330,136">
+<area href="a00225.html" alt="tbb::buffer_node< T >" shape="rect" coords="170,56,330,80">
+<area href="a00251.html" alt="tbb::graph_node" shape="rect" coords="0,0,160,24">
+<area href="a00277.html" alt="tbb::receiver< T >" shape="rect" coords="170,0,330,24">
+<area href="a00282.html" alt="tbb::sender< T >" shape="rect" coords="340,0,500,24">
+</map>
+<a href="a00059.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a73e4a3ae6c430281f08226d448ebfc8"></a><!-- doxytag: member="tbb::sequencer_node::input_type" ref="a73e4a3ae6c430281f08226d448ebfc8" args="" -->
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00283.html#a73e4a3ae6c430281f08226d448ebfc8">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="0c613bb01103dfcfbc3f9cbe943f95b0"></a><!-- doxytag: member="tbb::sequencer_node::output_type" ref="0c613bb01103dfcfbc3f9cbe943f95b0" args="" -->
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00283.html#0c613bb01103dfcfbc3f9cbe943f95b0">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="6581686ef0cf8e13c0270687628af5eb"></a><!-- doxytag: member="tbb::sequencer_node::predecessor_type" ref="6581686ef0cf8e13c0270687628af5eb" args="" -->
+typedef <a class="el" href="a00282.html">sender</a>< <a class="el" href="a00283.html#a73e4a3ae6c430281f08226d448ebfc8">input_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00283.html#6581686ef0cf8e13c0270687628af5eb">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="3591313e30d0f485a09106686067411f"></a><!-- doxytag: member="tbb::sequencer_node::successor_type" ref="3591313e30d0f485a09106686067411f" args="" -->
+typedef <a class="el" href="a00277.html">receiver</a>< <a class="el" href="a00283.html#0c613bb01103dfcfbc3f9cbe943f95b0">output_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00283.html#3591313e30d0f485a09106686067411f">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="c3138c1c96b76ae9f13b0abbf7029590"></a><!-- doxytag: member="tbb::sequencer_node::sequencer_node" ref="c3138c1c96b76ae9f13b0abbf7029590" 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="a00283.html#c3138c1c96b76ae9f13b0abbf7029590">sequencer_node</a> (<a class="el" href="a00250.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="c87d80feebaf2bae4af22b5f2459b37e"></a><!-- doxytag: member="tbb::sequencer_node::~sequencer_node" ref="c87d80feebaf2bae4af22b5f2459b37e" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00283.html#c87d80feebaf2bae4af22b5f2459b37e">~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="cfc1242acfbd4ed1f4f041fdcacccb20"></a><!-- doxytag: member="tbb::sequencer_node::size_type" ref="cfc1242acfbd4ed1f4f041fdcacccb20" args="" -->
+typedef <a class="el" href="a00225.html">buffer_node</a>< T <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="8b9307a6214b57cabe426833b9f44fb0"></a><!-- doxytag: member="tbb::sequencer_node::sequencer_operation" ref="8b9307a6214b57cabe426833b9f44fb0" args="" -->
+typedef <a class="el" href="a00225.html">buffer_node</a>< T <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="0b4dffb9323be2efc5112aaa853bac219e3998df4805f713bc2839c055678548"></a><!-- doxytag: member="tbb::sequencer_node::WAIT" ref="0b4dffb9323be2efc5112aaa853bac219e3998df4805f713bc2839c055678548" 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="0b4dffb9323be2efc5112aaa853bac2128dcec463d3112149f813ecd4dfdd956"></a><!-- doxytag: member="tbb::sequencer_node::SUCCEEDED" ref="0b4dffb9323be2efc5112aaa853bac2128dcec463d3112149f813ecd4dfdd956" 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="0b4dffb9323be2efc5112aaa853bac21a1766b4675effb3b6b03b315b51057ed"></a><!-- doxytag: member="tbb::sequencer_node::FAILED" ref="0b4dffb9323be2efc5112aaa853bac21a1766b4675effb3b6b03b315b51057ed" 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><br>
+ class tbb::sequencer_node< T ></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="a00466.html">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/a00283.png b/doc/html/a00283.png
new file mode 100644
index 0000000..0d1eae7
Binary files /dev/null and b/doc/html/a00283.png differ
diff --git a/doc/html/a00284.html b/doc/html/a00284.html
new file mode 100644
index 0000000..a3e2a83
--- /dev/null
+++ b/doc/html/a00284.html
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML 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="a00362.html">tbb</a>::<a class="el" href="a00284.html">simple_partitioner</a></div>
+<h1>tbb::simple_partitioner Class Reference<br>
+<small>
+[<a class="el" href="a00371.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="a00541.html">partitioner.h</a>></code>
+<p>
+<a href="a00088.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a47f7e0208a2bf68f35b51b27d2ddf2a"></a><!-- doxytag: member="tbb::simple_partitioner::internal::start_for" ref="a47f7e0208a2bf68f35b51b27d2ddf2a" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>internal::start_for</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e8f710e431b62c2a48914bd99d0fe034"></a><!-- doxytag: member="tbb::simple_partitioner::internal::start_reduce" ref="e8f710e431b62c2a48914bd99d0fe034" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>internal::start_reduce</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="a00541.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/a00285.html b/doc/html/a00285.html
new file mode 100644
index 0000000..c55dacb
--- /dev/null
+++ b/doc/html/a00285.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::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="a00362.html">tbb</a>::<a class="el" href="a00285.html">source_node</a></div>
+<h1>tbb::source_node< Output > Class Template Reference</h1><!-- doxytag: class="tbb::source_node" --><!-- doxytag: inherits="tbb::graph_node,tbb::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="a00466.html">graph.h</a>></code>
+<p>
+<p>Inheritance diagram for tbb::source_node< Output >:
+<p><center><img src="a00285.png" usemap="#tbb::source_node< Output >_map" border="0" alt=""></center>
+<map name="tbb::source_node< Output >_map">
+<area href="a00251.html" alt="tbb::graph_node" shape="rect" coords="0,0,170,24">
+<area href="a00282.html" alt="tbb::sender< Output >" shape="rect" coords="180,0,350,24">
+</map>
+<a href="a00048.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c5a2c6ab64bcd798724976d7d75ba92f"></a><!-- doxytag: member="tbb::source_node::output_type" ref="c5a2c6ab64bcd798724976d7d75ba92f" args="" -->
+typedef Output </td><td class="memItemRight" valign="bottom"><a class="el" href="a00285.html#c5a2c6ab64bcd798724976d7d75ba92f">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="217d72bbc6e7a4b35ef014dd9a15efca"></a><!-- doxytag: member="tbb::source_node::successor_type" ref="217d72bbc6e7a4b35ef014dd9a15efca" args="" -->
+typedef <a class="el" href="a00277.html">receiver</a>< Output > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00285.html#217d72bbc6e7a4b35ef014dd9a15efca">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="0513272133a06db6742873671af98f21"></a><!-- doxytag: member="tbb::source_node::source_node" ref="0513272133a06db6742873671af98f21" 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="a00285.html#0513272133a06db6742873671af98f21">source_node</a> (<a class="el" href="a00250.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="90c94a8a52cc3d19cf393ce289e80733"></a><!-- doxytag: member="tbb::source_node::~source_node" ref="90c94a8a52cc3d19cf393ce289e80733" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00285.html#90c94a8a52cc3d19cf393ce289e80733">~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="ce601874ec5cbb0996f6dcb8e43badb8"></a><!-- doxytag: member="tbb::source_node::register_successor" ref="ce601874ec5cbb0996f6dcb8e43badb8" args="(receiver< output_type > &r)" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00285.html#ce601874ec5cbb0996f6dcb8e43badb8">register_successor</a> (<a class="el" href="a00277.html">receiver</a>< <a class="el" href="a00285.html#c5a2c6ab64bcd798724976d7d75ba92f">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="de069bfc6fae7ed4e82b2a1fbb58b721"></a><!-- doxytag: member="tbb::source_node::remove_successor" ref="de069bfc6fae7ed4e82b2a1fbb58b721" args="(receiver< output_type > &r)" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00285.html#de069bfc6fae7ed4e82b2a1fbb58b721">remove_successor</a> (<a class="el" href="a00277.html">receiver</a>< <a class="el" href="a00285.html#c5a2c6ab64bcd798724976d7d75ba92f">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="0434d2933ad082d3c43a4ec774150511"></a><!-- doxytag: member="tbb::source_node::try_get" ref="0434d2933ad082d3c43a4ec774150511" args="(output_type &v)" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00285.html#0434d2933ad082d3c43a4ec774150511">try_get</a> (<a class="el" href="a00285.html#c5a2c6ab64bcd798724976d7d75ba92f">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="ecac0bb52cff61912dcd186647ccd1bf"></a><!-- doxytag: member="tbb::source_node::try_reserve" ref="ecac0bb52cff61912dcd186647ccd1bf" args="(output_type &v)" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00285.html#ecac0bb52cff61912dcd186647ccd1bf">try_reserve</a> (<a class="el" href="a00285.html#c5a2c6ab64bcd798724976d7d75ba92f">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="a00285.html#3dd7e998aa3e7258b3b5731307df23a0">try_release</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Release a reserved item.  <a href="#3dd7e998aa3e7258b3b5731307df23a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="809f51859ca4dd04204591d76c8572eb"></a><!-- doxytag: member="tbb::source_node::try_consume" ref="809f51859ca4dd04204591d76c8572eb" args="()" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00285.html#809f51859ca4dd04204591d76c8572eb">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="d71ed386c53032463f3435f79a15b6ff"></a><!-- doxytag: member="tbb::source_node::activate" ref="d71ed386c53032463f3435f79a15b6ff" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00285.html#d71ed386c53032463f3435f79a15b6ff">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::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::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="3dd7e998aa3e7258b3b5731307df23a0"></a><!-- doxytag: member="tbb::source_node::try_release" ref="3dd7e998aa3e7258b3b5731307df23a0" 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="a00285.html">tbb::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="a00282.html#28c41df1c0c7ed485b4a691ec8f30098">tbb::sender< Output ></a>.
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00466.html">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/a00285.png b/doc/html/a00285.png
new file mode 100644
index 0000000..faf755d
Binary files /dev/null and b/doc/html/a00285.png differ
diff --git a/doc/html/a00286.html b/doc/html/a00286.html
new file mode 100644
index 0000000..498cbb2
--- /dev/null
+++ b/doc/html/a00286.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="a00362.html">tbb</a>::<a class="el" href="a00286.html">spin_mutex</a></div>
+<h1>tbb::spin_mutex Class Reference<br>
+<small>
+[<a class="el" href="a00374.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="a00565.html">spin_mutex.h</a>></code>
+<p>
+<a href="a00111.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00286.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="a00286.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="a00286.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="a00286.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="a00287.html">scoped_lock</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Represents acquisition of a mutex.  <a href="a00287.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="a00286.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="a00565.html">spin_mutex.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/a00287.html b/doc/html/a00287.html
new file mode 100644
index 0000000..9aa03c7
--- /dev/null
+++ b/doc/html/a00287.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="a00362.html">tbb</a>::<a class="el" href="a00286.html">spin_mutex</a>::<a class="el" href="a00287.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="a00565.html">spin_mutex.h</a>></code>
+<p>
+<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"><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="a00287.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="a00287.html#5ce6807050a9e8f87bcb4a65dccb12ef">scoped_lock</a> (<a class="el" href="a00286.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="a00287.html#3ee3c338732b1f64b0b32a757807a30d">acquire</a> (<a class="el" href="a00286.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="a00287.html#9297ec188534b45dc0ca48f2f39a0501">try_acquire</a> (<a class="el" href="a00286.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="a00287.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="a00287.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="a00286.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>
+<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/a00288.html b/doc/html/a00288.html
new file mode 100644
index 0000000..747b447
--- /dev/null
+++ b/doc/html/a00288.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="a00362.html">tbb</a>::<a class="el" href="a00288.html">spin_rw_mutex_v3</a></div>
+<h1>tbb::spin_rw_mutex_v3 Class Reference<br>
+<small>
+[<a class="el" href="a00374.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="a00566.html">spin_rw_mutex.h</a>></code>
+<p>
+<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 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="a00288.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="a00288.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="a00288.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="a00288.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="a00288.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="a00288.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="a00288.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="a00289.html">scoped_lock</a></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>
+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="a00566.html">spin_rw_mutex.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/a00289.html b/doc/html/a00289.html
new file mode 100644
index 0000000..335ba2b
--- /dev/null
+++ b/doc/html/a00289.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="a00362.html">tbb</a>::<a class="el" href="a00288.html">spin_rw_mutex_v3</a>::<a class="el" href="a00289.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="a00566.html">spin_rw_mutex.h</a>></code>
+<p>
+<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 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#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="a00289.html#42a92d4f8fdde425b111cfa8a9228071">scoped_lock</a> (<a class="el" href="a00288.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="a00289.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="a00289.html#b0b646ec5be02a127d159bbb7ca65353">acquire</a> (<a class="el" href="a00288.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="a00289.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="a00289.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="a00289.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="a00289.html#9879626968d9b9a04cd2ec0fb2e84ae1">try_acquire</a> (<a class="el" href="a00288.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="a00288.html">spin_rw_mutex</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00289.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="a00289.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 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="a00289.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="a00566.html">spin_rw_mutex.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/a00290.html b/doc/html/a00290.html
new file mode 100644
index 0000000..e45523b
--- /dev/null
+++ b/doc/html/a00290.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="a00362.html">tbb</a>::<a class="el" href="a00290.html">split</a></div>
+<h1>tbb::split Class Reference<br>
+<small>
+[<a class="el" href="a00371.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="a00600.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="a00600.html">tbb_stddef.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/a00291.html b/doc/html/a00291.html
new file mode 100644
index 0000000..95a1bc4
--- /dev/null
+++ b/doc/html/a00291.html
@@ -0,0 +1,621 @@
+<!DOCTYPE HTML 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="a00362.html">tbb</a>::<a class="el" href="a00291.html">task</a></div>
+<h1>tbb::task Class Reference<br>
+<small>
+[<a class="el" href="a00376.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="a00567.html">task.h</a>></code>
+<p>
+<p>Inheritance diagram for tbb::task:
+<p><center><img src="a00291.png" usemap="#tbb::task_map" border="0" alt=""></center>
+<map name="tbb::task_map">
+<area href="a00242.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">
+<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="a00291.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="a00291.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="a00291.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="a00291.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="a00291.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="a00291.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="a00291.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="a00291.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="a00291.html#4a3c415562d17905390ea5b49d12293e">state_type</a> { <br>
+  <a class="el" href="a00291.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">executing</a>, 
+<a class="el" href="a00291.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">reexecute</a>, 
+<a class="el" href="a00291.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">ready</a>, 
+<a class="el" href="a00291.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">allocated</a>, 
+<br>
+  <a class="el" href="a00291.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">freed</a>, 
+<a class="el" href="a00291.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="a00291.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="a00291.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="a00291.html">task</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00291.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="a00291.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="a00291.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="a00291.html#dfaacf92685e5f86393bf657b2853bf8">destroy</a> (<a class="el" href="a00291.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="a00291.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="a00291.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="a00291.html#db399855177438bbc9cc61d508dae8d2">recycle_as_child_of</a> (<a class="el" href="a00291.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="a00291.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="a00291.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="a00291.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="a00291.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="a00291.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="a00291.html#3ce28ca9baa771cfc37ecd72e69c4f3c">spawn_and_wait_for_all</a> (<a class="el" href="a00291.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="a00291.html#894ab68378e502776d8220eea7ce9fa1">spawn_and_wait_for_all</a> (<a class="el" href="a00294.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="a00291.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="a00291.html">task</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00291.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="el" href="a00293.html">task_group_context</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00291.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="a00293.html">task_group_context</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00291.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="a00291.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="a00291.html#4a3c415562d17905390ea5b49d12293e">state_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00291.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="a00291.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="a00291.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="a00291.html#dca19d7a45487a7d67a0db517e2b57c9">set_affinity</a> (<a class="el" href="a00291.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="a00291.html#d61bb32389d3857bf7511d69beaafb76">affinity_id</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00291.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="a00291.html#713c338c8eeaebdc5a6b10a69c039b06">note_affinity</a> (<a class="el" href="a00291.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="a00291.html#62247be9a637a814c8e8f4bcfb3a1908">change_group</a> (<a class="el" href="a00293.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="a00291.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="a00291.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="a00291.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="a00291.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="a00291.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="a00291.html#8ccc518caf31075a3e073996d2d240a4">allocate_root</a> (<a class="el" href="a00293.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="a00291.html#ce8ce689c26a4ddf343829bc3c73290a">spawn_root_and_wait</a> (<a class="el" href="a00291.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="a00291.html#c33c7edbaec67aa8a56f48986a9dc69f">spawn_root_and_wait</a> (<a class="el" href="a00294.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="a00291.html#8365d063c0cc9d7bd616bca47256b93c">enqueue</a> (<a class="el" href="a00291.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="a00291.html#fe6bf6aaf84e664134fabb6c4f409ea9">enqueue</a> (<a class="el" href="a00291.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="a00291.html">task</a> &__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00291.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="a00291.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="a00291.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="a00291.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="a00291.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="a00293.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="a00291.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="a00293.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="a00291.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="a00291.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="a00291.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="a00291.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="a00291.html#8365d063c0cc9d7bd616bca47256b93c">enqueue()</a> overload with explicit priority value and <a class="el" href="a00291.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="a00291.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="a00291.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="a00291.html#22c298cd40937a431a06777423f002f6">execute()</a> returns. Typically, this is done by having method <a class="el" href="a00291.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 decendants 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="a00291.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="a00294.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="a00567.html">task.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/a00199.png b/doc/html/a00291.png
similarity index 100%
rename from doc/html/a00199.png
rename to doc/html/a00291.png
diff --git a/doc/html/a00292.html b/doc/html/a00292.html
new file mode 100644
index 0000000..7836bb9
--- /dev/null
+++ b/doc/html/a00292.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="a00362.html">tbb</a>::<b>interface5</b>::<b>internal</b>::<a class="el" href="a00292.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="a00567.html">task.h</a>></code>
+<p>
+<a href="a00116.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="a00567.html">task.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/a00293.html b/doc/html/a00293.html
new file mode 100644
index 0000000..98fd8a2
--- /dev/null
+++ b/doc/html/a00293.html
@@ -0,0 +1,245 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::task_group_context Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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="a00362.html">tbb</a>::<a class="el" href="a00293.html">task_group_context</a></div>
+<h1>tbb::task_group_context Class Reference<br>
+<small>
+[<a class="el" href="a00376.html">Task Scheduling</a>]</small>
+</h1><!-- doxytag: class="tbb::task_group_context" -->Used to form groups of tasks.  
+<a href="#_details">More...</a>
+<p>
+<code>#include <<a class="el" href="a00567.html">task.h</a>></code>
+<p>
+<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="d5af85179a348162d4ddd66b6fc0d60fb4fda16c4f77defd3d0f6aad87fceed4"></a><!-- doxytag: member="tbb::task_group_context::isolated" ref="d5af85179a348162d4ddd66b6fc0d60fb4fda16c4f77defd3d0f6aad87fceed4" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>isolated</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d5af85179a348162d4ddd66b6fc0d60fc7f37e067ba1fca8a5c809d20522662b"></a><!-- doxytag: member="tbb::task_group_context::bound" ref="d5af85179a348162d4ddd66b6fc0d60fc7f37e067ba1fca8a5c809d20522662b" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>bound</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b8dce4661b346756cb4f584529ecd0ebf774f9c21343eba6303927b5ae0be44c"></a><!-- doxytag: member="tbb::task_group_context::exact_exception" ref="b8dce4661b346756cb4f584529ecd0ebf774f9c21343eba6303927b5ae0be44c" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>exact_exception</b> = 0x0001ul << traits_offset</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b8dce4661b346756cb4f584529ecd0eb4002d8f90c8c9f7c3f80ad349aee7cce"></a><!-- doxytag: member="tbb::task_group_context::concurrent_wait" ref="b8dce4661b346756cb4f584529ecd0eb4002d8f90c8c9f7c3f80ad349aee7cce" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>concurrent_wait</b> = 0x0004ul << traits_offset</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><b>default_traits</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>kind_type</b> { <b>isolated</b>, 
+<b>bound</b>
+ }</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>traits_type</b> { <b>exact_exception</b> =  0x0001ul << traits_offset, 
+<b>concurrent_wait</b> =  0x0004ul << traits_offset, 
+<b>default_traits</b>
+ }</td></tr>
+
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00293.html#19fee08fb8ac98adccfe69c1aa63c491">task_group_context</a> (kind_type relation_with_parent=bound, uintptr_t traits=default_traits)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Default & binding constructor.  <a href="#19fee08fb8ac98adccfe69c1aa63c491"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00293.html#6d30d16bf1cd22f86c6afaf29c2b430c">reset</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Forcefully reinitializes the context after the task tree it was associated with is completed.  <a href="#6d30d16bf1cd22f86c6afaf29c2b430c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00293.html#8bcdfdf4e6bfb76125b6de15c00b571d">cancel_group_execution</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Initiates cancellation of all tasks in this cancellation group and its subordinate groups.  <a href="#8bcdfdf4e6bfb76125b6de15c00b571d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4db72f16210b0a991b2c134d6763a4cc"></a><!-- doxytag: member="tbb::task_group_context::is_group_execution_cancelled" ref="4db72f16210b0a991b2c134d6763a4cc" args="() const " -->
+bool __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00293.html#4db72f16210b0a991b2c134d6763a4cc">is_group_execution_cancelled</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns true if the context received cancellation request. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00293.html#d97c8a03615594b71b4ef06ff75cf561">register_pending_exception</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Records the pending exception, and cancels the task group.  <a href="#d97c8a03615594b71b4ef06ff75cf561"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c4272d4d9ab65d600ca70fc2c8c4b039"></a><!-- doxytag: member="tbb::task_group_context::set_priority" ref="c4272d4d9ab65d600ca70fc2c8c4b039" args="(priority_t)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00293.html#c4272d4d9ab65d600ca70fc2c8c4b039">set_priority</a> (priority_t)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Changes priority of the task grop. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2f2342b9e6c9c03703248ac13ad0271d"></a><!-- doxytag: member="tbb::task_group_context::priority" ref="2f2342b9e6c9c03703248ac13ad0271d" args="() const " -->
+priority_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00293.html#2f2342b9e6c9c03703248ac13ad0271d">priority</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Retrieves current priority of the current task group. <br></td></tr>
+<tr><td colspan="2"><br><h2>Protected Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00293.html#49a55352084fd44b8863d182e839e6dc">init</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Out-of-line part of the constructor.  <a href="#49a55352084fd44b8863d182e839e6dc"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fdfd61b0801af54e93367fc2d02cb54a"></a><!-- doxytag: member="tbb::task_group_context::internal::generic_scheduler" ref="fdfd61b0801af54e93367fc2d02cb54a" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>internal::generic_scheduler</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="087690120218a0868a4a91ef388319af"></a><!-- doxytag: member="tbb::task_group_context::task_scheduler_init" ref="087690120218a0868a4a91ef388319af" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>task_scheduler_init</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e656073628561c8fd68f6134d527e2de"></a><!-- doxytag: member="tbb::task_group_context::task" ref="e656073628561c8fd68f6134d527e2de" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>task</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ecedb9436fb30df30cb3a52c64bb97e5"></a><!-- doxytag: member="tbb::task_group_context::internal::allocate_root_with_context_proxy" ref="ecedb9436fb30df30cb3a52c64bb97e5" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>internal::allocate_root_with_context_proxy</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Used to form groups of tasks. 
+<p>
+The context services explicit cancellation requests from user code, and unhandled exceptions intercepted during tasks execution. Intercepting an exception results in generating internal cancellation requests (which is processed in exactly the same way as external ones).<p>
+The context is associated with one or more root tasks and defines the cancellation group that includes all the descendants of the corresponding root task(s). Association is established when a context object is passed as an argument to the <a class="el" href="a00291.html#23acb0da0afd690da797f9f882027d34">task::allocate_root()</a> method. See <a class="el" href="a00293.html#19fee08fb8ac98adccfe69c1aa63c491">task_group_context::task_group_context</a> for more details.<p>
+The context can be bound to another one, and other contexts can be bound to it, forming a tree-like structure: parent -> this -> children. Arrows here designate cancellation propagation direction. If a task in a cancellation group is canceled all the other tasks in this group and groups bound to it (as children) get canceled too.<p>
+IMPLEMENTATION NOTE: When adding new members to <a class="el" href="a00293.html">task_group_context</a> or changing types of existing ones, update the size of both padding buffers (_leading_padding and _trailing_padding) appropriately. See also VERSIONING NOTE at the constructor definition below. 
+<p>
+<hr><h2>Constructor & Destructor Documentation</h2>
+<a class="anchor" name="19fee08fb8ac98adccfe69c1aa63c491"></a><!-- doxytag: member="tbb::task_group_context::task_group_context" ref="19fee08fb8ac98adccfe69c1aa63c491" args="(kind_type relation_with_parent=bound, uintptr_t traits=default_traits)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">tbb::task_group_context::task_group_context           </td>
+          <td>(</td>
+          <td class="paramtype">kind_type </td>
+          <td class="paramname"> <em>relation_with_parent</em> = <code>bound</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uintptr_t </td>
+          <td class="paramname"> <em>traits</em> = <code>default_traits</code></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Default & binding constructor. 
+<p>
+By default a bound context is created. That is this context will be bound (as child) to the context of the task calling task::allocate_root(this_context) method. Cancellation requests passed to the parent context are propagated to all the contexts bound to it. Similarly priority change is propagated from the parent context to its children.<p>
+If task_group_context::isolated is used as the argument, then the tasks associated with this context will never be affected by events in any other context.<p>
+Creating isolated contexts involve much less overhead, but they have limited utility. Normally when an exception occurs in an algorithm that has nested ones running, it is desirably to have all the nested algorithms canceled as well. Such a behavior requires nested algorithms to use bound contexts.<p>
+There is one good place where using isolated algorithms is beneficial. It is a master thread. That is if a particular algorithm is invoked directly from the master thread (not from a TBB task), supplying it with explicitly created isolated context will result in a faster algorithm startup.<p>
+VERSIONING NOTE: Implementation(s) of <a class="el" href="a00293.html">task_group_context</a> constructor(s) cannot be made entirely out-of-line because the run-time version must be set by the user code. This will become critically important for binary compatibility, if we ever have to change the size of the context object.<p>
+Boosting the runtime version will also be necessary if new data fields are introduced in the currently unused padding areas and these fields are updated by inline methods. 
+</div>
+</div><p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="8bcdfdf4e6bfb76125b6de15c00b571d"></a><!-- doxytag: member="tbb::task_group_context::cancel_group_execution" ref="8bcdfdf4e6bfb76125b6de15c00b571d" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool __TBB_EXPORTED_METHOD tbb::task_group_context::cancel_group_execution           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Initiates cancellation of all tasks in this cancellation group and its subordinate groups. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>false if cancellation has already been requested, true otherwise.</dd></dl>
+Note that canceling never fails. When false is returned, it just means that another thread (or this one) has already sent cancellation request to this context or to one of its ancestors (if this context is bound). It is guaranteed that when this method is concurrently called on the same not yet cancelled context, true will be returned by one and only one invocation. 
+</div>
+</div><p>
+<a class="anchor" name="49a55352084fd44b8863d182e839e6dc"></a><!-- doxytag: member="tbb::task_group_context::init" ref="49a55352084fd44b8863d182e839e6dc" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __TBB_EXPORTED_METHOD tbb::task_group_context::init           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"><code> [protected]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Out-of-line part of the constructor. 
+<p>
+Singled out to ensure backward binary compatibility of the future versions. 
+</div>
+</div><p>
+<a class="anchor" name="d97c8a03615594b71b4ef06ff75cf561"></a><!-- doxytag: member="tbb::task_group_context::register_pending_exception" ref="d97c8a03615594b71b4ef06ff75cf561" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __TBB_EXPORTED_METHOD tbb::task_group_context::register_pending_exception           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Records the pending exception, and cancels the task group. 
+<p>
+May be called only from inside a catch-block. If the context is already canceled, does nothing. The method brings the task group associated with this context exactly into the state it would be in, if one of its tasks threw the currently pending exception during its execution. In other words, it emulates the actions of the scheduler's dispatch loop exception handler. 
+</div>
+</div><p>
+<a class="anchor" name="6d30d16bf1cd22f86c6afaf29c2b430c"></a><!-- doxytag: member="tbb::task_group_context::reset" ref="6d30d16bf1cd22f86c6afaf29c2b430c" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __TBB_EXPORTED_METHOD tbb::task_group_context::reset           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Forcefully reinitializes the context after the task tree it was associated with is completed. 
+<p>
+Because the method assumes that all the tasks that used to be associated with this context have already finished, calling it while the context is still in use somewhere in the task hierarchy leads to undefined behavior.<p>
+IMPORTANT: This method is not thread safe!<p>
+The method does not change the context's parent if it is set. 
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00567.html">task.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/a00294.html b/doc/html/a00294.html
new file mode 100644
index 0000000..4656519
--- /dev/null
+++ b/doc/html/a00294.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="a00362.html">tbb</a>::<a class="el" href="a00294.html">task_list</a></div>
+<h1>tbb::task_list Class Reference<br>
+<small>
+[<a class="el" href="a00376.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="a00567.html">task.h</a>></code>
+<p>
+<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>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="a00294.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="a00294.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="a00294.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="a00294.html#4cd34756bc4763dafb8c84838a0124ff">push_back</a> (<a class="el" href="a00291.html">task</a> &<a class="el" href="a00291.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="a00291.html">task</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00294.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="a00294.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="a00567.html">task.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/a00295.html b/doc/html/a00295.html
new file mode 100644
index 0000000..a485399
--- /dev/null
+++ b/doc/html/a00295.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="a00362.html">tbb</a>::<a class="el" href="a00295.html">task_scheduler_init</a></div>
+<h1>tbb::task_scheduler_init Class Reference<br>
+<small>
+[<a class="el" href="a00376.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="a00584.html">task_scheduler_init.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">void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00295.html#d476053cc712e572554823492a5229ce">initialize</a> (int number_of_threads=<a class="el" href="a00295.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="a00295.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="a00295.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="a00295.html#421600bf9bf9338bcf937063f2ff0e90">task_scheduler_init</a> (int number_of_threads=<a class="el" href="a00295.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="a00295.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="a00295.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="a00295.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="a00295.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="a00295.html#e6c860f1e559026ff3ef4599c0d6c514">deferred</a> = -2</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Argument to <a class="el" href="a00295.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="a00295.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="a00295.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="a00295.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="a00295.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="a00584.html">task_scheduler_init.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/a00296.html b/doc/html/a00296.html
new file mode 100644
index 0000000..6c0662e
--- /dev/null
+++ b/doc/html/a00296.html
@@ -0,0 +1,130 @@
+<!DOCTYPE HTML 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>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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="a00362.html">tbb</a>::<a class="el" href="a00296.html">tbb_allocator</a></div>
+<h1>tbb::tbb_allocator< T > Class Template Reference<br>
+<small>
+[<a class="el" href="a00373.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="a00588.html">tbb_allocator.h</a>></code>
+<p>
+<a href="a00130.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="a00296.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="a00296.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="a00296.html">tbb_allocator</a>< U > &)  throw ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="08d3822344271d0a1c2e64e8c9c16b58"></a><!-- doxytag: member="tbb::tbb_allocator::address" ref="08d3822344271d0a1c2e64e8c9c16b58" args="(reference x) const " -->
+pointer </td><td class="memItemRight" valign="bottom"><b>address</b> (reference x) const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2b388f25858f783d995d61506de24656"></a><!-- doxytag: member="tbb::tbb_allocator::address" ref="2b388f25858f783d995d61506de24656" args="(const_reference x) const " -->
+const_pointer </td><td class="memItemRight" valign="bottom"><b>address</b> (const_reference x) const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f6cb487b1bdce0b581f265a77dca6d53"></a><!-- doxytag: member="tbb::tbb_allocator::allocate" ref="f6cb487b1bdce0b581f265a77dca6d53" args="(size_type n, const void *=0)" -->
+pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00296.html#f6cb487b1bdce0b581f265a77dca6d53">allocate</a> (size_type n, const void *=0)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate space for n objects. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fdd011fdf2f9ad07006dc7c0a7ec1da2"></a><!-- doxytag: member="tbb::tbb_allocator::deallocate" ref="fdd011fdf2f9ad07006dc7c0a7ec1da2" args="(pointer p, size_type)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00296.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">deallocate</a> (pointer p, size_type)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Free previously allocated block of memory. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f059ca2c96243024f0d562ee3a87a3a5"></a><!-- doxytag: member="tbb::tbb_allocator::max_size" ref="f059ca2c96243024f0d562ee3a87a3a5" args="() const " -->
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00296.html#f059ca2c96243024f0d562ee3a87a3a5">max_size</a> () const   throw ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Largest value for which method allocate might succeed. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ab228ab9e324ed041c2226e1d717df5f"></a><!-- doxytag: member="tbb::tbb_allocator::construct" ref="ab228ab9e324ed041c2226e1d717df5f" args="(pointer p, const value_type &value)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00296.html#ab228ab9e324ed041c2226e1d717df5f">construct</a> (pointer p, const value_type &value)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Copy-construct value at location pointed to by p. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ef133522bf55f05a605bee0763208281"></a><!-- doxytag: member="tbb::tbb_allocator::destroy" ref="ef133522bf55f05a605bee0763208281" args="(pointer p)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00296.html#ef133522bf55f05a605bee0763208281">destroy</a> (pointer p)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy value at location pointed to by p. <br></td></tr>
+<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="78701e7454ef8e1a25b5acd364367080"></a><!-- doxytag: member="tbb::tbb_allocator::allocator_type" ref="78701e7454ef8e1a25b5acd364367080" args="()" -->
+static <a class="el" href="a00296.html#09a7f81fb2c3055aaecf058b11538544">malloc_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00296.html#78701e7454ef8e1a25b5acd364367080">allocator_type</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns current allocator. <br></td></tr>
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><b>rebind</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template<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>
+<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>
+<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/a00297.html b/doc/html/a00297.html
new file mode 100644
index 0000000..3a727da
--- /dev/null
+++ b/doc/html/a00297.html
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML 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>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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="a00362.html">tbb</a>::<a class="el" href="a00297.html">tbb_allocator< void ></a></div>
+<h1>tbb::tbb_allocator< void > Class Template Reference<br>
+<small>
+[<a class="el" href="a00373.html">Memory Allocation</a>]</small>
+</h1><!-- doxytag: class="tbb::tbb_allocator< void >" -->Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  
+<a href="#_details">More...</a>
+<p>
+<code>#include <<a class="el" href="a00588.html">tbb_allocator.h</a>></code>
+<p>
+<a href="a00132.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public 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="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="81595a776b9d206a92caa526cad9c637"></a><!-- doxytag: member="tbb::tbb_allocator< void >::value_type" ref="81595a776b9d206a92caa526cad9c637" args="" -->
+typedef void </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><b>rebind</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template<><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="a00588.html">tbb_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/a00298.html b/doc/html/a00298.html
new file mode 100644
index 0000000..057f3cc
--- /dev/null
+++ b/doc/html/a00298.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="a00362.html">tbb</a>::<a class="el" href="a00298.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="a00593.html">tbb_exception.h</a>></code>
+<p>
+<p>Inheritance diagram for tbb::tbb_exception:
+<p><center><img src="a00298.png" usemap="#tbb::tbb_exception_map" border="0" alt=""></center>
+<map name="tbb::tbb_exception_map">
+<area href="a00228.html" alt="tbb::captured_exception" shape="rect" coords="0,56,248,80">
+<area href="a00257.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">
+<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="a00298.html">tbb_exception</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00298.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="a00298.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="a00298.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="a00298.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="a00298.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="a00298.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="a00298.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="a00298.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="a00298.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="a00293.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="a00228.html">tbb::captured_exception</a> and template class <a class="el" href="a00257.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="a00298.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="a00228.html#93d875d3555502ff6f18513525de204c">tbb::captured_exception</a>, and <a class="el" href="a00257.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="a00298.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="a00228.html#837a50b8f6a800bda225c39d1699643f">tbb::captured_exception</a>, and <a class="el" href="a00257.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="a00298.html#3e3482bf264d4ca4dde046cd9c02c766">move()</a> operation on an exception thrown out of TBB scheduler.<p>
+When overriding method <a class="el" href="a00298.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="a00228.html#2dd1be66ab32fa27e0ddef5707fa67ef">tbb::captured_exception</a>, and <a class="el" href="a00257.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>
+<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/a00206.png b/doc/html/a00298.png
similarity index 100%
rename from doc/html/a00206.png
rename to doc/html/a00298.png
diff --git a/doc/html/a00299.html b/doc/html/a00299.html
index aacd572..93956b3 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>_concurrent_unordered_internal.h Source File</title>
+<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>
@@ -10,1398 +10,77 @@
     <li><a href="index.html"><span>Main Page</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>_concurrent_unordered_internal.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="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_internal_H</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_concurrent_unordered_internal_H</span>
-<a name="l00026"></a>00026 <span class="preprocessor"></span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include "tbb_stddef.h"</span>
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
-<a name="l00030"></a>00030 <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="l00031"></a>00031 <span class="preprocessor">    #pragma warning (push)</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4530)</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">#include <iterator></span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include <utility></span>      <span class="comment">// Need std::pair</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include <functional></span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include <string></span>       <span class="comment">// For tbb_hasher</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include <cstring></span>      <span class="comment">// Need std::memset</span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
-<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</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="l00045"></a>00045 <span class="preprocessor">#include "atomic.h"</span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include "tbb_exception.h"</span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include "tbb_allocator.h"</span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="keyword">namespace </span>tbb {
-<a name="l00050"></a>00050 <span class="keyword">namespace </span>interface5 {
-<a name="l00052"></a>00052 <span class="keyword">namespace </span>internal {
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054 <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">typename</span> Allocator>
-<a name="l00055"></a>00055 <span class="keyword">class </span>split_ordered_list;
-<a name="l00056"></a>00056 <span class="keyword">template</span> <<span class="keyword">typename</span> Traits>
-<a name="l00057"></a>00057 <span class="keyword">class </span>concurrent_unordered_base;
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059 <span class="comment">// Forward list iterators (without skipping dummy elements)</span>
-<a name="l00060"></a>00060 <span class="keyword">template</span><<span class="keyword">class</span> Solist, <span class="keyword">typename</span> Value>
-<a name="l00061"></a>00061 <span class="keyword">class </span>flist_iterator : <span class="keyword">public</span> std::iterator<std::forward_iterator_tag, Value>
-<a name="l00062"></a>00062 {
-<a name="l00063"></a>00063     <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">typename</span> Allocator>
-<a name="l00064"></a>00064     <span class="keyword">friend</span> <span class="keyword">class </span>split_ordered_list;
-<a name="l00065"></a>00065     <span class="keyword">template</span> <<span class="keyword">typename</span> Traits>
-<a name="l00066"></a>00066     <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_unordered_base;
-<a name="l00067"></a>00067     <span class="keyword">template</span><<span class="keyword">class</span> M, <span class="keyword">typename</span> V>
-<a name="l00068"></a>00068     <span class="keyword">friend</span> <span class="keyword">class </span>flist_iterator;
-<a name="l00069"></a>00069 
-<a name="l00070"></a>00070     <span class="keyword">typedef</span> <span class="keyword">typename</span> Solist::nodeptr_t nodeptr_t;
-<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> Solist::value_type value_type;
-<a name="l00073"></a>00073     <span class="keyword">typedef</span> <span class="keyword">typename</span> Solist::difference_type difference_type;
-<a name="l00074"></a>00074     <span class="keyword">typedef</span> <span class="keyword">typename</span> Solist::pointer pointer;
-<a name="l00075"></a>00075     <span class="keyword">typedef</span> <span class="keyword">typename</span> Solist::reference reference;
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077     flist_iterator() : my_node_ptr(0) {}
-<a name="l00078"></a>00078     flist_iterator( <span class="keyword">const</span> flist_iterator<Solist, typename Solist::value_type> &other )
-<a name="l00079"></a>00079         : my_node_ptr(other.my_node_ptr) {}
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081     reference operator*()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_node_ptr->my_element; }
-<a name="l00082"></a>00082     pointer operator->()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> &**<span class="keyword">this</span>; }
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084     flist_iterator& operator++() {
-<a name="l00085"></a>00085         my_node_ptr = my_node_ptr->my_next;
-<a name="l00086"></a>00086         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00087"></a>00087     }
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089     flist_iterator operator++(<span class="keywordtype">int</span>) {
-<a name="l00090"></a>00090         flist_iterator tmp = *<span class="keyword">this</span>;
-<a name="l00091"></a>00091         ++*<span class="keyword">this</span>;
-<a name="l00092"></a>00092         <span class="keywordflow">return</span> tmp;
-<a name="l00093"></a>00093     }
-<a name="l00094"></a>00094 
-<a name="l00095"></a>00095 <span class="keyword">protected</span>:
-<a name="l00096"></a>00096     flist_iterator(nodeptr_t pnode) : my_node_ptr(pnode) {}
-<a name="l00097"></a>00097     nodeptr_t get_node_ptr()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_node_ptr; }
-<a name="l00098"></a>00098 
-<a name="l00099"></a>00099     nodeptr_t my_node_ptr;
-<a name="l00100"></a>00100 
-<a name="l00101"></a>00101     <span class="keyword">template</span><<span class="keyword">typename</span> M, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00102"></a>00102     <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> flist_iterator<M,T> &i, <span class="keyword">const</span> flist_iterator<M,U> &j );
-<a name="l00103"></a>00103     <span class="keyword">template</span><<span class="keyword">typename</span> M, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00104"></a>00104     <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> flist_iterator<M,T>& i, <span class="keyword">const</span> flist_iterator<M,U>& j );
-<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> Solist, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00108"></a>00108 <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> flist_iterator<Solist,T> &i, <span class="keyword">const</span> flist_iterator<Solist,U> &j ) {
-<a name="l00109"></a>00109     <span class="keywordflow">return</span> i.my_node_ptr == j.my_node_ptr;
-<a name="l00110"></a>00110 }
-<a name="l00111"></a>00111 <span class="keyword">template</span><<span class="keyword">typename</span> Solist, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00112"></a>00112 <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> flist_iterator<Solist,T>& i, <span class="keyword">const</span> flist_iterator<Solist,U>& j ) {
-<a name="l00113"></a>00113     <span class="keywordflow">return</span> i.my_node_ptr != j.my_node_ptr;
-<a name="l00114"></a>00114 }
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116 <span class="comment">// Split-order list iterators, needed to skip dummy elements</span>
-<a name="l00117"></a>00117 <span class="keyword">template</span><<span class="keyword">class</span> Solist, <span class="keyword">typename</span> Value>
-<a name="l00118"></a>00118 <span class="keyword">class </span>solist_iterator : <span class="keyword">public</span> flist_iterator<Solist, Value>
-<a name="l00119"></a>00119 {
-<a name="l00120"></a>00120     <span class="keyword">typedef</span> flist_iterator<Solist, Value> base_type;
-<a name="l00121"></a>00121     <span class="keyword">typedef</span> <span class="keyword">typename</span> Solist::nodeptr_t nodeptr_t;
-<a name="l00122"></a>00122     <span class="keyword">using</span> base_type::get_node_ptr;
-<a name="l00123"></a>00123     <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">typename</span> Allocator>
-<a name="l00124"></a>00124     <span class="keyword">friend</span> <span class="keyword">class </span>split_ordered_list;
-<a name="l00125"></a>00125     <span class="keyword">template</span><<span class="keyword">class</span> M, <span class="keyword">typename</span> V>
-<a name="l00126"></a>00126     <span class="keyword">friend</span> <span class="keyword">class </span>solist_iterator;
-<a name="l00127"></a>00127     <span class="keyword">template</span><<span class="keyword">typename</span> M, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00128"></a>00128     <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> solist_iterator<M,T> &i, <span class="keyword">const</span> solist_iterator<M,U> &j );
-<a name="l00129"></a>00129     <span class="keyword">template</span><<span class="keyword">typename</span> M, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00130"></a>00130     <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> solist_iterator<M,T>& i, <span class="keyword">const</span> solist_iterator<M,U>& j );
-<a name="l00131"></a>00131 
-<a name="l00132"></a>00132     <span class="keyword">const</span> Solist *my_list_ptr;
-<a name="l00133"></a>00133     solist_iterator(nodeptr_t pnode, <span class="keyword">const</span> Solist *plist) : base_type(pnode), my_list_ptr(plist) {}
-<a name="l00134"></a>00134 
-<a name="l00135"></a>00135 <span class="keyword">public</span>:
-<a name="l00136"></a>00136     <span class="keyword">typedef</span> <span class="keyword">typename</span> Solist::value_type value_type;
-<a name="l00137"></a>00137     <span class="keyword">typedef</span> <span class="keyword">typename</span> Solist::difference_type difference_type;
-<a name="l00138"></a>00138     <span class="keyword">typedef</span> <span class="keyword">typename</span> Solist::pointer pointer;
-<a name="l00139"></a>00139     <span class="keyword">typedef</span> <span class="keyword">typename</span> Solist::reference reference;
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141     solist_iterator() {}
-<a name="l00142"></a>00142     solist_iterator(<span class="keyword">const</span> solist_iterator<Solist, typename Solist::value_type> &other )
-<a name="l00143"></a>00143         : base_type(other), my_list_ptr(other.my_list_ptr) {}
-<a name="l00144"></a>00144 
-<a name="l00145"></a>00145     reference operator*()<span class="keyword"> const </span>{
-<a name="l00146"></a>00146         <span class="keywordflow">return</span> this->base_type::operator*();
-<a name="l00147"></a>00147     }
-<a name="l00148"></a>00148 
-<a name="l00149"></a>00149     pointer operator->()<span class="keyword"> const </span>{
-<a name="l00150"></a>00150         <span class="keywordflow">return</span> (&**<span class="keyword">this</span>);
-<a name="l00151"></a>00151     }
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153     solist_iterator& operator++() {
-<a name="l00154"></a>00154         <span class="keywordflow">do</span> ++(*(base_type *)<span class="keyword">this</span>);
-<a name="l00155"></a>00155         <span class="keywordflow">while</span> (get_node_ptr() != NULL && get_node_ptr()->is_dummy());
-<a name="l00156"></a>00156 
-<a name="l00157"></a>00157         <span class="keywordflow">return</span> (*<span class="keyword">this</span>);
-<a name="l00158"></a>00158     }
-<a name="l00159"></a>00159 
-<a name="l00160"></a>00160     solist_iterator operator++(<span class="keywordtype">int</span>) {
-<a name="l00161"></a>00161         solist_iterator tmp = *<span class="keyword">this</span>;
-<a name="l00162"></a>00162         <span class="keywordflow">do</span> ++*<span class="keyword">this</span>;
-<a name="l00163"></a>00163         <span class="keywordflow">while</span> (get_node_ptr() != NULL && get_node_ptr()->is_dummy());
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165         <span class="keywordflow">return</span> (tmp);
-<a name="l00166"></a>00166     }
-<a name="l00167"></a>00167 };
-<a name="l00168"></a>00168 
-<a name="l00169"></a>00169 <span class="keyword">template</span><<span class="keyword">typename</span> Solist, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00170"></a>00170 <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> solist_iterator<Solist,T> &i, <span class="keyword">const</span> solist_iterator<Solist,U> &j ) {
-<a name="l00171"></a>00171     <span class="keywordflow">return</span> i.my_node_ptr == j.my_node_ptr && i.my_list_ptr == j.my_list_ptr;
-<a name="l00172"></a>00172 }
-<a name="l00173"></a>00173 <span class="keyword">template</span><<span class="keyword">typename</span> Solist, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00174"></a>00174 <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> solist_iterator<Solist,T>& i, <span class="keyword">const</span> solist_iterator<Solist,U>& j ) {
-<a name="l00175"></a>00175     <span class="keywordflow">return</span> i.my_node_ptr != j.my_node_ptr || i.my_list_ptr != j.my_list_ptr;
-<a name="l00176"></a>00176 }
-<a name="l00177"></a>00177 
-<a name="l00178"></a>00178 <span class="comment">// Forward type and class definitions</span>
-<a name="l00179"></a>00179 <span class="keyword">typedef</span> size_t sokey_t;
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181 <span class="comment">// Forward list in which elements are sorted in a split-order</span>
-<a name="l00182"></a>00182 <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">typename</span> Allocator>
-<a name="l00183"></a>00183 <span class="keyword">class </span>split_ordered_list
-<a name="l00184"></a>00184 {
-<a name="l00185"></a>00185 <span class="keyword">public</span>:
-<a name="l00186"></a>00186     <span class="keyword">typedef</span> split_ordered_list<T, Allocator> self_type;
-<a name="l00187"></a>00187     <span class="keyword">typedef</span> <span class="keyword">typename</span> Allocator::template rebind<T>::other allocator_type;
-<a name="l00188"></a>00188     <span class="keyword">struct </span>node;
-<a name="l00189"></a>00189     <span class="keyword">typedef</span> node *nodeptr_t;
-<a name="l00190"></a>00190 
-<a name="l00191"></a>00191     <span class="keyword">typedef</span> <span class="keyword">typename</span> allocator_type::size_type size_type;
-<a name="l00192"></a>00192     <span class="keyword">typedef</span> <span class="keyword">typename</span> allocator_type::difference_type difference_type;
-<a name="l00193"></a>00193     <span class="keyword">typedef</span> <span class="keyword">typename</span> allocator_type::pointer pointer;
-<a name="l00194"></a>00194     <span class="keyword">typedef</span> <span class="keyword">typename</span> allocator_type::const_pointer const_pointer;
-<a name="l00195"></a>00195     <span class="keyword">typedef</span> <span class="keyword">typename</span> allocator_type::reference reference;
-<a name="l00196"></a>00196     <span class="keyword">typedef</span> <span class="keyword">typename</span> allocator_type::const_reference const_reference;
-<a name="l00197"></a>00197     <span class="keyword">typedef</span> <span class="keyword">typename</span> allocator_type::value_type value_type;
-<a name="l00198"></a>00198 
-<a name="l00199"></a>00199     <span class="keyword">typedef</span> solist_iterator<self_type, const value_type> const_iterator;
-<a name="l00200"></a>00200     <span class="keyword">typedef</span> solist_iterator<self_type, value_type> iterator;
-<a name="l00201"></a>00201     <span class="keyword">typedef</span> flist_iterator<self_type, const value_type> raw_const_iterator;
-<a name="l00202"></a>00202     <span class="keyword">typedef</span> flist_iterator<self_type, value_type> raw_iterator;
-<a name="l00203"></a>00203 
-<a name="l00204"></a>00204     <span class="comment">// Node that holds the element in a split-ordered list</span>
-<a name="l00205"></a>00205     <span class="keyword">struct </span>node : tbb::internal::no_assign
-<a name="l00206"></a>00206     {
-<a name="l00207"></a>00207         <span class="comment">// Initialize the node with the given order key</span>
-<a name="l00208"></a>00208         <span class="keywordtype">void</span> init(sokey_t order_key) {
-<a name="l00209"></a>00209             my_order_key = order_key;
-<a name="l00210"></a>00210             my_next = NULL;
-<a name="l00211"></a>00211         }
-<a name="l00212"></a>00212 
-<a name="l00213"></a>00213         <span class="comment">// Return the order key (needed for hashing)</span>
-<a name="l00214"></a>00214         sokey_t get_order_key()<span class="keyword"> const </span>{ <span class="comment">// TODO: remove</span>
-<a name="l00215"></a>00215             <span class="keywordflow">return</span> my_order_key;
-<a name="l00216"></a>00216         }
-<a name="l00217"></a>00217 
-<a name="l00218"></a>00218         <span class="comment">// Inserts the new element in the list in an atomic fashion</span>
-<a name="l00219"></a>00219         nodeptr_t atomic_set_next(nodeptr_t new_node, nodeptr_t current_node)
-<a name="l00220"></a>00220         {
-<a name="l00221"></a>00221             <span class="comment">// Try to change the next pointer on the current element to a new element, only if it still points to the cached next</span>
-<a name="l00222"></a>00222             nodeptr_t exchange_node = (nodeptr_t) __TBB_CompareAndSwapW((<span class="keywordtype">void</span> *) &my_next, (uintptr_t)new_node, (uintptr_t)current_node);
-<a name="l00223"></a>00223 
-<a name="l00224"></a>00224             <span class="keywordflow">if</span> (exchange_node == current_node) <span class="comment">// TODO: why this branch?</span>
-<a name="l00225"></a>00225             {
-<a name="l00226"></a>00226                 <span class="comment">// Operation succeeded, return the new node</span>
-<a name="l00227"></a>00227                 <span class="keywordflow">return</span> new_node;
-<a name="l00228"></a>00228             }
-<a name="l00229"></a>00229             <span class="keywordflow">else</span>
-<a name="l00230"></a>00230             {
-<a name="l00231"></a>00231                 <span class="comment">// Operation failed, return the "interfering" node</span>
-<a name="l00232"></a>00232                 <span class="keywordflow">return</span> exchange_node;
-<a name="l00233"></a>00233             }
-<a name="l00234"></a>00234         }
-<a name="l00235"></a>00235 
-<a name="l00236"></a>00236         <span class="comment">// Checks if this element in the list is a dummy, order enforcing node. Dummy nodes are used by buckets</span>
-<a name="l00237"></a>00237         <span class="comment">// in the hash table to quickly index into the right subsection of the split-ordered list.</span>
-<a name="l00238"></a>00238         <span class="keywordtype">bool</span> is_dummy()<span class="keyword"> const </span>{
-<a name="l00239"></a>00239             <span class="keywordflow">return</span> (my_order_key & 0x1) == 0;
-<a name="l00240"></a>00240         }
-<a name="l00241"></a>00241 
-<a name="l00242"></a>00242 
-<a name="l00243"></a>00243         nodeptr_t  my_next;      <span class="comment">// Next element in the list</span>
-<a name="l00244"></a>00244         value_type my_element;   <span class="comment">// Element storage</span>
-<a name="l00245"></a>00245         sokey_t    my_order_key; <span class="comment">// Order key for this element</span>
-<a name="l00246"></a>00246     };
-<a name="l00247"></a>00247 
-<a name="l00248"></a>00248     <span class="comment">// Allocate a new node with the given order key and value</span>
-<a name="l00249"></a>00249     nodeptr_t create_node(sokey_t order_key, <span class="keyword">const</span> T &value) {
-<a name="l00250"></a>00250         nodeptr_t pnode = my_node_allocator.allocate(1);
-<a name="l00251"></a>00251 
-<a name="l00252"></a>00252         __TBB_TRY {
-<a name="l00253"></a>00253             <span class="keyword">new</span>(static_cast<void*>(&pnode->my_element)) T(value);
-<a name="l00254"></a>00254             pnode->init(order_key);
-<a name="l00255"></a>00255         } __TBB_CATCH(...) {
-<a name="l00256"></a>00256             my_node_allocator.deallocate(pnode, 1);
-<a name="l00257"></a>00257             __TBB_RETHROW();
-<a name="l00258"></a>00258         }
-<a name="l00259"></a>00259 
-<a name="l00260"></a>00260         <span class="keywordflow">return</span> (pnode);
-<a name="l00261"></a>00261     }
-<a name="l00262"></a>00262 
-<a name="l00263"></a>00263     <span class="comment">// Allocate a new node with the given order key; used to allocate dummy nodes</span>
-<a name="l00264"></a>00264     nodeptr_t create_node(sokey_t order_key) {
-<a name="l00265"></a>00265         nodeptr_t pnode = my_node_allocator.allocate(1);
-<a name="l00266"></a>00266 
-<a name="l00267"></a>00267         __TBB_TRY {
-<a name="l00268"></a>00268             <span class="keyword">new</span>(static_cast<void*>(&pnode->my_element)) T();
-<a name="l00269"></a>00269             pnode->init(order_key);
-<a name="l00270"></a>00270         } __TBB_CATCH(...) {
-<a name="l00271"></a>00271             my_node_allocator.deallocate(pnode, 1);
-<a name="l00272"></a>00272             __TBB_RETHROW();
-<a name="l00273"></a>00273         }
-<a name="l00274"></a>00274 
-<a name="l00275"></a>00275         <span class="keywordflow">return</span> (pnode);
-<a name="l00276"></a>00276     }
-<a name="l00277"></a>00277 
-<a name="l00278"></a>00278    split_ordered_list(allocator_type a = allocator_type())
-<a name="l00279"></a>00279        : my_node_allocator(a), my_element_count(0)
-<a name="l00280"></a>00280     {
-<a name="l00281"></a>00281         <span class="comment">// Immediately allocate a dummy node with order key of 0. This node</span>
-<a name="l00282"></a>00282         <span class="comment">// will always be the head of the list.</span>
-<a name="l00283"></a>00283         my_head = create_node(0);
-<a name="l00284"></a>00284     }
-<a name="l00285"></a>00285 
-<a name="l00286"></a>00286     ~split_ordered_list()
-<a name="l00287"></a>00287     {
-<a name="l00288"></a>00288         <span class="comment">// Clear the list</span>
-<a name="l00289"></a>00289         clear();
-<a name="l00290"></a>00290 
-<a name="l00291"></a>00291         <span class="comment">// Remove the head element which is not cleared by clear()</span>
-<a name="l00292"></a>00292         nodeptr_t pnode = my_head;
-<a name="l00293"></a>00293         my_head = NULL;
-<a name="l00294"></a>00294 
-<a name="l00295"></a>00295         __TBB_ASSERT(pnode != NULL && pnode->my_next == NULL, <span class="stringliteral">"Invalid head list node"</span>);
-<a name="l00296"></a>00296 
-<a name="l00297"></a>00297         destroy_node(pnode);
-<a name="l00298"></a>00298     }
-<a name="l00299"></a>00299 
-<a name="l00300"></a>00300     <span class="comment">// Common forward list functions</span>
-<a name="l00301"></a>00301 
-<a name="l00302"></a>00302     allocator_type get_allocator()<span class="keyword"> const </span>{
-<a name="l00303"></a>00303         <span class="keywordflow">return</span> (my_node_allocator);
-<a name="l00304"></a>00304     }
-<a name="l00305"></a>00305 
-<a name="l00306"></a>00306     <span class="keywordtype">void</span> clear() {
-<a name="l00307"></a>00307         nodeptr_t pnext;
-<a name="l00308"></a>00308         nodeptr_t pnode = my_head;
-<a name="l00309"></a>00309 
-<a name="l00310"></a>00310         __TBB_ASSERT(my_head != NULL, <span class="stringliteral">"Invalid head list node"</span>);
-<a name="l00311"></a>00311         pnext = pnode->my_next;
-<a name="l00312"></a>00312         pnode->my_next = NULL;
-<a name="l00313"></a>00313         pnode = pnext;
-<a name="l00314"></a>00314 
-<a name="l00315"></a>00315         <span class="keywordflow">while</span> (pnode != NULL)
-<a name="l00316"></a>00316         {
-<a name="l00317"></a>00317             pnext = pnode->my_next;
-<a name="l00318"></a>00318             destroy_node(pnode);
-<a name="l00319"></a>00319             pnode = pnext;
-<a name="l00320"></a>00320         }
-<a name="l00321"></a>00321 
-<a name="l00322"></a>00322         my_element_count = 0;
-<a name="l00323"></a>00323     }
-<a name="l00324"></a>00324 
-<a name="l00325"></a>00325     <span class="comment">// Returns a first non-dummy element in the SOL</span>
-<a name="l00326"></a>00326     iterator begin() {
-<a name="l00327"></a>00327         <span class="keywordflow">return</span> first_real_iterator(raw_begin());
-<a name="l00328"></a>00328     }
-<a name="l00329"></a>00329 
-<a name="l00330"></a>00330     <span class="comment">// Returns a first non-dummy element in the SOL</span>
-<a name="l00331"></a>00331     const_iterator begin()<span class="keyword"> const </span>{
-<a name="l00332"></a>00332         <span class="keywordflow">return</span> first_real_iterator(raw_begin());
-<a name="l00333"></a>00333     }
-<a name="l00334"></a>00334 
-<a name="l00335"></a>00335     iterator end() {
-<a name="l00336"></a>00336         <span class="keywordflow">return</span> (iterator(0, <span class="keyword">this</span>));
-<a name="l00337"></a>00337     }
-<a name="l00338"></a>00338 
-<a name="l00339"></a>00339     const_iterator end()<span class="keyword"> const </span>{
-<a name="l00340"></a>00340         <span class="keywordflow">return</span> (const_iterator(0, <span class="keyword">this</span>));
-<a name="l00341"></a>00341     }
-<a name="l00342"></a>00342 
-<a name="l00343"></a>00343     const_iterator cbegin()<span class="keyword"> const </span>{
-<a name="l00344"></a>00344         <span class="keywordflow">return</span> (((<span class="keyword">const</span> self_type *)<span class="keyword">this</span>)->begin());
-<a name="l00345"></a>00345     }
-<a name="l00346"></a>00346 
-<a name="l00347"></a>00347     const_iterator cend()<span class="keyword"> const </span>{
-<a name="l00348"></a>00348         <span class="keywordflow">return</span> (((<span class="keyword">const</span> self_type *)<span class="keyword">this</span>)->end());
-<a name="l00349"></a>00349     }
-<a name="l00350"></a>00350 
-<a name="l00351"></a>00351     <span class="comment">// Checks if the number of elements (non-dummy) is 0</span>
-<a name="l00352"></a>00352     <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{
-<a name="l00353"></a>00353         <span class="keywordflow">return</span> (my_element_count == 0);
-<a name="l00354"></a>00354     }
-<a name="l00355"></a>00355 
-<a name="l00356"></a>00356     <span class="comment">// Returns the number of non-dummy elements in the list</span>
-<a name="l00357"></a>00357     size_type size()<span class="keyword"> const </span>{
-<a name="l00358"></a>00358         <span class="keywordflow">return</span> my_element_count;
-<a name="l00359"></a>00359     }
-<a name="l00360"></a>00360 
-<a name="l00361"></a>00361     <span class="comment">// Returns the maximum size of the list, determined by the allocator</span>
-<a name="l00362"></a>00362     size_type max_size()<span class="keyword"> const </span>{
-<a name="l00363"></a>00363         <span class="keywordflow">return</span> my_node_allocator.max_size();
-<a name="l00364"></a>00364     }
-<a name="l00365"></a>00365 
-<a name="l00366"></a>00366     <span class="comment">// Swaps 'this' list with the passed in one</span>
-<a name="l00367"></a>00367     <span class="keywordtype">void</span> swap(self_type& other)
-<a name="l00368"></a>00368     {
-<a name="l00369"></a>00369         <span class="keywordflow">if</span> (<span class="keyword">this</span> == &other)
-<a name="l00370"></a>00370         {
-<a name="l00371"></a>00371             <span class="comment">// Nothing to do</span>
-<a name="l00372"></a>00372             <span class="keywordflow">return</span>;
-<a name="l00373"></a>00373         }
-<a name="l00374"></a>00374 
-<a name="l00375"></a>00375         std::swap(my_element_count, other.my_element_count);
-<a name="l00376"></a>00376         std::swap(my_head, other.my_head);
-<a name="l00377"></a>00377     }
-<a name="l00378"></a>00378 
-<a name="l00379"></a>00379     <span class="comment">// Split-order list functions</span>
-<a name="l00380"></a>00380 
-<a name="l00381"></a>00381     <span class="comment">// Returns a first element in the SOL, which is always a dummy</span>
-<a name="l00382"></a>00382     raw_iterator raw_begin() {
-<a name="l00383"></a>00383         <span class="keywordflow">return</span> raw_iterator(my_head);
-<a name="l00384"></a>00384     }
-<a name="l00385"></a>00385 
-<a name="l00386"></a>00386     <span class="comment">// Returns a first element in the SOL, which is always a dummy</span>
-<a name="l00387"></a>00387     raw_const_iterator raw_begin()<span class="keyword"> const </span>{
-<a name="l00388"></a>00388         <span class="keywordflow">return</span> raw_const_iterator(my_head);
-<a name="l00389"></a>00389     }
-<a name="l00390"></a>00390 
-<a name="l00391"></a>00391     raw_iterator raw_end() {
-<a name="l00392"></a>00392         <span class="keywordflow">return</span> raw_iterator(0);
-<a name="l00393"></a>00393     }
-<a name="l00394"></a>00394 
-<a name="l00395"></a>00395     raw_const_iterator raw_end()<span class="keyword"> const </span>{
-<a name="l00396"></a>00396         <span class="keywordflow">return</span> raw_const_iterator(0);
-<a name="l00397"></a>00397     }
-<a name="l00398"></a>00398 
-<a name="l00399"></a>00399     <span class="keyword">static</span> sokey_t get_order_key(<span class="keyword">const</span> raw_const_iterator& it) {
-<a name="l00400"></a>00400         <span class="keywordflow">return</span> it.get_node_ptr()->get_order_key();
-<a name="l00401"></a>00401     }
-<a name="l00402"></a>00402 
-<a name="l00403"></a>00403     <span class="keyword">static</span> sokey_t get_safe_order_key(<span class="keyword">const</span> raw_const_iterator& it) {
-<a name="l00404"></a>00404         <span class="keywordflow">if</span>( !it.get_node_ptr() ) <span class="keywordflow">return</span> sokey_t(~0U);
-<a name="l00405"></a>00405         <span class="keywordflow">return</span> it.get_node_ptr()->get_order_key();
-<a name="l00406"></a>00406     }
-<a name="l00407"></a>00407 
-<a name="l00408"></a>00408     <span class="comment">// Returns a public iterator version of the internal iterator. Public iterator must not</span>
-<a name="l00409"></a>00409     <span class="comment">// be a dummy private iterator.</span>
-<a name="l00410"></a>00410     iterator get_iterator(raw_iterator it) {
-<a name="l00411"></a>00411         __TBB_ASSERT(it.get_node_ptr() == NULL || !it.get_node_ptr()->is_dummy(), <span class="stringliteral">"Invalid user node (dummy)"</span>);
-<a name="l00412"></a>00412         <span class="keywordflow">return</span> iterator(it.get_node_ptr(), <span class="keyword">this</span>);
-<a name="l00413"></a>00413     }
-<a name="l00414"></a>00414 
-<a name="l00415"></a>00415     <span class="comment">// Returns a public iterator version of the internal iterator. Public iterator must not</span>
-<a name="l00416"></a>00416     <span class="comment">// be a dummy private iterator.</span>
-<a name="l00417"></a>00417     const_iterator get_iterator(raw_const_iterator it)<span class="keyword"> const </span>{
-<a name="l00418"></a>00418         __TBB_ASSERT(it.get_node_ptr() == NULL || !it.get_node_ptr()->is_dummy(), <span class="stringliteral">"Invalid user node (dummy)"</span>);
-<a name="l00419"></a>00419         <span class="keywordflow">return</span> const_iterator(it.get_node_ptr(), <span class="keyword">this</span>);
-<a name="l00420"></a>00420     }
-<a name="l00421"></a>00421 
-<a name="l00422"></a>00422     <span class="comment">// Returns a non-const version of the raw_iterator</span>
-<a name="l00423"></a>00423     raw_iterator get_iterator(raw_const_iterator it) {
-<a name="l00424"></a>00424         <span class="keywordflow">return</span> raw_iterator(it.get_node_ptr());
-<a name="l00425"></a>00425     }
-<a name="l00426"></a>00426 
-<a name="l00427"></a>00427     <span class="comment">// Returns a non-const version of the iterator</span>
-<a name="l00428"></a>00428     <span class="keyword">static</span> iterator get_iterator(const_iterator it) {
-<a name="l00429"></a>00429         <span class="keywordflow">return</span> iterator(it.my_node_ptr, it.my_list_ptr);
-<a name="l00430"></a>00430     }
-<a name="l00431"></a>00431 
-<a name="l00432"></a>00432     <span class="comment">// Returns a public iterator version of a first non-dummy internal iterator at or after</span>
-<a name="l00433"></a>00433     <span class="comment">// the passed in internal iterator.</span>
-<a name="l00434"></a>00434     iterator first_real_iterator(raw_iterator it)
-<a name="l00435"></a>00435     {
-<a name="l00436"></a>00436         <span class="comment">// Skip all dummy, internal only iterators</span>
-<a name="l00437"></a>00437         <span class="keywordflow">while</span> (it != raw_end() && it.get_node_ptr()->is_dummy())
-<a name="l00438"></a>00438             ++it;
-<a name="l00439"></a>00439 
-<a name="l00440"></a>00440         <span class="keywordflow">return</span> iterator(it.get_node_ptr(), <span class="keyword">this</span>);
-<a name="l00441"></a>00441     }
-<a name="l00442"></a>00442 
-<a name="l00443"></a>00443     <span class="comment">// Returns a public iterator version of a first non-dummy internal iterator at or after</span>
-<a name="l00444"></a>00444     <span class="comment">// the passed in internal iterator.</span>
-<a name="l00445"></a>00445     const_iterator first_real_iterator(raw_const_iterator it)<span class="keyword"> const</span>
-<a name="l00446"></a>00446 <span class="keyword">    </span>{
-<a name="l00447"></a>00447         <span class="comment">// Skip all dummy, internal only iterators</span>
-<a name="l00448"></a>00448         <span class="keywordflow">while</span> (it != raw_end() && it.get_node_ptr()->is_dummy())
-<a name="l00449"></a>00449             ++it;
-<a name="l00450"></a>00450 
-<a name="l00451"></a>00451         <span class="keywordflow">return</span> const_iterator(it.get_node_ptr(), <span class="keyword">this</span>);
-<a name="l00452"></a>00452     }
-<a name="l00453"></a>00453 
-<a name="l00454"></a>00454     <span class="comment">// Erase an element using the allocator</span>
-<a name="l00455"></a>00455     <span class="keywordtype">void</span> destroy_node(nodeptr_t pnode) {
-<a name="l00456"></a>00456         my_node_allocator.destroy(pnode);
-<a name="l00457"></a>00457         my_node_allocator.deallocate(pnode, 1);
-<a name="l00458"></a>00458     }
-<a name="l00459"></a>00459 
-<a name="l00460"></a>00460     <span class="comment">// Try to insert a new element in the list. If insert fails, return the node that</span>
-<a name="l00461"></a>00461     <span class="comment">// was inserted instead.</span>
-<a name="l00462"></a>00462     nodeptr_t try_insert(nodeptr_t previous, nodeptr_t new_node, nodeptr_t current_node) {
-<a name="l00463"></a>00463         new_node->my_next = current_node;
-<a name="l00464"></a>00464         <span class="keywordflow">return</span> previous->atomic_set_next(new_node, current_node);
-<a name="l00465"></a>00465     }
-<a name="l00466"></a>00466 
-<a name="l00467"></a>00467     <span class="comment">// Insert a new element between passed in iterators</span>
-<a name="l00468"></a>00468     std::pair<iterator, bool> try_insert(raw_iterator it, raw_iterator next, <span class="keyword">const</span> value_type &value, sokey_t order_key, size_type *new_count)
-<a name="l00469"></a>00469     {
-<a name="l00470"></a>00470         nodeptr_t pnode = create_node(order_key, value);
-<a name="l00471"></a>00471         nodeptr_t inserted_node = try_insert(it.get_node_ptr(), pnode, next.get_node_ptr());
-<a name="l00472"></a>00472 
-<a name="l00473"></a>00473         <span class="keywordflow">if</span> (inserted_node == pnode)
-<a name="l00474"></a>00474         {
-<a name="l00475"></a>00475             <span class="comment">// If the insert succeeded, check that the order is correct and increment the element count</span>
-<a name="l00476"></a>00476             check_range();
-<a name="l00477"></a>00477             *new_count = __TBB_FetchAndAddW((uintptr_t*)&my_element_count, uintptr_t(1));
-<a name="l00478"></a>00478             <span class="keywordflow">return</span> std::pair<iterator, bool>(iterator(pnode, <span class="keyword">this</span>), <span class="keyword">true</span>);
-<a name="l00479"></a>00479         }
-<a name="l00480"></a>00480         <span class="keywordflow">else</span>
-<a name="l00481"></a>00481         {
-<a name="l00482"></a>00482             <span class="comment">// If the insert failed (element already there), then delete the new one</span>
-<a name="l00483"></a>00483             destroy_node(pnode);
-<a name="l00484"></a>00484             <span class="keywordflow">return</span> std::pair<iterator, bool>(end(), <span class="keyword">false</span>);
-<a name="l00485"></a>00485         }
-<a name="l00486"></a>00486     }
-<a name="l00487"></a>00487 
-<a name="l00488"></a>00488     <span class="comment">// Insert a new dummy element, starting search at a parent dummy element</span>
-<a name="l00489"></a>00489     raw_iterator insert_dummy(raw_iterator it, sokey_t order_key)
-<a name="l00490"></a>00490     {
-<a name="l00491"></a>00491         raw_iterator last = raw_end();
-<a name="l00492"></a>00492         raw_iterator where = it;
-<a name="l00493"></a>00493 
-<a name="l00494"></a>00494         __TBB_ASSERT(where != last, <span class="stringliteral">"Invalid head node"</span>);
-<a name="l00495"></a>00495 
-<a name="l00496"></a>00496         ++where;
-<a name="l00497"></a>00497 
-<a name="l00498"></a>00498         <span class="comment">// Create a dummy element up front, even though it may be discarded (due to concurrent insertion)</span>
-<a name="l00499"></a>00499         nodeptr_t dummy_node = create_node(order_key);
-<a name="l00500"></a>00500 
-<a name="l00501"></a>00501         <span class="keywordflow">for</span> (;;)
-<a name="l00502"></a>00502         {
-<a name="l00503"></a>00503             __TBB_ASSERT(it != last, <span class="stringliteral">"Invalid head list node"</span>);
-<a name="l00504"></a>00504 
-<a name="l00505"></a>00505             <span class="comment">// If the head iterator is at the end of the list, or past the point where this dummy</span>
-<a name="l00506"></a>00506             <span class="comment">// node needs to be inserted, then try to insert it.</span>
-<a name="l00507"></a>00507             <span class="keywordflow">if</span> (where == last || get_order_key(where) > order_key)
-<a name="l00508"></a>00508             {
-<a name="l00509"></a>00509                 __TBB_ASSERT(get_order_key(it) < order_key, <span class="stringliteral">"Invalid node order in the list"</span>);
-<a name="l00510"></a>00510 
-<a name="l00511"></a>00511                 <span class="comment">// Try to insert it in the right place</span>
-<a name="l00512"></a>00512                 nodeptr_t inserted_node = try_insert(it.get_node_ptr(), dummy_node, where.get_node_ptr());
-<a name="l00513"></a>00513 
-<a name="l00514"></a>00514                 <span class="keywordflow">if</span> (inserted_node == dummy_node)
-<a name="l00515"></a>00515                 {
-<a name="l00516"></a>00516                     <span class="comment">// Insertion succeeded, check the list for order violations</span>
-<a name="l00517"></a>00517                     check_range();
-<a name="l00518"></a>00518                     <span class="keywordflow">return</span> raw_iterator(dummy_node);
-<a name="l00519"></a>00519                 }
-<a name="l00520"></a>00520                 <span class="keywordflow">else</span>
-<a name="l00521"></a>00521                 {
-<a name="l00522"></a>00522                     <span class="comment">// Insertion failed: either dummy node was inserted by another thread, or</span>
-<a name="l00523"></a>00523                     <span class="comment">// a real element was inserted at exactly the same place as dummy node.</span>
-<a name="l00524"></a>00524                     <span class="comment">// Proceed with the search from the previous location where order key was</span>
-<a name="l00525"></a>00525                     <span class="comment">// known to be larger (note: this is legal only because there is no safe</span>
-<a name="l00526"></a>00526                     <span class="comment">// concurrent erase operation supported).</span>
-<a name="l00527"></a>00527                     where = it;
-<a name="l00528"></a>00528                     ++where;
-<a name="l00529"></a>00529                     <span class="keywordflow">continue</span>;
-<a name="l00530"></a>00530                 }
-<a name="l00531"></a>00531             }
-<a name="l00532"></a>00532             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (get_order_key(where) == order_key)
-<a name="l00533"></a>00533             {
-<a name="l00534"></a>00534                 <span class="comment">// Another dummy node with the same value found, discard the new one.</span>
-<a name="l00535"></a>00535                 destroy_node(dummy_node);
-<a name="l00536"></a>00536                 <span class="keywordflow">return</span> where;
-<a name="l00537"></a>00537             }
-<a name="l00538"></a>00538 
-<a name="l00539"></a>00539             <span class="comment">// Move the iterator forward</span>
-<a name="l00540"></a>00540             it = where;
-<a name="l00541"></a>00541             ++where;
-<a name="l00542"></a>00542         }
-<a name="l00543"></a>00543 
-<a name="l00544"></a>00544     }
-<a name="l00545"></a>00545 
-<a name="l00546"></a>00546     <span class="comment">// This erase function can handle both real and dummy nodes</span>
-<a name="l00547"></a>00547     <span class="keywordtype">void</span> erase_node(raw_iterator previous, raw_const_iterator& where)
-<a name="l00548"></a>00548     {
-<a name="l00549"></a>00549         nodeptr_t pnode = (where++).get_node_ptr();
-<a name="l00550"></a>00550         nodeptr_t prevnode = previous.get_node_ptr();
-<a name="l00551"></a>00551         __TBB_ASSERT(prevnode->my_next == pnode, <span class="stringliteral">"Erase must take consecutive iterators"</span>);
-<a name="l00552"></a>00552         prevnode->my_next = pnode->my_next;
-<a name="l00553"></a>00553 
-<a name="l00554"></a>00554         destroy_node(pnode);
-<a name="l00555"></a>00555     }
-<a name="l00556"></a>00556 
-<a name="l00557"></a>00557     <span class="comment">// Erase the element (previous node needs to be passed because this is a forward only list)</span>
-<a name="l00558"></a>00558     iterator erase_node(raw_iterator previous, const_iterator where)
-<a name="l00559"></a>00559     {
-<a name="l00560"></a>00560         raw_const_iterator it = where;
-<a name="l00561"></a>00561         erase_node(previous, it);
-<a name="l00562"></a>00562         my_element_count--;
-<a name="l00563"></a>00563 
-<a name="l00564"></a>00564         <span class="keywordflow">return</span> get_iterator(first_real_iterator(it));
-<a name="l00565"></a>00565     }
-<a name="l00566"></a>00566 
-<a name="l00567"></a>00567     <span class="comment">// Move all elements from the passed in split-ordered list to this one</span>
-<a name="l00568"></a>00568     <span class="keywordtype">void</span> move_all(self_type& source)
-<a name="l00569"></a>00569     {
-<a name="l00570"></a>00570         raw_const_iterator first = source.raw_begin();
-<a name="l00571"></a>00571         raw_const_iterator last = source.raw_end();
-<a name="l00572"></a>00572 
-<a name="l00573"></a>00573         <span class="keywordflow">if</span> (first == last)
-<a name="l00574"></a>00574             <span class="keywordflow">return</span>;
-<a name="l00575"></a>00575 
-<a name="l00576"></a>00576         nodeptr_t previous_node = my_head;
-<a name="l00577"></a>00577         raw_const_iterator begin_iterator = first++;
-<a name="l00578"></a>00578 
-<a name="l00579"></a>00579         <span class="comment">// Move all elements one by one, including dummy ones</span>
-<a name="l00580"></a>00580         <span class="keywordflow">for</span> (raw_const_iterator it = first; it != last;)
-<a name="l00581"></a>00581         {
-<a name="l00582"></a>00582             nodeptr_t pnode = it.get_node_ptr();
-<a name="l00583"></a>00583 
-<a name="l00584"></a>00584             nodeptr_t dummy_node = pnode->is_dummy() ? create_node(pnode->get_order_key()) : create_node(pnode->get_order_key(), pnode->my_element);
-<a name="l00585"></a>00585             previous_node = try_insert(previous_node, dummy_node, NULL);
-<a name="l00586"></a>00586             __TBB_ASSERT(previous_node != NULL, <span class="stringliteral">"Insertion must succeed"</span>);
-<a name="l00587"></a>00587             raw_const_iterator where = it++;
-<a name="l00588"></a>00588             source.erase_node(get_iterator(begin_iterator), where);
-<a name="l00589"></a>00589         }
-<a name="l00590"></a>00590         check_range();
-<a name="l00591"></a>00591     }
-<a name="l00592"></a>00592 
-<a name="l00593"></a>00593 
-<a name="l00594"></a>00594 <span class="keyword">private</span>:
-<a name="l00595"></a>00595 
-<a name="l00596"></a>00596     <span class="comment">// Check the list for order violations</span>
-<a name="l00597"></a>00597     <span class="keywordtype">void</span> check_range()
-<a name="l00598"></a>00598     {
-<a name="l00599"></a>00599 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00600"></a>00600 <span class="preprocessor"></span>        <span class="keywordflow">for</span> (raw_iterator it = raw_begin(); it != raw_end(); ++it)
-<a name="l00601"></a>00601         {
-<a name="l00602"></a>00602             raw_iterator next_iterator = it;
-<a name="l00603"></a>00603             ++next_iterator;
-<a name="l00604"></a>00604 
-<a name="l00605"></a>00605             __TBB_ASSERT(next_iterator == end() || next_iterator.get_node_ptr()->get_order_key() >= it.get_node_ptr()->get_order_key(), <span class="stringliteral">"!!! List order inconsistency !!!"</span>);
-<a name="l00606"></a>00606         }
-<a name="l00607"></a>00607 <span class="preprocessor">#endif</span>
-<a name="l00608"></a>00608 <span class="preprocessor"></span>    }
-<a name="l00609"></a>00609 
-<a name="l00610"></a>00610     <span class="keyword">typename</span> allocator_type::template rebind<node>::other my_node_allocator;  <span class="comment">// allocator object for nodes</span>
-<a name="l00611"></a>00611     size_type                                             my_element_count;   <span class="comment">// Total item count, not counting dummy nodes</span>
-<a name="l00612"></a>00612     nodeptr_t                                             my_head;            <span class="comment">// pointer to head node</span>
-<a name="l00613"></a>00613 };
-<a name="l00614"></a>00614 
-<a name="l00615"></a>00615 <span class="comment">// Template class for hash compare</span>
-<a name="l00616"></a>00616 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> Hasher, <span class="keyword">typename</span> Key_equality>
-<a name="l00617"></a>00617 <span class="keyword">class </span>hash_compare
-<a name="l00618"></a>00618 {
-<a name="l00619"></a>00619 <span class="keyword">public</span>:
-<a name="l00620"></a>00620     hash_compare() {}
-<a name="l00621"></a>00621 
-<a name="l00622"></a>00622     hash_compare(Hasher a_hasher) : my_hash_object(a_hasher) {}
-<a name="l00623"></a>00623 
-<a name="l00624"></a>00624     hash_compare(Hasher a_hasher, Key_equality a_keyeq) : my_hash_object(a_hasher), my_key_compare_object(a_keyeq) {}
-<a name="l00625"></a>00625 
-<a name="l00626"></a>00626     size_t operator()(<span class="keyword">const</span> Key& key)<span class="keyword"> const </span>{
-<a name="l00627"></a>00627         <span class="keywordflow">return</span> ((size_t)my_hash_object(key));
-<a name="l00628"></a>00628     }
-<a name="l00629"></a>00629 
-<a name="l00630"></a>00630     <span class="keywordtype">bool</span> operator()(<span class="keyword">const</span> Key& key1, <span class="keyword">const</span> Key& key2)<span class="keyword"> const </span>{
-<a name="l00631"></a>00631         <span class="keywordflow">return</span> (!my_key_compare_object(key1, key2));
-<a name="l00632"></a>00632     }
-<a name="l00633"></a>00633 
-<a name="l00634"></a>00634     Hasher       my_hash_object;        <span class="comment">// The hash object</span>
-<a name="l00635"></a>00635     Key_equality my_key_compare_object; <span class="comment">// The equality comparator object</span>
-<a name="l00636"></a>00636 };
-<a name="l00637"></a>00637 
-<a name="l00638"></a>00638 <span class="preprocessor">#if _MSC_VER</span>
-<a name="l00639"></a>00639 <span class="preprocessor"></span><span class="preprocessor">#pragma warning(push)</span>
-<a name="l00640"></a>00640 <span class="preprocessor"></span><span class="preprocessor">#pragma warning(disable: 4127) // warning 4127 -- while (true) has a constant expression in it (for allow_multimapping)</span>
-<a name="l00641"></a>00641 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00642"></a>00642 <span class="preprocessor"></span>
-<a name="l00643"></a>00643 <span class="keyword">template</span> <<span class="keyword">typename</span> Traits>
-<a name="l00644"></a>00644 <span class="keyword">class </span>concurrent_unordered_base : <span class="keyword">public</span> Traits
-<a name="l00645"></a>00645 {
-<a name="l00646"></a>00646 <span class="keyword">protected</span>:
-<a name="l00647"></a>00647     <span class="comment">// Type definitions</span>
-<a name="l00648"></a>00648     <span class="keyword">typedef</span> concurrent_unordered_base<Traits> self_type;
-<a name="l00649"></a>00649     <span class="keyword">typedef</span> <span class="keyword">typename</span> Traits::value_type value_type;
-<a name="l00650"></a>00650     <span class="keyword">typedef</span> <span class="keyword">typename</span> Traits::key_type key_type;
-<a name="l00651"></a>00651     <span class="keyword">typedef</span> <span class="keyword">typename</span> Traits::hash_compare hash_compare;
-<a name="l00652"></a>00652     <span class="keyword">typedef</span> <span class="keyword">typename</span> Traits::value_compare value_compare;
-<a name="l00653"></a>00653     <span class="keyword">typedef</span> <span class="keyword">typename</span> Traits::allocator_type allocator_type;
-<a name="l00654"></a>00654     <span class="keyword">typedef</span> <span class="keyword">typename</span> allocator_type::pointer pointer;
-<a name="l00655"></a>00655     <span class="keyword">typedef</span> <span class="keyword">typename</span> allocator_type::const_pointer const_pointer;
-<a name="l00656"></a>00656     <span class="keyword">typedef</span> <span class="keyword">typename</span> allocator_type::reference reference;
-<a name="l00657"></a>00657     <span class="keyword">typedef</span> <span class="keyword">typename</span> allocator_type::const_reference const_reference;
-<a name="l00658"></a>00658     <span class="keyword">typedef</span> <span class="keyword">typename</span> allocator_type::size_type size_type;
-<a name="l00659"></a>00659     <span class="keyword">typedef</span> <span class="keyword">typename</span> allocator_type::difference_type difference_type;
-<a name="l00660"></a>00660     <span class="keyword">typedef</span> split_ordered_list<value_type, typename Traits::allocator_type> solist_t;
-<a name="l00661"></a>00661     <span class="keyword">typedef</span> <span class="keyword">typename</span> solist_t::nodeptr_t nodeptr_t;
-<a name="l00662"></a>00662     <span class="comment">// Iterators that walk the entire split-order list, including dummy nodes</span>
-<a name="l00663"></a>00663     <span class="keyword">typedef</span> <span class="keyword">typename</span> solist_t::raw_iterator raw_iterator;
-<a name="l00664"></a>00664     <span class="keyword">typedef</span> <span class="keyword">typename</span> solist_t::raw_const_iterator raw_const_iterator;
-<a name="l00665"></a>00665     <span class="keyword">typedef</span> <span class="keyword">typename</span> solist_t::iterator iterator; <span class="comment">// TODO: restore const iterator for unordered_sets</span>
-<a name="l00666"></a>00666     <span class="keyword">typedef</span> <span class="keyword">typename</span> solist_t::const_iterator const_iterator;
-<a name="l00667"></a>00667     <span class="keyword">typedef</span> iterator local_iterator;
-<a name="l00668"></a>00668     <span class="keyword">typedef</span> const_iterator const_local_iterator;
-<a name="l00669"></a>00669     <span class="keyword">using</span> Traits::my_hash_compare;
-<a name="l00670"></a>00670     <span class="keyword">using</span> Traits::get_key;
-<a name="l00671"></a>00671     <span class="keyword">using</span> Traits::allow_multimapping;
-<a name="l00672"></a>00672 
-<a name="l00673"></a>00673 <span class="keyword">private</span>:
-<a name="l00674"></a>00674     <span class="keyword">typedef</span> std::pair<iterator, iterator> pairii_t;
-<a name="l00675"></a>00675     <span class="keyword">typedef</span> std::pair<const_iterator, const_iterator> paircc_t;
-<a name="l00676"></a>00676 
-<a name="l00677"></a>00677     <span class="keyword">static</span> size_type <span class="keyword">const</span> pointers_per_table = <span class="keyword">sizeof</span>(size_type) * 8;              <span class="comment">// One bucket segment per bit</span>
-<a name="l00678"></a>00678     <span class="keyword">static</span> <span class="keyword">const</span> size_type initial_bucket_number = 8;                               <span class="comment">// Initial number of buckets</span>
-<a name="l00679"></a>00679     <span class="keyword">static</span> <span class="keyword">const</span> size_type initial_bucket_load = 4;                                <span class="comment">// Initial maximum number of elements per bucket</span>
-<a name="l00680"></a>00680 
-<a name="l00681"></a>00681 <span class="keyword">protected</span>:
-<a name="l00682"></a>00682     <span class="comment">// Constructors/Destructors</span>
-<a name="l00683"></a>00683     concurrent_unordered_base(size_type n_of_buckets = initial_bucket_number,
-<a name="l00684"></a>00684         <span class="keyword">const</span> hash_compare& hc = hash_compare(), <span class="keyword">const</span> allocator_type& a = allocator_type())
-<a name="l00685"></a>00685         : Traits(hc), my_solist(a),
-<a name="l00686"></a>00686           my_allocator(a), my_maximum_bucket_size((float) initial_bucket_load)
-<a name="l00687"></a>00687     {
-<a name="l00688"></a>00688         __TBB_ASSERT( n_of_buckets, <span class="stringliteral">"number of buckets must be greater than 0"</span>);
-<a name="l00689"></a>00689         my_number_of_buckets = 1<<__TBB_Log2((uintptr_t)n_of_buckets*2-1); <span class="comment">// round up to power of 2</span>
-<a name="l00690"></a>00690         internal_init();
-<a name="l00691"></a>00691     }
-<a name="l00692"></a>00692 
-<a name="l00693"></a>00693     concurrent_unordered_base(<span class="keyword">const</span> concurrent_unordered_base& right, <span class="keyword">const</span> allocator_type& a)
-<a name="l00694"></a>00694         : Traits(right.my_hash_compare), my_solist(a), my_allocator(a)
-<a name="l00695"></a>00695     {
-<a name="l00696"></a>00696         internal_copy(right);
-<a name="l00697"></a>00697     }
-<a name="l00698"></a>00698 
-<a name="l00699"></a>00699     concurrent_unordered_base(<span class="keyword">const</span> concurrent_unordered_base& right)
-<a name="l00700"></a>00700         : Traits(right.my_hash_compare), my_solist(right.get_allocator()), my_allocator(right.get_allocator())
-<a name="l00701"></a>00701     {
-<a name="l00702"></a>00702         internal_init();
-<a name="l00703"></a>00703         internal_copy(right);
-<a name="l00704"></a>00704     }
-<a name="l00705"></a>00705 
-<a name="l00706"></a>00706     concurrent_unordered_base& operator=(<span class="keyword">const</span> concurrent_unordered_base& right) {
-<a name="l00707"></a>00707         <span class="keywordflow">if</span> (<span class="keyword">this</span> != &right)
-<a name="l00708"></a>00708             internal_copy(right);
-<a name="l00709"></a>00709         <span class="keywordflow">return</span> (*<span class="keyword">this</span>);
-<a name="l00710"></a>00710     }
-<a name="l00711"></a>00711 
-<a name="l00712"></a>00712     ~concurrent_unordered_base() {
-<a name="l00713"></a>00713         <span class="comment">// Delete all node segments</span>
-<a name="l00714"></a>00714         internal_clear();
-<a name="l00715"></a>00715     }
-<a name="l00716"></a>00716 
-<a name="l00717"></a>00717 <span class="keyword">public</span>:
-<a name="l00718"></a>00718     allocator_type get_allocator()<span class="keyword"> const </span>{
-<a name="l00719"></a>00719         <span class="keywordflow">return</span> my_solist.get_allocator();
-<a name="l00720"></a>00720     }
-<a name="l00721"></a>00721 
-<a name="l00722"></a>00722     <span class="comment">// Size and capacity function</span>
-<a name="l00723"></a>00723     <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{
-<a name="l00724"></a>00724         <span class="keywordflow">return</span> my_solist.empty();
-<a name="l00725"></a>00725     }
-<a name="l00726"></a>00726 
-<a name="l00727"></a>00727     size_type size()<span class="keyword"> const </span>{
-<a name="l00728"></a>00728         <span class="keywordflow">return</span> my_solist.size();
-<a name="l00729"></a>00729     }
-<a name="l00730"></a>00730 
-<a name="l00731"></a>00731     size_type max_size()<span class="keyword"> const </span>{
-<a name="l00732"></a>00732         <span class="keywordflow">return</span> my_solist.max_size();
-<a name="l00733"></a>00733     }
-<a name="l00734"></a>00734 
-<a name="l00735"></a>00735     <span class="comment">// Iterators </span>
-<a name="l00736"></a>00736     iterator begin() {
-<a name="l00737"></a>00737         <span class="keywordflow">return</span> my_solist.begin();
-<a name="l00738"></a>00738     }
-<a name="l00739"></a>00739 
-<a name="l00740"></a>00740     const_iterator begin()<span class="keyword"> const </span>{
-<a name="l00741"></a>00741         <span class="keywordflow">return</span> my_solist.begin();
-<a name="l00742"></a>00742     }
-<a name="l00743"></a>00743 
-<a name="l00744"></a>00744     iterator end() {
-<a name="l00745"></a>00745         <span class="keywordflow">return</span> my_solist.end();
-<a name="l00746"></a>00746     }
-<a name="l00747"></a>00747 
-<a name="l00748"></a>00748     const_iterator end()<span class="keyword"> const </span>{
-<a name="l00749"></a>00749         <span class="keywordflow">return</span> my_solist.end();
-<a name="l00750"></a>00750     }
-<a name="l00751"></a>00751 
-<a name="l00752"></a>00752     const_iterator cbegin()<span class="keyword"> const </span>{
-<a name="l00753"></a>00753         <span class="keywordflow">return</span> my_solist.cbegin();
-<a name="l00754"></a>00754     }
-<a name="l00755"></a>00755 
-<a name="l00756"></a>00756     const_iterator cend()<span class="keyword"> const </span>{
-<a name="l00757"></a>00757         <span class="keywordflow">return</span> my_solist.cend();
-<a name="l00758"></a>00758     }
-<a name="l00759"></a>00759 
-<a name="l00760"></a>00760     <span class="comment">// Parallel traversal support</span>
-<a name="l00761"></a>00761     <span class="keyword">class </span>const_range_type : tbb::internal::no_assign {
-<a name="l00762"></a>00762         <span class="keyword">const</span> concurrent_unordered_base &my_table;
-<a name="l00763"></a>00763         raw_const_iterator my_begin_node;
-<a name="l00764"></a>00764         raw_const_iterator my_end_node;
-<a name="l00765"></a>00765         <span class="keyword">mutable</span> raw_const_iterator my_midpoint_node;
-<a name="l00766"></a>00766     <span class="keyword">public</span>:
-<a name="l00768"></a>00768         <span class="keyword">typedef</span> <span class="keyword">typename</span> concurrent_unordered_base::size_type size_type;
-<a name="l00769"></a>00769         <span class="keyword">typedef</span> <span class="keyword">typename</span> concurrent_unordered_base::value_type value_type;
-<a name="l00770"></a>00770         <span class="keyword">typedef</span> <span class="keyword">typename</span> concurrent_unordered_base::reference reference;
-<a name="l00771"></a>00771         <span class="keyword">typedef</span> <span class="keyword">typename</span> concurrent_unordered_base::difference_type difference_type;
-<a name="l00772"></a>00772         <span class="keyword">typedef</span> <span class="keyword">typename</span> concurrent_unordered_base::const_iterator iterator;
-<a name="l00773"></a>00773 
-<a name="l00775"></a>00775         <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_begin_node == my_end_node;}
-<a name="l00776"></a>00776 
-<a name="l00778"></a>00778         <span class="keywordtype">bool</span> is_divisible()<span class="keyword"> const </span>{
-<a name="l00779"></a>00779             <span class="keywordflow">return</span> my_midpoint_node != my_end_node;
-<a name="l00780"></a>00780         }
-<a name="l00782"></a>00782         const_range_type( const_range_type &r, split ) : 
-<a name="l00783"></a>00783             my_table(r.my_table), my_end_node(r.my_end_node)
-<a name="l00784"></a>00784         {
-<a name="l00785"></a>00785             r.my_end_node = my_begin_node = r.my_midpoint_node;
-<a name="l00786"></a>00786             __TBB_ASSERT( !empty(), <span class="stringliteral">"Splitting despite the range is not divisible"</span> );
-<a name="l00787"></a>00787             __TBB_ASSERT( !r.empty(), <span class="stringliteral">"Splitting despite the range is not divisible"</span> );
-<a name="l00788"></a>00788             set_midpoint();
-<a name="l00789"></a>00789             r.set_midpoint();
-<a name="l00790"></a>00790         }
-<a name="l00792"></a>00792         const_range_type( <span class="keyword">const</span> concurrent_unordered_base &a_table ) : 
-<a name="l00793"></a>00793             my_table(a_table), my_begin_node(a_table.my_solist.begin()),
-<a name="l00794"></a>00794             my_end_node(a_table.my_solist.end())
-<a name="l00795"></a>00795         {
-<a name="l00796"></a>00796             set_midpoint();
-<a name="l00797"></a>00797         }
-<a name="l00798"></a>00798         iterator begin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_table.my_solist.get_iterator(my_begin_node); }
-<a name="l00799"></a>00799         iterator end()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_table.my_solist.get_iterator(my_end_node); }
-<a name="l00801"></a>00801         size_type grainsize()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> 1; }
-<a name="l00802"></a>00802 
-<a name="l00804"></a>00804         <span class="keywordtype">void</span> set_midpoint()<span class="keyword"> const </span>{
-<a name="l00805"></a>00805             <span class="keywordflow">if</span>( my_begin_node == my_end_node ) <span class="comment">// not divisible</span>
-<a name="l00806"></a>00806                 my_midpoint_node = my_end_node;
-<a name="l00807"></a>00807             <span class="keywordflow">else</span> {
-<a name="l00808"></a>00808                 sokey_t begin_key = solist_t::get_safe_order_key(my_begin_node);
-<a name="l00809"></a>00809                 sokey_t end_key = solist_t::get_safe_order_key(my_end_node);
-<a name="l00810"></a>00810                 size_t mid_bucket = __TBB_ReverseBits( begin_key + (end_key-begin_key)/2 ) % my_table.my_number_of_buckets;
-<a name="l00811"></a>00811                 <span class="keywordflow">while</span> ( !my_table.is_initialized(mid_bucket) ) mid_bucket = my_table.get_parent(mid_bucket);
-<a name="l00812"></a>00812                 my_midpoint_node = my_table.my_solist.first_real_iterator(my_table.get_bucket( mid_bucket ));
-<a name="l00813"></a>00813                 <span class="keywordflow">if</span>( my_midpoint_node == my_begin_node )
-<a name="l00814"></a>00814                     my_midpoint_node = my_end_node;
-<a name="l00815"></a>00815 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00816"></a>00816 <span class="preprocessor"></span>                <span class="keywordflow">else</span> {
-<a name="l00817"></a>00817                     sokey_t mid_key = solist_t::get_safe_order_key(my_midpoint_node);
-<a name="l00818"></a>00818                     __TBB_ASSERT( begin_key < mid_key, <span class="stringliteral">"my_begin_node is after my_midpoint_node"</span> );
-<a name="l00819"></a>00819                     __TBB_ASSERT( mid_key <= end_key, <span class="stringliteral">"my_midpoint_node is after my_end_node"</span> );
-<a name="l00820"></a>00820                 }
-<a name="l00821"></a>00821 <span class="preprocessor">#endif // TBB_USE_ASSERT</span>
-<a name="l00822"></a>00822 <span class="preprocessor"></span>            }
-<a name="l00823"></a>00823         }
-<a name="l00824"></a>00824     };
-<a name="l00825"></a>00825 
-<a name="l00826"></a>00826     <span class="keyword">class </span>range_type : <span class="keyword">public</span> const_range_type {
-<a name="l00827"></a>00827     <span class="keyword">public</span>:
-<a name="l00828"></a>00828         <span class="keyword">typedef</span> <span class="keyword">typename</span> concurrent_unordered_base::iterator iterator;
-<a name="l00830"></a>00830         range_type( range_type &r, split ) : const_range_type( r, split() ) {}
-<a name="l00832"></a>00832         range_type( <span class="keyword">const</span> concurrent_unordered_base &a_table ) : const_range_type(a_table) {}
-<a name="l00833"></a>00833 
-<a name="l00834"></a>00834         iterator begin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> solist_t::get_iterator( const_range_type::begin() ); }
-<a name="l00835"></a>00835         iterator end()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> solist_t::get_iterator( const_range_type::end() ); }
-<a name="l00836"></a>00836     };
-<a name="l00837"></a>00837 
-<a name="l00838"></a>00838     range_type range() {
-<a name="l00839"></a>00839         <span class="keywordflow">return</span> range_type( *<span class="keyword">this</span> );
-<a name="l00840"></a>00840     }
-<a name="l00841"></a>00841 
-<a name="l00842"></a>00842     const_range_type range()<span class="keyword"> const </span>{
-<a name="l00843"></a>00843         <span class="keywordflow">return</span> const_range_type( *<span class="keyword">this</span> );
-<a name="l00844"></a>00844     }
-<a name="l00845"></a>00845 
-<a name="l00846"></a>00846     <span class="comment">// Modifiers</span>
-<a name="l00847"></a>00847     std::pair<iterator, bool> insert(<span class="keyword">const</span> value_type& value) {
-<a name="l00848"></a>00848         <span class="keywordflow">return</span> internal_insert(value);
-<a name="l00849"></a>00849     }
-<a name="l00850"></a>00850 
-<a name="l00851"></a>00851     iterator insert(const_iterator, <span class="keyword">const</span> value_type& value) {
-<a name="l00852"></a>00852         <span class="comment">// Ignore hint</span>
-<a name="l00853"></a>00853         <span class="keywordflow">return</span> insert(value).first;
-<a name="l00854"></a>00854     }
-<a name="l00855"></a>00855 
-<a name="l00856"></a>00856     <span class="keyword">template</span><<span class="keyword">class</span> Iterator>
-<a name="l00857"></a>00857     <span class="keywordtype">void</span> insert(Iterator first, Iterator last) {
-<a name="l00858"></a>00858         <span class="keywordflow">for</span> (Iterator it = first; it != last; ++it)
-<a name="l00859"></a>00859             insert(*it);
-<a name="l00860"></a>00860     }
-<a name="l00861"></a>00861 
-<a name="l00862"></a>00862     iterator unsafe_erase(const_iterator where) {
-<a name="l00863"></a>00863         <span class="keywordflow">return</span> internal_erase(where);
-<a name="l00864"></a>00864     }
-<a name="l00865"></a>00865 
-<a name="l00866"></a>00866     iterator unsafe_erase(const_iterator first, const_iterator last) {
-<a name="l00867"></a>00867         <span class="keywordflow">while</span> (first != last)
-<a name="l00868"></a>00868             unsafe_erase(first++);
-<a name="l00869"></a>00869         <span class="keywordflow">return</span> my_solist.get_iterator(first);
-<a name="l00870"></a>00870     }
-<a name="l00871"></a>00871 
-<a name="l00872"></a>00872     size_type unsafe_erase(<span class="keyword">const</span> key_type& key) {
-<a name="l00873"></a>00873         pairii_t where = equal_range(key);
-<a name="l00874"></a>00874         size_type item_count = internal_distance(where.first, where.second);
-<a name="l00875"></a>00875         unsafe_erase(where.first, where.second);
-<a name="l00876"></a>00876         <span class="keywordflow">return</span> item_count;
-<a name="l00877"></a>00877     }
-<a name="l00878"></a>00878 
-<a name="l00879"></a>00879     <span class="keywordtype">void</span> swap(concurrent_unordered_base& right) {
-<a name="l00880"></a>00880         <span class="keywordflow">if</span> (<span class="keyword">this</span> != &right) {
-<a name="l00881"></a>00881             std::swap(my_hash_compare, right.my_hash_compare); <span class="comment">// TODO: check what ADL meant here</span>
-<a name="l00882"></a>00882             my_solist.swap(right.my_solist);
-<a name="l00883"></a>00883             internal_swap_buckets(right);
-<a name="l00884"></a>00884             std::swap(my_number_of_buckets, right.my_number_of_buckets);
-<a name="l00885"></a>00885             std::swap(my_maximum_bucket_size, right.my_maximum_bucket_size);
-<a name="l00886"></a>00886         }
-<a name="l00887"></a>00887     }
-<a name="l00888"></a>00888 
-<a name="l00889"></a>00889     <span class="comment">// Observers</span>
-<a name="l00890"></a>00890     <span class="keywordtype">void</span> clear() {
-<a name="l00891"></a>00891         <span class="comment">// Clear list</span>
-<a name="l00892"></a>00892         my_solist.clear();
-<a name="l00893"></a>00893 
-<a name="l00894"></a>00894         <span class="comment">// Clear buckets</span>
-<a name="l00895"></a>00895         internal_clear();
-<a name="l00896"></a>00896     }
-<a name="l00897"></a>00897 
-<a name="l00898"></a>00898     <span class="comment">// Lookup</span>
-<a name="l00899"></a>00899     iterator find(<span class="keyword">const</span> key_type& key) {
-<a name="l00900"></a>00900         <span class="keywordflow">return</span> internal_find(key);
-<a name="l00901"></a>00901     }
-<a name="l00902"></a>00902 
-<a name="l00903"></a>00903     const_iterator find(<span class="keyword">const</span> key_type& key)<span class="keyword"> const </span>{
-<a name="l00904"></a>00904         <span class="keywordflow">return</span> const_cast<self_type*>(<span class="keyword">this</span>)->internal_find(key);
-<a name="l00905"></a>00905     }
-<a name="l00906"></a>00906 
-<a name="l00907"></a>00907     size_type count(<span class="keyword">const</span> key_type& key)<span class="keyword"> const </span>{
-<a name="l00908"></a>00908         paircc_t answer = equal_range(key);
-<a name="l00909"></a>00909         size_type item_count = internal_distance(answer.first, answer.second);
-<a name="l00910"></a>00910         <span class="keywordflow">return</span> item_count;
-<a name="l00911"></a>00911     }
-<a name="l00912"></a>00912 
-<a name="l00913"></a>00913     std::pair<iterator, iterator> equal_range(<span class="keyword">const</span> key_type& key) {
-<a name="l00914"></a>00914         <span class="keywordflow">return</span> internal_equal_range(key);
-<a name="l00915"></a>00915     }
-<a name="l00916"></a>00916 
-<a name="l00917"></a>00917     std::pair<const_iterator, const_iterator> equal_range(<span class="keyword">const</span> key_type& key)<span class="keyword"> const </span>{
-<a name="l00918"></a>00918         <span class="keywordflow">return</span> const_cast<self_type*>(<span class="keyword">this</span>)->internal_equal_range(key);
-<a name="l00919"></a>00919     }
-<a name="l00920"></a>00920 
-<a name="l00921"></a>00921     <span class="comment">// Bucket interface - for debugging </span>
-<a name="l00922"></a>00922     size_type unsafe_bucket_count()<span class="keyword"> const </span>{
-<a name="l00923"></a>00923         <span class="keywordflow">return</span> my_number_of_buckets;
-<a name="l00924"></a>00924     }
-<a name="l00925"></a>00925 
-<a name="l00926"></a>00926     size_type unsafe_max_bucket_count()<span class="keyword"> const </span>{
-<a name="l00927"></a>00927         <span class="keywordflow">return</span> segment_size(pointers_per_table-1);
-<a name="l00928"></a>00928     }
-<a name="l00929"></a>00929 
-<a name="l00930"></a>00930     size_type unsafe_bucket_size(size_type bucket) {
-<a name="l00931"></a>00931         size_type item_count = 0;
-<a name="l00932"></a>00932         <span class="keywordflow">if</span> (is_initialized(bucket)) {
-<a name="l00933"></a>00933             raw_iterator it = get_bucket(bucket);
-<a name="l00934"></a>00934             ++it;
-<a name="l00935"></a>00935             <span class="keywordflow">for</span> (; it != my_solist.raw_end() && !it.get_node_ptr()->is_dummy(); ++it)
-<a name="l00936"></a>00936                 ++item_count;
-<a name="l00937"></a>00937         }
-<a name="l00938"></a>00938         <span class="keywordflow">return</span> item_count;
-<a name="l00939"></a>00939     }
-<a name="l00940"></a>00940 
-<a name="l00941"></a>00941     size_type unsafe_bucket(<span class="keyword">const</span> key_type& key)<span class="keyword"> const </span>{
-<a name="l00942"></a>00942         sokey_t order_key = (sokey_t) my_hash_compare(key);
-<a name="l00943"></a>00943         size_type bucket = order_key % my_number_of_buckets;
-<a name="l00944"></a>00944         <span class="keywordflow">return</span> bucket;
-<a name="l00945"></a>00945     }
-<a name="l00946"></a>00946 
-<a name="l00947"></a>00947     <span class="comment">// If the bucket is initialized, return a first non-dummy element in it</span>
-<a name="l00948"></a>00948     local_iterator unsafe_begin(size_type bucket) {
-<a name="l00949"></a>00949         <span class="keywordflow">if</span> (!is_initialized(bucket))
-<a name="l00950"></a>00950             <span class="keywordflow">return</span> end();
-<a name="l00951"></a>00951 
-<a name="l00952"></a>00952         raw_iterator it = get_bucket(bucket);
-<a name="l00953"></a>00953         <span class="keywordflow">return</span> my_solist.first_real_iterator(it);
-<a name="l00954"></a>00954     }
-<a name="l00955"></a>00955 
-<a name="l00956"></a>00956     <span class="comment">// If the bucket is initialized, return a first non-dummy element in it</span>
-<a name="l00957"></a>00957     const_local_iterator unsafe_begin(size_type bucket)<span class="keyword"> const</span>
-<a name="l00958"></a>00958 <span class="keyword">    </span>{
-<a name="l00959"></a>00959         <span class="keywordflow">if</span> (!is_initialized(bucket))
-<a name="l00960"></a>00960             <span class="keywordflow">return</span> end();
-<a name="l00961"></a>00961 
-<a name="l00962"></a>00962         raw_const_iterator it = get_bucket(bucket);
-<a name="l00963"></a>00963         <span class="keywordflow">return</span> my_solist.first_real_iterator(it);
-<a name="l00964"></a>00964     }
-<a name="l00965"></a>00965 
-<a name="l00966"></a>00966     <span class="comment">// @REVIEW: Takes O(n)</span>
-<a name="l00967"></a>00967     <span class="comment">// Returns the iterator after the last non-dummy element in the bucket</span>
-<a name="l00968"></a>00968     local_iterator unsafe_end(size_type bucket)
-<a name="l00969"></a>00969     {
-<a name="l00970"></a>00970         <span class="keywordflow">if</span> (!is_initialized(bucket))
-<a name="l00971"></a>00971             <span class="keywordflow">return</span> end();
-<a name="l00972"></a>00972 
-<a name="l00973"></a>00973         raw_iterator it = get_bucket(bucket);
-<a name="l00974"></a>00974     
-<a name="l00975"></a>00975         <span class="comment">// Find the end of the bucket, denoted by the dummy element</span>
-<a name="l00976"></a>00976         <span class="keywordflow">do</span> ++it;
-<a name="l00977"></a>00977         <span class="keywordflow">while</span>(it != my_solist.raw_end() && !it.get_node_ptr()->is_dummy());
-<a name="l00978"></a>00978 
-<a name="l00979"></a>00979         <span class="comment">// Return the first real element past the end of the bucket</span>
-<a name="l00980"></a>00980         <span class="keywordflow">return</span> my_solist.first_real_iterator(it);
-<a name="l00981"></a>00981     }
-<a name="l00982"></a>00982 
-<a name="l00983"></a>00983     <span class="comment">// @REVIEW: Takes O(n)</span>
-<a name="l00984"></a>00984     <span class="comment">// Returns the iterator after the last non-dummy element in the bucket</span>
-<a name="l00985"></a>00985     const_local_iterator unsafe_end(size_type bucket)<span class="keyword"> const</span>
-<a name="l00986"></a>00986 <span class="keyword">    </span>{
-<a name="l00987"></a>00987         <span class="keywordflow">if</span> (!is_initialized(bucket))
-<a name="l00988"></a>00988             <span class="keywordflow">return</span> end();
-<a name="l00989"></a>00989 
-<a name="l00990"></a>00990         raw_const_iterator it = get_bucket(bucket);
-<a name="l00991"></a>00991     
-<a name="l00992"></a>00992         <span class="comment">// Find the end of the bucket, denoted by the dummy element</span>
-<a name="l00993"></a>00993         <span class="keywordflow">do</span> ++it;
-<a name="l00994"></a>00994         <span class="keywordflow">while</span>(it != my_solist.raw_end() && !it.get_node_ptr()->is_dummy());
-<a name="l00995"></a>00995 
-<a name="l00996"></a>00996         <span class="comment">// Return the first real element past the end of the bucket</span>
-<a name="l00997"></a>00997         <span class="keywordflow">return</span> my_solist.first_real_iterator(it);
-<a name="l00998"></a>00998     }
-<a name="l00999"></a>00999 
-<a name="l01000"></a>01000     const_local_iterator unsafe_cbegin(size_type bucket)<span class="keyword"> const </span>{
-<a name="l01001"></a>01001         <span class="keywordflow">return</span> ((<span class="keyword">const</span> self_type *) <span class="keyword">this</span>)->begin();
-<a name="l01002"></a>01002     }
-<a name="l01003"></a>01003 
-<a name="l01004"></a>01004     const_local_iterator unsafe_cend(size_type bucket)<span class="keyword"> const </span>{
-<a name="l01005"></a>01005         <span class="keywordflow">return</span> ((<span class="keyword">const</span> self_type *) <span class="keyword">this</span>)->end();
-<a name="l01006"></a>01006     }
-<a name="l01007"></a>01007 
-<a name="l01008"></a>01008     <span class="comment">// Hash policy</span>
-<a name="l01009"></a>01009     <span class="keywordtype">float</span> load_factor()<span class="keyword"> const </span>{
-<a name="l01010"></a>01010         <span class="keywordflow">return</span> (<span class="keywordtype">float</span>) size() / (float) unsafe_bucket_count();
-<a name="l01011"></a>01011     }
-<a name="l01012"></a>01012 
-<a name="l01013"></a>01013     <span class="keywordtype">float</span> max_load_factor()<span class="keyword"> const </span>{
-<a name="l01014"></a>01014         <span class="keywordflow">return</span> my_maximum_bucket_size;
-<a name="l01015"></a>01015     }
-<a name="l01016"></a>01016 
-<a name="l01017"></a>01017     <span class="keywordtype">void</span> max_load_factor(<span class="keywordtype">float</span> newmax) {
-<a name="l01018"></a>01018         <span class="keywordflow">if</span> (newmax != newmax || newmax < 0)
-<a name="l01019"></a>01019             tbb::internal::throw_exception(tbb::internal::eid_invalid_load_factor);
-<a name="l01020"></a>01020         my_maximum_bucket_size = newmax;
-<a name="l01021"></a>01021     }
-<a name="l01022"></a>01022 
-<a name="l01023"></a>01023     <span class="comment">// This function is a noop, because the underlying split-ordered list</span>
-<a name="l01024"></a>01024     <span class="comment">// is already sorted, so an increase in the bucket number will be</span>
-<a name="l01025"></a>01025     <span class="comment">// reflected next time this bucket is touched.</span>
-<a name="l01026"></a>01026     <span class="keywordtype">void</span> rehash(size_type buckets) {
-<a name="l01027"></a>01027         size_type current_buckets = my_number_of_buckets;
-<a name="l01028"></a>01028         <span class="keywordflow">if</span> (current_buckets >= buckets)
-<a name="l01029"></a>01029             <span class="keywordflow">return</span>;
-<a name="l01030"></a>01030         my_number_of_buckets = 1<<__TBB_Log2((uintptr_t)buckets*2-1); <span class="comment">// round up to power of 2</span>
-<a name="l01031"></a>01031     }
-<a name="l01032"></a>01032 
-<a name="l01033"></a>01033 <span class="keyword">private</span>:
-<a name="l01034"></a>01034 
-<a name="l01035"></a>01035     <span class="comment">// Initialize the hash and keep the first bucket open</span>
-<a name="l01036"></a>01036     <span class="keywordtype">void</span> internal_init() {
-<a name="l01037"></a>01037         <span class="comment">// Allocate an array of segment pointers</span>
-<a name="l01038"></a>01038         memset(my_buckets, 0, pointers_per_table * <span class="keyword">sizeof</span>(<span class="keywordtype">void</span> *));
-<a name="l01039"></a>01039 
-<a name="l01040"></a>01040         <span class="comment">// Insert the first element in the split-ordered list</span>
-<a name="l01041"></a>01041         raw_iterator dummy_node = my_solist.raw_begin();
-<a name="l01042"></a>01042         set_bucket(0, dummy_node);
-<a name="l01043"></a>01043     }
-<a name="l01044"></a>01044 
-<a name="l01045"></a>01045     <span class="keywordtype">void</span> internal_clear() {
-<a name="l01046"></a>01046         <span class="keywordflow">for</span> (size_type index = 0; index < pointers_per_table; ++index) {
-<a name="l01047"></a>01047             <span class="keywordflow">if</span> (my_buckets[index] != NULL) {
-<a name="l01048"></a>01048                 size_type sz = segment_size(index);
-<a name="l01049"></a>01049                 <span class="keywordflow">for</span> (size_type index2 = 0; index2 < sz; ++index2)
-<a name="l01050"></a>01050                     my_allocator.destroy(&my_buckets[index][index2]);
-<a name="l01051"></a>01051                 my_allocator.deallocate(my_buckets[index], sz);
-<a name="l01052"></a>01052                 my_buckets[index] = 0;
-<a name="l01053"></a>01053             }
-<a name="l01054"></a>01054         }
-<a name="l01055"></a>01055     }
-<a name="l01056"></a>01056 
-<a name="l01057"></a>01057     <span class="keywordtype">void</span> internal_copy(<span class="keyword">const</span> self_type& right) {
-<a name="l01058"></a>01058         clear();
-<a name="l01059"></a>01059 
-<a name="l01060"></a>01060         my_maximum_bucket_size = right.my_maximum_bucket_size;
-<a name="l01061"></a>01061         my_number_of_buckets = right.my_number_of_buckets;
-<a name="l01062"></a>01062 
-<a name="l01063"></a>01063         __TBB_TRY {
-<a name="l01064"></a>01064             insert(right.begin(), right.end());
-<a name="l01065"></a>01065             my_hash_compare = right.my_hash_compare;
-<a name="l01066"></a>01066         } __TBB_CATCH(...) {
-<a name="l01067"></a>01067             my_solist.clear();
-<a name="l01068"></a>01068             __TBB_RETHROW();
-<a name="l01069"></a>01069         }
-<a name="l01070"></a>01070     }
-<a name="l01071"></a>01071 
-<a name="l01072"></a>01072     <span class="keywordtype">void</span> internal_swap_buckets(concurrent_unordered_base& right)
-<a name="l01073"></a>01073     {
-<a name="l01074"></a>01074         <span class="comment">// Swap all node segments</span>
-<a name="l01075"></a>01075         <span class="keywordflow">for</span> (size_type index = 0; index < pointers_per_table; ++index)
-<a name="l01076"></a>01076         {
-<a name="l01077"></a>01077             raw_iterator * iterator_pointer = my_buckets[index];
-<a name="l01078"></a>01078             my_buckets[index] = right.my_buckets[index];
-<a name="l01079"></a>01079             right.my_buckets[index] = iterator_pointer;
-<a name="l01080"></a>01080         }
-<a name="l01081"></a>01081     }
-<a name="l01082"></a>01082 
-<a name="l01083"></a>01083     <span class="comment">// Hash APIs</span>
-<a name="l01084"></a>01084     size_type internal_distance(const_iterator first, const_iterator last)<span class="keyword"> const</span>
-<a name="l01085"></a>01085 <span class="keyword">    </span>{
-<a name="l01086"></a>01086         size_type num = 0;
-<a name="l01087"></a>01087 
-<a name="l01088"></a>01088         <span class="keywordflow">for</span> (const_iterator it = first; it != last; ++it)
-<a name="l01089"></a>01089             ++num;
-<a name="l01090"></a>01090 
-<a name="l01091"></a>01091         <span class="keywordflow">return</span> num;
-<a name="l01092"></a>01092     }
-<a name="l01093"></a>01093 
-<a name="l01094"></a>01094     <span class="comment">// Insert an element in the hash given its value</span>
-<a name="l01095"></a>01095     std::pair<iterator, bool> internal_insert(<span class="keyword">const</span> value_type& value)
-<a name="l01096"></a>01096     {
-<a name="l01097"></a>01097         sokey_t order_key = (sokey_t) my_hash_compare(get_key(value));
-<a name="l01098"></a>01098         size_type bucket = order_key % my_number_of_buckets;
-<a name="l01099"></a>01099 
-<a name="l01100"></a>01100         <span class="comment">// If bucket is empty, initialize it first</span>
-<a name="l01101"></a>01101         <span class="keywordflow">if</span> (!is_initialized(bucket))
-<a name="l01102"></a>01102             init_bucket(bucket);
-<a name="l01103"></a>01103 
-<a name="l01104"></a>01104         size_type new_count;
-<a name="l01105"></a>01105         order_key = split_order_key_regular(order_key);
-<a name="l01106"></a>01106         raw_iterator it = get_bucket(bucket);
-<a name="l01107"></a>01107         raw_iterator last = my_solist.raw_end();
-<a name="l01108"></a>01108         raw_iterator where = it;
-<a name="l01109"></a>01109 
-<a name="l01110"></a>01110         __TBB_ASSERT(where != last, <span class="stringliteral">"Invalid head node"</span>);
-<a name="l01111"></a>01111 
-<a name="l01112"></a>01112         <span class="comment">// First node is a dummy node</span>
-<a name="l01113"></a>01113         ++where;
-<a name="l01114"></a>01114 
-<a name="l01115"></a>01115         <span class="keywordflow">for</span> (;;)
-<a name="l01116"></a>01116         {
-<a name="l01117"></a>01117             <span class="keywordflow">if</span> (where == last || solist_t::get_order_key(where) > order_key)
-<a name="l01118"></a>01118             {
-<a name="l01119"></a>01119                 <span class="comment">// Try to insert it in the right place</span>
-<a name="l01120"></a>01120                 std::pair<iterator, bool> result = my_solist.try_insert(it, where, value, order_key, &new_count);
-<a name="l01121"></a>01121                 
-<a name="l01122"></a>01122                 <span class="keywordflow">if</span> (result.second)
-<a name="l01123"></a>01123                 {
-<a name="l01124"></a>01124                     <span class="comment">// Insertion succeeded, adjust the table size, if needed</span>
-<a name="l01125"></a>01125                     adjust_table_size(new_count, my_number_of_buckets);
-<a name="l01126"></a>01126                     <span class="keywordflow">return</span> result;
-<a name="l01127"></a>01127                 }
-<a name="l01128"></a>01128                 <span class="keywordflow">else</span>
-<a name="l01129"></a>01129                 {
-<a name="l01130"></a>01130                     <span class="comment">// Insertion failed: either the same node was inserted by another thread, or</span>
-<a name="l01131"></a>01131                     <span class="comment">// another element was inserted at exactly the same place as this node.</span>
-<a name="l01132"></a>01132                     <span class="comment">// Proceed with the search from the previous location where order key was</span>
-<a name="l01133"></a>01133                     <span class="comment">// known to be larger (note: this is legal only because there is no safe</span>
-<a name="l01134"></a>01134                     <span class="comment">// concurrent erase operation supported).</span>
-<a name="l01135"></a>01135                     where = it;
-<a name="l01136"></a>01136                     ++where;
-<a name="l01137"></a>01137                     <span class="keywordflow">continue</span>;
-<a name="l01138"></a>01138                 }
-<a name="l01139"></a>01139             }
-<a name="l01140"></a>01140             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!allow_multimapping && solist_t::get_order_key(where) == order_key && my_hash_compare(get_key(*where), get_key(value)) == 0)
-<a name="l01141"></a>01141             {
-<a name="l01142"></a>01142                 <span class="comment">// Element already in the list, return it</span>
-<a name="l01143"></a>01143                 <span class="keywordflow">return</span> std::pair<iterator, bool>(my_solist.get_iterator(where), <span class="keyword">false</span>);
-<a name="l01144"></a>01144             }
-<a name="l01145"></a>01145 
-<a name="l01146"></a>01146             <span class="comment">// Move the iterator forward</span>
-<a name="l01147"></a>01147             it = where;
-<a name="l01148"></a>01148             ++where;
-<a name="l01149"></a>01149         }
-<a name="l01150"></a>01150     }
-<a name="l01151"></a>01151 
-<a name="l01152"></a>01152     <span class="comment">// Find the element in the split-ordered list</span>
-<a name="l01153"></a>01153     iterator internal_find(<span class="keyword">const</span> key_type& key)
-<a name="l01154"></a>01154     {
-<a name="l01155"></a>01155         sokey_t order_key = (sokey_t) my_hash_compare(key);
-<a name="l01156"></a>01156         size_type bucket = order_key % my_number_of_buckets;
-<a name="l01157"></a>01157 
-<a name="l01158"></a>01158         <span class="comment">// If bucket is empty, initialize it first</span>
-<a name="l01159"></a>01159         <span class="keywordflow">if</span> (!is_initialized(bucket))
-<a name="l01160"></a>01160             init_bucket(bucket);
-<a name="l01161"></a>01161 
-<a name="l01162"></a>01162         order_key = split_order_key_regular(order_key);
-<a name="l01163"></a>01163         raw_iterator last = my_solist.raw_end();
-<a name="l01164"></a>01164 
-<a name="l01165"></a>01165         <span class="keywordflow">for</span> (raw_iterator it = get_bucket(bucket); it != last; ++it)
-<a name="l01166"></a>01166         {
-<a name="l01167"></a>01167             <span class="keywordflow">if</span> (solist_t::get_order_key(it) > order_key)
-<a name="l01168"></a>01168             {
-<a name="l01169"></a>01169                 <span class="comment">// If the order key is smaller than the current order key, the element</span>
-<a name="l01170"></a>01170                 <span class="comment">// is not in the hash.</span>
-<a name="l01171"></a>01171                 <span class="keywordflow">return</span> end();
-<a name="l01172"></a>01172             }
-<a name="l01173"></a>01173             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (solist_t::get_order_key(it) == order_key)
-<a name="l01174"></a>01174             {
-<a name="l01175"></a>01175                 <span class="comment">// The fact that order keys match does not mean that the element is found.</span>
-<a name="l01176"></a>01176                 <span class="comment">// Key function comparison has to be performed to check whether this is the</span>
-<a name="l01177"></a>01177                 <span class="comment">// right element. If not, keep searching while order key is the same.</span>
-<a name="l01178"></a>01178                 <span class="keywordflow">if</span> (!my_hash_compare(get_key(*it), key))
-<a name="l01179"></a>01179                     <span class="keywordflow">return</span> my_solist.get_iterator(it);
-<a name="l01180"></a>01180             }
-<a name="l01181"></a>01181         }
-<a name="l01182"></a>01182 
-<a name="l01183"></a>01183         <span class="keywordflow">return</span> end();
-<a name="l01184"></a>01184     }
-<a name="l01185"></a>01185 
-<a name="l01186"></a>01186     <span class="comment">// Erase an element from the list. This is not a concurrency safe function.</span>
-<a name="l01187"></a>01187     iterator internal_erase(const_iterator it)
-<a name="l01188"></a>01188     {
-<a name="l01189"></a>01189         key_type key = get_key(*it);
-<a name="l01190"></a>01190         sokey_t order_key = (sokey_t) my_hash_compare(key);
-<a name="l01191"></a>01191         size_type bucket = order_key % my_number_of_buckets;
-<a name="l01192"></a>01192 
-<a name="l01193"></a>01193         <span class="comment">// If bucket is empty, initialize it first</span>
-<a name="l01194"></a>01194         <span class="keywordflow">if</span> (!is_initialized(bucket))
-<a name="l01195"></a>01195             init_bucket(bucket);
-<a name="l01196"></a>01196 
-<a name="l01197"></a>01197         order_key = split_order_key_regular(order_key);
-<a name="l01198"></a>01198 
-<a name="l01199"></a>01199         raw_iterator previous = get_bucket(bucket);
-<a name="l01200"></a>01200         raw_iterator last = my_solist.raw_end();
-<a name="l01201"></a>01201         raw_iterator where = previous;
-<a name="l01202"></a>01202 
-<a name="l01203"></a>01203         __TBB_ASSERT(where != last, <span class="stringliteral">"Invalid head node"</span>);
-<a name="l01204"></a>01204 
-<a name="l01205"></a>01205         <span class="comment">// First node is a dummy node</span>
-<a name="l01206"></a>01206         ++where;
-<a name="l01207"></a>01207 
-<a name="l01208"></a>01208         <span class="keywordflow">for</span> (;;) {
-<a name="l01209"></a>01209             <span class="keywordflow">if</span> (where == last)
-<a name="l01210"></a>01210                 <span class="keywordflow">return</span> end();
-<a name="l01211"></a>01211             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (my_solist.get_iterator(where) == it)
-<a name="l01212"></a>01212                 <span class="keywordflow">return</span> my_solist.erase_node(previous, it);
-<a name="l01213"></a>01213 
-<a name="l01214"></a>01214             <span class="comment">// Move the iterator forward</span>
-<a name="l01215"></a>01215             previous = where;
-<a name="l01216"></a>01216             ++where;
-<a name="l01217"></a>01217         }
-<a name="l01218"></a>01218     }
-<a name="l01219"></a>01219 
-<a name="l01220"></a>01220     <span class="comment">// Return the [begin, end) pair of iterators with the same key values.</span>
-<a name="l01221"></a>01221     <span class="comment">// This operation makes sense only if mapping is many-to-one.</span>
-<a name="l01222"></a>01222     pairii_t internal_equal_range(<span class="keyword">const</span> key_type& key)
-<a name="l01223"></a>01223     {
-<a name="l01224"></a>01224         sokey_t order_key = (sokey_t) my_hash_compare(key);
-<a name="l01225"></a>01225         size_type bucket = order_key % my_number_of_buckets;
-<a name="l01226"></a>01226 
-<a name="l01227"></a>01227         <span class="comment">// If bucket is empty, initialize it first</span>
-<a name="l01228"></a>01228         <span class="keywordflow">if</span> (!is_initialized(bucket))
-<a name="l01229"></a>01229             init_bucket(bucket);
-<a name="l01230"></a>01230 
-<a name="l01231"></a>01231         order_key = split_order_key_regular(order_key);
-<a name="l01232"></a>01232         raw_iterator end_it = my_solist.raw_end();
-<a name="l01233"></a>01233 
-<a name="l01234"></a>01234         <span class="keywordflow">for</span> (raw_iterator it = get_bucket(bucket); it != end_it; ++it)
-<a name="l01235"></a>01235         {
-<a name="l01236"></a>01236             <span class="keywordflow">if</span> (solist_t::get_order_key(it) > order_key)
-<a name="l01237"></a>01237             {
-<a name="l01238"></a>01238                 <span class="comment">// There is no element with the given key</span>
-<a name="l01239"></a>01239                 <span class="keywordflow">return</span> pairii_t(end(), end());
-<a name="l01240"></a>01240             }
-<a name="l01241"></a>01241             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (solist_t::get_order_key(it) == order_key && !my_hash_compare(get_key(*it), key))
-<a name="l01242"></a>01242             {
-<a name="l01243"></a>01243                 iterator first = my_solist.get_iterator(it);
-<a name="l01244"></a>01244                 iterator last = first;
-<a name="l01245"></a>01245 
-<a name="l01246"></a>01246                 <span class="keywordflow">while</span>( last != end() && !my_hash_compare(get_key(*last), key) )
-<a name="l01247"></a>01247                     ++last;
-<a name="l01248"></a>01248                 <span class="keywordflow">return</span> pairii_t(first, last);
-<a name="l01249"></a>01249             }
-<a name="l01250"></a>01250         }
-<a name="l01251"></a>01251 
-<a name="l01252"></a>01252         <span class="keywordflow">return</span> pairii_t(end(), end());
-<a name="l01253"></a>01253     }
-<a name="l01254"></a>01254 
-<a name="l01255"></a>01255     <span class="comment">// Bucket APIs</span>
-<a name="l01256"></a>01256     <span class="keywordtype">void</span> init_bucket(size_type bucket)
-<a name="l01257"></a>01257     {
-<a name="l01258"></a>01258         <span class="comment">// Bucket 0 has no parent. Initialize it and return.</span>
-<a name="l01259"></a>01259         <span class="keywordflow">if</span> (bucket == 0) {
-<a name="l01260"></a>01260             internal_init();
-<a name="l01261"></a>01261             <span class="keywordflow">return</span>;
-<a name="l01262"></a>01262         }
-<a name="l01263"></a>01263 
-<a name="l01264"></a>01264         size_type parent_bucket = get_parent(bucket);
-<a name="l01265"></a>01265 
-<a name="l01266"></a>01266         <span class="comment">// All parent_bucket buckets have to be initialized before this bucket is</span>
-<a name="l01267"></a>01267         <span class="keywordflow">if</span> (!is_initialized(parent_bucket))
-<a name="l01268"></a>01268             init_bucket(parent_bucket);
-<a name="l01269"></a>01269 
-<a name="l01270"></a>01270         raw_iterator parent = get_bucket(parent_bucket);
-<a name="l01271"></a>01271 
-<a name="l01272"></a>01272         <span class="comment">// Create a dummy first node in this bucket</span>
-<a name="l01273"></a>01273         raw_iterator dummy_node = my_solist.insert_dummy(parent, split_order_key_dummy(bucket));
-<a name="l01274"></a>01274         set_bucket(bucket, dummy_node);
-<a name="l01275"></a>01275     }
-<a name="l01276"></a>01276 
-<a name="l01277"></a>01277     <span class="keywordtype">void</span> adjust_table_size(size_type total_elements, size_type current_size)
-<a name="l01278"></a>01278     {
-<a name="l01279"></a>01279         <span class="comment">// Grow the table by a factor of 2 if possible and needed</span>
-<a name="l01280"></a>01280         <span class="keywordflow">if</span> ( ((<span class="keywordtype">float</span>) total_elements / (<span class="keywordtype">float</span>) current_size) > my_maximum_bucket_size )
-<a name="l01281"></a>01281         {
-<a name="l01282"></a>01282              <span class="comment">// Double the size of the hash only if size has not changed inbetween loads</span>
-<a name="l01283"></a>01283             __TBB_CompareAndSwapW((uintptr_t*)&my_number_of_buckets, 2 * current_size, current_size );
-<a name="l01284"></a>01284         }
-<a name="l01285"></a>01285     }
-<a name="l01286"></a>01286 
-<a name="l01287"></a>01287     size_type get_parent(size_type bucket)<span class="keyword"> const</span>
-<a name="l01288"></a>01288 <span class="keyword">    </span>{
-<a name="l01289"></a>01289         <span class="comment">// Unsets bucket's most significant turned-on bit</span>
-<a name="l01290"></a>01290         size_type msb = __TBB_Log2((uintptr_t)bucket);
-<a name="l01291"></a>01291         <span class="keywordflow">return</span> bucket & ~(size_type(1) << msb);
-<a name="l01292"></a>01292     }
-<a name="l01293"></a>01293 
-<a name="l01294"></a>01294 
-<a name="l01295"></a>01295     <span class="comment">// Dynamic sized array (segments)</span>
-<a name="l01297"></a>01297 <span class="comment"></span>    <span class="keyword">static</span> size_type segment_index_of( size_type index ) {
-<a name="l01298"></a>01298         <span class="keywordflow">return</span> size_type( __TBB_Log2( index|1 ) );
-<a name="l01299"></a>01299     }
-<a name="l01300"></a>01300 
-<a name="l01302"></a>01302     <span class="keyword">static</span> size_type segment_base( size_type k ) {
-<a name="l01303"></a>01303         <span class="keywordflow">return</span> (size_type(1)<<k & ~size_type(1));
-<a name="l01304"></a>01304     }
-<a name="l01305"></a>01305 
-<a name="l01307"></a>01307     <span class="keyword">static</span> size_type segment_size( size_type k ) {
-<a name="l01308"></a>01308         <span class="keywordflow">return</span> k? size_type(1)<<k : 2;
-<a name="l01309"></a>01309     }
-<a name="l01310"></a>01310 
-<a name="l01311"></a>01311     raw_iterator get_bucket(size_type bucket)<span class="keyword"> const </span>{
-<a name="l01312"></a>01312         size_type segment = segment_index_of(bucket);
-<a name="l01313"></a>01313         bucket -= segment_base(segment);
-<a name="l01314"></a>01314         __TBB_ASSERT( my_buckets[segment], <span class="stringliteral">"bucket must be in an allocated segment"</span> );
-<a name="l01315"></a>01315         <span class="keywordflow">return</span> my_buckets[segment][bucket];
-<a name="l01316"></a>01316     }
-<a name="l01317"></a>01317 
-<a name="l01318"></a>01318     <span class="keywordtype">void</span> set_bucket(size_type bucket, raw_iterator dummy_head) {
-<a name="l01319"></a>01319         size_type segment = segment_index_of(bucket);
-<a name="l01320"></a>01320         bucket -= segment_base(segment);
-<a name="l01321"></a>01321 
-<a name="l01322"></a>01322         <span class="keywordflow">if</span> (my_buckets[segment] == NULL) {
-<a name="l01323"></a>01323             size_type sz = segment_size(segment);
-<a name="l01324"></a>01324             raw_iterator * new_segment = my_allocator.allocate(sz);
-<a name="l01325"></a>01325             std::memset(new_segment, 0, sz*<span class="keyword">sizeof</span>(raw_iterator));
-<a name="l01326"></a>01326 
-<a name="l01327"></a>01327             <span class="keywordflow">if</span> (__TBB_CompareAndSwapW((<span class="keywordtype">void</span> *) &my_buckets[segment], (uintptr_t)new_segment, 0) != 0)
-<a name="l01328"></a>01328                 my_allocator.deallocate(new_segment, sz);
-<a name="l01329"></a>01329         }
-<a name="l01330"></a>01330 
-<a name="l01331"></a>01331         my_buckets[segment][bucket] = dummy_head;
-<a name="l01332"></a>01332     }
-<a name="l01333"></a>01333 
-<a name="l01334"></a>01334     <span class="keywordtype">bool</span> is_initialized(size_type bucket)<span class="keyword"> const </span>{
-<a name="l01335"></a>01335         size_type segment = segment_index_of(bucket);
-<a name="l01336"></a>01336         bucket -= segment_base(segment);
-<a name="l01337"></a>01337 
-<a name="l01338"></a>01338         <span class="keywordflow">if</span> (my_buckets[segment] == NULL)
-<a name="l01339"></a>01339             <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l01340"></a>01340 
-<a name="l01341"></a>01341         raw_iterator it = my_buckets[segment][bucket];
-<a name="l01342"></a>01342         <span class="keywordflow">return</span> (it.get_node_ptr() != NULL);
-<a name="l01343"></a>01343     }
-<a name="l01344"></a>01344 
-<a name="l01345"></a>01345     <span class="comment">// Utilities for keys</span>
-<a name="l01346"></a>01346 
-<a name="l01347"></a>01347     <span class="comment">// A regular order key has its original hash value reversed and the last bit set</span>
-<a name="l01348"></a>01348     sokey_t split_order_key_regular(sokey_t order_key)<span class="keyword"> const </span>{
-<a name="l01349"></a>01349         <span class="keywordflow">return</span> __TBB_ReverseBits(order_key) | 0x1;
-<a name="l01350"></a>01350     }
-<a name="l01351"></a>01351 
-<a name="l01352"></a>01352     <span class="comment">// A dummy order key has its original hash value reversed and the last bit unset</span>
-<a name="l01353"></a>01353     sokey_t split_order_key_dummy(sokey_t order_key)<span class="keyword"> const </span>{
-<a name="l01354"></a>01354         <span class="keywordflow">return</span> __TBB_ReverseBits(order_key) & ~(0x1);
-<a name="l01355"></a>01355     }
-<a name="l01356"></a>01356 
-<a name="l01357"></a>01357     <span class="comment">// Shared variables</span>
-<a name="l01358"></a>01358     atomic<size_type>                                             my_number_of_buckets;       <span class="comment">// Current table size</span>
-<a name="l01359"></a>01359     solist_t                                                      my_solist;                  <span class="comment">// List where all the elements are kept</span>
-<a name="l01360"></a>01360     <span class="keyword">typename</span> allocator_type::template rebind<raw_iterator>::other my_allocator;               <span class="comment">// Allocator object for segments</span>
-<a name="l01361"></a>01361     <span class="keywordtype">float</span>                                                         my_maximum_bucket_size;     <span class="comment">// Maximum size of the bucket</span>
-<a name="l01362"></a>01362     atomic<raw_iterator*>                                         my_buckets[pointers_per_table]; <span class="comment">// The segment table</span>
-<a name="l01363"></a>01363 };
-<a name="l01364"></a>01364 <span class="preprocessor">#if _MSC_VER</span>
-<a name="l01365"></a>01365 <span class="preprocessor"></span><span class="preprocessor">#pragma warning(pop) // warning 4127 -- while (true) has a constant expression in it</span>
-<a name="l01366"></a>01366 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l01367"></a>01367 <span class="preprocessor"></span>
-<a name="l01369"></a>01369 <span class="keyword">static</span> <span class="keyword">const</span> size_t hash_multiplier = <span class="keyword">sizeof</span>(size_t)==4? 2654435769U : 11400714819323198485ULL;
-<a name="l01370"></a>01370 } <span class="comment">// namespace internal</span>
-<a name="l01373"></a>01373 <span class="comment"></span><span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l01374"></a>01374 <span class="keyword">inline</span> size_t tbb_hasher( <span class="keyword">const</span> T& t ) {
-<a name="l01375"></a>01375     <span class="keywordflow">return</span> static_cast<size_t>( t ) * internal::hash_multiplier;
-<a name="l01376"></a>01376 }
-<a name="l01377"></a>01377 <span class="keyword">template</span><<span class="keyword">typename</span> P>
-<a name="l01378"></a>01378 <span class="keyword">inline</span> size_t tbb_hasher( P* ptr ) {
-<a name="l01379"></a>01379     size_t <span class="keyword">const</span> h = reinterpret_cast<size_t>( ptr );
-<a name="l01380"></a>01380     <span class="keywordflow">return</span> (h >> 3) ^ h;
-<a name="l01381"></a>01381 }
-<a name="l01382"></a>01382 <span class="keyword">template</span><<span class="keyword">typename</span> E, <span class="keyword">typename</span> S, <span class="keyword">typename</span> A>
-<a name="l01383"></a>01383 <span class="keyword">inline</span> size_t tbb_hasher( <span class="keyword">const</span> std::basic_string<E,S,A>& s ) {
-<a name="l01384"></a>01384     size_t h = 0;
-<a name="l01385"></a>01385     <span class="keywordflow">for</span>( <span class="keyword">const</span> E* c = s.c_str(); *c; ++c )
-<a name="l01386"></a>01386         h = static_cast<size_t>(*c) ^ (h * internal::hash_multiplier);
-<a name="l01387"></a>01387     <span class="keywordflow">return</span> h;
-<a name="l01388"></a>01388 }
-<a name="l01389"></a>01389 <span class="keyword">template</span><<span class="keyword">typename</span> F, <span class="keyword">typename</span> S>
-<a name="l01390"></a>01390 <span class="keyword">inline</span> size_t tbb_hasher( <span class="keyword">const</span> std::pair<F,S>& p ) {
-<a name="l01391"></a>01391     <span class="keywordflow">return</span> tbb_hasher(p.first) ^ tbb_hasher(p.second);
-<a name="l01392"></a>01392 }
-<a name="l01393"></a>01393 } <span class="comment">// namespace interface5</span>
-<a name="l01394"></a>01394 <span class="keyword">using</span> interface5::tbb_hasher;
-<a name="l01395"></a>01395 } <span class="comment">// namespace tbb</span>
-<a name="l01396"></a>01396 <span class="preprocessor">#endif// __TBB_concurrent_unordered_internal_H</span>
-</pre></div><hr>
+<div class="nav">
+<a class="el" href="a00362.html">tbb</a>::<b>internal</b>::<a class="el" href="a00299.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="a00593.html">tbb_exception.h</a>></code>
+<p>
+<a href="a00145.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>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="a00299.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="a00299.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="a00299.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="a00299.html">tbb_exception_ptr</a> * </td><td class="memItemRight" valign="bottom"><b>allocate</b> (const <a class="el" href="a00298.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="a00299.html">tbb_exception_ptr</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00299.html#c35e5db8e9cdff5d1387db5b0bad2e4a">allocate</a> (<a class="el" href="a00228.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="a00593.html">tbb_exception.h</a></ul>
+<hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00300.html b/doc/html/a00300.html
new file mode 100644
index 0000000..56b1298
--- /dev/null
+++ b/doc/html/a00300.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="a00362.html">tbb</a>::<a class="el" href="a00300.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="a00424.html">concurrent_hash_map.h</a>></code>
+<p>
+<a href="a00014.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>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="a00424.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/a00301.html b/doc/html/a00301.html
new file mode 100644
index 0000000..bb22869
--- /dev/null
+++ b/doc/html/a00301.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="a00362.html">tbb</a>::<a class="el" href="a00301.html">thread_bound_filter</a></div>
+<h1>tbb::thread_bound_filter Class Reference<br>
+<small>
+[<a class="el" href="a00371.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="a00546.html">pipeline.h</a>></code>
+<p>
+<p>Inheritance diagram for tbb::thread_bound_filter:
+<p><center><img src="a00301.png" usemap="#tbb::thread_bound_filter_map" border="0" alt=""></center>
+<map name="tbb::thread_bound_filter_map">
+<area href="a00245.html" alt="tbb::filter" shape="rect" coords="0,0,145,24">
+</map>
+<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 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="a00301.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="a00301.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="a00546.html">pipeline.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/a00209.png b/doc/html/a00301.png
similarity index 100%
rename from doc/html/a00209.png
rename to doc/html/a00301.png
diff --git a/doc/html/a00302.html b/doc/html/a00302.html
new file mode 100644
index 0000000..82a3020
--- /dev/null
+++ b/doc/html/a00302.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="a00362.html">tbb</a>::<a class="el" href="a00302.html">tick_count</a></div>
+<h1>tbb::tick_count Class Reference<br>
+<small>
+[<a class="el" href="a00375.html">Timing</a>]</small>
+</h1><!-- doxytag: class="tbb::tick_count" -->Absolute timestamp.  
+<a href="#_details">More...</a>
+<p>
+<code>#include <<a class="el" href="a00616.html">tick_count.h</a>></code>
+<p>
+<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 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="a00302.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="a00302.html">tick_count</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00302.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="a00303.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00302.html#09dde78a4100800c11bb883d6204b586">operator-</a> (const <a class="el" href="a00302.html">tick_count</a> &t1, const <a class="el" href="a00302.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="a00303.html">interval_t</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Relative time interval.  <a href="a00303.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="a00616.html">tick_count.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/a00303.html b/doc/html/a00303.html
new file mode 100644
index 0000000..6e582ab
--- /dev/null
+++ b/doc/html/a00303.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="a00362.html">tbb</a>::<a class="el" href="a00302.html">tick_count</a>::<a class="el" href="a00303.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="a00616.html">tick_count.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"><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="a00303.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="a00303.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="a00303.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="a00303.html">interval_t</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00303.html#cd9814947902e26463a69a111530f81b">operator+=</a> (const <a class="el" href="a00303.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="a00303.html">interval_t</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00303.html#35ff7eaf7c2031b4a991402ac9ecb940">operator-=</a> (const <a class="el" href="a00303.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="a00303.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="a00303.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00303.html#09dde78a4100800c11bb883d6204b586">operator-</a> (const <a class="el" href="a00302.html">tick_count</a> &t1, const <a class="el" href="a00302.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="a00303.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00303.html#5871ead1ca230efbe52a5008470e6428">operator+</a> (const <a class="el" href="a00303.html">interval_t</a> &i, const <a class="el" href="a00303.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="a00303.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00303.html#fa509691e1d689830931e36edd274f76">operator-</a> (const <a class="el" href="a00303.html">interval_t</a> &i, const <a class="el" href="a00303.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="a00616.html">tick_count.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/a00304.html b/doc/html/a00304.html
new file mode 100644
index 0000000..e3dfc82
--- /dev/null
+++ b/doc/html/a00304.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::internal::two_phase_port< 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="a00362.html">tbb</a>::<b>internal</b>::<a class="el" href="a00304.html">two_phase_port</a></div>
+<h1>tbb::internal::two_phase_port< T > Class Template Reference</h1><!-- doxytag: class="tbb::internal::two_phase_port" --><!-- doxytag: inherits="tbb::receiver" -->The two-phase join port.  
+<a href="#_details">More...</a>
+<p>
+<code>#include <<a class="el" href="a00466.html">graph.h</a>></code>
+<p>
+<p>Inheritance diagram for tbb::internal::two_phase_port< T >:
+<p><center><img src="a00304.png" usemap="#tbb::internal::two_phase_port< T >_map" border="0" alt=""></center>
+<map name="tbb::internal::two_phase_port< T >_map">
+<area href="a00277.html" alt="tbb::receiver< T >" shape="rect" coords="0,0,203,24">
+</map>
+<a href="a00065.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0f464d59e15941d6d625e8c7d634e26b"></a><!-- doxytag: member="tbb::internal::two_phase_port::input_type" ref="0f464d59e15941d6d625e8c7d634e26b" args="" -->
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#0f464d59e15941d6d625e8c7d634e26b">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="37ee9b5320b631c39bccc0b4745d88d1"></a><!-- doxytag: member="tbb::internal::two_phase_port::predecessor_type" ref="37ee9b5320b631c39bccc0b4745d88d1" args="" -->
+typedef <a class="el" href="a00282.html">sender</a>< T > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#37ee9b5320b631c39bccc0b4745d88d1">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="60e17ef935031c86c4a288eafab5c066"></a><!-- doxytag: member="tbb::internal::two_phase_port::two_phase_port" ref="60e17ef935031c86c4a288eafab5c066" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#60e17ef935031c86c4a288eafab5c066">two_phase_port</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="3710ccbcc61df9602eaca1a77d9749a7"></a><!-- doxytag: member="tbb::internal::two_phase_port::two_phase_port" ref="3710ccbcc61df9602eaca1a77d9749a7" args="(const two_phase_port &)" -->
+ </td><td class="memItemRight" valign="bottom"><b>two_phase_port</b> (const <a class="el" href="a00304.html">two_phase_port</a> &)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ebb94d389919a46b6c1b7eb5d38f6d8f"></a><!-- doxytag: member="tbb::internal::two_phase_port::set_join_node_pointer" ref="ebb94d389919a46b6c1b7eb5d38f6d8f" args="(forwarding_base *join)" -->
+void </td><td class="memItemRight" valign="bottom"><b>set_join_node_pointer</b> (forwarding_base *join)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f316c0d5ff67068ff23b684accbe87f4"></a><!-- doxytag: member="tbb::internal::two_phase_port::try_put" ref="f316c0d5ff67068ff23b684accbe87f4" args="(T)" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#f316c0d5ff67068ff23b684accbe87f4">try_put</a> (T)</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="6dc1f9bf02109c7f6fe4cc58bc31a00c"></a><!-- doxytag: member="tbb::internal::two_phase_port::register_predecessor" ref="6dc1f9bf02109c7f6fe4cc58bc31a00c" args="(sender< T > &src)" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#6dc1f9bf02109c7f6fe4cc58bc31a00c">register_predecessor</a> (<a class="el" href="a00282.html">sender</a>< T > &src)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Add a predecessor. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a734a55289804ff34ce1c6ac4c5075e4"></a><!-- doxytag: member="tbb::internal::two_phase_port::remove_predecessor" ref="a734a55289804ff34ce1c6ac4c5075e4" args="(sender< T > &src)" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#a734a55289804ff34ce1c6ac4c5075e4">remove_predecessor</a> (<a class="el" href="a00282.html">sender</a>< T > &src)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Remove a predecessor. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1d7399cfc77fca8878d8d16049ce4e7e"></a><!-- doxytag: member="tbb::internal::two_phase_port::reserve" ref="1d7399cfc77fca8878d8d16049ce4e7e" args="(T &v)" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#1d7399cfc77fca8878d8d16049ce4e7e">reserve</a> (T &v)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Reserve an item from the port. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="091f6efffaadbbeca6cf23483dabd891"></a><!-- doxytag: member="tbb::internal::two_phase_port::release" ref="091f6efffaadbbeca6cf23483dabd891" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#091f6efffaadbbeca6cf23483dabd891">release</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Release the port. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="684f6bbc3290270ed43cb34ffd273f71"></a><!-- doxytag: member="tbb::internal::two_phase_port::consume" ref="684f6bbc3290270ed43cb34ffd273f71" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#684f6bbc3290270ed43cb34ffd273f71">consume</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Complete use of the port. <br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template<typename T><br>
+ class tbb::internal::two_phase_port< T ></h3>
+
+The two-phase join port. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00466.html">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/a00304.png b/doc/html/a00304.png
new file mode 100644
index 0000000..b71488d
Binary files /dev/null and b/doc/html/a00304.png differ
diff --git a/doc/html/a00305.html b/doc/html/a00305.html
new file mode 100644
index 0000000..dc3026d
--- /dev/null
+++ b/doc/html/a00305.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="a00362.html">tbb</a>::<b>internal</b>::<a class="el" href="a00305.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="a00594.html">tbb_machine.h</a>></code>
+<p>
+<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>Static Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="137d1b1dd94016bc52e423dc33c4fd1d"></a><!-- doxytag: member="tbb::internal::work_around_alignment_bug::alignment" ref="137d1b1dd94016bc52e423dc33c4fd1d" args="" -->
+static const size_t </td><td class="memItemRight" valign="bottom"><b>alignment</b> = __alignof(T)</td></tr>
+
+</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="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/a00306.html b/doc/html/a00306.html
new file mode 100644
index 0000000..72aafbc
--- /dev/null
+++ b/doc/html/a00306.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="a00362.html">tbb</a>::<a class="el" href="a00306.html">zero_allocator</a></div>
+<h1>tbb::zero_allocator< T, Allocator > Class Template Reference<br>
+<small>
+[<a class="el" href="a00373.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="a00588.html">tbb_allocator.h</a>></code>
+<p>
+<a href="a00134.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="a00306.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="a00306.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="a00588.html">tbb_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/a00307.html b/doc/html/a00307.html
new file mode 100644
index 0000000..fdfda97
--- /dev/null
+++ b/doc/html/a00307.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="a00362.html">tbb</a>::<a class="el" href="a00307.html">zero_allocator< void, Allocator ></a></div>
+<h1>tbb::zero_allocator< void, Allocator > Class Template Reference<br>
+<small>
+[<a class="el" href="a00373.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="a00588.html">tbb_allocator.h</a>></code>
+<p>
+<a href="a00136.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="a00588.html">tbb_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/a00309.html b/doc/html/a00309.html
deleted file mode 100644
index df4a42f..0000000
--- a/doc/html/a00309.html
+++ /dev/null
@@ -1,103 +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_windef.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_windef.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_tbb_windef_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#error Do not #include this file directly.  Use "#include tbb/tbb_stddef.h" instead.</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_windef_H */</span>
-<a name="l00024"></a>00024 
-<a name="l00025"></a>00025 <span class="comment">// Check that the target Windows version has all API calls requried for TBB.</span>
-<a name="l00026"></a>00026 <span class="comment">// Do not increase the version in condition beyond 0x0500 without prior discussion!</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#if defined(_WIN32_WINNT) && _WIN32_WINNT<0x0400</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#error TBB is unable to run on old Windows versions; _WIN32_WINNT must be 0x0400 or greater.</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#if !defined(_MT)</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#error TBB requires linkage with multithreaded C/C++ runtime library. \</span>
-<a name="l00033"></a>00033 <span class="preprocessor">       Choose multithreaded DLL runtime in project settings, or use /MD[d] compiler switch.</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span>
-<a name="l00036"></a>00036 <span class="comment">// Workaround for the problem with MVSC headers failing to define namespace std</span>
-<a name="l00037"></a>00037 <span class="keyword">namespace </span>std {
-<a name="l00038"></a>00038   using ::size_t; using ::ptrdiff_t;
-<a name="l00039"></a>00039 }
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="preprocessor">#define __TBB_STRING_AUX(x) #x</span>
-<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_STRING(x) __TBB_STRING_AUX(x)</span>
-<a name="l00043"></a>00043 <span class="preprocessor"></span>
-<a name="l00044"></a>00044 <span class="comment">// Default setting of TBB_USE_DEBUG</span>
-<a name="l00045"></a>00045 <span class="preprocessor">#ifdef TBB_USE_DEBUG</span>
-<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">#    if TBB_USE_DEBUG </span>
-<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">#        if !defined(_DEBUG)</span>
-<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="preprocessor">#            pragma message(__FILE__ "(" __TBB_STRING(__LINE__) ") : Warning: Recommend using /MDd if compiling with TBB_USE_DEBUG!=0")</span>
-<a name="l00049"></a>00049 <span class="preprocessor"></span><span class="preprocessor">#        endif</span>
-<a name="l00050"></a>00050 <span class="preprocessor"></span><span class="preprocessor">#    else</span>
-<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">#        if defined(_DEBUG)</span>
-<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="preprocessor">#            pragma message(__FILE__ "(" __TBB_STRING(__LINE__) ") : Warning: Recommend using /MD if compiling with TBB_USE_DEBUG==0")</span>
-<a name="l00053"></a>00053 <span class="preprocessor"></span><span class="preprocessor">#        endif</span>
-<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor">#    endif</span>
-<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="preprocessor">#    ifdef _DEBUG</span>
-<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">#        define TBB_USE_DEBUG 1</span>
-<a name="l00058"></a>00058 <span class="preprocessor"></span><span class="preprocessor">#    endif</span>
-<a name="l00059"></a>00059 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
-<a name="l00060"></a>00060 <span class="preprocessor"></span>
-<a name="l00061"></a>00061 <span class="preprocessor">#if __TBB_BUILD && !defined(__TBB_NO_IMPLICIT_LINKAGE)</span>
-<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_NO_IMPLICIT_LINKAGE 1</span>
-<a name="l00063"></a>00063 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00064"></a>00064 <span class="preprocessor"></span>
-<a name="l00065"></a>00065 <span class="preprocessor">#if _MSC_VER</span>
-<a name="l00066"></a>00066 <span class="preprocessor"></span><span class="preprocessor">    #if !__TBB_NO_IMPLICIT_LINKAGE</span>
-<a name="l00067"></a>00067 <span class="preprocessor"></span><span class="preprocessor">        #ifdef _DEBUG</span>
-<a name="l00068"></a>00068 <span class="preprocessor"></span><span class="preprocessor">            #pragma comment(lib, "tbb_debug.lib")</span>
-<a name="l00069"></a>00069 <span class="preprocessor"></span><span class="preprocessor">        #else</span>
-<a name="l00070"></a>00070 <span class="preprocessor"></span><span class="preprocessor">            #pragma comment(lib, "tbb.lib")</span>
-<a name="l00071"></a>00071 <span class="preprocessor"></span><span class="preprocessor">        #endif</span>
-<a name="l00072"></a>00072 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
-<a name="l00073"></a>00073 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the 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.html b/doc/html/a00311.html
deleted file mode 100644
index 74e2a7a..0000000
--- a/doc/html/a00311.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-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_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="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="a00141.html">00033</a> <span class="keyword">class </span><a class="code" href="a00141.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="a00141.html#0d702fc6b9e9d061ace3501b3c861cdf">00039</a>     T* <a class="code" href="a00141.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="a00141.html#024be075c23c0394c9a2518d993bcd9e">00042</a>     T* <a class="code" href="a00141.html#024be075c23c0394c9a2518d993bcd9e">end</a>() {<span class="keywordflow">return</span> <a class="code" href="a00141.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-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00312.html b/doc/html/a00312.html
deleted file mode 100644
index a923726..0000000
--- a/doc/html/a00312.html
+++ /dev/null
@@ -1,401 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>atomic.h Source File</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li><a href="annotated.html"><span>Classes</span></a></li>
-    <li id="current"><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="files.html"><span>File List</span></a></li>
-    <li><a href="globals.html"><span>File Members</span></a></li>
-  </ul></div>
-<h1>atomic.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_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="a00267.html#a8686246bb5d3664bd07563749970fef">00044</a> <span class="keyword">enum</span> <a class="code" href="a00267.html#a8686246bb5d3664bd07563749970fef">memory_semantics</a> {
-<a name="l00046"></a>00046     <a class="code" href="a00267.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">__TBB_full_fence</a>,
-<a name="l00048"></a>00048     <a class="code" href="a00267.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>,
-<a name="l00050"></a>00050     <a class="code" href="a00267.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>
-<a name="l00051"></a>00051 };
-<a name="l00052"></a>00052 
-<a name="l00054"></a>00054 <span class="keyword">namespace </span>internal {
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 <span class="preprocessor">#if __GNUC__ || __SUNPRO_CC</span>
-<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_DECL_ATOMIC_FIELD(t,f,a) t f  __attribute__ ((aligned(a)));</span>
-<a name="l00058"></a>00058 <span class="preprocessor"></span><span class="preprocessor">#elif defined(__INTEL_COMPILER)||_MSC_VER >= 1300</span>
-<a name="l00059"></a>00059 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_DECL_ATOMIC_FIELD(t,f,a) __declspec(align(a)) t f;</span>
-<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">#else </span>
-<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">#error Do not know syntax for forcing alignment.</span>
-<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __GNUC__ */</span>
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064 <span class="keyword">template</span><size_t S>
-<a name="l00065"></a>00065 <span class="keyword">struct </span>atomic_rep;           <span class="comment">// Primary template declared, but never defined.</span>
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067 <span class="keyword">template</span><>
-<a name="l00068"></a>00068 <span class="keyword">struct </span>atomic_rep<1> {       <span class="comment">// Specialization</span>
-<a name="l00069"></a>00069     <span class="keyword">typedef</span> int8_t word;
-<a name="l00070"></a>00070     int8_t value;
-<a name="l00071"></a>00071 };
-<a name="l00072"></a>00072 <span class="keyword">template</span><>
-<a name="l00073"></a>00073 <span class="keyword">struct </span>atomic_rep<2> {       <span class="comment">// Specialization</span>
-<a name="l00074"></a>00074     <span class="keyword">typedef</span> int16_t word;
-<a name="l00075"></a>00075     __TBB_DECL_ATOMIC_FIELD(int16_t,value,2)
-<a name="l00076"></a>00076 };
-<a name="l00077"></a>00077 <span class="keyword">template</span><>
-<a name="l00078"></a>00078 <span class="keyword">struct </span>atomic_rep<4> {       <span class="comment">// Specialization</span>
-<a name="l00079"></a>00079 <span class="preprocessor">#if _MSC_VER && __TBB_WORDSIZE==4</span>
-<a name="l00080"></a>00080 <span class="preprocessor"></span>    <span class="comment">// Work-around that avoids spurious /Wp64 warnings</span>
-<a name="l00081"></a>00081     <span class="keyword">typedef</span> intptr_t word;
-<a name="l00082"></a>00082 <span class="preprocessor">#else</span>
-<a name="l00083"></a>00083 <span class="preprocessor"></span>    <span class="keyword">typedef</span> int32_t word;
-<a name="l00084"></a>00084 <span class="preprocessor">#endif</span>
-<a name="l00085"></a>00085 <span class="preprocessor"></span>    __TBB_DECL_ATOMIC_FIELD(int32_t,value,4)
-<a name="l00086"></a>00086 };
-<a name="l00087"></a>00087 <span class="keyword">template</span><>
-<a name="l00088"></a>00088 <span class="keyword">struct </span>atomic_rep<8> {       <span class="comment">// Specialization</span>
-<a name="l00089"></a>00089     <span class="keyword">typedef</span> int64_t word;
-<a name="l00090"></a>00090     __TBB_DECL_ATOMIC_FIELD(int64_t,value,8)
-<a name="l00091"></a>00091 };
-<a name="l00092"></a>00092 
-<a name="l00093"></a>00093 <span class="keyword">template</span><size_t Size, memory_semantics M>
-<a name="l00094"></a>00094 <span class="keyword">struct </span>atomic_traits;        <span class="comment">// Primary template declared, but not defined.</span>
-<a name="l00095"></a>00095 
-<a name="l00096"></a>00096 <span class="preprocessor">#define __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(S,M)                         \</span>
-<a name="l00097"></a>00097 <span class="preprocessor">    template<> struct atomic_traits<S,M> {                               \</span>
-<a name="l00098"></a>00098 <span class="preprocessor">        typedef atomic_rep<S>::word word;                               \</span>
-<a name="l00099"></a>00099 <span class="preprocessor">        inline static word compare_and_swap( volatile void* location, word new_value, word comparand ) {\</span>
-<a name="l00100"></a>00100 <span class="preprocessor">            return __TBB_CompareAndSwap##S##M(location,new_value,comparand);    \</span>
-<a name="l00101"></a>00101 <span class="preprocessor">        }                                                                       \</span>
-<a name="l00102"></a>00102 <span class="preprocessor">        inline static word fetch_and_add( volatile void* location, word addend ) { \</span>
-<a name="l00103"></a>00103 <span class="preprocessor">            return __TBB_FetchAndAdd##S##M(location,addend);                    \</span>
-<a name="l00104"></a>00104 <span class="preprocessor">        }                                                                       \</span>
-<a name="l00105"></a>00105 <span class="preprocessor">        inline static word fetch_and_store( volatile void* location, word value ) {\</span>
-<a name="l00106"></a>00106 <span class="preprocessor">            return __TBB_FetchAndStore##S##M(location,value);                   \</span>
-<a name="l00107"></a>00107 <span class="preprocessor">        }                                                                       \</span>
-<a name="l00108"></a>00108 <span class="preprocessor">    };</span>
-<a name="l00109"></a>00109 <span class="preprocessor"></span>
-<a name="l00110"></a>00110 <span class="preprocessor">#define __TBB_DECL_ATOMIC_PRIMITIVES(S)                                  \</span>
-<a name="l00111"></a>00111 <span class="preprocessor">    template<memory_semantics M>                                         \</span>
-<a name="l00112"></a>00112 <span class="preprocessor">    struct atomic_traits<S,M> {                                          \</span>
-<a name="l00113"></a>00113 <span class="preprocessor">        typedef atomic_rep<S>::word word;                               \</span>
-<a name="l00114"></a>00114 <span class="preprocessor">        inline static word compare_and_swap( volatile void* location, word new_value, word comparand ) {\</span>
-<a name="l00115"></a>00115 <span class="preprocessor">            return __TBB_CompareAndSwap##S(location,new_value,comparand);       \</span>
-<a name="l00116"></a>00116 <span class="preprocessor">        }                                                                       \</span>
-<a name="l00117"></a>00117 <span class="preprocessor">        inline static word fetch_and_add( volatile void* location, word addend ) { \</span>
-<a name="l00118"></a>00118 <span class="preprocessor">            return __TBB_FetchAndAdd##S(location,addend);                       \</span>
-<a name="l00119"></a>00119 <span class="preprocessor">        }                                                                       \</span>
-<a name="l00120"></a>00120 <span class="preprocessor">        inline static word fetch_and_store( volatile void* location, word value ) {\</span>
-<a name="l00121"></a>00121 <span class="preprocessor">            return __TBB_FetchAndStore##S(location,value);                      \</span>
-<a name="l00122"></a>00122 <span class="preprocessor">        }                                                                       \</span>
-<a name="l00123"></a>00123 <span class="preprocessor">    };</span>
-<a name="l00124"></a>00124 <span class="preprocessor"></span>
-<a name="l00125"></a>00125 <span class="preprocessor">#if __TBB_DECL_FENCED_ATOMICS</span>
-<a name="l00126"></a>00126 <span class="preprocessor"></span>__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,<a class="code" href="a00267.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">__TBB_full_fence</a>)
-<a name="l00127"></a>00127 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,<a class="code" href="a00267.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">__TBB_full_fence</a>)
-<a name="l00128"></a>00128 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,<a class="code" href="a00267.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">__TBB_full_fence</a>)
-<a name="l00129"></a>00129 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,<a class="code" href="a00267.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">__TBB_full_fence</a>)
-<a name="l00130"></a>00130 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,<a class="code" href="a00267.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>)
-<a name="l00131"></a>00131 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,<a class="code" href="a00267.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>)
-<a name="l00132"></a>00132 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,<a class="code" href="a00267.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>)
-<a name="l00133"></a>00133 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,<a class="code" href="a00267.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>)
-<a name="l00134"></a>00134 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,<a class="code" href="a00267.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>)
-<a name="l00135"></a>00135 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,<a class="code" href="a00267.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>)
-<a name="l00136"></a>00136 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,<a class="code" href="a00267.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>)
-<a name="l00137"></a>00137 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,<a class="code" href="a00267.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>)
-<a name="l00138"></a>00138 <span class="preprocessor">#else</span>
-<a name="l00139"></a>00139 <span class="preprocessor"></span>__TBB_DECL_ATOMIC_PRIMITIVES(1)
-<a name="l00140"></a>00140 __TBB_DECL_ATOMIC_PRIMITIVES(2)
-<a name="l00141"></a>00141 __TBB_DECL_ATOMIC_PRIMITIVES(4)
-<a name="l00142"></a>00142 __TBB_DECL_ATOMIC_PRIMITIVES(8)
-<a name="l00143"></a>00143 <span class="preprocessor">#endif</span>
-<a name="l00144"></a>00144 <span class="preprocessor"></span>
-<a name="l00146"></a>00146 
-<a name="l00148"></a>00148 <span class="preprocessor">#define __TBB_MINUS_ONE(T) (T(T(0)-T(1)))</span>
-<a name="l00149"></a>00149 <span class="preprocessor"></span>
-<a name="l00151"></a>00151 
-<a name="l00153"></a>00153 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00154"></a>00154 <span class="keyword">struct </span>atomic_impl {
-<a name="l00155"></a>00155 <span class="keyword">protected</span>:
-<a name="l00156"></a>00156     atomic_rep<sizeof(T)> rep;
-<a name="l00157"></a>00157 <span class="keyword">private</span>:
-<a name="l00159"></a>00159     <span class="keyword">union </span>converter {
-<a name="l00160"></a>00160         T value;
-<a name="l00161"></a>00161         <span class="keyword">typename</span> atomic_rep<sizeof(T)>::word bits;
-<a name="l00162"></a>00162     };
-<a name="l00163"></a>00163 <span class="keyword">public</span>:
-<a name="l00164"></a>00164     <span class="keyword">typedef</span> T value_type;
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166     <span class="keyword">template</span><memory_semantics M>
-<a name="l00167"></a>00167     value_type fetch_and_store( value_type value ) {
-<a name="l00168"></a>00168         converter u, w;
-<a name="l00169"></a>00169         u.value = value;
-<a name="l00170"></a>00170         w.bits = internal::atomic_traits<sizeof(value_type),M>::fetch_and_store(&rep.value,u.bits);
-<a name="l00171"></a>00171         <span class="keywordflow">return</span> w.value;
-<a name="l00172"></a>00172     }
-<a name="l00173"></a>00173 
-<a name="l00174"></a>00174     value_type fetch_and_store( value_type value ) {
-<a name="l00175"></a>00175         <span class="keywordflow">return</span> fetch_and_store<__TBB_full_fence>(value);
-<a name="l00176"></a>00176     }
-<a name="l00177"></a>00177 
-<a name="l00178"></a>00178     <span class="keyword">template</span><memory_semantics M>
-<a name="l00179"></a>00179     value_type compare_and_swap( value_type value, value_type comparand ) {
-<a name="l00180"></a>00180         converter u, v, w;
-<a name="l00181"></a>00181         u.value = value;
-<a name="l00182"></a>00182         v.value = comparand;
-<a name="l00183"></a>00183         w.bits = internal::atomic_traits<sizeof(value_type),M>::compare_and_swap(&rep.value,u.bits,v.bits);
-<a name="l00184"></a>00184         <span class="keywordflow">return</span> w.value;
-<a name="l00185"></a>00185     }
-<a name="l00186"></a>00186 
-<a name="l00187"></a>00187     value_type compare_and_swap( value_type value, value_type comparand ) {
-<a name="l00188"></a>00188         <span class="keywordflow">return</span> compare_and_swap<__TBB_full_fence>(value,comparand);
-<a name="l00189"></a>00189     }
-<a name="l00190"></a>00190 
-<a name="l00191"></a>00191     operator value_type()<span class="keyword"> const volatile </span>{                <span class="comment">// volatile qualifier here for backwards compatibility </span>
-<a name="l00192"></a>00192         converter w;
-<a name="l00193"></a>00193         w.bits = __TBB_load_with_acquire( rep.value );
-<a name="l00194"></a>00194         <span class="keywordflow">return</span> w.value;
-<a name="l00195"></a>00195     }
-<a name="l00196"></a>00196 
-<a name="l00197"></a>00197 <span class="keyword">protected</span>:
-<a name="l00198"></a>00198     value_type store_with_release( value_type rhs ) {
-<a name="l00199"></a>00199         converter u;
-<a name="l00200"></a>00200         u.value = rhs;
-<a name="l00201"></a>00201         __TBB_store_with_release(rep.value,u.bits);
-<a name="l00202"></a>00202         <span class="keywordflow">return</span> rhs;
-<a name="l00203"></a>00203     }
-<a name="l00204"></a>00204 };
-<a name="l00205"></a>00205 
-<a name="l00207"></a>00207 
-<a name="l00210"></a>00210 <span class="keyword">template</span><<span class="keyword">typename</span> I, <span class="keyword">typename</span> D, <span class="keyword">typename</span> StepType>
-<a name="l00211"></a>00211 <span class="keyword">struct </span>atomic_impl_with_arithmetic: atomic_impl<I> {
-<a name="l00212"></a>00212 <span class="keyword">public</span>:
-<a name="l00213"></a>00213     <span class="keyword">typedef</span> I value_type;
-<a name="l00214"></a>00214 
-<a name="l00215"></a>00215     <span class="keyword">template</span><memory_semantics M>
-<a name="l00216"></a>00216     value_type fetch_and_add( D addend ) {
-<a name="l00217"></a>00217         <span class="keywordflow">return</span> value_type(internal::atomic_traits<<span class="keyword">sizeof</span>(value_type),M>::fetch_and_add( &this->rep.value, addend*<span class="keyword">sizeof</span>(StepType) ));
-<a name="l00218"></a>00218     }
-<a name="l00219"></a>00219 
-<a name="l00220"></a>00220     value_type fetch_and_add( D addend ) {
-<a name="l00221"></a>00221         <span class="keywordflow">return</span> fetch_and_add<__TBB_full_fence>(addend);
-<a name="l00222"></a>00222     }
-<a name="l00223"></a>00223 
-<a name="l00224"></a>00224     <span class="keyword">template</span><memory_semantics M>
-<a name="l00225"></a>00225     value_type fetch_and_increment() {
-<a name="l00226"></a>00226         <span class="keywordflow">return</span> fetch_and_add<M>(1);
-<a name="l00227"></a>00227     }
-<a name="l00228"></a>00228 
-<a name="l00229"></a>00229     value_type fetch_and_increment() {
-<a name="l00230"></a>00230         <span class="keywordflow">return</span> fetch_and_add(1);
-<a name="l00231"></a>00231     }
-<a name="l00232"></a>00232 
-<a name="l00233"></a>00233     <span class="keyword">template</span><memory_semantics M>
-<a name="l00234"></a>00234     value_type fetch_and_decrement() {
-<a name="l00235"></a>00235         <span class="keywordflow">return</span> fetch_and_add<M>(__TBB_MINUS_ONE(D));
-<a name="l00236"></a>00236     }
-<a name="l00237"></a>00237 
-<a name="l00238"></a>00238     value_type fetch_and_decrement() {
-<a name="l00239"></a>00239         <span class="keywordflow">return</span> fetch_and_add(__TBB_MINUS_ONE(D));
-<a name="l00240"></a>00240     }
-<a name="l00241"></a>00241 
-<a name="l00242"></a>00242 <span class="keyword">public</span>:
-<a name="l00243"></a>00243     value_type operator+=( D addend ) {
-<a name="l00244"></a>00244         <span class="keywordflow">return</span> fetch_and_add(addend)+addend;
-<a name="l00245"></a>00245     }
-<a name="l00246"></a>00246 
-<a name="l00247"></a>00247     value_type operator-=( D addend ) {
-<a name="l00248"></a>00248         <span class="comment">// Additive inverse of addend computed using binary minus,</span>
-<a name="l00249"></a>00249         <span class="comment">// instead of unary minus, for sake of avoiding compiler warnings.</span>
-<a name="l00250"></a>00250         <span class="keywordflow">return</span> operator+=(D(0)-addend);    
-<a name="l00251"></a>00251     }
-<a name="l00252"></a>00252 
-<a name="l00253"></a>00253     value_type operator++() {
-<a name="l00254"></a>00254         <span class="keywordflow">return</span> fetch_and_add(1)+1;
-<a name="l00255"></a>00255     }
-<a name="l00256"></a>00256 
-<a name="l00257"></a>00257     value_type operator--() {
-<a name="l00258"></a>00258         <span class="keywordflow">return</span> fetch_and_add(__TBB_MINUS_ONE(D))-1;
-<a name="l00259"></a>00259     }
-<a name="l00260"></a>00260 
-<a name="l00261"></a>00261     value_type operator++(<span class="keywordtype">int</span>) {
-<a name="l00262"></a>00262         <span class="keywordflow">return</span> fetch_and_add(1);
-<a name="l00263"></a>00263     }
-<a name="l00264"></a>00264 
-<a name="l00265"></a>00265     value_type operator--(<span class="keywordtype">int</span>) {
-<a name="l00266"></a>00266         <span class="keywordflow">return</span> fetch_and_add(__TBB_MINUS_ONE(D));
-<a name="l00267"></a>00267     }
-<a name="l00268"></a>00268 };
-<a name="l00269"></a>00269 
-<a name="l00270"></a>00270 <span class="preprocessor">#if __TBB_WORDSIZE == 4</span>
-<a name="l00271"></a>00271 <span class="preprocessor"></span><span class="comment">// Plaforms with 32-bit hardware require special effort for 64-bit loads and stores.</span>
-<a name="l00272"></a>00272 <span class="preprocessor">#if defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER>=1400</span>
-<a name="l00273"></a>00273 <span class="preprocessor"></span>
-<a name="l00274"></a>00274 <span class="keyword">template</span><>
-<a name="l00275"></a>00275 <span class="keyword">inline</span> atomic_impl<__TBB_LONG_LONG>::operator atomic_impl<__TBB_LONG_LONG>::value_type()<span class="keyword"> const volatile </span>{
-<a name="l00276"></a>00276     <span class="keywordflow">return</span> __TBB_Load8(&rep.value);
-<a name="l00277"></a>00277 }
-<a name="l00278"></a>00278 
-<a name="l00279"></a>00279 <span class="keyword">template</span><>
-<a name="l00280"></a>00280 <span class="keyword">inline</span> atomic_impl<unsigned __TBB_LONG_LONG>::operator atomic_impl<unsigned __TBB_LONG_LONG>::value_type()<span class="keyword"> const volatile </span>{
-<a name="l00281"></a>00281     <span class="keywordflow">return</span> __TBB_Load8(&rep.value);
-<a name="l00282"></a>00282 }
-<a name="l00283"></a>00283 
-<a name="l00284"></a>00284 <span class="keyword">template</span><>
-<a name="l00285"></a>00285 <span class="keyword">inline</span> atomic_impl<__TBB_LONG_LONG>::value_type atomic_impl<__TBB_LONG_LONG>::store_with_release( value_type rhs ) {
-<a name="l00286"></a>00286     __TBB_Store8(&rep.value,rhs);
-<a name="l00287"></a>00287     <span class="keywordflow">return</span> rhs;
-<a name="l00288"></a>00288 }
-<a name="l00289"></a>00289 
-<a name="l00290"></a>00290 <span class="keyword">template</span><>
-<a name="l00291"></a>00291 <span class="keyword">inline</span> atomic_impl<unsigned __TBB_LONG_LONG>::value_type atomic_impl<unsigned __TBB_LONG_LONG>::store_with_release( value_type rhs ) {
-<a name="l00292"></a>00292     __TBB_Store8(&rep.value,rhs);
-<a name="l00293"></a>00293     <span class="keywordflow">return</span> rhs;
-<a name="l00294"></a>00294 }
-<a name="l00295"></a>00295 
-<a name="l00296"></a>00296 <span class="preprocessor">#endif </span><span class="comment">/* defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER>=1400 */</span>
-<a name="l00297"></a>00297 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_WORDSIZE==4 */</span>
-<a name="l00298"></a>00298 
-<a name="l00299"></a>00299 } <span class="comment">/* Internal */</span>
-<a name="l00301"></a>00301 
-<a name="l00303"></a>00303 
-<a name="l00305"></a>00305 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00306"></a><a class="code" href="a00142.html">00306</a> <span class="keyword">struct </span><a class="code" href="a00142.html">atomic</a>: internal::atomic_impl<T> {
-<a name="l00307"></a>00307     T operator=( T rhs ) {
-<a name="l00308"></a>00308         <span class="comment">// "this" required here in strict ISO C++ because store_with_release is a dependent name</span>
-<a name="l00309"></a>00309         <span class="keywordflow">return</span> this->store_with_release(rhs);
-<a name="l00310"></a>00310     }
-<a name="l00311"></a>00311     <a class="code" href="a00142.html">atomic<T></a>& operator=( <span class="keyword">const</span> <a class="code" href="a00142.html">atomic<T></a>& rhs ) {this->store_with_release(rhs); <span class="keywordflow">return</span> *<span class="keyword">this</span>;}
-<a name="l00312"></a>00312 };
-<a name="l00313"></a>00313 
-<a name="l00314"></a>00314 <span class="preprocessor">#define __TBB_DECL_ATOMIC(T) \</span>
-<a name="l00315"></a>00315 <span class="preprocessor">    template<> struct atomic<T>: internal::atomic_impl_with_arithmetic<T,T,char> {  \</span>
-<a name="l00316"></a>00316 <span class="preprocessor">        T operator=( T rhs ) {return store_with_release(rhs);}  \</span>
-<a name="l00317"></a>00317 <span class="preprocessor">        atomic<T>& operator=( const atomic<T>& rhs ) {store_with_release(rhs); return *this;}  \</span>
-<a name="l00318"></a>00318 <span class="preprocessor">    };</span>
-<a name="l00319"></a>00319 <span class="preprocessor"></span>
-<a name="l00320"></a>00320 <span class="preprocessor">#if defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER>=1400</span>
-<a name="l00321"></a>00321 <span class="preprocessor"></span>__TBB_DECL_ATOMIC(__TBB_LONG_LONG)
-<a name="l00322"></a>00322 __TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span> __TBB_LONG_LONG)
-<a name="l00323"></a>00323 <span class="preprocessor">#else</span>
-<a name="l00324"></a>00324 <span class="preprocessor"></span><span class="comment">// Some old versions of MVSC cannot correctly compile templates with "long long".</span>
-<a name="l00325"></a>00325 <span class="preprocessor">#endif </span><span class="comment">/* defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER>=1400 */</span>
-<a name="l00326"></a>00326 
-<a name="l00327"></a>00327 __TBB_DECL_ATOMIC(<span class="keywordtype">long</span>)
-<a name="l00328"></a>00328 __TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)
-<a name="l00329"></a>00329 
-<a name="l00330"></a>00330 <span class="preprocessor">#if defined(_MSC_VER) && __TBB_WORDSIZE==4</span>
-<a name="l00331"></a>00331 <span class="preprocessor"></span><span class="comment">/* Special version of __TBB_DECL_ATOMIC that avoids gratuitous warnings from cl /Wp64 option. </span>
-<a name="l00332"></a>00332 <span class="comment">   It is identical to __TBB_DECL_ATOMIC(unsigned) except that it replaces operator=(T) </span>
-<a name="l00333"></a>00333 <span class="comment">   with an operator=(U) that explicitly converts the U to a T.  Types T and U should be</span>
-<a name="l00334"></a>00334 <span class="comment">   type synonyms on the platform.  Type U should be the wider variant of T from the</span>
-<a name="l00335"></a>00335 <span class="comment">   perspective of /Wp64. */</span>
-<a name="l00336"></a>00336 <span class="preprocessor">#define __TBB_DECL_ATOMIC_ALT(T,U) \</span>
-<a name="l00337"></a>00337 <span class="preprocessor">    template<> struct atomic<T>: internal::atomic_impl_with_arithmetic<T,T,char> {  \</span>
-<a name="l00338"></a>00338 <span class="preprocessor">        T operator=( U rhs ) {return store_with_release(T(rhs));}  \</span>
-<a name="l00339"></a>00339 <span class="preprocessor">        atomic<T>& operator=( const atomic<T>& rhs ) {store_with_release(rhs); return *this;}  \</span>
-<a name="l00340"></a>00340 <span class="preprocessor">    };</span>
-<a name="l00341"></a>00341 <span class="preprocessor"></span><a class="code" href="a00267.html#ad165cf61abbe349d413df2589679add">__TBB_DECL_ATOMIC_ALT</a>(<span class="keywordtype">unsigned</span>,size_t)
-<a name="l00342"></a><a class="code" href="a00267.html#ad165cf61abbe349d413df2589679add">00342</a> __TBB_DECL_ATOMIC_ALT(<span class="keywordtype">int</span>,ptrdiff_t)
-<a name="l00343"></a>00343 <span class="preprocessor">#else</span>
-<a name="l00344"></a>00344 <span class="preprocessor"></span>__TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span>)
-<a name="l00345"></a>00345 __TBB_DECL_ATOMIC(<span class="keywordtype">int</span>)
-<a name="l00346"></a>00346 <span class="preprocessor">#endif </span><span class="comment">/* defined(_MSC_VER) && __TBB_WORDSIZE==4 */</span>
-<a name="l00347"></a>00347 
-<a name="l00348"></a>00348 __TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>)
-<a name="l00349"></a>00349 __TBB_DECL_ATOMIC(<span class="keywordtype">short</span>)
-<a name="l00350"></a>00350 __TBB_DECL_ATOMIC(<span class="keywordtype">char</span>)
-<a name="l00351"></a>00351 __TBB_DECL_ATOMIC(<span class="keywordtype">signed</span> <span class="keywordtype">char</span>)
-<a name="l00352"></a>00352 __TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>)
-<a name="l00353"></a>00353 
-<a name="l00354"></a>00354 <span class="preprocessor">#if !defined(_MSC_VER)||defined(_NATIVE_WCHAR_T_DEFINED) </span>
-<a name="l00355"></a>00355 <span class="preprocessor"></span>__TBB_DECL_ATOMIC(<span class="keywordtype">wchar_t</span>)
-<a name="l00356"></a>00356 <span class="preprocessor">#endif </span><span class="comment">/* _MSC_VER||!defined(_NATIVE_WCHAR_T_DEFINED) */</span>
-<a name="l00357"></a>00357 
-<a name="l00359"></a>00359 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span><a class="code" href="a00142.html">atomic</a><T*>: internal::atomic_impl_with_arithmetic<T*,ptrdiff_t,T> {
-<a name="l00360"></a>00360     T* operator=( T* rhs ) {
-<a name="l00361"></a>00361         <span class="comment">// "this" required here in strict ISO C++ because store_with_release is a dependent name</span>
-<a name="l00362"></a>00362         <span class="keywordflow">return</span> this->store_with_release(rhs);
-<a name="l00363"></a>00363     }
-<a name="l00364"></a>00364     <a class="code" href="a00142.html">atomic<T*></a>& operator=( <span class="keyword">const</span> <a class="code" href="a00142.html">atomic<T*></a>& rhs ) {
-<a name="l00365"></a>00365         this->store_with_release(rhs); <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00366"></a>00366     }
-<a name="l00367"></a>00367     T* operator->()<span class="keyword"> const </span>{
-<a name="l00368"></a>00368         <span class="keywordflow">return</span> (*<span class="keyword">this</span>);
-<a name="l00369"></a>00369     }
-<a name="l00370"></a>00370 };
-<a name="l00371"></a>00371 
-<a name="l00373"></a><a class="code" href="a00143.html">00373</a> <span class="keyword">template</span><> <span class="keyword">struct </span><a class="code" href="a00142.html">atomic</a><void*>: internal::atomic_impl<void*> {
-<a name="l00374"></a>00374     <span class="keywordtype">void</span>* operator=( <span class="keywordtype">void</span>* rhs ) {
-<a name="l00375"></a>00375         <span class="comment">// "this" required here in strict ISO C++ because store_with_release is a dependent name</span>
-<a name="l00376"></a>00376         <span class="keywordflow">return</span> this->store_with_release(rhs);
-<a name="l00377"></a>00377     }
-<a name="l00378"></a>00378     <a class="code" href="a00142.html">atomic<void*></a>& operator=( <span class="keyword">const</span> <a class="code" href="a00142.html">atomic<void*></a>& rhs ) {
-<a name="l00379"></a>00379         this->store_with_release(rhs); <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00380"></a>00380     }
-<a name="l00381"></a>00381 };
-<a name="l00382"></a>00382 
-<a name="l00383"></a>00383 } <span class="comment">// namespace tbb</span>
-<a name="l00384"></a>00384 
-<a name="l00385"></a>00385 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)</span>
-<a name="l00386"></a>00386 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
-<a name="l00387"></a>00387 <span class="preprocessor"></span><span class="preprocessor">#endif // warnings 4244, 4267 are back</span>
-<a name="l00388"></a>00388 <span class="preprocessor"></span>
-<a name="l00389"></a>00389 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_atomic_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00320.html b/doc/html/a00320.html
deleted file mode 100644
index 75d0fb5..0000000
--- a/doc/html/a00320.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-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_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="a00147.html">00040</a> <span class="keyword">class </span><a class="code" href="a00147.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="a00147.html#1a8d05842c2b3dfc177bc4d347e4cef7">00045</a>     <span class="keyword">typedef</span> Value <a class="code" href="a00147.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a>;
-<a name="l00046"></a>00046 
-<a name="l00048"></a><a class="code" href="a00147.html#f5707bffea38eee5c9680f37358afb8e">00048</a>     <span class="keyword">typedef</span> std::size_t <a class="code" href="a00147.html#f5707bffea38eee5c9680f37358afb8e">size_type</a>;
-<a name="l00049"></a>00049 
-<a name="l00051"></a>00051 
-<a name="l00052"></a><a class="code" href="a00147.html#94607755c5110d199202234d58d022ac">00052</a>     <a class="code" href="a00147.html#94607755c5110d199202234d58d022ac">blocked_range</a>() : my_end(), my_begin() {}
-<a name="l00053"></a>00053 
-<a name="l00055"></a><a class="code" href="a00147.html#14795a36ead1414b4371dbe1a4656359">00055</a>     <a class="code" href="a00147.html#94607755c5110d199202234d58d022ac">blocked_range</a>( Value begin_, Value end_, <a class="code" href="a00147.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="a00147.html#18d2258400756ac1446dac7676b18df3">00062</a>     <a class="code" href="a00147.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> <a class="code" href="a00147.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="a00147.html#8b929d93ddc13f148b11bceef3a3bdf8">00065</a>     <a class="code" href="a00147.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> <a class="code" href="a00147.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="a00147.html#9eaa0b6beff1420f688570bbf6b8c462">00069</a>     <a class="code" href="a00147.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> <a class="code" href="a00147.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()<span class="keyword"> const </span>{
-<a name="l00070"></a>00070         __TBB_ASSERT( !(<a class="code" href="a00147.html#8b929d93ddc13f148b11bceef3a3bdf8">end</a>()<<a class="code" href="a00147.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="a00147.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="a00147.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">00075</a>     <a class="code" href="a00147.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> <a class="code" href="a00147.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="a00147.html#8f4f02f530eb3f2e7ea26e06f76aef9d">00082</a>     <span class="keywordtype">bool</span> <a class="code" href="a00147.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="a00147.html#41a58b703d574b6e1ca155df3576f578">00086</a>     <span class="keywordtype">bool</span> <a class="code" href="a00147.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_grainsize<<a class="code" href="a00147.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>();}
-<a name="l00087"></a>00087 
-<a name="l00089"></a>00089 
-<a name="l00091"></a><a class="code" href="a00147.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">00091</a>     <a class="code" href="a00147.html#94607755c5110d199202234d58d022ac">blocked_range</a>( <a class="code" href="a00147.html">blocked_range</a>& r, <a class="code" href="a00198.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="a00147.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="a00147.html">blocked_range</a>& r ) {
-<a name="l00106"></a>00106         __TBB_ASSERT( r.<a class="code" href="a00147.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="a00147.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> + (r.<a class="code" href="a00147.html#1ec95c8988b50064dd603998b16f3930">my_end</a>-r.<a class="code" href="a00147.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a>)/2u;
-<a name="l00108"></a>00108         r.<a class="code" href="a00147.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-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00321.html b/doc/html/a00321.html
deleted file mode 100644
index d630f20..0000000
--- a/doc/html/a00321.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-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_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="a00148.html">00032</a> <span class="keyword">class </span><a class="code" href="a00148.html">blocked_range2d</a> {
-<a name="l00033"></a>00033 <span class="keyword">public</span>:
-<a name="l00035"></a><a class="code" href="a00148.html#a807a22fe658ec38b8edfd69521d0383">00035</a>     <span class="keyword">typedef</span> <a class="code" href="a00147.html">blocked_range<RowValue></a> <a class="code" href="a00147.html">row_range_type</a>;
-<a name="l00036"></a>00036     <span class="keyword">typedef</span> <a class="code" href="a00147.html">blocked_range<ColValue></a> <a class="code" href="a00147.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="a00147.html">row_range_type</a> my_rows;
-<a name="l00040"></a>00040     <a class="code" href="a00147.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="a00148.html">blocked_range2d</a>( RowValue row_begin, RowValue row_end, <span class="keyword">typename</span> <a class="code" href="a00147.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="a00147.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="a00148.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="a00148.html#d144cb2d88cef553420311aca8667a44">00059</a>     <span class="keywordtype">bool</span> <a class="code" href="a00148.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="a00147.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>() || my_cols.<a class="code" href="a00147.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>();
-<a name="l00062"></a>00062     }
-<a name="l00063"></a>00063 
-<a name="l00065"></a><a class="code" href="a00148.html#ad36a9b38e4fef26d376f99552ce2d92">00065</a>     <span class="keywordtype">bool</span> <a class="code" href="a00148.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="a00147.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>() || my_cols.<a class="code" href="a00147.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>();
-<a name="l00067"></a>00067     }
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069     <a class="code" href="a00148.html">blocked_range2d</a>( <a class="code" href="a00148.html">blocked_range2d</a>& r, <a class="code" href="a00198.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="a00147.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_cols.<a class="code" href="a00147.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) < my_cols.<a class="code" href="a00147.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_rows.<a class="code" href="a00147.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) ) {
-<a name="l00074"></a>00074             my_cols.<a class="code" href="a00147.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = col_range_type::do_split(r.<a class="code" href="a00148.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="a00147.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = row_range_type::do_split(r.<a class="code" href="a00148.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="a00148.html#f496e7348a82652fba581203477cc07c">00081</a>     <span class="keyword">const</span> <a class="code" href="a00147.html">row_range_type</a>& <a class="code" href="a00148.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="a00148.html#392a46759af2c884957115771affa7f4">00084</a>     <span class="keyword">const</span> <a class="code" href="a00147.html">col_range_type</a>& <a class="code" href="a00148.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-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the 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.html b/doc/html/a00322.html
deleted file mode 100644
index 54be49a..0000000
--- a/doc/html/a00322.html
+++ /dev/null
@@ -1,131 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>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-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_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="a00149.html">00032</a> <span class="keyword">class </span><a class="code" href="a00149.html">blocked_range3d</a> {
-<a name="l00033"></a>00033 <span class="keyword">public</span>:
-<a name="l00035"></a><a class="code" href="a00149.html#b8ebf17a552ba47825e9b3887855b719">00035</a>     <span class="keyword">typedef</span> <a class="code" href="a00147.html">blocked_range<PageValue></a> <a class="code" href="a00147.html">page_range_type</a>;
-<a name="l00036"></a>00036     <span class="keyword">typedef</span> <a class="code" href="a00147.html">blocked_range<RowValue></a>  <a class="code" href="a00147.html">row_range_type</a>;
-<a name="l00037"></a>00037     <span class="keyword">typedef</span> <a class="code" href="a00147.html">blocked_range<ColValue></a>  <a class="code" href="a00147.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="a00147.html">page_range_type</a> my_pages;
-<a name="l00041"></a>00041     <a class="code" href="a00147.html">row_range_type</a>  my_rows;
-<a name="l00042"></a>00042     <a class="code" href="a00147.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="a00149.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="a00149.html">blocked_range3d</a>( PageValue page_begin, PageValue page_end, <span class="keyword">typename</span> <a class="code" href="a00147.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="a00147.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="a00147.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="a00149.html#356860e1c977d91711e8216bd55c0b25">00065</a>     <span class="keywordtype">bool</span> <a class="code" href="a00149.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="a00147.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>() || my_rows.<a class="code" href="a00147.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>() || my_cols.<a class="code" href="a00147.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>();
-<a name="l00068"></a>00068     }
-<a name="l00069"></a>00069 
-<a name="l00071"></a><a class="code" href="a00149.html#39d69191721c488e737ae5d9c5336b9c">00071</a>     <span class="keywordtype">bool</span> <a class="code" href="a00149.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="a00147.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>() || my_rows.<a class="code" href="a00147.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>() || my_cols.<a class="code" href="a00147.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>();
-<a name="l00073"></a>00073     }
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075     <a class="code" href="a00149.html">blocked_range3d</a>( <a class="code" href="a00149.html">blocked_range3d</a>& r, <a class="code" href="a00198.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="a00147.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_rows.<a class="code" href="a00147.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) < my_rows.<a class="code" href="a00147.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_pages.<a class="code" href="a00147.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) ) {
-<a name="l00081"></a>00081             <span class="keywordflow">if</span> ( my_rows.<a class="code" href="a00147.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_cols.<a class="code" href="a00147.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) < my_cols.<a class="code" href="a00147.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_rows.<a class="code" href="a00147.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) ) {
-<a name="l00082"></a>00082                 my_cols.<a class="code" href="a00147.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = col_range_type::do_split(r.<a class="code" href="a00149.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="a00147.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = row_range_type::do_split(r.<a class="code" href="a00149.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="a00147.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_cols.<a class="code" href="a00147.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) < my_cols.<a class="code" href="a00147.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_pages.<a class="code" href="a00147.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) ) {
-<a name="l00088"></a>00088                 my_cols.<a class="code" href="a00147.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = col_range_type::do_split(r.<a class="code" href="a00149.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="a00147.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = page_range_type::do_split(r.<a class="code" href="a00149.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="a00149.html#cf971430aa12361d3ed245344b7c6764">00096</a>     <span class="keyword">const</span> <a class="code" href="a00147.html">page_range_type</a>& <a class="code" href="a00149.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="a00149.html#1584623e59ff32a8aa82006827508be4">00099</a>     <span class="keyword">const</span> <a class="code" href="a00147.html">row_range_type</a>& <a class="code" href="a00149.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="a00149.html#3336ba9480fd6c43e158f9beb024c050">00102</a>     <span class="keyword">const</span> <a class="code" href="a00147.html">col_range_type</a>& <a class="code" href="a00149.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-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00323.html b/doc/html/a00323.html
deleted file mode 100644
index b67a71d..0000000
--- a/doc/html/a00323.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-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_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="a00150.html">00057</a> <span class="keyword">class </span><a class="code" href="a00150.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="a00150.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="a00150.html">cache_aligned_allocator</a>() <span class="keywordflow">throw</span>() {}
-<a name="l00071"></a>00071     <a class="code" href="a00150.html">cache_aligned_allocator</a>( <span class="keyword">const</span> <a class="code" href="a00150.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="a00150.html">cache_aligned_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00150.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="a00150.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">00078</a>     pointer <a class="code" href="a00150.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="a00150.html#3d4eadf188f7d85d3805ae534e0b8e1c">00084</a>     <span class="keywordtype">void</span> <a class="code" href="a00150.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="a00150.html#fb23b687b4c0429dab4c7f8017266cf0">00089</a>     size_type <a class="code" href="a00150.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="a00150.html#958ee8745c86c275bfc9533af565e017">00094</a>     <span class="keywordtype">void</span> <a class="code" href="a00150.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="a00150.html#cd298895a4f1654b5149ec84b591ecb5">00097</a>     <span class="keywordtype">void</span> <a class="code" href="a00150.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="a00151.html">00107</a> <span class="keyword">class </span><a class="code" href="a00150.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="a00150.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="a00150.html">cache_aligned_allocator<T></a>&, <span class="keyword">const</span> <a class="code" href="a00150.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-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00325.html b/doc/html/a00325.html
deleted file mode 100644
index 2020e5f..0000000
--- a/doc/html/a00325.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-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_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="a00153.html">00034</a>         <span class="keyword">class </span><a class="code" href="a00153.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="a00150.html">tbb::cache_aligned_allocator<T></a> <a class="code" href="a00150.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="a00153.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="a00153.html">combinable</a>( finit _finit) : my_ets(_finit) { }
-<a name="l00047"></a>00047 
-<a name="l00049"></a><a class="code" href="a00153.html#2c87e79ae98588a5780f708773388843">00049</a>         <a class="code" href="a00153.html#2c87e79ae98588a5780f708773388843">~combinable</a>() { 
-<a name="l00050"></a>00050         }
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052         <a class="code" href="a00153.html">combinable</a>(<span class="keyword">const</span> <a class="code" href="a00153.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-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00326.html b/doc/html/a00326.html
index 81d2db8..e13b006 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>concurrent_hash_map.h Source File</title>
+<title>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>
@@ -19,1232 +19,141 @@
     <li><a href="files.html"><span>File List</span></a></li>
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
-<h1>concurrent_hash_map.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_concurrent_hash_map_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_concurrent_hash_map_H</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include "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 "_concurrent_unordered_internal.h"</span> <span class="comment">// Need tbb_hasher</span>
-<a name="l00047"></a>00047 <span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS</span>
-<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="preprocessor">#include <typeinfo></span>
-<a name="l00049"></a>00049 <span class="preprocessor">#endif</span>
-<a name="l00050"></a>00050 <span class="preprocessor"></span>
-<a name="l00051"></a>00051 <span class="keyword">namespace </span>tbb {
-<a name="l00052"></a>00052 
-<a name="l00054"></a>00054 <span class="keyword">namespace </span>internal {
-<a name="l00056"></a>00056     <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="l00058"></a>00058     <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="l00060"></a>00060     <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="l00061"></a>00061 }
-<a name="l00063"></a>00063 
-<a name="l00065"></a>00065 <span class="keyword">template</span><<span class="keyword">typename</span> Key>
-<a name="l00066"></a><a class="code" href="a00208.html">00066</a> <span class="keyword">struct </span><a class="code" href="a00208.html">tbb_hash_compare</a> {
-<a name="l00067"></a>00067     <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="l00068"></a>00068     <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="l00069"></a>00069 };
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 <span class="keyword">namespace </span>interface4 {
-<a name="l00072"></a>00072 
-<a name="l00073"></a>00073     <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="l00074"></a>00074     <span class="keyword">class </span><a class="code" href="a00155.html">concurrent_hash_map</a>;
-<a name="l00075"></a>00075 
-<a name="l00077"></a>00077     <span class="keyword">namespace </span>internal {
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079 
-<a name="l00081"></a>00081     <span class="keyword">typedef</span> size_t hashcode_t;
-<a name="l00083"></a>00083     <span class="keyword">struct </span>hash_map_node_base : tbb::internal::no_copy {
-<a name="l00085"></a>00085         <span class="keyword">typedef</span> <a class="code" href="a00196.html">spin_rw_mutex</a> mutex_t;
-<a name="l00087"></a>00087         <span class="keyword">typedef</span> mutex_t::scoped_lock scoped_t;
-<a name="l00089"></a>00089         hash_map_node_base *next;
-<a name="l00090"></a>00090         mutex_t <a class="code" href="a00172.html">mutex</a>;
-<a name="l00091"></a>00091     };
-<a name="l00093"></a>00093     <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="l00095"></a>00095     <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="l00097"></a>00097     <span class="keyword">class </span>hash_map_base {
-<a name="l00098"></a>00098     <span class="keyword">public</span>:
-<a name="l00100"></a>00100         <span class="keyword">typedef</span> size_t size_type;
-<a name="l00102"></a>00102         <span class="keyword">typedef</span> size_t hashcode_t;
-<a name="l00104"></a>00104         <span class="keyword">typedef</span> size_t segment_index_t;
-<a name="l00106"></a>00106         <span class="keyword">typedef</span> hash_map_node_base node_base;
-<a name="l00108"></a>00108         <span class="keyword">struct </span>bucket : tbb::internal::no_copy {
-<a name="l00110"></a>00110             <span class="keyword">typedef</span> spin_rw_mutex mutex_t;
-<a name="l00112"></a>00112             <span class="keyword">typedef</span> mutex_t::scoped_lock scoped_t;
-<a name="l00113"></a>00113             mutex_t mutex;
-<a name="l00114"></a>00114             node_base *node_list;
-<a name="l00115"></a>00115         };
-<a name="l00117"></a>00117         <span class="keyword">static</span> size_type <span class="keyword">const</span> embedded_block = 1;
-<a name="l00119"></a>00119         <span class="keyword">static</span> size_type <span class="keyword">const</span> embedded_buckets = 1<<embedded_block;
-<a name="l00121"></a>00121         <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="l00123"></a>00123 <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="l00125"></a>00125 <span class="comment"></span>        <span class="keyword">typedef</span> bucket *segment_ptr_t;
-<a name="l00127"></a>00127         <span class="keyword">typedef</span> segment_ptr_t segments_table_t[pointers_per_table];
-<a name="l00129"></a>00129         atomic<hashcode_t> my_mask;
-<a name="l00131"></a>00131         segments_table_t my_table;
-<a name="l00133"></a>00133         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="l00135"></a>00135 <span class="comment"></span>        bucket my_embedded_segment[embedded_buckets];
-<a name="l00136"></a>00136 
-<a name="l00138"></a>00138         hash_map_base() {
-<a name="l00139"></a>00139             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="l00140"></a>00140                 + <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="l00141"></a>00141                 + embedded_buckets*<span class="keyword">sizeof</span>(bucket) ); <span class="comment">// n*8 or n*16</span>
-<a name="l00142"></a>00142             <span class="keywordflow">for</span>( size_type i = 0; i < embedded_block; i++ ) <span class="comment">// fill the table</span>
-<a name="l00143"></a>00143                 my_table[i] = my_embedded_segment + segment_base(i);
-<a name="l00144"></a>00144             my_mask = embedded_buckets - 1;
-<a name="l00145"></a>00145             __TBB_ASSERT( embedded_block <= first_block, <span class="stringliteral">"The first block number must include embedded blocks"</span>);
-<a name="l00146"></a>00146         }
-<a name="l00147"></a>00147 
-<a name="l00149"></a>00149         <span class="keyword">static</span> segment_index_t segment_index_of( size_type index ) {
-<a name="l00150"></a>00150             <span class="keywordflow">return</span> segment_index_t( __TBB_Log2( index|1 ) );
-<a name="l00151"></a>00151         }
-<a name="l00152"></a>00152 
-<a name="l00154"></a>00154         <span class="keyword">static</span> segment_index_t segment_base( segment_index_t k ) {
-<a name="l00155"></a>00155             <span class="keywordflow">return</span> (segment_index_t(1)<<k & ~segment_index_t(1));
-<a name="l00156"></a>00156         }
-<a name="l00157"></a>00157 
-<a name="l00159"></a>00159         <span class="keyword">static</span> size_type segment_size( segment_index_t k ) {
-<a name="l00160"></a>00160             <span class="keywordflow">return</span> size_type(1)<<k; <span class="comment">// fake value for k==0</span>
-<a name="l00161"></a>00161         }
-<a name="l00162"></a>00162         
-<a name="l00164"></a>00164         <span class="keyword">static</span> <span class="keywordtype">bool</span> is_valid( <span class="keywordtype">void</span> *ptr ) {
-<a name="l00165"></a>00165             <span class="keywordflow">return</span> reinterpret_cast<size_t>(ptr) > size_t(63);
-<a name="l00166"></a>00166         }
-<a name="l00167"></a>00167 
-<a name="l00169"></a>00169         <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="l00170"></a>00170             <span class="keywordflow">if</span>( is_initial ) std::memset(ptr, 0, sz*<span class="keyword">sizeof</span>(bucket) );
-<a name="l00171"></a>00171             <span class="keywordflow">else</span> <span class="keywordflow">for</span>(size_type i = 0; i < sz; i++, ptr++) {
-<a name="l00172"></a>00172                     *reinterpret_cast<intptr_t*>(&ptr->mutex) = 0;
-<a name="l00173"></a>00173                     ptr->node_list = rehash_req;
-<a name="l00174"></a>00174                 }
-<a name="l00175"></a>00175         }
-<a name="l00176"></a>00176         
-<a name="l00178"></a>00178         <span class="keyword">static</span> <span class="keywordtype">void</span> add_to_bucket( bucket *b, node_base *n ) {
-<a name="l00179"></a>00179             __TBB_ASSERT(b->node_list != rehash_req, NULL);
-<a name="l00180"></a>00180             n->next = b->node_list;
-<a name="l00181"></a>00181             b->node_list = n; <span class="comment">// its under lock and flag is set</span>
-<a name="l00182"></a>00182         }
-<a name="l00183"></a>00183 
-<a name="l00185"></a>00185         <span class="keyword">struct </span>enable_segment_failsafe {
-<a name="l00186"></a>00186             segment_ptr_t *my_segment_ptr;
-<a name="l00187"></a>00187             enable_segment_failsafe(segments_table_t &table, segment_index_t k) : my_segment_ptr(&table[k]) {}
-<a name="l00188"></a>00188             ~enable_segment_failsafe() {
-<a name="l00189"></a>00189                 <span class="keywordflow">if</span>( my_segment_ptr ) *my_segment_ptr = 0; <span class="comment">// indicate no allocation in progress</span>
-<a name="l00190"></a>00190             }
-<a name="l00191"></a>00191         };
-<a name="l00192"></a>00192 
-<a name="l00194"></a>00194         <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="l00195"></a>00195             __TBB_ASSERT( k, <span class="stringliteral">"Zero segment must be embedded"</span> );
-<a name="l00196"></a>00196             enable_segment_failsafe watchdog( my_table, k );
-<a name="l00197"></a>00197             cache_aligned_allocator<bucket> alloc;
-<a name="l00198"></a>00198             size_type sz;
-<a name="l00199"></a>00199             __TBB_ASSERT( !is_valid(my_table[k]), <span class="stringliteral">"Wrong concurrent assignment"</span>);
-<a name="l00200"></a>00200             <span class="keywordflow">if</span>( k >= first_block ) {
-<a name="l00201"></a>00201                 sz = segment_size( k );
-<a name="l00202"></a>00202                 segment_ptr_t ptr = alloc.allocate( sz );
-<a name="l00203"></a>00203                 init_buckets( ptr, sz, is_initial );
-<a name="l00204"></a>00204 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l00205"></a>00205 <span class="preprocessor"></span>                <span class="comment">// TODO: actually, fence and notification are unnecessary here and below</span>
-<a name="l00206"></a>00206                 itt_store_pointer_with_release_v3( my_table + k, ptr );
-<a name="l00207"></a>00207 <span class="preprocessor">#else</span>
-<a name="l00208"></a>00208 <span class="preprocessor"></span>                my_table[k] = ptr;<span class="comment">// my_mask has release fence</span>
-<a name="l00209"></a>00209 <span class="preprocessor">#endif</span>
-<a name="l00210"></a>00210 <span class="preprocessor"></span>                sz <<= 1;<span class="comment">// double it to get entire capacity of the container</span>
-<a name="l00211"></a>00211             } <span class="keywordflow">else</span> { <span class="comment">// the first block</span>
-<a name="l00212"></a>00212                 __TBB_ASSERT( k == embedded_block, <span class="stringliteral">"Wrong segment index"</span> );
-<a name="l00213"></a>00213                 sz = segment_size( first_block );
-<a name="l00214"></a>00214                 segment_ptr_t ptr = alloc.allocate( sz - embedded_buckets );
-<a name="l00215"></a>00215                 init_buckets( ptr, sz - embedded_buckets, is_initial );
-<a name="l00216"></a>00216                 ptr -= segment_base(embedded_block);
-<a name="l00217"></a>00217                 <span class="keywordflow">for</span>(segment_index_t i = embedded_block; i < first_block; i++) <span class="comment">// calc the offsets</span>
-<a name="l00218"></a>00218 #<span class="keywordflow">if</span> TBB_USE_THREADING_TOOLS
-<a name="l00219"></a>00219                     itt_store_pointer_with_release_v3( my_table + i, ptr + segment_base(i) );
-<a name="l00220"></a>00220 <span class="preprocessor">#else</span>
-<a name="l00221"></a>00221 <span class="preprocessor"></span>                    my_table[i] = ptr + segment_base(i);
-<a name="l00222"></a>00222 <span class="preprocessor">#endif</span>
-<a name="l00223"></a>00223 <span class="preprocessor"></span>            }
-<a name="l00224"></a>00224 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l00225"></a>00225 <span class="preprocessor"></span>            itt_store_pointer_with_release_v3( &my_mask, (<span class="keywordtype">void</span>*)(sz-1) );
-<a name="l00226"></a>00226 <span class="preprocessor">#else</span>
-<a name="l00227"></a>00227 <span class="preprocessor"></span>            my_mask = sz - 1;
-<a name="l00228"></a>00228 <span class="preprocessor">#endif</span>
-<a name="l00229"></a>00229 <span class="preprocessor"></span>            watchdog.my_segment_ptr = 0;
-<a name="l00230"></a>00230         }
-<a name="l00231"></a>00231 
-<a name="l00233"></a>00233         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="l00234"></a>00234             segment_index_t s = segment_index_of( h );
-<a name="l00235"></a>00235             h -= segment_base(s);
-<a name="l00236"></a>00236             segment_ptr_t seg = my_table[s];
-<a name="l00237"></a>00237             __TBB_ASSERT( is_valid(seg), <span class="stringliteral">"hashcode must be cut by valid mask for allocated segments"</span> );
-<a name="l00238"></a>00238             <span class="keywordflow">return</span> &seg[h];
-<a name="l00239"></a>00239         }
-<a name="l00240"></a>00240 
-<a name="l00241"></a>00241         <span class="comment">// internal serial rehashing helper</span>
-<a name="l00242"></a>00242         <span class="keywordtype">void</span> mark_rehashed_levels( hashcode_t h ) <span class="keywordflow">throw</span> () {
-<a name="l00243"></a>00243             segment_index_t s = segment_index_of( h );
-<a name="l00244"></a>00244             <span class="keywordflow">while</span>( segment_ptr_t seg = my_table[++s] )
-<a name="l00245"></a>00245                 <span class="keywordflow">if</span>( seg[h].node_list == rehash_req ) {
-<a name="l00246"></a>00246                     seg[h].node_list = empty_rehashed;
-<a name="l00247"></a>00247                     mark_rehashed_levels( h + segment_base(s) );
-<a name="l00248"></a>00248                 }
-<a name="l00249"></a>00249         }
-<a name="l00250"></a>00250 
-<a name="l00252"></a>00252         <span class="comment">// Splitting into two functions should help inlining</span>
-<a name="l00253"></a>00253         <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="l00254"></a>00254             hashcode_t m_now, m_old = m;
-<a name="l00255"></a>00255 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l00256"></a>00256 <span class="preprocessor"></span>            m_now = (hashcode_t) itt_load_pointer_with_acquire_v3( &my_mask );
-<a name="l00257"></a>00257 <span class="preprocessor">#else</span>
-<a name="l00258"></a>00258 <span class="preprocessor"></span>            m_now = my_mask;
-<a name="l00259"></a>00259 <span class="preprocessor">#endif</span>
-<a name="l00260"></a>00260 <span class="preprocessor"></span>            <span class="keywordflow">if</span>( m_old != m_now )
-<a name="l00261"></a>00261                 <span class="keywordflow">return</span> check_rehashing_collision( h, m_old, m = m_now );
-<a name="l00262"></a>00262             <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00263"></a>00263         }
-<a name="l00264"></a>00264 
-<a name="l00266"></a>00266         <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="l00267"></a>00267             __TBB_ASSERT(m_old != m, NULL); <span class="comment">// TODO?: m arg could be optimized out by passing h = h&m</span>
-<a name="l00268"></a>00268             <span class="keywordflow">if</span>( (h & m_old) != (h & m) ) { <span class="comment">// mask changed for this hashcode, rare event</span>
-<a name="l00269"></a>00269                 <span class="comment">// condition above proves that 'h' has some other bits set beside 'm_old'</span>
-<a name="l00270"></a>00270                 <span class="comment">// find next applicable mask after m_old    //TODO: look at bsl instruction</span>
-<a name="l00271"></a>00271                 <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="l00272"></a>00272                     ;
-<a name="l00273"></a>00273                 m_old = (m_old<<1) - 1; <span class="comment">// get full mask from a bit</span>
-<a name="l00274"></a>00274                 __TBB_ASSERT((m_old&(m_old+1))==0 && m_old <= m, NULL);
-<a name="l00275"></a>00275                 <span class="comment">// check whether it is rehashing/ed</span>
-<a name="l00276"></a>00276 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l00277"></a>00277 <span class="preprocessor"></span>                <span class="keywordflow">if</span>( itt_load_pointer_with_acquire_v3(&( get_bucket(h & m_old)->node_list )) != rehash_req )
-<a name="l00278"></a>00278 <span class="preprocessor">#else</span>
-<a name="l00279"></a>00279 <span class="preprocessor"></span>                <span class="keywordflow">if</span>( __TBB_load_with_acquire(get_bucket( h & m_old )->node_list) != rehash_req )
-<a name="l00280"></a>00280 <span class="preprocessor">#endif</span>
-<a name="l00281"></a>00281 <span class="preprocessor"></span>                    <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00282"></a>00282             }
-<a name="l00283"></a>00283             <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00284"></a>00284         }
-<a name="l00285"></a>00285 
-<a name="l00287"></a>00287         segment_index_t insert_new_node( bucket *b, node_base *n, hashcode_t mask ) {
-<a name="l00288"></a>00288             size_type sz = ++my_size; <span class="comment">// prefix form is to enforce allocation after the first item inserted</span>
-<a name="l00289"></a>00289             add_to_bucket( b, n );
-<a name="l00290"></a>00290             <span class="comment">// check load factor</span>
-<a name="l00291"></a>00291             <span class="keywordflow">if</span>( sz >= mask ) { <span class="comment">// TODO: add custom load_factor </span>
-<a name="l00292"></a>00292                 segment_index_t new_seg = segment_index_of( mask+1 );
-<a name="l00293"></a>00293                 __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="l00294"></a>00294 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l00295"></a>00295 <span class="preprocessor"></span>                <span class="keywordflow">if</span>( !itt_load_pointer_v3(my_table+new_seg)
-<a name="l00296"></a>00296 #<span class="keywordflow">else</span>
-<a name="l00297"></a>00297                 <span class="keywordflow">if</span>( !my_table[new_seg]
-<a name="l00298"></a>00298 #endif
-<a name="l00299"></a>00299                   && __TBB_CompareAndSwapW(&my_table[new_seg], 2, 0) == 0 )
-<a name="l00300"></a>00300                     <span class="keywordflow">return</span> new_seg; <span class="comment">// The value must be processed</span>
-<a name="l00301"></a>00301             }
-<a name="l00302"></a>00302             <span class="keywordflow">return</span> 0;
-<a name="l00303"></a>00303         }
-<a name="l00304"></a>00304 
-<a name="l00306"></a>00306         <span class="keywordtype">void</span> reserve(size_type buckets) {
-<a name="l00307"></a>00307             <span class="keywordflow">if</span>( !buckets-- ) <span class="keywordflow">return</span>;
-<a name="l00308"></a>00308             <span class="keywordtype">bool</span> is_initial = !my_size;
-<a name="l00309"></a>00309             <span class="keywordflow">for</span>( size_type m = my_mask; buckets > m; m = my_mask )
-<a name="l00310"></a>00310                 enable_segment( segment_index_of( m+1 ), is_initial );
-<a name="l00311"></a>00311         }
-<a name="l00313"></a>00313         <span class="keywordtype">void</span> internal_swap(hash_map_base &table) {
-<a name="l00314"></a>00314             std::swap(this->my_mask, table.my_mask);
-<a name="l00315"></a>00315             std::swap(this->my_size, table.my_size);
-<a name="l00316"></a>00316             <span class="keywordflow">for</span>(size_type i = 0; i < embedded_buckets; i++)
-<a name="l00317"></a>00317                 std::swap(this->my_embedded_segment[i].node_list, table.my_embedded_segment[i].node_list);
-<a name="l00318"></a>00318             <span class="keywordflow">for</span>(size_type i = embedded_block; i < pointers_per_table; i++)
-<a name="l00319"></a>00319                 std::swap(this->my_table[i], table.my_table[i]);
-<a name="l00320"></a>00320         }
-<a name="l00321"></a>00321     };
-<a name="l00322"></a>00322 
-<a name="l00323"></a>00323     <span class="keyword">template</span><<span class="keyword">typename</span> Iterator>
-<a name="l00324"></a>00324     <span class="keyword">class </span>hash_map_range;
-<a name="l00325"></a>00325 
-<a name="l00327"></a>00327 
-<a name="l00329"></a>00329     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
-<a name="l00330"></a>00330     <span class="keyword">class </span>hash_map_iterator
-<a name="l00331"></a>00331         : <span class="keyword">public</span> std::iterator<std::forward_iterator_tag,Value>
-<a name="l00332"></a>00332     {
-<a name="l00333"></a>00333         <span class="keyword">typedef</span> Container map_type;
-<a name="l00334"></a>00334         <span class="keyword">typedef</span> <span class="keyword">typename</span> Container::node node;
-<a name="l00335"></a>00335         <span class="keyword">typedef</span> hash_map_base::node_base node_base;
-<a name="l00336"></a>00336         <span class="keyword">typedef</span> hash_map_base::bucket bucket;
-<a name="l00337"></a>00337 
-<a name="l00338"></a>00338         <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="l00339"></a>00339         <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="l00340"></a>00340 
-<a name="l00341"></a>00341         <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="l00342"></a>00342         <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="l00343"></a>00343 
-<a name="l00344"></a>00344         <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="l00345"></a>00345         <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="l00346"></a>00346     
-<a name="l00347"></a>00347         <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> U>
-<a name="l00348"></a>00348         <span class="keyword">friend</span> <span class="keyword">class </span>hash_map_iterator;
-<a name="l00349"></a>00349 
-<a name="l00350"></a>00350         <span class="keyword">template</span><<span class="keyword">typename</span> I>
-<a name="l00351"></a>00351         <span class="keyword">friend</span> <span class="keyword">class </span>hash_map_range;
-<a name="l00352"></a>00352 
-<a name="l00353"></a>00353         <span class="keywordtype">void</span> advance_to_next_bucket() { <span class="comment">// TODO?: refactor to iterator_base class</span>
-<a name="l00354"></a>00354             size_t k = my_index+1;
-<a name="l00355"></a>00355             <span class="keywordflow">while</span>( my_bucket && k <= my_map->my_mask ) {
-<a name="l00356"></a>00356                 <span class="comment">// Following test uses 2's-complement wizardry</span>
-<a name="l00357"></a>00357                 <span class="keywordflow">if</span>( k& (k-2) ) <span class="comment">// not the beginning of a segment</span>
-<a name="l00358"></a>00358                     ++my_bucket;
-<a name="l00359"></a>00359                 <span class="keywordflow">else</span> my_bucket = my_map->get_bucket( k );
-<a name="l00360"></a>00360                 my_node = static_cast<node*>( my_bucket->node_list );
-<a name="l00361"></a>00361                 <span class="keywordflow">if</span>( hash_map_base::is_valid(my_node) ) {
-<a name="l00362"></a>00362                     my_index = k; <span class="keywordflow">return</span>;
-<a name="l00363"></a>00363                 }
-<a name="l00364"></a>00364                 ++k;
-<a name="l00365"></a>00365             }
-<a name="l00366"></a>00366             my_bucket = 0; my_node = 0; my_index = k; <span class="comment">// the end</span>
-<a name="l00367"></a>00367         }
-<a name="l00368"></a>00368 <span class="preprocessor">#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)</span>
-<a name="l00369"></a>00369 <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="l00370"></a>00370         <span class="keyword">friend</span> <span class="keyword">class </span>interface4::concurrent_hash_map;
-<a name="l00371"></a>00371 <span class="preprocessor">#else</span>
-<a name="l00372"></a>00372 <span class="preprocessor"></span>    <span class="keyword">public</span>: <span class="comment">// workaround</span>
-<a name="l00373"></a>00373 <span class="preprocessor">#endif</span>
-<a name="l00375"></a>00375 <span class="preprocessor">        const Container *my_map;</span>
-<a name="l00376"></a>00376 <span class="preprocessor"></span>
-<a name="l00378"></a>00378         size_t my_index;
-<a name="l00379"></a>00379 
-<a name="l00381"></a>00381         <span class="keyword">const</span> bucket *my_bucket;
-<a name="l00382"></a>00382 
-<a name="l00384"></a>00384         node *my_node;
-<a name="l00385"></a>00385 
-<a name="l00386"></a>00386         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="l00387"></a>00387 
-<a name="l00388"></a>00388     <span class="keyword">public</span>:
-<a name="l00390"></a>00390         hash_map_iterator() {}
-<a name="l00391"></a>00391         hash_map_iterator( <span class="keyword">const</span> hash_map_iterator<Container,typename Container::value_type> &other ) :
-<a name="l00392"></a>00392             my_map(other.my_map),
-<a name="l00393"></a>00393             my_index(other.my_index),
-<a name="l00394"></a>00394             my_bucket(other.my_bucket),
-<a name="l00395"></a>00395             my_node(other.my_node)
-<a name="l00396"></a>00396         {}
-<a name="l00397"></a>00397         Value& operator*()<span class="keyword"> const </span>{
-<a name="l00398"></a>00398             __TBB_ASSERT( hash_map_base::is_valid(my_node), <span class="stringliteral">"iterator uninitialized or at end of container?"</span> );
-<a name="l00399"></a>00399             <span class="keywordflow">return</span> my_node->item;
-<a name="l00400"></a>00400         }
-<a name="l00401"></a>00401         Value* operator->()<span class="keyword"> const </span>{<span class="keywordflow">return</span> &operator*();}
-<a name="l00402"></a>00402         hash_map_iterator& operator++();
-<a name="l00403"></a>00403         
-<a name="l00405"></a>00405         hash_map_iterator operator++(<span class="keywordtype">int</span>) {
-<a name="l00406"></a>00406             hash_map_iterator old(*<span class="keyword">this</span>);
-<a name="l00407"></a>00407             operator++();
-<a name="l00408"></a>00408             <span class="keywordflow">return</span> old;
-<a name="l00409"></a>00409         }
-<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> Value>
-<a name="l00413"></a>00413     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="l00414"></a>00414         my_map(&map),
-<a name="l00415"></a>00415         my_index(index),
-<a name="l00416"></a>00416         my_bucket(b),
-<a name="l00417"></a>00417         my_node( static_cast<node*>(n) )
-<a name="l00418"></a>00418     {
-<a name="l00419"></a>00419         <span class="keywordflow">if</span>( b && !hash_map_base::is_valid(n) )
-<a name="l00420"></a>00420             advance_to_next_bucket();
-<a name="l00421"></a>00421     }
-<a name="l00422"></a>00422 
-<a name="l00423"></a>00423     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
-<a name="l00424"></a>00424     hash_map_iterator<Container,Value>& hash_map_iterator<Container,Value>::operator++() {
-<a name="l00425"></a>00425         my_node = static_cast<node*>( my_node->next );
-<a name="l00426"></a>00426         <span class="keywordflow">if</span>( !my_node ) advance_to_next_bucket();
-<a name="l00427"></a>00427         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<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> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00431"></a>00431     <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="l00432"></a>00432         <span class="keywordflow">return</span> i.my_node == j.my_node && i.my_map == j.my_map;
-<a name="l00433"></a>00433     }
-<a name="l00434"></a>00434 
-<a name="l00435"></a>00435     <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="l00436"></a>00436     <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="l00437"></a>00437         <span class="keywordflow">return</span> i.my_node != j.my_node || i.my_map != j.my_map;
-<a name="l00438"></a>00438     }
-<a name="l00439"></a>00439 
-<a name="l00441"></a>00441 
-<a name="l00442"></a>00442     <span class="keyword">template</span><<span class="keyword">typename</span> Iterator>
-<a name="l00443"></a>00443     <span class="keyword">class </span>hash_map_range {
-<a name="l00444"></a>00444         <span class="keyword">typedef</span> <span class="keyword">typename</span> Iterator::map_type map_type;
-<a name="l00445"></a>00445         Iterator my_begin;
-<a name="l00446"></a>00446         Iterator my_end;
-<a name="l00447"></a>00447         <span class="keyword">mutable</span> Iterator my_midpoint;
-<a name="l00448"></a>00448         size_t my_grainsize;
-<a name="l00450"></a>00450         <span class="keywordtype">void</span> set_midpoint() <span class="keyword">const</span>;
-<a name="l00451"></a>00451         <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="l00452"></a>00452     <span class="keyword">public</span>:
-<a name="l00454"></a>00454         <span class="keyword">typedef</span> std::size_t size_type;
-<a name="l00455"></a>00455         <span class="keyword">typedef</span> <span class="keyword">typename</span> Iterator::value_type value_type;
-<a name="l00456"></a>00456         <span class="keyword">typedef</span> <span class="keyword">typename</span> Iterator::reference reference;
-<a name="l00457"></a>00457         <span class="keyword">typedef</span> <span class="keyword">typename</span> Iterator::difference_type difference_type;
-<a name="l00458"></a>00458         <span class="keyword">typedef</span> Iterator iterator;
-<a name="l00459"></a>00459 
-<a name="l00461"></a>00461         <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_begin==my_end;}
-<a name="l00462"></a>00462 
-<a name="l00464"></a>00464         <span class="keywordtype">bool</span> is_divisible()<span class="keyword"> const </span>{
-<a name="l00465"></a>00465             <span class="keywordflow">return</span> my_midpoint!=my_end;
-<a name="l00466"></a>00466         }
-<a name="l00468"></a>00468         hash_map_range( hash_map_range& r, split ) : 
-<a name="l00469"></a>00469             my_end(r.my_end),
-<a name="l00470"></a>00470             my_grainsize(r.my_grainsize)
-<a name="l00471"></a>00471         {
-<a name="l00472"></a>00472             r.my_end = my_begin = r.my_midpoint;
-<a name="l00473"></a>00473             __TBB_ASSERT( !empty(), <span class="stringliteral">"Splitting despite the range is not divisible"</span> );
-<a name="l00474"></a>00474             __TBB_ASSERT( !r.empty(), <span class="stringliteral">"Splitting despite the range is not divisible"</span> );
-<a name="l00475"></a>00475             set_midpoint();
-<a name="l00476"></a>00476             r.set_midpoint();
-<a name="l00477"></a>00477         }
-<a name="l00479"></a>00479         <span class="keyword">template</span><<span class="keyword">typename</span> U>
-<a name="l00480"></a>00480         hash_map_range( hash_map_range<U>& r) : 
-<a name="l00481"></a>00481             my_begin(r.my_begin),
-<a name="l00482"></a>00482             my_end(r.my_end),
-<a name="l00483"></a>00483             my_midpoint(r.my_midpoint),
-<a name="l00484"></a>00484             my_grainsize(r.my_grainsize)
-<a name="l00485"></a>00485         {}
-<a name="l00486"></a>00486 <span class="preprocessor">#if TBB_DEPRECATED</span>
-<a name="l00488"></a>00488 <span class="preprocessor">        hash_map_range( const Iterator& begin_, const Iterator& end_, size_type grainsize_ = 1 ) : </span>
-<a name="l00489"></a>00489 <span class="preprocessor"></span>            my_begin(begin_), 
-<a name="l00490"></a>00490             my_end(end_),
-<a name="l00491"></a>00491             my_grainsize(grainsize_)
-<a name="l00492"></a>00492         {
-<a name="l00493"></a>00493             <span class="keywordflow">if</span>(!my_end.my_index && !my_end.my_bucket) <span class="comment">// end</span>
-<a name="l00494"></a>00494                 my_end.my_index = my_end.my_map->my_mask + 1;
-<a name="l00495"></a>00495             set_midpoint();
-<a name="l00496"></a>00496             __TBB_ASSERT( grainsize_>0, <span class="stringliteral">"grainsize must be positive"</span> );
-<a name="l00497"></a>00497         }
-<a name="l00498"></a>00498 <span class="preprocessor">#endif</span>
-<a name="l00500"></a>00500 <span class="preprocessor">        hash_map_range( const map_type &map, size_type grainsize_ = 1 ) : </span>
-<a name="l00501"></a>00501 <span class="preprocessor"></span>            my_begin( Iterator( map, 0, map.my_embedded_segment, map.my_embedded_segment->node_list ) ),
-<a name="l00502"></a>00502             my_end( Iterator( map, map.my_mask + 1, 0, 0 ) ),
-<a name="l00503"></a>00503             my_grainsize( grainsize_ )
-<a name="l00504"></a>00504         {
-<a name="l00505"></a>00505             __TBB_ASSERT( grainsize_>0, <span class="stringliteral">"grainsize must be positive"</span> );
-<a name="l00506"></a>00506             set_midpoint();
-<a name="l00507"></a>00507         }
-<a name="l00508"></a>00508         <span class="keyword">const</span> Iterator& begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_begin;}
-<a name="l00509"></a>00509         <span class="keyword">const</span> Iterator& end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_end;}
-<a name="l00511"></a>00511         size_type grainsize()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_grainsize;}
-<a name="l00512"></a>00512     };
-<a name="l00513"></a>00513 
-<a name="l00514"></a>00514     <span class="keyword">template</span><<span class="keyword">typename</span> Iterator>
-<a name="l00515"></a>00515     <span class="keywordtype">void</span> hash_map_range<Iterator>::set_midpoint()<span class="keyword"> const </span>{
-<a name="l00516"></a>00516         <span class="comment">// Split by groups of nodes</span>
-<a name="l00517"></a>00517         size_t m = my_end.my_index-my_begin.my_index;
-<a name="l00518"></a>00518         <span class="keywordflow">if</span>( m > my_grainsize ) {
-<a name="l00519"></a>00519             m = my_begin.my_index + m/2u;
-<a name="l00520"></a>00520             hash_map_base::bucket *b = my_begin.my_map->get_bucket(m);
-<a name="l00521"></a>00521             my_midpoint = Iterator(*my_begin.my_map,m,b,b->node_list);
-<a name="l00522"></a>00522         } <span class="keywordflow">else</span> {
-<a name="l00523"></a>00523             my_midpoint = my_end;
-<a name="l00524"></a>00524         }
-<a name="l00525"></a>00525         __TBB_ASSERT( my_begin.my_index <= my_midpoint.my_index,
-<a name="l00526"></a>00526             <span class="stringliteral">"my_begin is after my_midpoint"</span> );
-<a name="l00527"></a>00527         __TBB_ASSERT( my_midpoint.my_index <= my_end.my_index,
-<a name="l00528"></a>00528             <span class="stringliteral">"my_midpoint is after my_end"</span> );
-<a name="l00529"></a>00529         __TBB_ASSERT( my_begin != my_midpoint || my_begin == my_end,
-<a name="l00530"></a>00530             <span class="stringliteral">"[my_begin, my_midpoint) range should not be empty"</span> );
-<a name="l00531"></a>00531     }
-<a name="l00532"></a>00532 
-<a name="l00533"></a>00533     } <span class="comment">// internal</span>
-<a name="l00535"></a>00535 <span class="comment"></span>
-<a name="l00537"></a>00537 
-<a name="l00566"></a>00566 <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="l00567"></a><a class="code" href="a00155.html">00567</a> <span class="keyword">class </span><a class="code" href="a00155.html">concurrent_hash_map</a> : <span class="keyword">protected</span> internal::hash_map_base {
-<a name="l00568"></a>00568     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
-<a name="l00569"></a>00569     <span class="keyword">friend</span> <span class="keyword">class </span>internal::hash_map_iterator;
-<a name="l00570"></a>00570 
-<a name="l00571"></a>00571     <span class="keyword">template</span><<span class="keyword">typename</span> I>
-<a name="l00572"></a>00572     <span class="keyword">friend</span> <span class="keyword">class </span>internal::hash_map_range;
-<a name="l00573"></a>00573 
-<a name="l00574"></a>00574 <span class="keyword">public</span>:
-<a name="l00575"></a>00575     <span class="keyword">typedef</span> Key key_type;
-<a name="l00576"></a>00576     <span class="keyword">typedef</span> T mapped_type;
-<a name="l00577"></a>00577     <span class="keyword">typedef</span> std::pair<const Key,T> value_type;
-<a name="l00578"></a>00578     <span class="keyword">typedef</span> hash_map_base::size_type size_type;
-<a name="l00579"></a>00579     <span class="keyword">typedef</span> ptrdiff_t difference_type;
-<a name="l00580"></a>00580     <span class="keyword">typedef</span> value_type *pointer;
-<a name="l00581"></a>00581     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type *const_pointer;
-<a name="l00582"></a>00582     <span class="keyword">typedef</span> value_type &reference;
-<a name="l00583"></a>00583     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type &const_reference;
-<a name="l00584"></a>00584     <span class="keyword">typedef</span> internal::hash_map_iterator<concurrent_hash_map,value_type> iterator;
-<a name="l00585"></a>00585     <span class="keyword">typedef</span> internal::hash_map_iterator<concurrent_hash_map,const value_type> const_iterator;
-<a name="l00586"></a>00586     <span class="keyword">typedef</span> internal::hash_map_range<iterator> range_type;
-<a name="l00587"></a>00587     <span class="keyword">typedef</span> internal::hash_map_range<const_iterator> const_range_type;
-<a name="l00588"></a>00588     <span class="keyword">typedef</span> Allocator allocator_type;
-<a name="l00589"></a>00589 
-<a name="l00590"></a>00590 <span class="keyword">protected</span>:
-<a name="l00591"></a>00591     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00158.html">const_accessor</a>;
-<a name="l00592"></a>00592     <span class="keyword">struct </span>node;
-<a name="l00593"></a>00593     <span class="keyword">typedef</span> <span class="keyword">typename</span> Allocator::template rebind<node>::other node_allocator_type;
-<a name="l00594"></a>00594     node_allocator_type my_allocator;
-<a name="l00595"></a>00595     HashCompare my_hash_compare;
-<a name="l00596"></a>00596 
-<a name="l00597"></a>00597     <span class="keyword">struct </span>node : <span class="keyword">public</span> node_base {
-<a name="l00598"></a>00598         value_type item;
-<a name="l00599"></a>00599         node( <span class="keyword">const</span> Key &key ) : item(key, T()) {}
-<a name="l00600"></a>00600         node( <span class="keyword">const</span> Key &key, <span class="keyword">const</span> T &t ) : item(key, t) {}
-<a name="l00601"></a>00601         <span class="comment">// exception-safe allocation, see C++ Standard 2003, clause 5.3.4p17</span>
-<a name="l00602"></a>00602         <span class="keywordtype">void</span> *operator new( size_t <span class="comment">/*size*/</span>, node_allocator_type &a ) {
-<a name="l00603"></a>00603             <span class="keywordtype">void</span> *ptr = a.allocate(1);
-<a name="l00604"></a>00604             <span class="keywordflow">if</span>(!ptr) 
-<a name="l00605"></a>00605                 tbb::internal::throw_exception(tbb::internal::eid_bad_alloc);
-<a name="l00606"></a>00606             <span class="keywordflow">return</span> ptr;
-<a name="l00607"></a>00607         }
-<a name="l00608"></a>00608         <span class="comment">// match placement-new form above to be called if exception thrown in constructor</span>
-<a name="l00609"></a>00609         <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="l00610"></a>00610     };
-<a name="l00611"></a>00611 
-<a name="l00612"></a>00612     <span class="keywordtype">void</span> delete_node( node_base *n ) {
-<a name="l00613"></a>00613         my_allocator.destroy( static_cast<node*>(n) );
-<a name="l00614"></a>00614         my_allocator.deallocate( static_cast<node*>(n), 1);
-<a name="l00615"></a>00615     }
-<a name="l00616"></a>00616 
-<a name="l00617"></a>00617     node *search_bucket( <span class="keyword">const</span> key_type &key, bucket *b )<span class="keyword"> const </span>{
-<a name="l00618"></a>00618         node *n = static_cast<node*>( b->node_list );
-<a name="l00619"></a>00619         <span class="keywordflow">while</span>( is_valid(n) && !my_hash_compare.equal(key, n->item.first) )
-<a name="l00620"></a>00620             n = static_cast<node*>( n->next );
-<a name="l00621"></a>00621         __TBB_ASSERT(n != internal::rehash_req, <span class="stringliteral">"Search can be executed only for rehashed bucket"</span>);
-<a name="l00622"></a>00622         <span class="keywordflow">return</span> n;
-<a name="l00623"></a>00623     }
-<a name="l00624"></a>00624 
-<a name="l00626"></a><a class="code" href="a00157.html">00626</a>     <span class="keyword">class </span><a class="code" href="a00157.html">bucket_accessor</a> : <span class="keyword">public</span> bucket::scoped_t {
-<a name="l00627"></a>00627         <span class="keywordtype">bool</span> my_is_writer; <span class="comment">// TODO: use it from base type</span>
-<a name="l00628"></a>00628         bucket *my_b;
-<a name="l00629"></a>00629     <span class="keyword">public</span>:
-<a name="l00630"></a>00630         <a class="code" href="a00157.html">bucket_accessor</a>( <a class="code" href="a00155.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="a00267.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>( base, h, writer ); }
-<a name="l00632"></a><a class="code" href="a00157.html#26b4fe0ca87a7ad4852cb787db880119">00632</a>         <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00267.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>( <a class="code" href="a00155.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="l00633"></a>00633             my_b = base->get_bucket( h );
-<a name="l00634"></a>00634 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l00635"></a>00635 <span class="preprocessor"></span>            <span class="comment">// TODO: actually, notification is unnecessary here, just hiding double-check</span>
-<a name="l00636"></a>00636             <span class="keywordflow">if</span>( itt_load_pointer_with_acquire_v3(&my_b->node_list) == internal::rehash_req
-<a name="l00637"></a>00637 #<span class="keywordflow">else</span>
-<a name="l00638"></a>00638             <span class="keywordflow">if</span>( __TBB_load_with_acquire(my_b->node_list) == internal::rehash_req
-<a name="l00639"></a>00639 #endif
-<a name="l00640"></a>00640                 && try_acquire( my_b->mutex, <span class="comment">/*write=*/</span><span class="keyword">true</span> ) )
-<a name="l00641"></a>00641             {
-<a name="l00642"></a>00642                 <span class="keywordflow">if</span>( my_b->node_list == internal::rehash_req ) base-><a class="code" href="a00155.html#571d635fd206d9985cf20a1a659ea476">rehash_bucket</a>( my_b, h ); <span class="comment">//recursive rehashing</span>
-<a name="l00643"></a>00643                 my_is_writer = <span class="keyword">true</span>;
-<a name="l00644"></a>00644             }
-<a name="l00645"></a>00645             <span class="keywordflow">else</span> bucket::scoped_t::acquire( my_b->mutex, <span class="comment">/*write=*/</span>my_is_writer = writer );
-<a name="l00646"></a>00646             __TBB_ASSERT( my_b->node_list != internal::rehash_req, NULL);
-<a name="l00647"></a>00647         }
-<a name="l00649"></a><a class="code" href="a00157.html#fc194e3a186dc935a5fb513cc9f8e898">00649</a>         <span class="keywordtype">bool</span> is_writer() { <span class="keywordflow">return</span> my_is_writer; }
-<a name="l00651"></a><a class="code" href="a00157.html#57c6110bd20e95c06de5a199de988941">00651</a>         bucket *operator() () { <span class="keywordflow">return</span> my_b; }
-<a name="l00652"></a>00652         <span class="comment">// TODO: optimize out</span>
-<a name="l00653"></a>00653         <span class="keywordtype">bool</span> upgrade_to_writer() { my_is_writer = <span class="keyword">true</span>; <span class="keywordflow">return</span> bucket::scoped_t::upgrade_to_writer(); }
-<a name="l00654"></a>00654     };
-<a name="l00655"></a>00655 
-<a name="l00656"></a>00656     <span class="comment">// TODO refactor to hash_base</span>
-<a name="l00657"></a>00657     <span class="keywordtype">void</span> rehash_bucket( bucket *b_new, <span class="keyword">const</span> hashcode_t h ) {
-<a name="l00658"></a>00658         __TBB_ASSERT( *(intptr_t*)(&b_new->mutex), <span class="stringliteral">"b_new must be locked (for write)"</span>);
-<a name="l00659"></a>00659         __TBB_ASSERT( h > 1, <span class="stringliteral">"The lowermost buckets can't be rehashed"</span> );
-<a name="l00660"></a>00660         __TBB_store_with_release(b_new->node_list, internal::empty_rehashed); <span class="comment">// mark rehashed</span>
-<a name="l00661"></a>00661         hashcode_t mask = ( 1u<<__TBB_Log2( h ) ) - 1; <span class="comment">// get parent mask from the topmost bit</span>
-<a name="l00662"></a>00662 
-<a name="l00663"></a>00663         bucket_accessor b_old( <span class="keyword">this</span>, h & mask );
-<a name="l00664"></a>00664 
-<a name="l00665"></a>00665         mask = (mask<<1) | 1; <span class="comment">// get full mask for new bucket</span>
-<a name="l00666"></a>00666         __TBB_ASSERT( (mask&(mask+1))==0 && (h & mask) == h, NULL );
-<a name="l00667"></a>00667     restart:
-<a name="l00668"></a>00668         <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="l00669"></a>00669             hashcode_t c = my_hash_compare.hash( static_cast<node*>(n)->item.first );
-<a name="l00670"></a>00670 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00671"></a>00671 <span class="preprocessor"></span>            hashcode_t bmask = h & (mask>>1);
-<a name="l00672"></a>00672             bmask = bmask==0? 1 : ( 1u<<(__TBB_Log2( bmask )+1 ) ) - 1; <span class="comment">// minimal mask of parent bucket</span>
-<a name="l00673"></a>00673             __TBB_ASSERT( (c & bmask) == (h & bmask), <span class="stringliteral">"hash() function changed for key in table"</span> );
-<a name="l00674"></a>00674 <span class="preprocessor">#endif</span>
-<a name="l00675"></a>00675 <span class="preprocessor"></span>            <span class="keywordflow">if</span>( (c & mask) == h ) {
-<a name="l00676"></a>00676                 <span class="keywordflow">if</span>( !b_old.is_writer() )
-<a name="l00677"></a>00677                     <span class="keywordflow">if</span>( !b_old.upgrade_to_writer() ) {
-<a name="l00678"></a>00678                         <span class="keywordflow">goto</span> restart; <span class="comment">// node ptr can be invalid due to concurrent erase</span>
-<a name="l00679"></a>00679                     }
-<a name="l00680"></a>00680                 *p = n->next; <span class="comment">// exclude from b_old</span>
-<a name="l00681"></a>00681                 add_to_bucket( b_new, n );
-<a name="l00682"></a>00682             } <span class="keywordflow">else</span> p = &n->next; <span class="comment">// iterate to next item</span>
-<a name="l00683"></a>00683         }
-<a name="l00684"></a>00684     }
-<a name="l00685"></a>00685 
-<a name="l00686"></a>00686 <span class="keyword">public</span>:
-<a name="l00687"></a>00687     
-<a name="l00688"></a>00688     <span class="keyword">class </span>accessor;
-<a name="l00690"></a><a class="code" href="a00158.html">00690</a>     <span class="keyword">class </span><a class="code" href="a00158.html">const_accessor</a> {
-<a name="l00691"></a>00691         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00155.html">concurrent_hash_map</a><Key,T,HashCompare,Allocator>;
-<a name="l00692"></a>00692         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00156.html">accessor</a>;
-<a name="l00693"></a>00693         <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> <a class="code" href="a00156.html">accessor</a> & ) <span class="keyword">const</span>; <span class="comment">// Deny access</span>
-<a name="l00694"></a>00694         <a class="code" href="a00158.html">const_accessor</a>( <span class="keyword">const</span> <a class="code" href="a00156.html">accessor</a> & );       <span class="comment">// Deny access</span>
-<a name="l00695"></a>00695     <span class="keyword">public</span>:
-<a name="l00697"></a><a class="code" href="a00158.html#48647ca0d79c1233b997f5768403c926">00697</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="l00698"></a>00698 
-<a name="l00700"></a><a class="code" href="a00158.html#5cce3104cb0a52e08d2131370871c614">00700</a>         <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !my_node;}
-<a name="l00701"></a>00701 
-<a name="l00703"></a><a class="code" href="a00158.html#d5ce4f88d8870290238a8ad621e6f270">00703</a>         <span class="keywordtype">void</span> <a class="code" href="a00267.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>() {
-<a name="l00704"></a>00704             <span class="keywordflow">if</span>( my_node ) {
-<a name="l00705"></a>00705                 my_lock.release();
-<a name="l00706"></a>00706                 my_node = 0;
-<a name="l00707"></a>00707             }
-<a name="l00708"></a>00708         }
-<a name="l00709"></a>00709 
-<a name="l00711"></a><a class="code" href="a00158.html#30f31106840700a4c3664b9cb1c31ca7">00711</a>         const_reference operator*()<span class="keyword"> const </span>{
-<a name="l00712"></a>00712             __TBB_ASSERT( my_node, <span class="stringliteral">"attempt to dereference empty accessor"</span> );
-<a name="l00713"></a>00713             <span class="keywordflow">return</span> my_node->item;
-<a name="l00714"></a>00714         }
-<a name="l00715"></a>00715 
-<a name="l00717"></a><a class="code" href="a00158.html#3d03a48ecb8cd9549bd8be64b09c9b0d">00717</a>         const_pointer operator->()<span class="keyword"> const </span>{
-<a name="l00718"></a>00718             <span class="keywordflow">return</span> &operator*();
-<a name="l00719"></a>00719         }
-<a name="l00720"></a>00720 
-<a name="l00722"></a><a class="code" href="a00158.html#a9ead65cca68d4c49c7ef64d7899a4c8">00722</a>         <a class="code" href="a00158.html">const_accessor</a>() : my_node(NULL) {}
-<a name="l00723"></a>00723 
-<a name="l00725"></a><a class="code" href="a00158.html#752b0c1ec74b94786403a75e42917d01">00725</a>         ~<a class="code" href="a00158.html">const_accessor</a>() {
-<a name="l00726"></a>00726             my_node = NULL; <span class="comment">// my_lock.release() is called in scoped_lock destructor</span>
-<a name="l00727"></a>00727         }
-<a name="l00728"></a>00728     <span class="keyword">private</span>:
-<a name="l00729"></a>00729         node *my_node;
-<a name="l00730"></a>00730         <span class="keyword">typename</span> node::scoped_t my_lock;
-<a name="l00731"></a>00731         hashcode_t my_hash;
-<a name="l00732"></a>00732     };
-<a name="l00733"></a>00733 
-<a name="l00735"></a><a class="code" href="a00156.html">00735</a>     <span class="keyword">class </span><a class="code" href="a00156.html">accessor</a>: <span class="keyword">public</span> <a class="code" href="a00158.html">const_accessor</a> {
-<a name="l00736"></a>00736     <span class="keyword">public</span>:
-<a name="l00738"></a><a class="code" href="a00156.html#49eec74f272bab187d176c0d9d16a7fe">00738</a>         <span class="keyword">typedef</span> <span class="keyword">typename</span> concurrent_hash_map::value_type value_type;
-<a name="l00739"></a>00739 
-<a name="l00741"></a><a class="code" href="a00156.html#e8938f0cd1211e88a1d73527ed3636c4">00741</a>         reference operator*()<span class="keyword"> const </span>{
-<a name="l00742"></a>00742             __TBB_ASSERT( this->my_node, <span class="stringliteral">"attempt to dereference empty accessor"</span> );
-<a name="l00743"></a>00743             <span class="keywordflow">return</span> this->my_node->item;
-<a name="l00744"></a>00744         }
-<a name="l00745"></a>00745 
-<a name="l00747"></a><a class="code" href="a00156.html#fcebc32c020202cc37e60eadef157569">00747</a>         pointer operator->()<span class="keyword"> const </span>{
-<a name="l00748"></a>00748             <span class="keywordflow">return</span> &operator*();
-<a name="l00749"></a>00749         }
-<a name="l00750"></a>00750     };
-<a name="l00751"></a>00751 
-<a name="l00753"></a><a class="code" href="a00155.html#d827bb5e4f61de1916ab67d51c7c6e60">00753</a>     <a class="code" href="a00155.html">concurrent_hash_map</a>(<span class="keyword">const</span> allocator_type &a = allocator_type())
-<a name="l00754"></a>00754         : internal::hash_map_base(), my_allocator(a)
-<a name="l00755"></a>00755     {}
-<a name="l00756"></a>00756 
-<a name="l00758"></a><a class="code" href="a00155.html#a4612d5c7233712d455496641e9b31ff">00758</a>     <a class="code" href="a00155.html">concurrent_hash_map</a>(size_type n, <span class="keyword">const</span> allocator_type &a = allocator_type())
-<a name="l00759"></a>00759         : my_allocator(a)
-<a name="l00760"></a>00760     {
-<a name="l00761"></a>00761         reserve( n );
-<a name="l00762"></a>00762     }
-<a name="l00763"></a>00763 
-<a name="l00765"></a><a class="code" href="a00155.html#df0cd14eaddb17f10929c91519e65be9">00765</a>     <a class="code" href="a00155.html">concurrent_hash_map</a>( <span class="keyword">const</span> <a class="code" href="a00155.html">concurrent_hash_map</a>& table, <span class="keyword">const</span> allocator_type &a = allocator_type())
-<a name="l00766"></a>00766         : internal::hash_map_base(), my_allocator(a)
-<a name="l00767"></a>00767     {
-<a name="l00768"></a>00768         internal_copy(table);
-<a name="l00769"></a>00769     }
-<a name="l00770"></a>00770 
-<a name="l00772"></a>00772     <span class="keyword">template</span><<span class="keyword">typename</span> I>
-<a name="l00773"></a><a class="code" href="a00155.html#3bfe75fcb350ce39cf610c164f233edc">00773</a>     <a class="code" href="a00155.html">concurrent_hash_map</a>(I first, I last, <span class="keyword">const</span> allocator_type &a = allocator_type())
-<a name="l00774"></a>00774         : my_allocator(a)
-<a name="l00775"></a>00775     {
-<a name="l00776"></a>00776         reserve( std::distance(first, last) ); <span class="comment">// TODO: load_factor?</span>
-<a name="l00777"></a>00777         internal_copy(first, last);
-<a name="l00778"></a>00778     }
-<a name="l00779"></a>00779 
-<a name="l00781"></a><a class="code" href="a00155.html#2c0c42a2e1b5282b6739157df9ce2304">00781</a>     <a class="code" href="a00155.html">concurrent_hash_map</a>& operator=( <span class="keyword">const</span> <a class="code" href="a00155.html">concurrent_hash_map</a>& table ) {
-<a name="l00782"></a>00782         <span class="keywordflow">if</span>( <span class="keyword">this</span>!=&table ) {
-<a name="l00783"></a>00783             clear();
-<a name="l00784"></a>00784             internal_copy(table);
-<a name="l00785"></a>00785         } 
-<a name="l00786"></a>00786         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00787"></a>00787     }
-<a name="l00788"></a>00788 
-<a name="l00789"></a>00789 
-<a name="l00791"></a>00791 
-<a name="l00793"></a>00793     <span class="keywordtype">void</span> rehash(size_type n = 0);
-<a name="l00794"></a>00794     
-<a name="l00796"></a>00796     <span class="keywordtype">void</span> clear();
-<a name="l00797"></a>00797 
-<a name="l00799"></a><a class="code" href="a00155.html#a1ac58997d8fbf242b266e3691573481">00799</a>     ~<a class="code" href="a00155.html">concurrent_hash_map</a>() { clear(); }
-<a name="l00800"></a>00800 
-<a name="l00801"></a>00801     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00802"></a>00802     <span class="comment">// Parallel algorithm support</span>
-<a name="l00803"></a>00803     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00804"></a>00804     range_type range( size_type grainsize=1 ) {
-<a name="l00805"></a>00805         <span class="keywordflow">return</span> range_type( *<span class="keyword">this</span>, grainsize );
-<a name="l00806"></a>00806     }
-<a name="l00807"></a>00807     const_range_type range( size_type grainsize=1 )<span class="keyword"> const </span>{
-<a name="l00808"></a>00808         <span class="keywordflow">return</span> const_range_type( *<span class="keyword">this</span>, grainsize );
-<a name="l00809"></a>00809     }
-<a name="l00810"></a>00810 
-<a name="l00811"></a>00811     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00812"></a>00812     <span class="comment">// STL support - not thread-safe methods</span>
-<a name="l00813"></a>00813     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00814"></a>00814     iterator begin() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>,0,my_embedded_segment,my_embedded_segment->node_list);}
-<a name="l00815"></a>00815     iterator end() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>,0,0,0);}
-<a name="l00816"></a>00816     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="l00817"></a>00817     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="l00818"></a>00818     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="l00819"></a>00819     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="l00820"></a>00820     
-<a name="l00822"></a><a class="code" href="a00155.html#17fd8c5fe8c6a86075f34aa4e8412ba3">00822</a>     size_type size()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_size; }
-<a name="l00823"></a>00823 
-<a name="l00825"></a><a class="code" href="a00155.html#6cab7d029a3e73a653ef0faeac4d1586">00825</a>     <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_size == 0; }
-<a name="l00826"></a>00826 
-<a name="l00828"></a><a class="code" href="a00155.html#1e45d3cbd1e2ae06f365f1b48e0df0b5">00828</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="l00829"></a>00829 
-<a name="l00831"></a><a class="code" href="a00155.html#414d15033d36c63aa3a40666dc4d6f5e">00831</a>     size_type bucket_count()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_mask+1; }
-<a name="l00832"></a>00832 
-<a name="l00834"></a><a class="code" href="a00155.html#199208eed6f09e200cda364f906be0fe">00834</a>     allocator_type get_allocator()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> this->my_allocator; }
-<a name="l00835"></a>00835 
-<a name="l00837"></a>00837     <span class="keywordtype">void</span> swap(<a class="code" href="a00155.html">concurrent_hash_map</a> &table);
-<a name="l00838"></a>00838 
-<a name="l00839"></a>00839     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00840"></a>00840     <span class="comment">// concurrent map operations</span>
-<a name="l00841"></a>00841     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00842"></a>00842 
-<a name="l00844"></a><a class="code" href="a00155.html#74f5ef06a06c5e619f156a1c76c04969">00844</a>     size_type count( <span class="keyword">const</span> Key &key )<span class="keyword"> const </span>{
-<a name="l00845"></a>00845         <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="l00846"></a>00846     }
-<a name="l00847"></a>00847 
-<a name="l00849"></a>00849 
-<a name="l00850"></a><a class="code" href="a00155.html#64338d7f2e35df586af4cb0145cd910f">00850</a>     <span class="keywordtype">bool</span> find( <a class="code" href="a00158.html">const_accessor</a> &result, <span class="keyword">const</span> Key &key )<span class="keyword"> const </span>{
-<a name="l00851"></a>00851         result.<a class="code" href="a00158.html#d5ce4f88d8870290238a8ad621e6f270">release</a>();
-<a name="l00852"></a>00852         <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="l00853"></a>00853     }
-<a name="l00854"></a>00854 
-<a name="l00856"></a>00856 
-<a name="l00857"></a><a class="code" href="a00155.html#bce7bdf46435115a95cca2aa73c5da83">00857</a>     <span class="keywordtype">bool</span> find( <a class="code" href="a00156.html">accessor</a> &result, <span class="keyword">const</span> Key &key ) {
-<a name="l00858"></a>00858         result.<a class="code" href="a00158.html#d5ce4f88d8870290238a8ad621e6f270">release</a>();
-<a name="l00859"></a>00859         <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="l00860"></a>00860     }
-<a name="l00861"></a>00861         
-<a name="l00863"></a>00863 
-<a name="l00864"></a><a class="code" href="a00155.html#58c38b27273de6c670568633c0931854">00864</a>     <span class="keywordtype">bool</span> insert( <a class="code" href="a00158.html">const_accessor</a> &result, <span class="keyword">const</span> Key &key ) {
-<a name="l00865"></a>00865         result.<a class="code" href="a00158.html#d5ce4f88d8870290238a8ad621e6f270">release</a>();
-<a name="l00866"></a>00866         <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="l00867"></a>00867     }
-<a name="l00868"></a>00868 
-<a name="l00870"></a>00870 
-<a name="l00871"></a><a class="code" href="a00155.html#ccfecaa3e71d92be61fb3d811dd264eb">00871</a>     <span class="keywordtype">bool</span> insert( <a class="code" href="a00156.html">accessor</a> &result, <span class="keyword">const</span> Key &key ) {
-<a name="l00872"></a>00872         result.<a class="code" href="a00158.html#d5ce4f88d8870290238a8ad621e6f270">release</a>();
-<a name="l00873"></a>00873         <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="l00874"></a>00874     }
-<a name="l00875"></a>00875 
-<a name="l00877"></a>00877 
-<a name="l00878"></a><a class="code" href="a00155.html#d4a2816129e38c53128c6d0c7b6b7370">00878</a>     <span class="keywordtype">bool</span> insert( <a class="code" href="a00158.html">const_accessor</a> &result, <span class="keyword">const</span> value_type &value ) {
-<a name="l00879"></a>00879         result.<a class="code" href="a00158.html#d5ce4f88d8870290238a8ad621e6f270">release</a>();
-<a name="l00880"></a>00880         <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="l00881"></a>00881     }
-<a name="l00882"></a>00882 
-<a name="l00884"></a>00884 
-<a name="l00885"></a><a class="code" href="a00155.html#a657e61cd2b13164764ca2708875784a">00885</a>     <span class="keywordtype">bool</span> insert( <a class="code" href="a00156.html">accessor</a> &result, <span class="keyword">const</span> value_type &value ) {
-<a name="l00886"></a>00886         result.<a class="code" href="a00158.html#d5ce4f88d8870290238a8ad621e6f270">release</a>();
-<a name="l00887"></a>00887         <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="l00888"></a>00888     }
-<a name="l00889"></a>00889 
-<a name="l00891"></a>00891 
-<a name="l00892"></a><a class="code" href="a00155.html#52bffd1066b3d7b793945bc6fa1a71a1">00892</a>     <span class="keywordtype">bool</span> insert( <span class="keyword">const</span> value_type &value ) {
-<a name="l00893"></a>00893         <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="l00894"></a>00894     }
-<a name="l00895"></a>00895 
-<a name="l00897"></a>00897     <span class="keyword">template</span><<span class="keyword">typename</span> I>
-<a name="l00898"></a><a class="code" href="a00155.html#cfe172677e5987004ef4a03e22fa338a">00898</a>     <span class="keywordtype">void</span> insert(I first, I last) {
-<a name="l00899"></a>00899         <span class="keywordflow">for</span>(; first != last; ++first)
-<a name="l00900"></a>00900             insert( *first );
-<a name="l00901"></a>00901     }
-<a name="l00902"></a>00902 
-<a name="l00904"></a>00904 
-<a name="l00905"></a>00905     <span class="keywordtype">bool</span> erase( <span class="keyword">const</span> Key& key );
-<a name="l00906"></a>00906 
-<a name="l00908"></a>00908 
-<a name="l00909"></a><a class="code" href="a00155.html#da7e4a50f6bb06191817425ec85fe760">00909</a>     <span class="keywordtype">bool</span> erase( <a class="code" href="a00158.html">const_accessor</a>& item_accessor ) {
-<a name="l00910"></a>00910         <span class="keywordflow">return</span> exclude( item_accessor, <span class="comment">/*readonly=*/</span> <span class="keyword">true</span> );
-<a name="l00911"></a>00911     }
-<a name="l00912"></a>00912 
-<a name="l00914"></a>00914 
-<a name="l00915"></a><a class="code" href="a00155.html#0f500842d0cf791f8fa61662edb1b311">00915</a>     <span class="keywordtype">bool</span> erase( <a class="code" href="a00156.html">accessor</a>& item_accessor ) {
-<a name="l00916"></a>00916         <span class="keywordflow">return</span> exclude( item_accessor, <span class="comment">/*readonly=*/</span> <span class="keyword">false</span> );
-<a name="l00917"></a>00917     }
-<a name="l00918"></a>00918 
-<a name="l00919"></a>00919 <span class="keyword">protected</span>:
-<a name="l00921"></a>00921     <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="l00922"></a>00922 
-<a name="l00924"></a>00924     <span class="keywordtype">bool</span> exclude( const_accessor &item_accessor, <span class="keywordtype">bool</span> readonly );
-<a name="l00925"></a>00925 
-<a name="l00927"></a>00927     <span class="keyword">template</span><<span class="keyword">typename</span> I>
-<a name="l00928"></a>00928     std::pair<I, I> internal_equal_range( <span class="keyword">const</span> Key& key, I end ) <span class="keyword">const</span>;
-<a name="l00929"></a>00929 
-<a name="l00931"></a>00931     <span class="keywordtype">void</span> internal_copy( <span class="keyword">const</span> <a class="code" href="a00155.html">concurrent_hash_map</a>& source );
-<a name="l00932"></a>00932 
-<a name="l00933"></a>00933     <span class="keyword">template</span><<span class="keyword">typename</span> I>
-<a name="l00934"></a>00934     <span class="keywordtype">void</span> internal_copy(I first, I last);
-<a name="l00935"></a>00935 
-<a name="l00937"></a>00937 
-<a name="l00939"></a><a class="code" href="a00155.html#2f76ed101a0ccc8875b846c2f747897e">00939</a>     const_pointer internal_fast_find( <span class="keyword">const</span> Key& key )<span class="keyword"> const </span>{
-<a name="l00940"></a>00940         hashcode_t h = my_hash_compare.hash( key );
-<a name="l00941"></a>00941 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l00942"></a>00942 <span class="preprocessor"></span>        hashcode_t m = (hashcode_t) itt_load_pointer_with_acquire_v3( &my_mask );
-<a name="l00943"></a>00943 <span class="preprocessor">#else</span>
-<a name="l00944"></a>00944 <span class="preprocessor"></span>        hashcode_t m = my_mask;
-<a name="l00945"></a>00945 <span class="preprocessor">#endif</span>
-<a name="l00946"></a>00946 <span class="preprocessor"></span>        node *n;
-<a name="l00947"></a>00947     restart:
-<a name="l00948"></a>00948         __TBB_ASSERT((m&(m+1))==0, NULL);
-<a name="l00949"></a>00949         bucket *b = get_bucket( h & m );
-<a name="l00950"></a>00950 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l00951"></a>00951 <span class="preprocessor"></span>        <span class="comment">// TODO: actually, notification is unnecessary here, just hiding double-check</span>
-<a name="l00952"></a>00952         <span class="keywordflow">if</span>( itt_load_pointer_with_acquire_v3(&b->node_list) == internal::rehash_req )
-<a name="l00953"></a>00953 <span class="preprocessor">#else</span>
-<a name="l00954"></a>00954 <span class="preprocessor"></span>        <span class="keywordflow">if</span>( __TBB_load_with_acquire(b->node_list) == internal::rehash_req )
-<a name="l00955"></a>00955 <span class="preprocessor">#endif</span>
-<a name="l00956"></a>00956 <span class="preprocessor"></span>        {
-<a name="l00957"></a>00957             bucket::scoped_t lock;
-<a name="l00958"></a>00958             <span class="keywordflow">if</span>( lock.try_acquire( b->mutex, <span class="comment">/*write=*/</span><span class="keyword">true</span> ) ) {
-<a name="l00959"></a>00959                 <span class="keywordflow">if</span>( b->node_list == internal::rehash_req)
-<a name="l00960"></a>00960                     const_cast<concurrent_hash_map*>(<span class="keyword">this</span>)->rehash_bucket( b, h & m ); <span class="comment">//recursive rehashing</span>
-<a name="l00961"></a>00961             }
-<a name="l00962"></a>00962             <span class="keywordflow">else</span> lock.acquire( b->mutex, <span class="comment">/*write=*/</span><span class="keyword">false</span> );
-<a name="l00963"></a>00963             __TBB_ASSERT(b->node_list!=internal::rehash_req,NULL);
-<a name="l00964"></a>00964         }
-<a name="l00965"></a>00965         n = search_bucket( key, b );
-<a name="l00966"></a>00966         <span class="keywordflow">if</span>( n )
-<a name="l00967"></a>00967             <span class="keywordflow">return</span> &n->item;
-<a name="l00968"></a>00968         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( check_mask_race( h, m ) )
-<a name="l00969"></a>00969             <span class="keywordflow">goto</span> restart;
-<a name="l00970"></a>00970         <span class="keywordflow">return</span> 0;
-<a name="l00971"></a>00971     }
-<a name="l00972"></a>00972 };
-<a name="l00973"></a>00973 
-<a name="l00974"></a>00974 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
-<a name="l00975"></a>00975 <span class="preprocessor"></span>    <span class="comment">// Suppress "conditional expression is constant" warning.</span>
-<a name="l00976"></a>00976 <span class="preprocessor">    #pragma warning( push )</span>
-<a name="l00977"></a>00977 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning( disable: 4127 )</span>
-<a name="l00978"></a>00978 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00979"></a>00979 <span class="preprocessor"></span>
-<a name="l00980"></a>00980 <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="l00981"></a><a class="code" href="a00155.html#1f22480a290ddc6c145888d8f985531a">00981</a> <span class="keywordtype">bool</span> <a class="code" href="a00155.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="a00158.html">const_accessor</a> *result, <span class="keywordtype">bool</span> write ) {
-<a name="l00982"></a>00982     __TBB_ASSERT( !result || !result-><a class="code" href="a00158.html#74e5fd476c306e90361f3377f0fec6d8">my_node</a>, NULL );
-<a name="l00983"></a>00983     segment_index_t grow_segment;
-<a name="l00984"></a>00984     <span class="keywordtype">bool</span> return_value;
-<a name="l00985"></a>00985     node *n, *tmp_n = 0;
-<a name="l00986"></a>00986     hashcode_t <span class="keyword">const</span> h = my_hash_compare.hash( key );
-<a name="l00987"></a>00987 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l00988"></a>00988 <span class="preprocessor"></span>    hashcode_t m = (hashcode_t) itt_load_pointer_with_acquire_v3( &my_mask );
-<a name="l00989"></a>00989 <span class="preprocessor">#else</span>
-<a name="l00990"></a>00990 <span class="preprocessor"></span>    hashcode_t m = my_mask;
-<a name="l00991"></a>00991 <span class="preprocessor">#endif</span>
-<a name="l00992"></a>00992 <span class="preprocessor"></span>    restart:
-<a name="l00993"></a>00993     {<span class="comment">//lock scope</span>
-<a name="l00994"></a>00994         __TBB_ASSERT((m&(m+1))==0, NULL);
-<a name="l00995"></a>00995         return_value = <span class="keyword">false</span>;
-<a name="l00996"></a>00996         <span class="comment">// get bucket</span>
-<a name="l00997"></a>00997         <a class="code" href="a00157.html">bucket_accessor</a> b( <span class="keyword">this</span>, h & m );
-<a name="l00998"></a>00998 
-<a name="l00999"></a>00999         <span class="comment">// find a node</span>
-<a name="l01000"></a>01000         n = search_bucket( key, b() );
-<a name="l01001"></a>01001         <span class="keywordflow">if</span>( op_insert ) {
-<a name="l01002"></a>01002             <span class="comment">// [opt] insert a key</span>
-<a name="l01003"></a>01003             <span class="keywordflow">if</span>( !n ) {
-<a name="l01004"></a>01004                 <span class="keywordflow">if</span>( !tmp_n ) {
-<a name="l01005"></a>01005                     <span class="keywordflow">if</span>(t) tmp_n = <span class="keyword">new</span>( my_allocator ) node(key, *t);
-<a name="l01006"></a>01006                     <span class="keywordflow">else</span>  tmp_n = <span class="keyword">new</span>( my_allocator ) node(key);
-<a name="l01007"></a>01007                 }
-<a name="l01008"></a>01008                 <span class="keywordflow">if</span>( !b.<a class="code" href="a00157.html#fc194e3a186dc935a5fb513cc9f8e898">is_writer</a>() && !b.<a class="code" href="a00157.html#8f7f0dc61f528de29d06e6054b4a9835">upgrade_to_writer</a>() ) { <span class="comment">// TODO: improved insertion</span>
-<a name="l01009"></a>01009                     <span class="comment">// Rerun search_list, in case another thread inserted the item during the upgrade.</span>
-<a name="l01010"></a>01010                     n = search_bucket( key, b() );
-<a name="l01011"></a>01011                     <span class="keywordflow">if</span>( is_valid(n) ) { <span class="comment">// unfortunately, it did</span>
-<a name="l01012"></a>01012                         b.downgrade_to_reader();
-<a name="l01013"></a>01013                         <span class="keywordflow">goto</span> exists;
-<a name="l01014"></a>01014                     }
-<a name="l01015"></a>01015                 }
-<a name="l01016"></a>01016                 <span class="keywordflow">if</span>( check_mask_race(h, m) )
-<a name="l01017"></a>01017                     <span class="keywordflow">goto</span> restart; <span class="comment">// b.release() is done in ~b().</span>
-<a name="l01018"></a>01018                 <span class="comment">// insert and set flag to grow the container</span>
-<a name="l01019"></a>01019                 grow_segment = insert_new_node( b(), n = tmp_n, m );
-<a name="l01020"></a>01020                 tmp_n = 0;
-<a name="l01021"></a>01021                 return_value = <span class="keyword">true</span>;
-<a name="l01022"></a>01022             } <span class="keywordflow">else</span> {
-<a name="l01023"></a>01023     exists:     grow_segment = 0;
-<a name="l01024"></a>01024             }
-<a name="l01025"></a>01025         } <span class="keywordflow">else</span> { <span class="comment">// find or count</span>
-<a name="l01026"></a>01026             <span class="keywordflow">if</span>( !n ) {
-<a name="l01027"></a>01027                 <span class="keywordflow">if</span>( check_mask_race( h, m ) )
-<a name="l01028"></a>01028                     <span class="keywordflow">goto</span> restart; <span class="comment">// b.release() is done in ~b(). TODO: replace by continue</span>
-<a name="l01029"></a>01029                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l01030"></a>01030             }
-<a name="l01031"></a>01031             return_value = <span class="keyword">true</span>;
-<a name="l01032"></a>01032             grow_segment = 0;
-<a name="l01033"></a>01033         }
-<a name="l01034"></a>01034         <span class="keywordflow">if</span>( !result ) <span class="keywordflow">goto</span> check_growth;
-<a name="l01035"></a>01035         <span class="comment">// TODO: the following seems as generic/regular operation</span>
-<a name="l01036"></a>01036         <span class="comment">// acquire the item</span>
-<a name="l01037"></a>01037         <span class="keywordflow">if</span>( !result-><a class="code" href="a00158.html#b57d7e72014cd2ae5a915606410615ce">my_lock</a>.try_acquire( n->mutex, write ) ) {
-<a name="l01038"></a>01038             <span class="comment">// we are unlucky, prepare for longer wait</span>
-<a name="l01039"></a>01039             <a class="code" href="a00144.html">tbb::internal::atomic_backoff</a> trials;
-<a name="l01040"></a>01040             <span class="keywordflow">do</span> {
-<a name="l01041"></a>01041                 <span class="keywordflow">if</span>( !trials.bounded_pause() ) {
-<a name="l01042"></a>01042                     <span class="comment">// the wait takes really long, restart the operation</span>
-<a name="l01043"></a>01043                     b.release();
-<a name="l01044"></a>01044                     __TBB_ASSERT( !op_insert || !return_value, <span class="stringliteral">"Can't acquire new item in locked bucket?"</span> );
-<a name="l01045"></a>01045                     __TBB_Yield();
-<a name="l01046"></a>01046 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l01047"></a>01047 <span class="preprocessor"></span>                    m = (hashcode_t) itt_load_pointer_with_acquire_v3( &my_mask );
-<a name="l01048"></a>01048 <span class="preprocessor">#else</span>
-<a name="l01049"></a>01049 <span class="preprocessor"></span>                    m = my_mask;
-<a name="l01050"></a>01050 <span class="preprocessor">#endif</span>
-<a name="l01051"></a>01051 <span class="preprocessor"></span>                    <span class="keywordflow">goto</span> restart;
-<a name="l01052"></a>01052                 }
-<a name="l01053"></a>01053             } <span class="keywordflow">while</span>( !result-><a class="code" href="a00158.html#b57d7e72014cd2ae5a915606410615ce">my_lock</a>.try_acquire( n->mutex, write ) );
-<a name="l01054"></a>01054         }
-<a name="l01055"></a>01055     }<span class="comment">//lock scope</span>
-<a name="l01056"></a>01056     result-><a class="code" href="a00158.html#74e5fd476c306e90361f3377f0fec6d8">my_node</a> = n;
-<a name="l01057"></a>01057     result-><a class="code" href="a00158.html#88e677d4e26a67d65d81af524ddd483a">my_hash</a> = h;
-<a name="l01058"></a>01058 check_growth:
-<a name="l01059"></a>01059     <span class="comment">// [opt] grow the container</span>
-<a name="l01060"></a>01060     <span class="keywordflow">if</span>( grow_segment )
-<a name="l01061"></a>01061         enable_segment( grow_segment );
-<a name="l01062"></a>01062     <span class="keywordflow">if</span>( tmp_n ) <span class="comment">// if op_insert only</span>
-<a name="l01063"></a>01063         delete_node( tmp_n );
-<a name="l01064"></a>01064     <span class="keywordflow">return</span> return_value;
-<a name="l01065"></a>01065 }
-<a name="l01066"></a>01066 
-<a name="l01067"></a>01067 <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="l01068"></a>01068 <span class="keyword">template</span><<span class="keyword">typename</span> I>
-<a name="l01069"></a><a class="code" href="a00155.html#976c57edfb7f22b9f91a2e11f141eb4a">01069</a> std::pair<I, I> <a class="code" href="a00155.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="l01070"></a>01070     hashcode_t h = my_hash_compare.hash( key );
-<a name="l01071"></a>01071     hashcode_t m = my_mask;
-<a name="l01072"></a>01072     __TBB_ASSERT((m&(m+1))==0, NULL);
-<a name="l01073"></a>01073     h &= m;
-<a name="l01074"></a>01074     bucket *b = get_bucket( h );
-<a name="l01075"></a>01075     <span class="keywordflow">while</span>( b->node_list == internal::rehash_req ) {
-<a name="l01076"></a>01076         m = ( 1u<<__TBB_Log2( h ) ) - 1; <span class="comment">// get parent mask from the topmost bit</span>
-<a name="l01077"></a>01077         b = get_bucket( h &= m );
-<a name="l01078"></a>01078     }
-<a name="l01079"></a>01079     node *n = search_bucket( key, b );
-<a name="l01080"></a>01080     <span class="keywordflow">if</span>( !n )
-<a name="l01081"></a>01081         <span class="keywordflow">return</span> std::make_pair(end_, end_);
-<a name="l01082"></a>01082     iterator lower(*<span class="keyword">this</span>, h, b, n), upper(lower);
-<a name="l01083"></a>01083     <span class="keywordflow">return</span> std::make_pair(lower, ++upper);
-<a name="l01084"></a>01084 }
-<a name="l01085"></a>01085 
-<a name="l01086"></a>01086 <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="l01087"></a><a class="code" href="a00155.html#faad2108bd2be75e52293486af59f11e">01087</a> <span class="keywordtype">bool</span> <a class="code" href="a00155.html">concurrent_hash_map<Key,T,HashCompare,A>::exclude</a>( <a class="code" href="a00158.html">const_accessor</a> &item_accessor, <span class="keywordtype">bool</span> readonly ) {
-<a name="l01088"></a>01088     __TBB_ASSERT( item_accessor.<a class="code" href="a00158.html#74e5fd476c306e90361f3377f0fec6d8">my_node</a>, NULL );
-<a name="l01089"></a>01089     node_base *<span class="keyword">const</span> n = item_accessor.<a class="code" href="a00158.html#74e5fd476c306e90361f3377f0fec6d8">my_node</a>;
-<a name="l01090"></a>01090     item_accessor.<a class="code" href="a00158.html#74e5fd476c306e90361f3377f0fec6d8">my_node</a> = NULL; <span class="comment">// we ought release accessor anyway</span>
-<a name="l01091"></a>01091     hashcode_t <span class="keyword">const</span> h = item_accessor.<a class="code" href="a00158.html#88e677d4e26a67d65d81af524ddd483a">my_hash</a>;
-<a name="l01092"></a>01092 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l01093"></a>01093 <span class="preprocessor"></span>    hashcode_t m = (hashcode_t) itt_load_pointer_with_acquire_v3( &my_mask );
-<a name="l01094"></a>01094 <span class="preprocessor">#else</span>
-<a name="l01095"></a>01095 <span class="preprocessor"></span>    hashcode_t m = my_mask;
-<a name="l01096"></a>01096 <span class="preprocessor">#endif</span>
-<a name="l01097"></a>01097 <span class="preprocessor"></span>    <span class="keywordflow">do</span> {
-<a name="l01098"></a>01098         <span class="comment">// get bucket</span>
-<a name="l01099"></a>01099         <a class="code" href="a00157.html">bucket_accessor</a> b( <span class="keyword">this</span>, h & m, <span class="comment">/*writer=*/</span><span class="keyword">true</span> );
-<a name="l01100"></a>01100         node_base **p = &b()->node_list;
-<a name="l01101"></a>01101         <span class="keywordflow">while</span>( *p && *p != n )
-<a name="l01102"></a>01102             p = &(*p)->next;
-<a name="l01103"></a>01103         <span class="keywordflow">if</span>( !*p ) { <span class="comment">// someone else was the first</span>
-<a name="l01104"></a>01104             <span class="keywordflow">if</span>( check_mask_race( h, m ) )
-<a name="l01105"></a>01105                 <span class="keywordflow">continue</span>;
-<a name="l01106"></a>01106             item_accessor.<a class="code" href="a00158.html#b57d7e72014cd2ae5a915606410615ce">my_lock</a>.release();
-<a name="l01107"></a>01107             <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l01108"></a>01108         }
-<a name="l01109"></a>01109         __TBB_ASSERT( *p == n, NULL );
-<a name="l01110"></a>01110         *p = n->next; <span class="comment">// remove from container</span>
-<a name="l01111"></a>01111         my_size--;
-<a name="l01112"></a>01112         <span class="keywordflow">break</span>;
-<a name="l01113"></a>01113     } <span class="keywordflow">while</span>(<span class="keyword">true</span>);
-<a name="l01114"></a>01114     <span class="keywordflow">if</span>( readonly ) <span class="comment">// need to get exclusive lock</span>
-<a name="l01115"></a>01115         item_accessor.<a class="code" href="a00158.html#b57d7e72014cd2ae5a915606410615ce">my_lock</a>.upgrade_to_writer(); <span class="comment">// return value means nothing here</span>
-<a name="l01116"></a>01116     item_accessor.<a class="code" href="a00158.html#b57d7e72014cd2ae5a915606410615ce">my_lock</a>.release();
-<a name="l01117"></a>01117     delete_node( n ); <span class="comment">// Only one thread can delete it due to write lock on the chain_mutex</span>
-<a name="l01118"></a>01118     <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<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="a00155.html#034c3b3ee419edee78e0f2f2b1f0d7ca">01122</a> <span class="keywordtype">bool</span> <a class="code" href="a00155.html">concurrent_hash_map<Key,T,HashCompare,A>::erase</a>( <span class="keyword">const</span> Key &key ) {
-<a name="l01123"></a>01123     node_base *n;
-<a name="l01124"></a>01124     hashcode_t <span class="keyword">const</span> h = my_hash_compare.hash( key );
-<a name="l01125"></a>01125 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l01126"></a>01126 <span class="preprocessor"></span>    hashcode_t m = (hashcode_t) itt_load_pointer_with_acquire_v3( &my_mask );
-<a name="l01127"></a>01127 <span class="preprocessor">#else</span>
-<a name="l01128"></a>01128 <span class="preprocessor"></span>    hashcode_t m = my_mask;
-<a name="l01129"></a>01129 <span class="preprocessor">#endif</span>
-<a name="l01130"></a>01130 <span class="preprocessor"></span>restart:
-<a name="l01131"></a>01131     {<span class="comment">//lock scope</span>
-<a name="l01132"></a>01132         <span class="comment">// get bucket</span>
-<a name="l01133"></a>01133         <a class="code" href="a00157.html">bucket_accessor</a> b( <span class="keyword">this</span>, h & m );
-<a name="l01134"></a>01134     search:
-<a name="l01135"></a>01135         node_base **p = &b()->node_list;
-<a name="l01136"></a>01136         n = *p;
-<a name="l01137"></a>01137         <span class="keywordflow">while</span>( is_valid(n) && !my_hash_compare.equal(key, static_cast<node*>(n)->item.first ) ) {
-<a name="l01138"></a>01138             p = &n->next;
-<a name="l01139"></a>01139             n = *p;
-<a name="l01140"></a>01140         }
-<a name="l01141"></a>01141         <span class="keywordflow">if</span>( !n ) { <span class="comment">// not found, but mask could be changed</span>
-<a name="l01142"></a>01142             <span class="keywordflow">if</span>( check_mask_race( h, m ) )
-<a name="l01143"></a>01143                 <span class="keywordflow">goto</span> restart;
-<a name="l01144"></a>01144             <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l01145"></a>01145         }
-<a name="l01146"></a>01146         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( !b.<a class="code" href="a00157.html#fc194e3a186dc935a5fb513cc9f8e898">is_writer</a>() && !b.<a class="code" href="a00157.html#8f7f0dc61f528de29d06e6054b4a9835">upgrade_to_writer</a>() ) {
-<a name="l01147"></a>01147             <span class="keywordflow">if</span>( check_mask_race( h, m ) ) <span class="comment">// contended upgrade, check mask</span>
-<a name="l01148"></a>01148                 <span class="keywordflow">goto</span> restart;
-<a name="l01149"></a>01149             <span class="keywordflow">goto</span> search;
-<a name="l01150"></a>01150         }
-<a name="l01151"></a>01151         *p = n->next;
-<a name="l01152"></a>01152         my_size--;
-<a name="l01153"></a>01153     }
-<a name="l01154"></a>01154     {
-<a name="l01155"></a>01155         <span class="keyword">typename</span> node::scoped_t item_locker( n->mutex, <span class="comment">/*write=*/</span><span class="keyword">true</span> );
-<a name="l01156"></a>01156     }
-<a name="l01157"></a>01157     <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="l01158"></a>01158     delete_node( n ); <span class="comment">// Only one thread can delete it due to write lock on the bucket</span>
-<a name="l01159"></a>01159     <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l01160"></a>01160 }
-<a name="l01161"></a>01161 
-<a name="l01162"></a>01162 <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="l01163"></a>01163 <span class="keywordtype">void</span> <a class="code" href="a00155.html">concurrent_hash_map<Key,T,HashCompare,A>::swap</a>(<a class="code" href="a00155.html">concurrent_hash_map<Key,T,HashCompare,A></a> &table) {
-<a name="l01164"></a>01164     std::swap(this->my_allocator, table.<a class="code" href="a00155.html#252e91d8029f6308db7179557e3b1436">my_allocator</a>);
-<a name="l01165"></a>01165     std::swap(this->my_hash_compare, table.<a class="code" href="a00155.html#f738f241c8500ce3dbf0f9028ca8b602">my_hash_compare</a>);
-<a name="l01166"></a>01166     internal_swap(table);
-<a name="l01167"></a>01167 }
-<a name="l01168"></a>01168 
-<a name="l01169"></a>01169 <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="l01170"></a><a class="code" href="a00155.html#13f3f2e8de7564be03882c31559493c9">01170</a> <span class="keywordtype">void</span> <a class="code" href="a00155.html">concurrent_hash_map<Key,T,HashCompare,A>::rehash</a>(size_type sz) {
-<a name="l01171"></a>01171     reserve( sz ); <span class="comment">// TODO: add reduction of number of buckets as well</span>
-<a name="l01172"></a>01172     hashcode_t mask = my_mask;
-<a name="l01173"></a>01173     hashcode_t b = (mask+1)>>1; <span class="comment">// size or first index of the last segment</span>
-<a name="l01174"></a>01174     __TBB_ASSERT((b&(b-1))==0, NULL);
-<a name="l01175"></a>01175     bucket *bp = get_bucket( b ); <span class="comment">// only the last segment should be scanned for rehashing</span>
-<a name="l01176"></a>01176     <span class="keywordflow">for</span>(; b <= mask; b++, bp++ ) {
-<a name="l01177"></a>01177         node_base *n = bp->node_list;
-<a name="l01178"></a>01178         __TBB_ASSERT( is_valid(n) || n == internal::empty_rehashed || n == internal::rehash_req, <span class="stringliteral">"Broken internal structure"</span> );
-<a name="l01179"></a>01179         __TBB_ASSERT( *reinterpret_cast<intptr_t*>(&bp->mutex) == 0, <span class="stringliteral">"concurrent or unexpectedly terminated operation during rehash() execution"</span> );
-<a name="l01180"></a>01180         <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="l01181"></a>01181             hashcode_t h = b; bucket *b_old = bp;
-<a name="l01182"></a>01182             <span class="keywordflow">do</span> {
-<a name="l01183"></a>01183                 __TBB_ASSERT( h > 1, <span class="stringliteral">"The lowermost buckets can't be rehashed"</span> );
-<a name="l01184"></a>01184                 hashcode_t m = ( 1u<<__TBB_Log2( h ) ) - 1; <span class="comment">// get parent mask from the topmost bit</span>
-<a name="l01185"></a>01185                 b_old = get_bucket( h &= m );
-<a name="l01186"></a>01186             } <span class="keywordflow">while</span>( b_old->node_list == internal::rehash_req );
-<a name="l01187"></a>01187             <span class="comment">// now h - is index of the root rehashed bucket b_old</span>
-<a name="l01188"></a>01188             mark_rehashed_levels( h ); <span class="comment">// mark all non-rehashed children recursively across all segments</span>
-<a name="l01189"></a>01189             <span class="keywordflow">for</span>( node_base **p = &b_old->node_list, *q = *p; is_valid(q); q = *p ) {
-<a name="l01190"></a>01190                 hashcode_t c = my_hash_compare.hash( static_cast<node*>(q)->item.first );
-<a name="l01191"></a>01191                 <span class="keywordflow">if</span>( (c & mask) != h ) { <span class="comment">// should be rehashed</span>
-<a name="l01192"></a>01192                     *p = q->next; <span class="comment">// exclude from b_old</span>
-<a name="l01193"></a>01193                     bucket *b_new = get_bucket( c & mask );
-<a name="l01194"></a>01194                     __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="l01195"></a>01195                     add_to_bucket( b_new, q );
-<a name="l01196"></a>01196                 } <span class="keywordflow">else</span> p = &q->next; <span class="comment">// iterate to next item</span>
-<a name="l01197"></a>01197             }
-<a name="l01198"></a>01198         }
-<a name="l01199"></a>01199     }
-<a name="l01200"></a>01200 <span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS</span>
-<a name="l01201"></a>01201 <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="l01202"></a>01202     <span class="keyword">static</span> <span class="keywordtype">bool</span> reported = <span class="keyword">false</span>;
-<a name="l01203"></a>01203 <span class="preprocessor">#endif</span>
-<a name="l01204"></a>01204 <span class="preprocessor"></span><span class="preprocessor">#if TBB_USE_ASSERT || TBB_USE_PERFORMANCE_WARNINGS</span>
-<a name="l01205"></a>01205 <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="l01206"></a>01206         <span class="keywordflow">if</span>( b & (b-2) ) ++bp; <span class="comment">// not the beginning of a segment</span>
-<a name="l01207"></a>01207         <span class="keywordflow">else</span> bp = get_bucket( b );
-<a name="l01208"></a>01208         node_base *n = bp->node_list;
-<a name="l01209"></a>01209         __TBB_ASSERT( *reinterpret_cast<intptr_t*>(&bp->mutex) == 0, <span class="stringliteral">"concurrent or unexpectedly terminated operation during rehash() execution"</span> );
-<a name="l01210"></a>01210         __TBB_ASSERT( is_valid(n) || n == internal::empty_rehashed, <span class="stringliteral">"Broken internal structure"</span> );
-<a name="l01211"></a>01211 <span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS</span>
-<a name="l01212"></a>01212 <span class="preprocessor"></span>        <span class="keywordflow">if</span>( n == internal::empty_rehashed ) empty_buckets++;
-<a name="l01213"></a>01213         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( n->next ) overpopulated_buckets++;
-<a name="l01214"></a>01214 <span class="preprocessor">#endif</span>
-<a name="l01215"></a>01215 <span class="preprocessor"></span><span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l01216"></a>01216 <span class="preprocessor"></span>        <span class="keywordflow">for</span>( ; is_valid(n); n = n->next ) {
-<a name="l01217"></a>01217             hashcode_t h = my_hash_compare.hash( static_cast<node*>(n)->item.first ) & mask;
-<a name="l01218"></a>01218             __TBB_ASSERT( h == b, <span class="stringliteral">"hash() function changed for key in table or internal error"</span> );
-<a name="l01219"></a>01219         }
-<a name="l01220"></a>01220 <span class="preprocessor">#endif</span>
-<a name="l01221"></a>01221 <span class="preprocessor"></span>    }
-<a name="l01222"></a>01222 <span class="preprocessor">#endif // TBB_USE_ASSERT || TBB_USE_PERFORMANCE_WARNINGS</span>
-<a name="l01223"></a>01223 <span class="preprocessor"></span><span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS</span>
-<a name="l01224"></a>01224 <span class="preprocessor"></span>    <span class="keywordflow">if</span>( buckets > current_size) empty_buckets -= buckets - current_size;
-<a name="l01225"></a>01225     <span class="keywordflow">else</span> overpopulated_buckets -= current_size - buckets; <span class="comment">// TODO: load_factor?</span>
-<a name="l01226"></a>01226     <span class="keywordflow">if</span>( !reported && buckets >= 512 && ( 2*empty_buckets > current_size || 2*overpopulated_buckets > current_size ) ) {
-<a name="l01227"></a>01227         tbb::internal::runtime_warning(
-<a name="l01228"></a>01228             <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="l01229"></a>01229             <span class="keyword">typeid</span>(*this).name(), current_size, empty_buckets, overpopulated_buckets );
-<a name="l01230"></a>01230         reported = <span class="keyword">true</span>;
-<a name="l01231"></a>01231     }
-<a name="l01232"></a>01232 <span class="preprocessor">#endif</span>
-<a name="l01233"></a>01233 <span class="preprocessor"></span>}
-<a name="l01234"></a>01234 
-<a name="l01235"></a>01235 <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="l01236"></a><a class="code" href="a00155.html#a9f89be8fe28835749529d91081a2511">01236</a> <span class="keywordtype">void</span> <a class="code" href="a00155.html">concurrent_hash_map<Key,T,HashCompare,A>::clear</a>() {
-<a name="l01237"></a>01237     hashcode_t m = my_mask;
-<a name="l01238"></a>01238     __TBB_ASSERT((m&(m+1))==0, NULL);
-<a name="l01239"></a>01239 <span class="preprocessor">#if TBB_USE_ASSERT || TBB_USE_PERFORMANCE_WARNINGS</span>
-<a name="l01240"></a>01240 <span class="preprocessor"></span><span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS</span>
-<a name="l01241"></a>01241 <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="l01242"></a>01242     <span class="keyword">static</span> <span class="keywordtype">bool</span> reported = <span class="keyword">false</span>;
-<a name="l01243"></a>01243 <span class="preprocessor">#endif</span>
-<a name="l01244"></a>01244 <span class="preprocessor"></span>    bucket *bp = 0;
-<a name="l01245"></a>01245     <span class="comment">// check consistency</span>
-<a name="l01246"></a>01246     <span class="keywordflow">for</span>( segment_index_t b = 0; b <= m; b++ ) {
-<a name="l01247"></a>01247         <span class="keywordflow">if</span>( b & (b-2) ) ++bp; <span class="comment">// not the beginning of a segment</span>
-<a name="l01248"></a>01248         <span class="keywordflow">else</span> bp = get_bucket( b );
-<a name="l01249"></a>01249         node_base *n = bp->node_list;
-<a name="l01250"></a>01250         __TBB_ASSERT( is_valid(n) || n == internal::empty_rehashed || n == internal::rehash_req, <span class="stringliteral">"Broken internal structure"</span> );
-<a name="l01251"></a>01251         __TBB_ASSERT( *reinterpret_cast<intptr_t*>(&bp->mutex) == 0, <span class="stringliteral">"concurrent or unexpectedly terminated operation during clear() execution"</span> );
-<a name="l01252"></a>01252 <span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS</span>
-<a name="l01253"></a>01253 <span class="preprocessor"></span>        <span class="keywordflow">if</span>( n == internal::empty_rehashed ) empty_buckets++;
-<a name="l01254"></a>01254         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( n == internal::rehash_req ) buckets--;
-<a name="l01255"></a>01255         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( n->next ) overpopulated_buckets++;
-<a name="l01256"></a>01256 <span class="preprocessor">#endif</span>
-<a name="l01257"></a>01257 <span class="preprocessor"></span><span class="preprocessor">#if __TBB_EXTRA_DEBUG</span>
-<a name="l01258"></a>01258 <span class="preprocessor"></span>        <span class="keywordflow">for</span>(; is_valid(n); n = n->next ) {
-<a name="l01259"></a>01259             hashcode_t h = my_hash_compare.hash( static_cast<node*>(n)->item.first );
-<a name="l01260"></a>01260             h &= m;
-<a name="l01261"></a>01261             __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="l01262"></a>01262         }
-<a name="l01263"></a>01263 <span class="preprocessor">#endif</span>
-<a name="l01264"></a>01264 <span class="preprocessor"></span>    }
-<a name="l01265"></a>01265 <span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS</span>
-<a name="l01266"></a>01266 <span class="preprocessor"></span>    <span class="keywordflow">if</span>( buckets > current_size) empty_buckets -= buckets - current_size;
-<a name="l01267"></a>01267     <span class="keywordflow">else</span> overpopulated_buckets -= current_size - buckets; <span class="comment">// TODO: load_factor?</span>
-<a name="l01268"></a>01268     <span class="keywordflow">if</span>( !reported && buckets >= 512 && ( 2*empty_buckets > current_size || 2*overpopulated_buckets > current_size ) ) {
-<a name="l01269"></a>01269         tbb::internal::runtime_warning(
-<a name="l01270"></a>01270             <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="l01271"></a>01271             <span class="keyword">typeid</span>(*this).name(), current_size, empty_buckets, overpopulated_buckets );
-<a name="l01272"></a>01272         reported = <span class="keyword">true</span>;
-<a name="l01273"></a>01273     }
-<a name="l01274"></a>01274 <span class="preprocessor">#endif</span>
-<a name="l01275"></a>01275 <span class="preprocessor"></span><span class="preprocessor">#endif//TBB_USE_ASSERT || TBB_USE_PERFORMANCE_WARNINGS</span>
-<a name="l01276"></a>01276 <span class="preprocessor"></span>    my_size = 0;
-<a name="l01277"></a>01277     segment_index_t s = segment_index_of( m );
-<a name="l01278"></a>01278     __TBB_ASSERT( s+1 == pointers_per_table || !my_table[s+1], <span class="stringliteral">"wrong mask or concurrent grow"</span> );
-<a name="l01279"></a>01279     <a class="code" href="a00150.html">cache_aligned_allocator<bucket></a> alloc;
-<a name="l01280"></a>01280     <span class="keywordflow">do</span> {
-<a name="l01281"></a>01281         __TBB_ASSERT( is_valid( my_table[s] ), <span class="stringliteral">"wrong mask or concurrent grow"</span> );
-<a name="l01282"></a>01282         segment_ptr_t buckets_ptr = my_table[s];
-<a name="l01283"></a>01283         size_type sz = segment_size( s ? s : 1 );
-<a name="l01284"></a>01284         <span class="keywordflow">for</span>( segment_index_t i = 0; i < sz; i++ )
-<a name="l01285"></a>01285             <span class="keywordflow">for</span>( node_base *n = buckets_ptr[i].node_list; is_valid(n); n = buckets_ptr[i].node_list ) {
-<a name="l01286"></a>01286                 buckets_ptr[i].node_list = n->next;
-<a name="l01287"></a>01287                 delete_node( n );
-<a name="l01288"></a>01288             }
-<a name="l01289"></a>01289         <span class="keywordflow">if</span>( s >= first_block) <span class="comment">// the first segment or the next</span>
-<a name="l01290"></a>01290             alloc.<a class="code" href="a00150.html#3d4eadf188f7d85d3805ae534e0b8e1c">deallocate</a>( buckets_ptr, sz );
-<a name="l01291"></a>01291         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( s == embedded_block && embedded_block != first_block )
-<a name="l01292"></a>01292             alloc.<a class="code" href="a00150.html#3d4eadf188f7d85d3805ae534e0b8e1c">deallocate</a>( buckets_ptr, segment_size(first_block)-embedded_buckets );
-<a name="l01293"></a>01293         <span class="keywordflow">if</span>( s >= embedded_block ) my_table[s] = 0;
-<a name="l01294"></a>01294     } <span class="keywordflow">while</span>(s-- > 0);
-<a name="l01295"></a>01295     my_mask = embedded_buckets - 1;
-<a name="l01296"></a>01296 }
-<a name="l01297"></a>01297 
-<a name="l01298"></a>01298 <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="l01299"></a><a class="code" href="a00155.html#3c27779fe66b79505390d084310d997e">01299</a> <span class="keywordtype">void</span> <a class="code" href="a00155.html">concurrent_hash_map<Key,T,HashCompare,A>::internal_copy</a>( <span class="keyword">const</span> <a class="code" href="a00155.html">concurrent_hash_map</a>& source ) {
-<a name="l01300"></a>01300     reserve( source.my_size ); <span class="comment">// TODO: load_factor?</span>
-<a name="l01301"></a>01301     hashcode_t mask = source.my_mask;
-<a name="l01302"></a>01302     <span class="keywordflow">if</span>( my_mask == mask ) { <span class="comment">// optimized version</span>
-<a name="l01303"></a>01303         bucket *dst = 0, *src = 0;
-<a name="l01304"></a>01304         <span class="keywordtype">bool</span> rehash_required = <span class="keyword">false</span>;
-<a name="l01305"></a>01305         <span class="keywordflow">for</span>( hashcode_t k = 0; k <= mask; k++ ) {
-<a name="l01306"></a>01306             <span class="keywordflow">if</span>( k & (k-2) ) ++dst,src++; <span class="comment">// not the beginning of a segment</span>
-<a name="l01307"></a>01307             <span class="keywordflow">else</span> { dst = get_bucket( k ); src = source.get_bucket( k ); }
-<a name="l01308"></a>01308             __TBB_ASSERT( dst->node_list != internal::rehash_req, <span class="stringliteral">"Invalid bucket in destination table"</span>);
-<a name="l01309"></a>01309             node *n = static_cast<node*>( src->node_list );
-<a name="l01310"></a>01310             <span class="keywordflow">if</span>( n == internal::rehash_req ) { <span class="comment">// source is not rehashed, items are in previous buckets</span>
-<a name="l01311"></a>01311                 rehash_required = <span class="keyword">true</span>;
-<a name="l01312"></a>01312                 dst->node_list = internal::rehash_req;
-<a name="l01313"></a>01313             } <span class="keywordflow">else</span> <span class="keywordflow">for</span>(; n; n = static_cast<node*>( n->next ) ) {
-<a name="l01314"></a>01314                 add_to_bucket( dst, <span class="keyword">new</span>( my_allocator ) node(n->item.first, n->item.second) );
-<a name="l01315"></a>01315                 ++my_size; <span class="comment">// TODO: replace by non-atomic op</span>
-<a name="l01316"></a>01316             }
-<a name="l01317"></a>01317         }
-<a name="l01318"></a>01318         <span class="keywordflow">if</span>( rehash_required ) <a class="code" href="a00155.html#13f3f2e8de7564be03882c31559493c9">rehash</a>();
-<a name="l01319"></a>01319     } <span class="keywordflow">else</span> <a class="code" href="a00155.html#3c27779fe66b79505390d084310d997e">internal_copy</a>( source.<a class="code" href="a00155.html#4a3c58cf1234b74ca796dcf555d32f53">begin</a>(), source.<a class="code" href="a00155.html#28c690486d8db5783475f5b1a59d21bc">end</a>() );
-<a name="l01320"></a>01320 }
-<a name="l01321"></a>01321 
-<a name="l01322"></a>01322 <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="l01323"></a>01323 <span class="keyword">template</span><<span class="keyword">typename</span> I>
-<a name="l01324"></a>01324 <span class="keywordtype">void</span> <a class="code" href="a00155.html">concurrent_hash_map<Key,T,HashCompare,A>::internal_copy</a>(I first, I last) {
-<a name="l01325"></a>01325     hashcode_t m = my_mask;
-<a name="l01326"></a>01326     <span class="keywordflow">for</span>(; first != last; ++first) {
-<a name="l01327"></a>01327         hashcode_t h = my_hash_compare.hash( first->first );
-<a name="l01328"></a>01328         bucket *b = get_bucket( h & m );
-<a name="l01329"></a>01329         __TBB_ASSERT( b->node_list != internal::rehash_req, <span class="stringliteral">"Invalid bucket in destination table"</span>);
-<a name="l01330"></a>01330         node *n = <span class="keyword">new</span>( my_allocator ) node(first->first, first->second);
-<a name="l01331"></a>01331         add_to_bucket( b, n );
-<a name="l01332"></a>01332         ++my_size; <span class="comment">// TODO: replace by non-atomic op</span>
-<a name="l01333"></a>01333     }
-<a name="l01334"></a>01334 }
-<a name="l01335"></a>01335 
-<a name="l01336"></a>01336 } <span class="comment">// namespace interface4</span>
-<a name="l01337"></a>01337 
-<a name="l01338"></a>01338 <span class="keyword">using</span> interface4::concurrent_hash_map;
-<a name="l01339"></a>01339 
-<a name="l01340"></a>01340 
-<a name="l01341"></a>01341 <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="l01342"></a>01342 <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="l01343"></a>01343     <span class="keywordflow">if</span>(a.size() != b.size()) <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l01344"></a>01344     <span class="keyword">typename</span> concurrent_hash_map<Key, T, HashCompare, A1>::const_iterator i(a.begin()), i_end(a.end());
-<a name="l01345"></a>01345     <span class="keyword">typename</span> concurrent_hash_map<Key, T, HashCompare, A2>::const_iterator j, j_end(b.end());
-<a name="l01346"></a>01346     <span class="keywordflow">for</span>(; i != i_end; ++i) {
-<a name="l01347"></a>01347         j = b.equal_range(i->first).first;
-<a name="l01348"></a>01348         <span class="keywordflow">if</span>( j == j_end || !(i->second == j->second) ) <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l01349"></a>01349     }
-<a name="l01350"></a>01350     <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l01351"></a>01351 }
-<a name="l01352"></a>01352 
-<a name="l01353"></a>01353 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A1, <span class="keyword">typename</span> A2>
-<a name="l01354"></a>01354 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> concurrent_hash_map<Key, T, HashCompare, A1> &a, <span class="keyword">const</span> concurrent_hash_map<Key, T, HashCompare, A2> &b)
-<a name="l01355"></a>01355 {    <span class="keywordflow">return</span> !(a == b); }
-<a name="l01356"></a>01356 
-<a name="l01357"></a>01357 <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="l01358"></a>01358 <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="l01359"></a>01359 {    a.swap( b ); }
-<a name="l01360"></a>01360 
-<a name="l01361"></a>01361 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
-<a name="l01362"></a>01362 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning( pop )</span>
-<a name="l01363"></a>01363 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4127 is back</span>
-<a name="l01364"></a>01364 <span class="preprocessor"></span>
-<a name="l01365"></a>01365 } <span class="comment">// namespace tbb</span>
-<a name="l01366"></a>01366 
-<a name="l01367"></a>01367 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_concurrent_hash_map_H */</span>
-</pre></div><hr>
+<h1>graph.h File Reference</h1>The graph related classes and functions. <a href="#_details">More...</a>
+<p>
+
+<p>
+<a href="a00466.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="a00362.html">tbb</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><b>tbb::internal</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><b>tbb::internal::join_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="a00251.html">tbb::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="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="a00239.html">tbb::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="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="a00282.html">tbb::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="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="a00277.html">tbb::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="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="a00241.html">tbb::continue_receiver</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Base class for receivers of completion messages.  <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="a00250.html">tbb::graph</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The graph class.  <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"><b>tbb::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::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="a00285.html">tbb::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="a00285.html#_details">More...</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::function_node< Input, Output ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Implements a function node that supports Input -> Output.  <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="a00244.html">tbb::executable_node< Output ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Implements an executable node that supports <a class="el" href="a00239.html">continue_msg</a> -> Output.  <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"><b>tbb::overwrite_node< T ></b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>tbb::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="a00240.html">tbb::continue_node</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Broadcasts completion message when it receives completion messages from all predecessors. Then resets.  <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="a00224.html">tbb::broadcast_node< T ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Forwards messages of type T to all successors.  <a href="a00224.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html">tbb::buffer_node< T ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Forwards messages in arbitrary order.  <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"><b>tbb::buffer_node< T >::buffer_operation</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>tbb::buffer_node< T >::my_functor_t</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::queue_node< T ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Forwards messages in FIFO order.  <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="a00283.html">tbb::sequencer_node< T ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Forwards messages in sequence order.  <a href="a00283.html#_details">More...</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::priority_queue_node< T, Compare ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Forwards messages in priority order.  <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="a00255.html">tbb::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="a00255.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><b>tbb::internal::forwarding_base</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><b>tbb::internal::join_helper< N ></b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><b>tbb::internal::join_helper< 1 ></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::internal::two_phase_port< T ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The two-phase join port.  <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"><b>tbb::internal::join_node_FE< two_phase, InputTuple, OutputTuple ></b></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::internal::join_node_base< JP, InputTuple, OutputTuple ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight"><a class="el" href="a00254.html">join_node_base</a>  <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"><b>tbb::internal::unfolded_join_node< 2, OutputTuple, two_phase ></b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>tbb::internal::unfolded_join_node< 3, OutputTuple, two_phase ></b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>tbb::internal::unfolded_join_node< 4, OutputTuple, two_phase ></b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>tbb::internal::unfolded_join_node< 5, OutputTuple, two_phase ></b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>tbb::internal::unfolded_join_node< 6, OutputTuple, two_phase ></b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>tbb::internal::unfolded_join_node< 7, OutputTuple, two_phase ></b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>tbb::internal::unfolded_join_node< 8, OutputTuple, two_phase ></b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>tbb::internal::unfolded_join_node< 9, OutputTuple, two_phase ></b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>tbb::internal::unfolded_join_node< 10, OutputTuple, two_phase ></b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>tbb::join_node< OutputTuple, JP ></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>join_policy</b> { <b>two_phase</b>
+ }</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="0a5a2559e7d28a9bf8f9e5e60d745e86"></a><!-- doxytag: member="graph.h::make_edge" ref="0a5a2559e7d28a9bf8f9e5e60d745e86" 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="a00362.html#0a5a2559e7d28a9bf8f9e5e60d745e86">tbb::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="ac6def751039959ab7ab1e52c8535fd3"></a><!-- doxytag: member="graph.h::make_edges" ref="ac6def751039959ab7ab1e52c8535fd3" args="(sender< T > &p, SIterator s_begin, SIterator s_end)" -->
+template<typename T, typename SIterator> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00362.html#ac6def751039959ab7ab1e52c8535fd3">tbb::make_edges</a> (sender< T > &p, SIterator s_begin, SIterator s_end)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Makes edges between a single predecessor and multiple successors. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="9368d2f689961f790bf7aa4a8cc1135e"></a><!-- doxytag: member="graph.h::make_edges" ref="9368d2f689961f790bf7aa4a8cc1135e" args="(PIterator p_begin, PIterator p_end, receiver< T > &s)" -->
+template<typename T, typename PIterator> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00362.html#9368d2f689961f790bf7aa4a8cc1135e">tbb::make_edges</a> (PIterator p_begin, PIterator p_end, receiver< T > &s)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Makes edges between a set of predecessors and a single successor. <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-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00336.html b/doc/html/a00336.html
deleted file mode 100644
index f0909fc..0000000
--- a/doc/html/a00336.html
+++ /dev/null
@@ -1,365 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>concurrent_queue.h Source File</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li><a href="annotated.html"><span>Classes</span></a></li>
-    <li id="current"><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="files.html"><span>File List</span></a></li>
-    <li><a href="globals.html"><span>File Members</span></a></li>
-  </ul></div>
-<h1>concurrent_queue.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_concurrent_queue_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_concurrent_queue_H</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include "_concurrent_queue_internal.h"</span>
-<a name="l00025"></a>00025 
-<a name="l00026"></a>00026 <span class="keyword">namespace </span>tbb {
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="keyword">namespace </span>strict_ppl {
-<a name="l00029"></a>00029 
-<a name="l00031"></a>00031 
-<a name="l00034"></a>00034 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> A = cache_aligned_allocator<T> > 
-<a name="l00035"></a><a class="code" href="a00159.html">00035</a> <span class="keyword">class </span><a class="code" href="a00159.html">concurrent_queue</a>: <span class="keyword">public</span> internal::concurrent_queue_base_v3<T> {
-<a name="l00036"></a>00036     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value> <span class="keyword">friend</span> <span class="keyword">class </span>internal::concurrent_queue_iterator;
-<a name="l00037"></a>00037 
-<a name="l00039"></a>00039     <span class="keyword">typedef</span> <span class="keyword">typename</span> A::template rebind<char>::other page_allocator_type;
-<a name="l00040"></a>00040     page_allocator_type my_allocator;
-<a name="l00041"></a>00041 
-<a name="l00043"></a>00043     <span class="comment">/*overide*/</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> *allocate_block( size_t n ) {
-<a name="l00044"></a>00044         <span class="keywordtype">void</span> *b = reinterpret_cast<void*>(my_allocator.allocate( n ));
-<a name="l00045"></a>00045         <span class="keywordflow">if</span>( !b )
-<a name="l00046"></a>00046             internal::throw_exception(internal::eid_bad_alloc); 
-<a name="l00047"></a>00047         <span class="keywordflow">return</span> b;
-<a name="l00048"></a>00048     }
-<a name="l00049"></a>00049 
-<a name="l00051"></a>00051     <span class="comment">/*override*/</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate_block( <span class="keywordtype">void</span> *b, size_t n ) {
-<a name="l00052"></a>00052         my_allocator.deallocate( reinterpret_cast<char*>(b), n );
-<a name="l00053"></a>00053     }
-<a name="l00054"></a>00054 
-<a name="l00055"></a>00055 <span class="keyword">public</span>:
-<a name="l00057"></a><a class="code" href="a00159.html#682c3978d5cb0620000994f11c44a476">00057</a>     <span class="keyword">typedef</span> T <a class="code" href="a00159.html#682c3978d5cb0620000994f11c44a476">value_type</a>;
-<a name="l00058"></a>00058 
-<a name="l00060"></a><a class="code" href="a00159.html#a8d725c50a9834bb7af5b67c0aff92b8">00060</a>     <span class="keyword">typedef</span> T& <a class="code" href="a00159.html#a8d725c50a9834bb7af5b67c0aff92b8">reference</a>;
-<a name="l00061"></a>00061 
-<a name="l00063"></a><a class="code" href="a00159.html#4d48e7ff93f81636bca2c74f7da34750">00063</a>     <span class="keyword">typedef</span> <span class="keyword">const</span> T& <a class="code" href="a00159.html#4d48e7ff93f81636bca2c74f7da34750">const_reference</a>;
-<a name="l00064"></a>00064 
-<a name="l00066"></a><a class="code" href="a00159.html#8fc30e93f8342a1960357f71e4fe8a2b">00066</a>     <span class="keyword">typedef</span> size_t <a class="code" href="a00159.html#8fc30e93f8342a1960357f71e4fe8a2b">size_type</a>;
-<a name="l00067"></a>00067 
-<a name="l00069"></a><a class="code" href="a00159.html#068576d16c7e4e05d52f9db7a45b5b65">00069</a>     <span class="keyword">typedef</span> ptrdiff_t <a class="code" href="a00159.html#068576d16c7e4e05d52f9db7a45b5b65">difference_type</a>;
-<a name="l00070"></a>00070 
-<a name="l00072"></a><a class="code" href="a00159.html#5a3956341728eaa558d8827063718cac">00072</a>     <span class="keyword">typedef</span> A <a class="code" href="a00159.html#5a3956341728eaa558d8827063718cac">allocator_type</a>;
-<a name="l00073"></a>00073 
-<a name="l00075"></a><a class="code" href="a00159.html#7c48a05a94a1f4f98fdfadfbef98ecf6">00075</a>     <span class="keyword">explicit</span> <a class="code" href="a00159.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a>(<span class="keyword">const</span> <a class="code" href="a00159.html#5a3956341728eaa558d8827063718cac">allocator_type</a>& a = <a class="code" href="a00159.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="a00159.html#25209656c84f2f9b030e2f9162713341">00082</a>     <a class="code" href="a00159.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a>( InputIterator begin, InputIterator end, <span class="keyword">const</span> <a class="code" href="a00159.html#5a3956341728eaa558d8827063718cac">allocator_type</a>& a = <a class="code" href="a00159.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             internal_push(&*begin);
-<a name="l00087"></a>00087     }
-<a name="l00088"></a>00088     
-<a name="l00090"></a><a class="code" href="a00159.html#8a6b98ea11a867db8ac868f0113ca429">00090</a>     <a class="code" href="a00159.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a>( <span class="keyword">const</span> <a class="code" href="a00159.html">concurrent_queue</a>& src, <span class="keyword">const</span> <a class="code" href="a00159.html#5a3956341728eaa558d8827063718cac">allocator_type</a>& a = <a class="code" href="a00159.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         assign( src );
-<a name="l00094"></a>00094     }
-<a name="l00095"></a>00095     
-<a name="l00097"></a>00097     <a class="code" href="a00159.html#830b33753d6b149c366344e29b2edd8c">~concurrent_queue</a>();
-<a name="l00098"></a>00098 
-<a name="l00100"></a><a class="code" href="a00159.html#73c47563ffcc4c2f6452f25a04ebe2e2">00100</a>     <span class="keywordtype">void</span> <a class="code" href="a00159.html#73c47563ffcc4c2f6452f25a04ebe2e2">push</a>( <span class="keyword">const</span> T& source ) {
-<a name="l00101"></a>00101         internal_push( &source );
-<a name="l00102"></a>00102     }
-<a name="l00103"></a>00103 
-<a name="l00105"></a>00105 
-<a name="l00107"></a><a class="code" href="a00159.html#ae31ca0db34ef96ef1e74aa0d28c95f8">00107</a>     <span class="keywordtype">bool</span> <a class="code" href="a00159.html#ae31ca0db34ef96ef1e74aa0d28c95f8">try_pop</a>( T& result ) {
-<a name="l00108"></a>00108         <span class="keywordflow">return</span> internal_try_pop( &result );
-<a name="l00109"></a>00109     }
-<a name="l00110"></a>00110 
-<a name="l00112"></a><a class="code" href="a00159.html#eaa35a5274606779802e9a669a706260">00112</a>     <a class="code" href="a00159.html#8fc30e93f8342a1960357f71e4fe8a2b">size_type</a> <a class="code" href="a00159.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="a00159.html#f3f6fce0cfa2d581d6f3b47e0613ad64">00115</a>     <span class="keywordtype">bool</span> <a class="code" href="a00159.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="a00159.html#c32e8e84c0524155133b4aae32d2a827">clear</a>() ;
-<a name="l00119"></a>00119 
-<a name="l00121"></a><a class="code" href="a00159.html#f034f70caef445fe8abc9113ec926a8d">00121</a>     <a class="code" href="a00159.html#5a3956341728eaa558d8827063718cac">allocator_type</a> <a class="code" href="a00159.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="a00159.html#830b33753d6b149c366344e29b2edd8c">00136</a> <a class="code" href="a00159.html">concurrent_queue<T,A>::~concurrent_queue</a>() {
-<a name="l00137"></a>00137     <a class="code" href="a00159.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="a00159.html#c32e8e84c0524155133b4aae32d2a827">00142</a> <span class="keywordtype">void</span> <a class="code" href="a00159.html">concurrent_queue<T,A>::clear</a>() {
-<a name="l00143"></a>00143     <span class="keywordflow">while</span>( !<a class="code" href="a00159.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="a00154.html">00158</a> <span class="keyword">class </span><a class="code" href="a00154.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">/*overide*/</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*<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="a00154.html#98245517a931e5893f6601e66c51fc75">00209</a>     <span class="keyword">typedef</span> T <a class="code" href="a00154.html#98245517a931e5893f6601e66c51fc75">value_type</a>;
-<a name="l00210"></a>00210 
-<a name="l00212"></a><a class="code" href="a00154.html#2e2726fccf6d975dc1071608cc0bbf90">00212</a>     <span class="keyword">typedef</span> A <a class="code" href="a00154.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>;
-<a name="l00213"></a>00213 
-<a name="l00215"></a><a class="code" href="a00154.html#dcd44ca6a88c0dc7a847a47a10811f0c">00215</a>     <span class="keyword">typedef</span> T& <a class="code" href="a00154.html#dcd44ca6a88c0dc7a847a47a10811f0c">reference</a>;
-<a name="l00216"></a>00216 
-<a name="l00218"></a><a class="code" href="a00154.html#796713d0b9ba93a4721cbe13e4474068">00218</a>     <span class="keyword">typedef</span> <span class="keyword">const</span> T& <a class="code" href="a00154.html#796713d0b9ba93a4721cbe13e4474068">const_reference</a>;
-<a name="l00219"></a>00219 
-<a name="l00221"></a>00221 
-<a name="l00223"></a><a class="code" href="a00154.html#a80e4c11dbb324e4b92a24a77bbcde68">00223</a>     <span class="keyword">typedef</span> std::ptrdiff_t <a class="code" href="a00154.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a>;
-<a name="l00224"></a>00224 
-<a name="l00226"></a><a class="code" href="a00154.html#4b45c91297e69515d83d5eef85ae1f49">00226</a>     <span class="keyword">typedef</span> std::ptrdiff_t <a class="code" href="a00154.html#4b45c91297e69515d83d5eef85ae1f49">difference_type</a>;
-<a name="l00227"></a>00227 
-<a name="l00229"></a><a class="code" href="a00154.html#e3525226732963ff0f13e89d8e6dab5b">00229</a>     <span class="keyword">explicit</span> <a class="code" href="a00154.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>(<span class="keyword">const</span> <a class="code" href="a00154.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>& a = <a class="code" href="a00154.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="a00154.html#7b7fb414d2eaa8a7f5d68fc4cd63ac50">00235</a>     <a class="code" href="a00154.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>( <span class="keyword">const</span> <a class="code" href="a00154.html">concurrent_bounded_queue</a>& src, <span class="keyword">const</span> <a class="code" href="a00154.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>& a = <a class="code" href="a00154.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="a00154.html#a5e04dcd7db9fd9b583b4e7df832246a">00243</a>     <a class="code" href="a00154.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>( InputIterator begin, InputIterator end, <span class="keyword">const</span> <a class="code" href="a00154.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>& a = <a class="code" href="a00154.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="a00154.html#acaf5b510dc0dfc7780b8c956cf773cf">~concurrent_bounded_queue</a>();
-<a name="l00252"></a>00252 
-<a name="l00254"></a><a class="code" href="a00154.html#ceb08c743b11ba88c878e73fff8af20b">00254</a>     <span class="keywordtype">void</span> <a class="code" href="a00154.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="a00154.html#41f4c6bd7a82ab070e840bbf81b0b123">00260</a>     <span class="keywordtype">void</span> <a class="code" href="a00154.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="a00154.html#2bd6232531279fb3ccbd296bea23066b">00267</a>     <span class="keywordtype">bool</span> <a class="code" href="a00154.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="a00154.html#0ca487019bbb00a196442aff78a1e4f7">00274</a>     <span class="keywordtype">bool</span> <a class="code" href="a00154.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="a00154.html#7dc14d1a579a4cccda9f857585e1768d">00282</a>     <a class="code" href="a00154.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> <a class="code" href="a00154.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="a00154.html#f64924f2ee9225c368a270fc3c394db9">00285</a>     <span class="keywordtype">bool</span> <a class="code" href="a00154.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="a00154.html#b2888b3e4e837d7e03f2c731963a402b">00288</a>     <a class="code" href="a00154.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> <a class="code" href="a00154.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="a00154.html#f3c6c934f85fd02aedbc83a16943193b">00295</a>     <span class="keywordtype">void</span> <a class="code" href="a00154.html#f3c6c934f85fd02aedbc83a16943193b">set_capacity</a>( <a class="code" href="a00154.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="a00154.html#415eb87e53b1c6a266de06ecbc490d16">00300</a>     <a class="code" href="a00154.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> <a class="code" href="a00154.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="a00154.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="a00154.html#acaf5b510dc0dfc7780b8c956cf773cf">00319</a> <a class="code" href="a00154.html">concurrent_bounded_queue<T,A>::~concurrent_bounded_queue</a>() {
-<a name="l00320"></a>00320     <a class="code" href="a00154.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="a00154.html#90b31e2954c6e4596c7900435a5f4bc1">00325</a> <span class="keywordtype">void</span> <a class="code" href="a00154.html">concurrent_bounded_queue<T,A>::clear</a>() {
-<a name="l00326"></a>00326     <span class="keywordflow">while</span>( !<a class="code" href="a00154.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="a00160.html">00341</a> <span class="keyword">class </span><a class="code" href="a00160.html">concurrent_queue</a>: <span class="keyword">public</span> <a class="code" href="a00154.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="a00160.html#aaf19bd7337b72f3131ece60f7315ef7">00348</a>     <span class="keyword">explicit</span> <a class="code" href="a00160.html#aaf19bd7337b72f3131ece60f7315ef7">concurrent_queue</a>(<span class="keyword">const</span> A& a = A()) : 
-<a name="l00349"></a>00349         <a class="code" href="a00154.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="a00160.html#fc092b9082f233482f3513fc3bb670f7">00354</a>     <a class="code" href="a00160.html#aaf19bd7337b72f3131ece60f7315ef7">concurrent_queue</a>( <span class="keyword">const</span> <a class="code" href="a00160.html">concurrent_queue</a>& src, <span class="keyword">const</span> A& a = A()) : 
-<a name="l00355"></a>00355         <a class="code" href="a00154.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="a00160.html#9102b897776bd2d9e908e6604ff16b5f">00361</a>     <a class="code" href="a00160.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="a00154.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="a00160.html#7c45561bafe71107d09b2bc1b8f4e681">00369</a>     <span class="keywordtype">bool</span> <a class="code" href="a00160.html#7c45561bafe71107d09b2bc1b8f4e681">push_if_not_full</a>( <span class="keyword">const</span> T& source ) {
-<a name="l00370"></a>00370         <span class="keywordflow">return</span> <a class="code" href="a00154.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="a00160.html#48da3536245318af6cb5fd58bac78039">00378</a>     <span class="keywordtype">bool</span> <a class="code" href="a00160.html#48da3536245318af6cb5fd58bac78039">pop_if_present</a>( T& destination ) {
-<a name="l00379"></a>00379         <span class="keywordflow">return</span> <a class="code" href="a00154.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="a00154.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="a00154.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>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00337.html b/doc/html/a00337.html
deleted file mode 100644
index 0c97317..0000000
--- a/doc/html/a00337.html
+++ /dev/null
@@ -1,263 +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-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="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 "_concurrent_unordered_internal.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="comment">// Template class for hash compare</span>
-<a name="l00033"></a>00033 <span class="keyword">template</span><<span class="keyword">typename</span> Key>
-<a name="l00034"></a>00034 <span class="keyword">class </span>tbb_hash
-<a name="l00035"></a>00035 {
-<a name="l00036"></a>00036 <span class="keyword">public</span>:
-<a name="l00037"></a>00037     tbb_hash() {}
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039     size_t operator()(<span class="keyword">const</span> Key& key)<span class="keyword"> const</span>
-<a name="l00040"></a>00040 <span class="keyword">    </span>{
-<a name="l00041"></a>00041         <span class="keywordflow">return</span> tbb_hasher(key);
-<a name="l00042"></a>00042     }
-<a name="l00043"></a>00043 };
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 <span class="keyword">namespace </span>interface5 {
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 <span class="comment">// Template class for hash map traits</span>
-<a name="l00048"></a>00048 <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="l00049"></a>00049 <span class="keyword">class </span>concurrent_unordered_map_traits
-<a name="l00050"></a>00050 {
-<a name="l00051"></a>00051 <span class="keyword">protected</span>:
-<a name="l00052"></a>00052     <span class="keyword">typedef</span> std::pair<const Key, T> value_type;
-<a name="l00053"></a>00053     <span class="keyword">typedef</span> Key key_type;
-<a name="l00054"></a>00054     <span class="keyword">typedef</span> Hash_compare hash_compare;
-<a name="l00055"></a>00055     <span class="keyword">typedef</span> <span class="keyword">typename</span> Allocator::template rebind<value_type>::other allocator_type;
-<a name="l00056"></a>00056     <span class="keyword">enum</span> { allow_multimapping = Allow_multimapping };
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058     concurrent_unordered_map_traits() : my_hash_compare() {}
-<a name="l00059"></a>00059     concurrent_unordered_map_traits(<span class="keyword">const</span> hash_compare& hc) : my_hash_compare(hc) {}
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061     <span class="keyword">class </span>value_compare : <span class="keyword">public</span> std::binary_function<value_type, value_type, bool>
-<a name="l00062"></a>00062     {
-<a name="l00063"></a>00063         <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_unordered_map_traits<Key, T, Hash_compare, Allocator, Allow_multimapping>;
-<a name="l00064"></a>00064 
-<a name="l00065"></a>00065     <span class="keyword">public</span>:
-<a name="l00066"></a>00066         <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="l00067"></a>00067 <span class="keyword">        </span>{
-<a name="l00068"></a>00068             <span class="keywordflow">return</span> (my_hash_compare(left.first, right.first));
-<a name="l00069"></a>00069         }
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071         value_compare(<span class="keyword">const</span> hash_compare& comparator) : my_hash_compare(comparator) {}
-<a name="l00072"></a>00072 
-<a name="l00073"></a>00073     <span class="keyword">protected</span>:
-<a name="l00074"></a>00074         hash_compare my_hash_compare;    <span class="comment">// the comparator predicate for keys</span>
-<a name="l00075"></a>00075     };
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077     <span class="keyword">template</span><<span class="keyword">class</span> Type1, <span class="keyword">class</span> Type2>
-<a name="l00078"></a>00078     <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="l00079"></a>00079         <span class="keywordflow">return</span> (value.first);
-<a name="l00080"></a>00080     }
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082     hash_compare my_hash_compare; <span class="comment">// the comparator predicate for keys</span>
-<a name="l00083"></a>00083 };
-<a name="l00084"></a>00084 
-<a name="l00085"></a>00085 <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> Hasher = 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="l00086"></a>00086 <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="l00087"></a>00087 {
-<a name="l00088"></a>00088     <span class="comment">// Base type definitions</span>
-<a name="l00089"></a>00089     <span class="keyword">typedef</span> internal::hash_compare<Key, Hasher, Key_equality> hash_compare;
-<a name="l00090"></a>00090     <span class="keyword">typedef</span> internal::concurrent_unordered_base< concurrent_unordered_map_traits<Key, T, hash_compare, Allocator, false> > base_type;
-<a name="l00091"></a>00091     <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="l00092"></a>00092     <span class="keyword">using</span> traits_type::my_hash_compare;
-<a name="l00093"></a>00093 <span class="preprocessor">#if __TBB_EXTRA_DEBUG</span>
-<a name="l00094"></a>00094 <span class="preprocessor"></span><span class="keyword">public</span>:
-<a name="l00095"></a>00095 <span class="preprocessor">#endif</span>
-<a name="l00096"></a>00096 <span class="preprocessor"></span>    <span class="keyword">using</span> traits_type::allow_multimapping;
-<a name="l00097"></a>00097 <span class="keyword">public</span>:
-<a name="l00098"></a>00098     <span class="keyword">using</span> base_type::end;
-<a name="l00099"></a>00099     <span class="keyword">using</span> base_type::find;
-<a name="l00100"></a>00100     <span class="keyword">using</span> base_type::insert;
-<a name="l00101"></a>00101 
-<a name="l00102"></a>00102     <span class="comment">// Type definitions</span>
-<a name="l00103"></a>00103     <span class="keyword">typedef</span> Key key_type;
-<a name="l00104"></a>00104     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::value_type value_type;
-<a name="l00105"></a>00105     <span class="keyword">typedef</span> T mapped_type;
-<a name="l00106"></a>00106     <span class="keyword">typedef</span> Hasher hasher;
-<a name="l00107"></a>00107     <span class="keyword">typedef</span> Key_equality key_equal;
-<a name="l00108"></a>00108     <span class="keyword">typedef</span> hash_compare key_compare;
-<a name="l00109"></a>00109 
-<a name="l00110"></a>00110     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::allocator_type allocator_type;
-<a name="l00111"></a>00111     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::pointer pointer;
-<a name="l00112"></a>00112     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::const_pointer const_pointer;
-<a name="l00113"></a>00113     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::reference reference;
-<a name="l00114"></a>00114     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::const_reference const_reference;
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::size_type size_type;
-<a name="l00117"></a>00117     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::difference_type difference_type;
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::iterator iterator;
-<a name="l00120"></a>00120     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::const_iterator const_iterator;
-<a name="l00121"></a>00121     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::iterator local_iterator;
-<a name="l00122"></a>00122     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::const_iterator const_local_iterator;
-<a name="l00123"></a>00123 
-<a name="l00124"></a>00124     <span class="comment">// Construction/destruction/copying</span>
-<a name="l00125"></a>00125     <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="l00126"></a>00126         <span class="keyword">const</span> key_equal& a_keyeq = key_equal(), <span class="keyword">const</span> allocator_type& a = allocator_type())
-<a name="l00127"></a>00127         : base_type(n_of_buckets, key_compare(a_hasher, a_keyeq), a)
-<a name="l00128"></a>00128     {
-<a name="l00129"></a>00129     }
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131     concurrent_unordered_map(<span class="keyword">const</span> Allocator& a) : base_type(8, key_compare(), a)
-<a name="l00132"></a>00132     {
-<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> Iterator>
-<a name="l00136"></a>00136     concurrent_unordered_map(Iterator first, Iterator last, size_type n_of_buckets = 8, <span class="keyword">const</span> hasher& a_hasher = hasher(),
-<a name="l00137"></a>00137         <span class="keyword">const</span> key_equal& a_keyeq = key_equal(), <span class="keyword">const</span> allocator_type& a = allocator_type())
-<a name="l00138"></a>00138         : base_type(n_of_buckets, key_compare(a_hasher, a_keyeq), a)
-<a name="l00139"></a>00139     {
-<a name="l00140"></a>00140         <span class="keywordflow">for</span> (; first != last; ++first)
-<a name="l00141"></a>00141             base_type::insert(*first);
-<a name="l00142"></a>00142     }
-<a name="l00143"></a>00143 
-<a name="l00144"></a>00144     concurrent_unordered_map(<span class="keyword">const</span> concurrent_unordered_map& table) : base_type(table)
-<a name="l00145"></a>00145     {
-<a name="l00146"></a>00146     }
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148     concurrent_unordered_map(<span class="keyword">const</span> concurrent_unordered_map& table, <span class="keyword">const</span> Allocator& a)
-<a name="l00149"></a>00149         : base_type(table, a)
-<a name="l00150"></a>00150     {
-<a name="l00151"></a>00151     }
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153     concurrent_unordered_map& operator=(<span class="keyword">const</span> concurrent_unordered_map& table)
-<a name="l00154"></a>00154     {
-<a name="l00155"></a>00155         base_type::operator=(table);
-<a name="l00156"></a>00156         <span class="keywordflow">return</span> (*<span class="keyword">this</span>);
-<a name="l00157"></a>00157     }
-<a name="l00158"></a>00158 
-<a name="l00159"></a>00159     iterator unsafe_erase(const_iterator where)
-<a name="l00160"></a>00160     {
-<a name="l00161"></a>00161         <span class="keywordflow">return</span> base_type::unsafe_erase(where);
-<a name="l00162"></a>00162     }
-<a name="l00163"></a>00163 
-<a name="l00164"></a>00164     size_type unsafe_erase(<span class="keyword">const</span> key_type& key)
-<a name="l00165"></a>00165     {
-<a name="l00166"></a>00166         <span class="keywordflow">return</span> base_type::unsafe_erase(key);
-<a name="l00167"></a>00167     }
-<a name="l00168"></a>00168 
-<a name="l00169"></a>00169     iterator unsafe_erase(const_iterator first, const_iterator last)
-<a name="l00170"></a>00170     {
-<a name="l00171"></a>00171         <span class="keywordflow">return</span> base_type::unsafe_erase(first, last);
-<a name="l00172"></a>00172     }
-<a name="l00173"></a>00173 
-<a name="l00174"></a>00174     <span class="keywordtype">void</span> swap(concurrent_unordered_map& table)
-<a name="l00175"></a>00175     {
-<a name="l00176"></a>00176         base_type::swap(table);
-<a name="l00177"></a>00177     }
-<a name="l00178"></a>00178 
-<a name="l00179"></a>00179     <span class="comment">// Observers</span>
-<a name="l00180"></a>00180     hasher hash_function()<span class="keyword"> const</span>
-<a name="l00181"></a>00181 <span class="keyword">    </span>{
-<a name="l00182"></a>00182         <span class="keywordflow">return</span> my_hash_compare.my_hash_object;
-<a name="l00183"></a>00183     }
-<a name="l00184"></a>00184 
-<a name="l00185"></a>00185     key_equal key_eq()<span class="keyword"> const</span>
-<a name="l00186"></a>00186 <span class="keyword">    </span>{
-<a name="l00187"></a>00187         <span class="keywordflow">return</span> my_hash_compare.my_key_compare_object;
-<a name="l00188"></a>00188     }
-<a name="l00189"></a>00189 
-<a name="l00190"></a>00190     mapped_type& operator[](<span class="keyword">const</span> key_type& key)
-<a name="l00191"></a>00191     {
-<a name="l00192"></a>00192         iterator where = find(key);
-<a name="l00193"></a>00193 
-<a name="l00194"></a>00194         <span class="keywordflow">if</span> (where == end())
-<a name="l00195"></a>00195         {
-<a name="l00196"></a>00196             where = insert(std::pair<key_type, mapped_type>(key, mapped_type())).first;
-<a name="l00197"></a>00197         }
-<a name="l00198"></a>00198 
-<a name="l00199"></a>00199         <span class="keywordflow">return</span> ((*where).second);
-<a name="l00200"></a>00200     }
-<a name="l00201"></a>00201 
-<a name="l00202"></a>00202     mapped_type& at(<span class="keyword">const</span> key_type& key)
-<a name="l00203"></a>00203     {
-<a name="l00204"></a>00204         iterator where = find(key);
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206         <span class="keywordflow">if</span> (where == end())
-<a name="l00207"></a>00207         {
-<a name="l00208"></a>00208             tbb::internal::throw_exception(tbb::internal::eid_invalid_key);
-<a name="l00209"></a>00209         }
-<a name="l00210"></a>00210 
-<a name="l00211"></a>00211         <span class="keywordflow">return</span> ((*where).second);
-<a name="l00212"></a>00212     }
-<a name="l00213"></a>00213 
-<a name="l00214"></a>00214     <span class="keyword">const</span> mapped_type& at(<span class="keyword">const</span> key_type& key)<span class="keyword"> const</span>
-<a name="l00215"></a>00215 <span class="keyword">    </span>{
-<a name="l00216"></a>00216         const_iterator where = find(key);
-<a name="l00217"></a>00217 
-<a name="l00218"></a>00218         <span class="keywordflow">if</span> (where == end())
-<a name="l00219"></a>00219         {
-<a name="l00220"></a>00220             tbb::internal::throw_exception(tbb::internal::eid_invalid_key);
-<a name="l00221"></a>00221         }
-<a name="l00222"></a>00222 
-<a name="l00223"></a>00223         <span class="keywordflow">return</span> ((*where).second);
-<a name="l00224"></a>00224     }
-<a name="l00225"></a>00225 };
-<a name="l00226"></a>00226 
-<a name="l00227"></a>00227 } <span class="comment">// namespace interface5</span>
-<a name="l00228"></a>00228 
-<a name="l00229"></a>00229 <span class="keyword">using</span> interface5::concurrent_unordered_map;
-<a name="l00230"></a>00230 
-<a name="l00231"></a>00231 } <span class="comment">// namespace tbb</span>
-<a name="l00232"></a>00232 
-<a name="l00233"></a>00233 <span class="preprocessor">#endif// __TBB_concurrent_unordered_map_H</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the 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
deleted file mode 100644
index 58dc890..0000000
--- a/doc/html/a00342.html
+++ /dev/null
@@ -1,924 +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-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_concurrent_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 <new></span>
-<a name="l00031"></a>00031 
-<a name="l00032"></a>00032 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
-<a name="l00033"></a>00033 <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="l00034"></a>00034 <span class="preprocessor">    #pragma warning (push)</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4530)</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 <algorithm></span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include <iterator></span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
-<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</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="l00045"></a>00045 <span class="preprocessor">#if _MSC_VER==1500 && !__INTEL_COMPILER</span>
-<a name="l00046"></a>00046 <span class="preprocessor"></span>    <span class="comment">// VS2008/VC9 seems to have an issue; limits pull in math.h</span>
-<a name="l00047"></a>00047 <span class="preprocessor">    #pragma warning( push )</span>
-<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning( disable: 4985 )</span>
-<a name="l00049"></a>00049 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00050"></a>00050 <span class="preprocessor"></span><span class="preprocessor">#include <limits></span> <span class="comment">/* std::numeric_limits */</span>
-<a name="l00051"></a>00051 <span class="preprocessor">#if _MSC_VER==1500 && !__INTEL_COMPILER</span>
-<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning( pop )</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="l00055"></a>00055 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && defined(_Wp64)</span>
-<a name="l00056"></a>00056 <span class="preprocessor"></span>    <span class="comment">// Workaround for overzealous compiler warnings in /Wp64 mode</span>
-<a name="l00057"></a>00057 <span class="preprocessor">    #pragma warning (push)</span>
-<a name="l00058"></a>00058 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4267)</span>
-<a name="l00059"></a>00059 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00060"></a>00060 <span class="preprocessor"></span>
-<a name="l00061"></a>00061 <span class="keyword">namespace </span>tbb {
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A = cache_aligned_allocator<T> >
-<a name="l00064"></a>00064 <span class="keyword">class </span>concurrent_vector;
-<a name="l00065"></a>00065 
-<a name="l00067"></a>00067 <span class="keyword">namespace </span>internal {
-<a name="l00068"></a>00068 
-<a name="l00070"></a>00070     <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="l00071"></a>00071 
-<a name="l00073"></a>00073     <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="l00074"></a>00074 
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077     <span class="keyword">class </span>concurrent_vector_base_v3 {
-<a name="l00078"></a>00078     <span class="keyword">protected</span>:
-<a name="l00079"></a>00079 
-<a name="l00080"></a>00080         <span class="comment">// Basic types declarations</span>
-<a name="l00081"></a>00081         <span class="keyword">typedef</span> size_t segment_index_t;
-<a name="l00082"></a>00082         <span class="keyword">typedef</span> size_t size_type;
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084         <span class="comment">// Using enumerations due to Mac linking problems of static const variables</span>
-<a name="l00085"></a>00085         <span class="keyword">enum</span> {
-<a name="l00086"></a>00086             <span class="comment">// Size constants</span>
-<a name="l00087"></a>00087             default_initial_segments = 1, <span class="comment">// 2 initial items</span>
-<a name="l00089"></a>00089 <span class="comment"></span>            pointers_per_short_table = 3, <span class="comment">// to fit into 8 words of entire structure</span>
-<a name="l00090"></a>00090             pointers_per_long_table = <span class="keyword">sizeof</span>(segment_index_t) * 8 <span class="comment">// one segment per bit</span>
-<a name="l00091"></a>00091         };
-<a name="l00092"></a>00092 
-<a name="l00093"></a>00093         <span class="comment">// Segment pointer. Can be zero-initialized</span>
-<a name="l00094"></a>00094         <span class="keyword">struct </span>segment_t {
-<a name="l00095"></a>00095             <span class="keywordtype">void</span>* array;
-<a name="l00096"></a>00096 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00097"></a>00097 <span class="preprocessor"></span>            ~segment_t() {
-<a name="l00098"></a>00098                 __TBB_ASSERT( array <= internal::vector_allocation_error_flag, <span class="stringliteral">"should have been freed by clear"</span> );
-<a name="l00099"></a>00099             }
-<a name="l00100"></a>00100 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00101"></a>00101         };
-<a name="l00102"></a>00102  
-<a name="l00103"></a>00103         <span class="comment">// Data fields</span>
-<a name="l00104"></a>00104 
-<a name="l00106"></a>00106         <span class="keywordtype">void</span>* (*vector_allocator_ptr)(concurrent_vector_base_v3 &, size_t);
-<a name="l00107"></a>00107 
-<a name="l00109"></a>00109         atomic<size_type> my_first_block;
-<a name="l00110"></a>00110 
-<a name="l00112"></a>00112         atomic<size_type> my_early_size;
-<a name="l00113"></a>00113 
-<a name="l00115"></a>00115         atomic<segment_t*> my_segment;
-<a name="l00116"></a>00116 
-<a name="l00118"></a>00118         segment_t my_storage[pointers_per_short_table];
-<a name="l00119"></a>00119 
-<a name="l00120"></a>00120         <span class="comment">// Methods</span>
-<a name="l00121"></a>00121 
-<a name="l00122"></a>00122         concurrent_vector_base_v3() {
-<a name="l00123"></a>00123             my_early_size = 0;
-<a name="l00124"></a>00124             my_first_block = 0; <span class="comment">// here is not default_initial_segments</span>
-<a name="l00125"></a>00125             <span class="keywordflow">for</span>( segment_index_t i = 0; i < pointers_per_short_table; i++)
-<a name="l00126"></a>00126                 my_storage[i].array = NULL;
-<a name="l00127"></a>00127             my_segment = my_storage;
-<a name="l00128"></a>00128         }
-<a name="l00129"></a>00129         __TBB_EXPORTED_METHOD ~concurrent_vector_base_v3();
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131         <span class="keyword">static</span> segment_index_t segment_index_of( size_type index ) {
-<a name="l00132"></a>00132             <span class="keywordflow">return</span> segment_index_t( __TBB_Log2( index|1 ) );
-<a name="l00133"></a>00133         }
-<a name="l00134"></a>00134 
-<a name="l00135"></a>00135         <span class="keyword">static</span> segment_index_t segment_base( segment_index_t k ) {
-<a name="l00136"></a>00136             <span class="keywordflow">return</span> (segment_index_t(1)<<k & ~segment_index_t(1));
-<a name="l00137"></a>00137         }
-<a name="l00138"></a>00138 
-<a name="l00139"></a>00139         <span class="keyword">static</span> <span class="keyword">inline</span> segment_index_t segment_base_index_of( segment_index_t &index ) {
-<a name="l00140"></a>00140             segment_index_t k = segment_index_of( index );
-<a name="l00141"></a>00141             index -= segment_base(k);
-<a name="l00142"></a>00142             <span class="keywordflow">return</span> k;
-<a name="l00143"></a>00143         }
-<a name="l00144"></a>00144 
-<a name="l00145"></a>00145         <span class="keyword">static</span> size_type segment_size( segment_index_t k ) {
-<a name="l00146"></a>00146             <span class="keywordflow">return</span> segment_index_t(1)<<k; <span class="comment">// fake value for k==0</span>
-<a name="l00147"></a>00147         }
-<a name="l00148"></a>00148 
-<a name="l00150"></a>00150         <span class="keyword">typedef</span> void (__TBB_EXPORTED_FUNC *internal_array_op1)(<span class="keywordtype">void</span>* begin, size_type n );
-<a name="l00151"></a>00151 
-<a name="l00153"></a>00153         <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="l00154"></a>00154 
-<a name="l00156"></a>00156         <span class="keyword">struct </span>internal_segments_table {
-<a name="l00157"></a>00157             segment_index_t first_block;
-<a name="l00158"></a>00158             <span class="keywordtype">void</span>* table[pointers_per_long_table];
-<a name="l00159"></a>00159         };
-<a name="l00160"></a>00160 
-<a name="l00161"></a>00161         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_reserve( size_type n, size_type element_size, size_type max_size );
-<a name="l00162"></a>00162         size_type __TBB_EXPORTED_METHOD internal_capacity() <span class="keyword">const</span>;
-<a name="l00163"></a>00163         <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="l00164"></a>00164         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="l00165"></a>00165         <span class="keywordtype">void</span>* __TBB_EXPORTED_METHOD internal_push_back( size_type element_size, size_type& index );
-<a name="l00166"></a>00166         segment_index_t __TBB_EXPORTED_METHOD internal_clear( internal_array_op1 destroy );
-<a name="l00167"></a>00167         <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="l00168"></a>00168         <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="l00169"></a>00169         <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="l00170"></a>00170                               internal_array_op1 destroy, internal_array_op2 assign, internal_array_op2 copy );
-<a name="l00172"></a>00172         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_throw_exception(size_type) <span class="keyword">const</span>;
-<a name="l00173"></a>00173         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_swap(concurrent_vector_base_v3& v);
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175         <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="l00176"></a>00176                                                     internal_array_op1 destroy, internal_array_op2 init );
-<a name="l00177"></a>00177         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="l00178"></a>00178 
-<a name="l00180"></a>00180         <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="l00181"></a>00181 <span class="keyword">private</span>:
-<a name="l00183"></a>00183         <span class="keyword">class </span>helper;
-<a name="l00184"></a>00184         <span class="keyword">friend</span> <span class="keyword">class </span>helper;
-<a name="l00185"></a>00185     };
-<a name="l00186"></a>00186     
-<a name="l00187"></a>00187     <span class="keyword">typedef</span> concurrent_vector_base_v3 concurrent_vector_base;
-<a name="l00188"></a>00188 
-<a name="l00190"></a>00190 
-<a name="l00192"></a>00192     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
-<a name="l00193"></a>00193     <span class="keyword">class </span>vector_iterator 
-<a name="l00194"></a>00194     {
-<a name="l00196"></a>00196         Container* my_vector;
-<a name="l00197"></a>00197 
-<a name="l00199"></a>00199         size_t my_index;
-<a name="l00200"></a>00200 
-<a name="l00202"></a>00202 
-<a name="l00203"></a>00203         <span class="keyword">mutable</span> Value* my_item;
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205         <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T>
-<a name="l00206"></a>00206         <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="l00207"></a>00207 
-<a name="l00208"></a>00208         <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="l00209"></a>00209         <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="l00210"></a>00210 
-<a name="l00211"></a>00211         <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="l00212"></a>00212         <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="l00213"></a>00213 
-<a name="l00214"></a>00214         <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="l00215"></a>00215         <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="l00216"></a>00216     
-<a name="l00217"></a>00217         <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> U>
-<a name="l00218"></a>00218         <span class="keyword">friend</span> <span class="keyword">class </span>internal::vector_iterator;
-<a name="l00219"></a>00219 
-<a name="l00220"></a>00220 <span class="preprocessor">#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)</span>
-<a name="l00221"></a>00221 <span class="preprocessor"></span>        <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00222"></a>00222         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00161.html">tbb::concurrent_vector</a>;
-<a name="l00223"></a>00223 <span class="preprocessor">#else</span>
-<a name="l00224"></a>00224 <span class="preprocessor"></span><span class="keyword">public</span>: <span class="comment">// workaround for MSVC</span>
-<a name="l00225"></a>00225 <span class="preprocessor">#endif </span>
-<a name="l00226"></a>00226 <span class="preprocessor"></span>
-<a name="l00227"></a>00227         vector_iterator( <span class="keyword">const</span> Container& vector, size_t index, <span class="keywordtype">void</span> *ptr = 0 ) : 
-<a name="l00228"></a>00228             my_vector(const_cast<Container*>(&vector)), 
-<a name="l00229"></a>00229             my_index(index), 
-<a name="l00230"></a>00230             my_item(static_cast<Value*>(ptr))
-<a name="l00231"></a>00231         {}
-<a name="l00232"></a>00232 
-<a name="l00233"></a>00233     <span class="keyword">public</span>:
-<a name="l00235"></a>00235         vector_iterator() : my_vector(NULL), my_index(~size_t(0)), my_item(NULL) {}
-<a name="l00236"></a>00236 
-<a name="l00237"></a>00237         vector_iterator( <span class="keyword">const</span> vector_iterator<Container,typename Container::value_type>& other ) :
-<a name="l00238"></a>00238             my_vector(other.my_vector),
-<a name="l00239"></a>00239             my_index(other.my_index),
-<a name="l00240"></a>00240             my_item(other.my_item)
-<a name="l00241"></a>00241         {}
-<a name="l00242"></a>00242 
-<a name="l00243"></a>00243         vector_iterator operator+( ptrdiff_t offset )<span class="keyword"> const </span>{
-<a name="l00244"></a>00244             <span class="keywordflow">return</span> vector_iterator( *my_vector, my_index+offset );
-<a name="l00245"></a>00245         }
-<a name="l00246"></a>00246         vector_iterator &operator+=( ptrdiff_t offset ) {
-<a name="l00247"></a>00247             my_index+=offset;
-<a name="l00248"></a>00248             my_item = NULL;
-<a name="l00249"></a>00249             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00250"></a>00250         }
-<a name="l00251"></a>00251         vector_iterator operator-( ptrdiff_t offset )<span class="keyword"> const </span>{
-<a name="l00252"></a>00252             <span class="keywordflow">return</span> vector_iterator( *my_vector, my_index-offset );
-<a name="l00253"></a>00253         }
-<a name="l00254"></a>00254         vector_iterator &operator-=( ptrdiff_t offset ) {
-<a name="l00255"></a>00255             my_index-=offset;
-<a name="l00256"></a>00256             my_item = NULL;
-<a name="l00257"></a>00257             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00258"></a>00258         }
-<a name="l00259"></a>00259         Value& operator*()<span class="keyword"> const </span>{
-<a name="l00260"></a>00260             Value* item = my_item;
-<a name="l00261"></a>00261             <span class="keywordflow">if</span>( !item ) {
-<a name="l00262"></a>00262                 item = my_item = &my_vector->internal_subscript(my_index);
-<a name="l00263"></a>00263             }
-<a name="l00264"></a>00264             __TBB_ASSERT( item==&my_vector->internal_subscript(my_index), <span class="stringliteral">"corrupt cache"</span> );
-<a name="l00265"></a>00265             <span class="keywordflow">return</span> *item;
-<a name="l00266"></a>00266         }
-<a name="l00267"></a>00267         Value& <a class="code" href="a00161.html#4c52f2950bb1832886bd4458eb09d7eb">operator[]</a>( ptrdiff_t k )<span class="keyword"> const </span>{
-<a name="l00268"></a>00268             <span class="keywordflow">return</span> my_vector->internal_subscript(my_index+k);
-<a name="l00269"></a>00269         }
-<a name="l00270"></a>00270         Value* operator->()<span class="keyword"> const </span>{<span class="keywordflow">return</span> &operator*();}
-<a name="l00271"></a>00271 
-<a name="l00273"></a>00273         vector_iterator& operator++() {
-<a name="l00274"></a>00274             size_t k = ++my_index;
-<a name="l00275"></a>00275             <span class="keywordflow">if</span>( my_item ) {
-<a name="l00276"></a>00276                 <span class="comment">// Following test uses 2's-complement wizardry</span>
-<a name="l00277"></a>00277                 <span class="keywordflow">if</span>( (k& (k-2))==0 ) {
-<a name="l00278"></a>00278                     <span class="comment">// k is a power of two that is at least k-2</span>
-<a name="l00279"></a>00279                     my_item= NULL;
-<a name="l00280"></a>00280                 } <span class="keywordflow">else</span> {
-<a name="l00281"></a>00281                     ++my_item;
-<a name="l00282"></a>00282                 }
-<a name="l00283"></a>00283             }
-<a name="l00284"></a>00284             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00285"></a>00285         }
-<a name="l00286"></a>00286 
-<a name="l00288"></a>00288         vector_iterator& operator--() {
-<a name="l00289"></a>00289             __TBB_ASSERT( my_index>0, <span class="stringliteral">"operator--() applied to iterator already at beginning of concurrent_vector"</span> ); 
-<a name="l00290"></a>00290             size_t k = my_index--;
-<a name="l00291"></a>00291             <span class="keywordflow">if</span>( my_item ) {
-<a name="l00292"></a>00292                 <span class="comment">// Following test uses 2's-complement wizardry</span>
-<a name="l00293"></a>00293                 <span class="keywordflow">if</span>( (k& (k-2))==0 ) {
-<a name="l00294"></a>00294                     <span class="comment">// k is a power of two that is at least k-2  </span>
-<a name="l00295"></a>00295                     my_item= NULL;
-<a name="l00296"></a>00296                 } <span class="keywordflow">else</span> {
-<a name="l00297"></a>00297                     --my_item;
-<a name="l00298"></a>00298                 }
-<a name="l00299"></a>00299             }
-<a name="l00300"></a>00300             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00301"></a>00301         }
-<a name="l00302"></a>00302 
-<a name="l00304"></a>00304         vector_iterator operator++(<span class="keywordtype">int</span>) {
-<a name="l00305"></a>00305             vector_iterator result = *<span class="keyword">this</span>;
-<a name="l00306"></a>00306             operator++();
-<a name="l00307"></a>00307             <span class="keywordflow">return</span> result;
-<a name="l00308"></a>00308         }
-<a name="l00309"></a>00309 
-<a name="l00311"></a>00311         vector_iterator operator--(<span class="keywordtype">int</span>) {
-<a name="l00312"></a>00312             vector_iterator result = *<span class="keyword">this</span>;
-<a name="l00313"></a>00313             operator--();
-<a name="l00314"></a>00314             <span class="keywordflow">return</span> result;
-<a name="l00315"></a>00315         }
-<a name="l00316"></a>00316 
-<a name="l00317"></a>00317         <span class="comment">// STL support</span>
-<a name="l00318"></a>00318 
-<a name="l00319"></a>00319         <span class="keyword">typedef</span> ptrdiff_t difference_type;
-<a name="l00320"></a>00320         <span class="keyword">typedef</span> Value value_type;
-<a name="l00321"></a>00321         <span class="keyword">typedef</span> Value* pointer;
-<a name="l00322"></a>00322         <span class="keyword">typedef</span> Value& reference;
-<a name="l00323"></a>00323         <span class="keyword">typedef</span> std::random_access_iterator_tag iterator_category;
-<a name="l00324"></a>00324     };
-<a name="l00325"></a>00325 
-<a name="l00326"></a>00326     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T>
-<a name="l00327"></a>00327     vector_iterator<Container,T> operator+( ptrdiff_t offset, <span class="keyword">const</span> vector_iterator<Container,T>& v ) {
-<a name="l00328"></a>00328         <span class="keywordflow">return</span> vector_iterator<Container,T>( *v.my_vector, v.my_index+offset );
-<a name="l00329"></a>00329     }
-<a name="l00330"></a>00330 
-<a name="l00331"></a>00331     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00332"></a>00332     <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> vector_iterator<Container,T>& i, <span class="keyword">const</span> vector_iterator<Container,U>& j ) {
-<a name="l00333"></a>00333         <span class="keywordflow">return</span> i.my_index==j.my_index && i.my_vector == j.my_vector;
-<a name="l00334"></a>00334     }
-<a name="l00335"></a>00335 
-<a name="l00336"></a>00336     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00337"></a>00337     <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> vector_iterator<Container,T>& i, <span class="keyword">const</span> vector_iterator<Container,U>& j ) {
-<a name="l00338"></a>00338         <span class="keywordflow">return</span> !(i==j);
-<a name="l00339"></a>00339     }
-<a name="l00340"></a>00340 
-<a name="l00341"></a>00341     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00342"></a>00342     <span class="keywordtype">bool</span> operator<( const vector_iterator<Container,T>& i, <span class="keyword">const</span> vector_iterator<Container,U>& j ) {
-<a name="l00343"></a>00343         <span class="keywordflow">return</span> i.my_index<j.my_index;
-<a name="l00344"></a>00344     }
-<a name="l00345"></a>00345 
-<a name="l00346"></a>00346     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00347"></a>00347     <span class="keywordtype">bool</span> operator>( <span class="keyword">const</span> vector_iterator<Container,T>& i, <span class="keyword">const</span> vector_iterator<Container,U>& j ) {
-<a name="l00348"></a>00348         <span class="keywordflow">return</span> j<i;
-<a name="l00349"></a>00349     }
-<a name="l00350"></a>00350 
-<a name="l00351"></a>00351     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00352"></a>00352     <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="l00353"></a>00353         <span class="keywordflow">return</span> !(i<j);
-<a name="l00354"></a>00354     }
-<a name="l00355"></a>00355 
-<a name="l00356"></a>00356     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00357"></a>00357     <span class="keywordtype">bool</span> operator<=( const vector_iterator<Container,T>& i, <span class="keyword">const</span> vector_iterator<Container,U>& j ) {
-<a name="l00358"></a>00358         <span class="keywordflow">return</span> !(j<i);
-<a name="l00359"></a>00359     }
-<a name="l00360"></a>00360 
-<a name="l00361"></a>00361     <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="l00362"></a>00362     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="l00363"></a>00363         <span class="keywordflow">return</span> ptrdiff_t(i.my_index)-ptrdiff_t(j.my_index);
-<a name="l00364"></a>00364     }
-<a name="l00365"></a>00365 
-<a name="l00366"></a>00366     <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00367"></a>00367     <span class="keyword">class </span>allocator_base {
-<a name="l00368"></a>00368     <span class="keyword">public</span>:
-<a name="l00369"></a>00369         <span class="keyword">typedef</span> <span class="keyword">typename</span> A::template
-<a name="l00370"></a>00370             rebind<T>::other allocator_type;
-<a name="l00371"></a>00371         allocator_type my_allocator;
-<a name="l00372"></a>00372 
-<a name="l00373"></a>00373         allocator_base(<span class="keyword">const</span> allocator_type &a = allocator_type() ) : my_allocator(a) {}
-<a name="l00374"></a>00374     };
-<a name="l00375"></a>00375 
-<a name="l00376"></a>00376 } <span class="comment">// namespace internal</span>
-<a name="l00378"></a>00378 <span class="comment"></span>
-<a name="l00380"></a>00380 
-<a name="l00441"></a>00441 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00442"></a><a class="code" href="a00161.html">00442</a> <span class="keyword">class </span><a class="code" href="a00161.html">concurrent_vector</a>: <span class="keyword">protected</span> internal::allocator_base<T, A>,
-<a name="l00443"></a>00443                          <span class="keyword">private</span> internal::concurrent_vector_base {
-<a name="l00444"></a>00444 <span class="keyword">private</span>:
-<a name="l00445"></a>00445     <span class="keyword">template</span><<span class="keyword">typename</span> I>
-<a name="l00446"></a>00446     <span class="keyword">class </span>generic_range_type: <span class="keyword">public</span> <a class="code" href="a00147.html">blocked_range</a><I> {
-<a name="l00447"></a>00447     <span class="keyword">public</span>:
-<a name="l00448"></a>00448         <span class="keyword">typedef</span> T value_type;
-<a name="l00449"></a>00449         <span class="keyword">typedef</span> T& reference;
-<a name="l00450"></a>00450         <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
-<a name="l00451"></a>00451         <span class="keyword">typedef</span> I iterator;
-<a name="l00452"></a>00452         <span class="keyword">typedef</span> ptrdiff_t difference_type;
-<a name="l00453"></a>00453         generic_range_type( I begin_, I end_, size_t grainsize_ = 1) : <a class="code" href="a00147.html">blocked_range<I></a>(begin_,end_,grainsize_) {} 
-<a name="l00454"></a>00454         template<typename U>
-<a name="l00455"></a>00455         generic_range_type( <span class="keyword">const</span> generic_range_type<U>& r) : <a class="code" href="a00147.html">blocked_range<I></a>(r.begin(),r.end(),r.grainsize()) {} 
-<a name="l00456"></a>00456         generic_range_type( generic_range_type& r, <a class="code" href="a00198.html">split</a> ) : <a class="code" href="a00147.html">blocked_range<I></a>(r,<a class="code" href="a00198.html">split</a>()) {}
-<a name="l00457"></a>00457     };
-<a name="l00458"></a>00458 
-<a name="l00459"></a>00459     <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> U>
-<a name="l00460"></a>00460     <span class="keyword">friend</span> <span class="keyword">class </span>internal::vector_iterator;
-<a name="l00461"></a>00461 <span class="keyword">public</span>:
-<a name="l00462"></a>00462     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00463"></a>00463     <span class="comment">// STL compatible types</span>
-<a name="l00464"></a>00464     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00465"></a>00465     <span class="keyword">typedef</span> internal::concurrent_vector_base_v3::size_type size_type;
-<a name="l00466"></a>00466     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::allocator_base<T, A>::allocator_type allocator_type;
-<a name="l00467"></a>00467 
-<a name="l00468"></a>00468     <span class="keyword">typedef</span> T value_type;
-<a name="l00469"></a>00469     <span class="keyword">typedef</span> ptrdiff_t difference_type;
-<a name="l00470"></a>00470     <span class="keyword">typedef</span> T& reference;
-<a name="l00471"></a>00471     <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
-<a name="l00472"></a>00472     <span class="keyword">typedef</span> T *pointer;
-<a name="l00473"></a>00473     <span class="keyword">typedef</span> <span class="keyword">const</span> T *const_pointer;
-<a name="l00474"></a>00474 
-<a name="l00475"></a>00475     <span class="keyword">typedef</span> internal::vector_iterator<concurrent_vector,T> iterator;
-<a name="l00476"></a>00476     <span class="keyword">typedef</span> internal::vector_iterator<concurrent_vector,const T> const_iterator;
-<a name="l00477"></a>00477 
-<a name="l00478"></a>00478 <span class="preprocessor">#if !defined(_MSC_VER) || _CPPLIB_VER>=300 </span>
-<a name="l00479"></a>00479 <span class="preprocessor"></span>    <span class="comment">// Assume ISO standard definition of std::reverse_iterator</span>
-<a name="l00480"></a>00480     <span class="keyword">typedef</span> std::reverse_iterator<iterator> reverse_iterator;
-<a name="l00481"></a>00481     <span class="keyword">typedef</span> std::reverse_iterator<const_iterator> const_reverse_iterator;
-<a name="l00482"></a>00482 <span class="preprocessor">#else</span>
-<a name="l00483"></a>00483 <span class="preprocessor"></span>    <span class="comment">// Use non-standard std::reverse_iterator</span>
-<a name="l00484"></a>00484     <span class="keyword">typedef</span> std::reverse_iterator<iterator,T,T&,T*> reverse_iterator;
-<a name="l00485"></a>00485     <span class="keyword">typedef</span> std::reverse_iterator<const_iterator,T,const T&,const T*> const_reverse_iterator;
-<a name="l00486"></a>00486 <span class="preprocessor">#endif </span><span class="comment">/* defined(_MSC_VER) && (_MSC_VER<1300) */</span>
-<a name="l00487"></a>00487 
-<a name="l00488"></a>00488     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00489"></a>00489     <span class="comment">// Parallel algorithm support</span>
-<a name="l00490"></a>00490     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00491"></a>00491     <span class="keyword">typedef</span> generic_range_type<iterator> range_type;
-<a name="l00492"></a>00492     <span class="keyword">typedef</span> generic_range_type<const_iterator> const_range_type;
-<a name="l00493"></a>00493 
-<a name="l00494"></a>00494     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00495"></a>00495     <span class="comment">// STL compatible constructors & destructors</span>
-<a name="l00496"></a>00496     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00497"></a>00497 
-<a name="l00499"></a><a class="code" href="a00161.html#2c8ca9cabfcd30ad5943324c853664b5">00499</a>     <span class="keyword">explicit</span> <a class="code" href="a00161.html">concurrent_vector</a>(<span class="keyword">const</span> allocator_type &a = allocator_type())
-<a name="l00500"></a>00500         : internal::allocator_base<T, A>(a), internal::concurrent_vector_base()
-<a name="l00501"></a>00501     {
-<a name="l00502"></a>00502         vector_allocator_ptr = &internal_allocator;
-<a name="l00503"></a>00503     }
-<a name="l00504"></a>00504 
-<a name="l00506"></a><a class="code" href="a00161.html#dd8a200b99a8088435a37934b58fe335">00506</a>     <a class="code" href="a00161.html">concurrent_vector</a>( <span class="keyword">const</span> <a class="code" href="a00161.html">concurrent_vector</a>& vector, <span class="keyword">const</span> allocator_type& a = allocator_type() )
-<a name="l00507"></a>00507         : internal::allocator_base<T, A>(a), internal::concurrent_vector_base()
-<a name="l00508"></a>00508     {
-<a name="l00509"></a>00509         vector_allocator_ptr = &internal_allocator;
-<a name="l00510"></a>00510         __TBB_TRY {
-<a name="l00511"></a>00511             internal_copy(vector, <span class="keyword">sizeof</span>(T), &copy_array);
-<a name="l00512"></a>00512         } __TBB_CATCH(...) {
-<a name="l00513"></a>00513             segment_t *table = my_segment;
-<a name="l00514"></a>00514             internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
-<a name="l00515"></a>00515             __TBB_RETHROW();
-<a name="l00516"></a>00516         }
-<a name="l00517"></a>00517     }
-<a name="l00518"></a>00518 
-<a name="l00520"></a>00520     <span class="keyword">template</span><<span class="keyword">class</span> M>
-<a name="l00521"></a><a class="code" href="a00161.html#64432f13f7b29bfe4acfb5568f34f3a8">00521</a>     <a class="code" href="a00161.html">concurrent_vector</a>( <span class="keyword">const</span> <a class="code" href="a00161.html">concurrent_vector<T, M></a>& vector, <span class="keyword">const</span> allocator_type& a = allocator_type() )
-<a name="l00522"></a>00522         : internal::allocator_base<T, A>(a), internal::concurrent_vector_base()
-<a name="l00523"></a>00523     {
-<a name="l00524"></a>00524         vector_allocator_ptr = &internal_allocator;
-<a name="l00525"></a>00525         __TBB_TRY {
-<a name="l00526"></a>00526             internal_copy(vector.<a class="code" href="a00161.html#bb5ae659871478f1f5c68039e1273e12">internal_vector_base</a>(), <span class="keyword">sizeof</span>(T), &copy_array);
-<a name="l00527"></a>00527         } __TBB_CATCH(...) {
-<a name="l00528"></a>00528             segment_t *table = my_segment;
-<a name="l00529"></a>00529             internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
-<a name="l00530"></a>00530             __TBB_RETHROW();
-<a name="l00531"></a>00531         }
-<a name="l00532"></a>00532     }
-<a name="l00533"></a>00533 
-<a name="l00535"></a><a class="code" href="a00161.html#2a2e261dfe1cab3f73f7b1a94137cfca">00535</a>     <span class="keyword">explicit</span> <a class="code" href="a00161.html">concurrent_vector</a>(size_type n)
-<a name="l00536"></a>00536     {
-<a name="l00537"></a>00537         vector_allocator_ptr = &internal_allocator;
-<a name="l00538"></a>00538         __TBB_TRY {
-<a name="l00539"></a>00539             internal_resize( n, <span class="keyword">sizeof</span>(T), max_size(), NULL, &destroy_array, &initialize_array );
-<a name="l00540"></a>00540         } __TBB_CATCH(...) {
-<a name="l00541"></a>00541             segment_t *table = my_segment;
-<a name="l00542"></a>00542             internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
-<a name="l00543"></a>00543             __TBB_RETHROW();
-<a name="l00544"></a>00544         }
-<a name="l00545"></a>00545     }
-<a name="l00546"></a>00546 
-<a name="l00548"></a><a class="code" href="a00161.html#3883a8a908b44e249a57f454de3f55d8">00548</a>     <a class="code" href="a00161.html">concurrent_vector</a>(size_type n, const_reference t, <span class="keyword">const</span> allocator_type& a = allocator_type())
-<a name="l00549"></a>00549         : internal::allocator_base<T, A>(a)
-<a name="l00550"></a>00550     {
-<a name="l00551"></a>00551         vector_allocator_ptr = &internal_allocator;
-<a name="l00552"></a>00552         __TBB_TRY {
-<a name="l00553"></a>00553             internal_resize( n, <span class="keyword">sizeof</span>(T), max_size(), static_cast<const void*>(&t), &destroy_array, &initialize_array_by );
-<a name="l00554"></a>00554         } __TBB_CATCH(...) {
-<a name="l00555"></a>00555             segment_t *table = my_segment;
-<a name="l00556"></a>00556             internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
-<a name="l00557"></a>00557             __TBB_RETHROW();
-<a name="l00558"></a>00558         }
-<a name="l00559"></a>00559     }
-<a name="l00560"></a>00560 
-<a name="l00562"></a>00562     <span class="keyword">template</span><<span class="keyword">class</span> I>
-<a name="l00563"></a><a class="code" href="a00161.html#4450de83c5862ea4bcd9443fd7e67419">00563</a>     <a class="code" href="a00161.html">concurrent_vector</a>(I first, I last, <span class="keyword">const</span> allocator_type &a = allocator_type())
-<a name="l00564"></a>00564         : internal::allocator_base<T, A>(a)
-<a name="l00565"></a>00565     {
-<a name="l00566"></a>00566         vector_allocator_ptr = &internal_allocator;
-<a name="l00567"></a>00567         __TBB_TRY {
-<a name="l00568"></a>00568             internal_assign_range(first, last, <span class="keyword">static_cast</span><is_integer_tag<std::numeric_limits<I>::is_integer> *>(0) );
-<a name="l00569"></a>00569         } __TBB_CATCH(...) {
-<a name="l00570"></a>00570             segment_t *table = my_segment;
-<a name="l00571"></a>00571             internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
-<a name="l00572"></a>00572             __TBB_RETHROW();
-<a name="l00573"></a>00573         }
-<a name="l00574"></a>00574     }
-<a name="l00575"></a>00575 
-<a name="l00577"></a><a class="code" href="a00161.html#691f0f3cda3e489c37a657016e375eaf">00577</a>     <a class="code" href="a00161.html">concurrent_vector</a>& operator=( <span class="keyword">const</span> <a class="code" href="a00161.html">concurrent_vector</a>& vector ) {
-<a name="l00578"></a>00578         <span class="keywordflow">if</span>( <span class="keyword">this</span> != &vector )
-<a name="l00579"></a>00579             internal_assign(vector, <span class="keyword">sizeof</span>(T), &destroy_array, &assign_array, &copy_array);
-<a name="l00580"></a>00580         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00581"></a>00581     }
-<a name="l00582"></a>00582 
-<a name="l00584"></a>00584     <span class="keyword">template</span><<span class="keyword">class</span> M>
-<a name="l00585"></a><a class="code" href="a00161.html#19f4ab88a01b0fd056af3bba463e7bd6">00585</a>     <a class="code" href="a00161.html">concurrent_vector</a>& operator=( <span class="keyword">const</span> <a class="code" href="a00161.html">concurrent_vector<T, M></a>& vector ) {
-<a name="l00586"></a>00586         <span class="keywordflow">if</span>( static_cast<void*>( <span class="keyword">this</span> ) != static_cast<const void*>( &vector ) )
-<a name="l00587"></a>00587             internal_assign(vector.internal_vector_base(),
-<a name="l00588"></a>00588                 <span class="keyword">sizeof</span>(T), &destroy_array, &assign_array, &copy_array);
-<a name="l00589"></a>00589         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00590"></a>00590     }
-<a name="l00591"></a>00591 
-<a name="l00592"></a>00592     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00593"></a>00593     <span class="comment">// Concurrent operations</span>
-<a name="l00594"></a>00594     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00596"></a>00596 <span class="comment"></span><span class="preprocessor">#if TBB_DEPRECATED</span>
-<a name="l00597"></a>00597 <span class="preprocessor"></span>
-<a name="l00598"></a><a class="code" href="a00161.html#30484e3959892fd5392fa93c873c31f0">00598</a>     size_type grow_by( size_type delta ) {
-<a name="l00599"></a>00599         <span class="keywordflow">return</span> delta ? internal_grow_by( delta, <span class="keyword">sizeof</span>(T), &initialize_array, NULL ) : my_early_size;
-<a name="l00600"></a>00600     }
-<a name="l00601"></a>00601 <span class="preprocessor">#else</span>
-<a name="l00602"></a>00602 <span class="preprocessor"></span>
-<a name="l00603"></a><a class="code" href="a00161.html#c8177b1865270ea68aa1ab9148e5e35e">00603</a>     iterator grow_by( size_type delta ) {
-<a name="l00604"></a>00604         <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="l00605"></a>00605     }
-<a name="l00606"></a>00606 <span class="preprocessor">#endif</span>
-<a name="l00607"></a>00607 <span class="preprocessor"></span>
-<a name="l00609"></a>00609 <span class="preprocessor">#if TBB_DEPRECATED</span>
-<a name="l00610"></a>00610 <span class="preprocessor"></span>
-<a name="l00611"></a><a class="code" href="a00161.html#38274ab3f772ecba600c7daca7690102">00611</a>     size_type grow_by( size_type delta, const_reference t ) {
-<a name="l00612"></a>00612         <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="l00613"></a>00613     }
-<a name="l00614"></a>00614 <span class="preprocessor">#else</span>
-<a name="l00615"></a>00615 <span class="preprocessor"></span>
-<a name="l00616"></a><a class="code" href="a00161.html#473a59a4c9308b93411b898b3110d26c">00616</a>     iterator grow_by( size_type delta, const_reference t ) {
-<a name="l00617"></a>00617         <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="l00618"></a>00618     }
-<a name="l00619"></a>00619 <span class="preprocessor">#endif</span>
-<a name="l00620"></a>00620 <span class="preprocessor"></span>
-<a name="l00622"></a>00622 <span class="preprocessor">#if TBB_DEPRECATED</span>
-<a name="l00623"></a>00623 <span class="preprocessor"></span>
-<a name="l00625"></a><a class="code" href="a00161.html#47fe588214dd5fa06ab6e8ab78d83874">00625</a>     <span class="keywordtype">void</span> grow_to_at_least( size_type n ) {
-<a name="l00626"></a>00626         <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="l00627"></a>00627     };
-<a name="l00628"></a>00628 <span class="preprocessor">#else</span>
-<a name="l00629"></a>00629 <span class="preprocessor"></span>
-<a name="l00633"></a><a class="code" href="a00161.html#a7e3b67c8ccab16d0aecc80899ae799d">00633</a>     iterator grow_to_at_least( size_type n ) {
-<a name="l00634"></a>00634         size_type m=0;
-<a name="l00635"></a>00635         <span class="keywordflow">if</span>( n ) {
-<a name="l00636"></a>00636             m = internal_grow_to_at_least_with_result( n, <span class="keyword">sizeof</span>(T), &initialize_array, NULL );
-<a name="l00637"></a>00637             <span class="keywordflow">if</span>( m>n ) m=n;
-<a name="l00638"></a>00638         }
-<a name="l00639"></a>00639         <span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>, m);
-<a name="l00640"></a>00640     };
-<a name="l00641"></a>00641 <span class="preprocessor">#endif</span>
-<a name="l00642"></a>00642 <span class="preprocessor"></span>
-<a name="l00644"></a>00644 <span class="preprocessor">#if TBB_DEPRECATED</span>
-<a name="l00645"></a><a class="code" href="a00161.html#e94e038f915c0268fdf2d3d7f87d81b8">00645</a> <span class="preprocessor"></span>    size_type push_back( const_reference item )
-<a name="l00646"></a>00646 <span class="preprocessor">#else</span>
-<a name="l00647"></a>00647 <span class="preprocessor"></span>
-<a name="l00648"></a>00648     iterator push_back( const_reference item )
-<a name="l00649"></a>00649 <span class="preprocessor">#endif</span>
-<a name="l00650"></a>00650 <span class="preprocessor"></span>    {
-<a name="l00651"></a>00651         size_type k;
-<a name="l00652"></a>00652         <span class="keywordtype">void</span> *ptr = internal_push_back(<span class="keyword">sizeof</span>(T),k);
-<a name="l00653"></a>00653         internal_loop_guide loop(1, ptr);
-<a name="l00654"></a>00654         loop.init(&item);
-<a name="l00655"></a>00655 <span class="preprocessor">#if TBB_DEPRECATED</span>
-<a name="l00656"></a>00656 <span class="preprocessor"></span>        <span class="keywordflow">return</span> k;
-<a name="l00657"></a>00657 <span class="preprocessor">#else</span>
-<a name="l00658"></a>00658 <span class="preprocessor"></span>        <span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>, k, ptr);
-<a name="l00659"></a>00659 <span class="preprocessor">#endif</span>
-<a name="l00660"></a>00660 <span class="preprocessor"></span>    }
-<a name="l00661"></a>00661 
-<a name="l00663"></a>00663 
-<a name="l00665"></a><a class="code" href="a00161.html#4c52f2950bb1832886bd4458eb09d7eb">00665</a>     reference operator[]( size_type index ) {
-<a name="l00666"></a>00666         <span class="keywordflow">return</span> internal_subscript(index);
-<a name="l00667"></a>00667     }
-<a name="l00668"></a>00668 
-<a name="l00670"></a><a class="code" href="a00161.html#c6fade5c732cc95274d1d8277ea619d1">00670</a>     const_reference operator[]( size_type index )<span class="keyword"> const </span>{
-<a name="l00671"></a>00671         <span class="keywordflow">return</span> internal_subscript(index);
-<a name="l00672"></a>00672     }
-<a name="l00673"></a>00673 
-<a name="l00675"></a><a class="code" href="a00161.html#0c073ca43e787c7cbf7b0e26d2221748">00675</a>     reference at( size_type index ) {
-<a name="l00676"></a>00676         <span class="keywordflow">return</span> internal_subscript_with_exceptions(index);
-<a name="l00677"></a>00677     }
-<a name="l00678"></a>00678 
-<a name="l00680"></a><a class="code" href="a00161.html#23e14a38af748edff96a7adc3a0f1c58">00680</a>     const_reference at( size_type index )<span class="keyword"> const </span>{
-<a name="l00681"></a>00681         <span class="keywordflow">return</span> internal_subscript_with_exceptions(index);
-<a name="l00682"></a>00682     }
-<a name="l00683"></a>00683 
-<a name="l00685"></a><a class="code" href="a00161.html#a4c6ffff3bf08b92939aa2fc516edfba">00685</a>     range_type range( size_t grainsize = 1) {
-<a name="l00686"></a>00686         <span class="keywordflow">return</span> range_type( begin(), end(), grainsize );
-<a name="l00687"></a>00687     }
-<a name="l00688"></a>00688 
-<a name="l00690"></a><a class="code" href="a00161.html#3d09ccfb581b879ae64203741035e193">00690</a>     const_range_type range( size_t grainsize = 1 )<span class="keyword"> const </span>{
-<a name="l00691"></a>00691         <span class="keywordflow">return</span> const_range_type( begin(), end(), grainsize );
-<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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.html#5e220926d09236d98f04fe0721e5f9a1">00754</a>     reverse_iterator rbegin() {<span class="keywordflow">return</span> reverse_iterator(end());}
-<a name="l00756"></a><a class="code" href="a00161.html#290119a4eb43cd6a9e98fa17016ba3c2">00756</a>     reverse_iterator rend() {<span class="keywordflow">return</span> reverse_iterator(begin());}
-<a name="l00758"></a><a class="code" href="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.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="a00161.html#96c9c4bd968ed3edb8dd276854d2dae0">00801</a>     <span class="keywordtype">void</span> swap(<a class="code" href="a00161.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="a00161.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="a00161.html#da2444b28bb840d38f60d0030333a5fc">00815</a>     ~<a class="code" href="a00161.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 zerroing 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="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00894"></a><a class="code" href="a00161.html#03c6f4cf66532bf4cc907ee738a9a186">00894</a> <span class="keywordtype">void</span> <a class="code" href="a00161.html">concurrent_vector<T, A>::shrink_to_fit</a>() {
-<a name="l00895"></a>00895     internal_segments_table old;
-<a name="l00896"></a>00896     __TBB_TRY {
-<a name="l00897"></a>00897         <span class="keywordflow">if</span>( internal_compact( <span class="keyword">sizeof</span>(T), &old, &destroy_array, &copy_array ) )
-<a name="l00898"></a>00898             internal_free_segments( old.table, pointers_per_long_table, old.first_block ); <span class="comment">// free joined and unnecessary segments</span>
-<a name="l00899"></a>00899     } __TBB_CATCH(...) {
-<a name="l00900"></a>00900         <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="l00901"></a>00901             internal_free_segments( old.table, 1, old.first_block );
-<a name="l00902"></a>00902         __TBB_RETHROW();
-<a name="l00903"></a>00903     }
-<a name="l00904"></a>00904 }
-<a name="l00905"></a>00905 
-<a name="l00906"></a>00906 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00907"></a>00907 <span class="keywordtype">void</span> <a class="code" href="a00161.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="l00908"></a>00908     <span class="comment">// Free the arrays</span>
-<a name="l00909"></a>00909     <span class="keywordflow">while</span>( k > first_block ) {
-<a name="l00910"></a>00910         --k;
-<a name="l00911"></a>00911         T* array = static_cast<T*>(table[k]);
-<a name="l00912"></a>00912         table[k] = NULL;
-<a name="l00913"></a>00913         <span class="keywordflow">if</span>( array > internal::vector_allocation_error_flag ) <span class="comment">// check for correct segment pointer</span>
-<a name="l00914"></a>00914             this->my_allocator.deallocate( array, segment_size(k) );
-<a name="l00915"></a>00915     }
-<a name="l00916"></a>00916     T* array = static_cast<T*>(table[0]);
-<a name="l00917"></a>00917     <span class="keywordflow">if</span>( array > internal::vector_allocation_error_flag ) {
-<a name="l00918"></a>00918         __TBB_ASSERT( first_block > 0, NULL );
-<a name="l00919"></a>00919         <span class="keywordflow">while</span>(k > 0) table[--k] = NULL;
-<a name="l00920"></a>00920         this->my_allocator.deallocate( array, segment_size(first_block) );
-<a name="l00921"></a>00921     }
-<a name="l00922"></a>00922 }
-<a name="l00923"></a>00923 
-<a name="l00924"></a>00924 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00925"></a>00925 T& concurrent_vector<T, A>::internal_subscript( size_type index )<span class="keyword"> const </span>{
-<a name="l00926"></a>00926     __TBB_ASSERT( index < my_early_size, <span class="stringliteral">"index out of bounds"</span> );
-<a name="l00927"></a>00927     size_type j = index;
-<a name="l00928"></a>00928     segment_index_t k = segment_base_index_of( j );
-<a name="l00929"></a>00929     __TBB_ASSERT( (segment_t*)my_segment != my_storage || k < pointers_per_short_table, <span class="stringliteral">"index is being allocated"</span> );
-<a name="l00930"></a>00930     <span class="comment">// no need in __TBB_load_with_acquire since thread works in own space or gets </span>
-<a name="l00931"></a>00931 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l00932"></a>00932 <span class="preprocessor"></span>    T* array = static_cast<T*>( tbb::internal::itt_load_pointer_v3(&my_segment[k].array));
-<a name="l00933"></a>00933 <span class="preprocessor">#else</span>
-<a name="l00934"></a>00934 <span class="preprocessor"></span>    T* array = static_cast<T*>(my_segment[k].array);
-<a name="l00935"></a>00935 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS */</span>
-<a name="l00936"></a>00936     __TBB_ASSERT( array != internal::vector_allocation_error_flag, <span class="stringliteral">"the instance is broken by bad allocation. Use at() instead"</span> );
-<a name="l00937"></a>00937     __TBB_ASSERT( array, <span class="stringliteral">"index is being allocated"</span> );
-<a name="l00938"></a>00938     <span class="keywordflow">return</span> array[j];
-<a name="l00939"></a>00939 }
-<a name="l00940"></a>00940 
-<a name="l00941"></a>00941 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00942"></a>00942 T& concurrent_vector<T, A>::internal_subscript_with_exceptions( size_type index )<span class="keyword"> const </span>{
-<a name="l00943"></a>00943     <span class="keywordflow">if</span>( index >= my_early_size )
-<a name="l00944"></a>00944         internal::throw_exception(internal::eid_out_of_range); <span class="comment">// throw std::out_of_range</span>
-<a name="l00945"></a>00945     size_type j = index;
-<a name="l00946"></a>00946     segment_index_t k = segment_base_index_of( j );
-<a name="l00947"></a>00947     <span class="keywordflow">if</span>( (segment_t*)my_segment == my_storage && k >= pointers_per_short_table )
-<a name="l00948"></a>00948         internal::throw_exception(internal::eid_segment_range_error); <span class="comment">// throw std::range_error</span>
-<a name="l00949"></a>00949     <span class="keywordtype">void</span> *array = my_segment[k].array; <span class="comment">// no need in __TBB_load_with_acquire</span>
-<a name="l00950"></a>00950     <span class="keywordflow">if</span>( array <= internal::vector_allocation_error_flag ) <span class="comment">// check for correct segment pointer</span>
-<a name="l00951"></a>00951         internal::throw_exception(internal::eid_index_range_error); <span class="comment">// throw std::range_error</span>
-<a name="l00952"></a>00952     <span class="keywordflow">return</span> static_cast<T*>(array)[j];
-<a name="l00953"></a>00953 }
-<a name="l00954"></a>00954 
-<a name="l00955"></a>00955 <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="l00956"></a>00956 <span class="keywordtype">void</span> concurrent_vector<T, A>::internal_assign_iterators(I first, I last) {
-<a name="l00957"></a>00957     __TBB_ASSERT(my_early_size == 0, NULL);
-<a name="l00958"></a>00958     size_type n = std::distance(first, last);
-<a name="l00959"></a>00959     <span class="keywordflow">if</span>( !n ) <span class="keywordflow">return</span>;
-<a name="l00960"></a>00960     internal_reserve(n, <span class="keyword">sizeof</span>(T), <a class="code" href="a00161.html#2c248a017f0576df3e7cd99627836fd6">max_size</a>());
-<a name="l00961"></a>00961     my_early_size = n;
-<a name="l00962"></a>00962     segment_index_t k = 0;
-<a name="l00963"></a>00963     size_type sz = segment_size( my_first_block );
-<a name="l00964"></a>00964     <span class="keywordflow">while</span>( sz < n ) {
-<a name="l00965"></a>00965         internal_loop_guide loop(sz, my_segment[k].array);
-<a name="l00966"></a>00966         loop.iterate(first);
-<a name="l00967"></a>00967         n -= sz;
-<a name="l00968"></a>00968         <span class="keywordflow">if</span>( !k ) k = my_first_block;
-<a name="l00969"></a>00969         <span class="keywordflow">else</span> { ++k; sz <<= 1; }
-<a name="l00970"></a>00970     }
-<a name="l00971"></a>00971     internal_loop_guide loop(n, my_segment[k].array);
-<a name="l00972"></a>00972     loop.iterate(first);
-<a name="l00973"></a>00973 }
-<a name="l00974"></a>00974 
-<a name="l00975"></a>00975 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00976"></a>00976 <span class="keywordtype">void</span> concurrent_vector<T, A>::initialize_array( <span class="keywordtype">void</span>* begin, <span class="keyword">const</span> <span class="keywordtype">void</span> *, size_type n ) {
-<a name="l00977"></a>00977     internal_loop_guide loop(n, begin); loop.init();
-<a name="l00978"></a>00978 }
-<a name="l00979"></a>00979 
-<a name="l00980"></a>00980 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00981"></a>00981 <span class="keywordtype">void</span> concurrent_vector<T, A>::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="l00982"></a>00982     internal_loop_guide loop(n, begin); loop.init(src);
-<a name="l00983"></a>00983 }
-<a name="l00984"></a>00984 
-<a name="l00985"></a>00985 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00986"></a>00986 <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="l00987"></a>00987     internal_loop_guide loop(n, dst); loop.copy(src);
-<a name="l00988"></a>00988 }
-<a name="l00989"></a>00989 
-<a name="l00990"></a>00990 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00991"></a>00991 <span class="keywordtype">void</span> concurrent_vector<T, A>::assign_array( <span class="keywordtype">void</span>* dst, <span class="keyword">const</span> <span class="keywordtype">void</span>* src, size_type n ) {
-<a name="l00992"></a>00992     internal_loop_guide loop(n, dst); loop.assign(src);
-<a name="l00993"></a>00993 }
-<a name="l00994"></a>00994 
-<a name="l00995"></a>00995 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) </span>
-<a name="l00996"></a>00996 <span class="preprocessor"></span>    <span class="comment">// Workaround for overzealous compiler warning</span>
-<a name="l00997"></a>00997 <span class="preprocessor">    #pragma warning (push)</span>
-<a name="l00998"></a>00998 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4189)</span>
-<a name="l00999"></a>00999 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l01000"></a>01000 <span class="preprocessor"></span><span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l01001"></a>01001 <span class="keywordtype">void</span> concurrent_vector<T, A>::destroy_array( <span class="keywordtype">void</span>* begin, size_type n ) {
-<a name="l01002"></a>01002     T* array = static_cast<T*>(begin);
-<a name="l01003"></a>01003     <span class="keywordflow">for</span>( size_type j=n; j>0; --j )
-<a name="l01004"></a>01004         array[j-1].~T(); <span class="comment">// destructors are supposed to not throw any exceptions</span>
-<a name="l01005"></a>01005 }
-<a name="l01006"></a>01006 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) </span>
-<a name="l01007"></a>01007 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
-<a name="l01008"></a>01008 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4189 is back </span>
-<a name="l01009"></a>01009 <span class="preprocessor"></span>
-<a name="l01010"></a>01010 <span class="comment">// concurrent_vector's template functions</span>
-<a name="l01011"></a>01011 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A1, <span class="keyword">class</span> A2>
-<a name="l01012"></a>01012 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> concurrent_vector<T, A1> &a, <span class="keyword">const</span> concurrent_vector<T, A2> &b) {
-<a name="l01013"></a>01013     <span class="comment">// Simply:    return a.size() == b.size() && std::equal(a.begin(), a.end(), b.begin());</span>
-<a name="l01014"></a>01014     <span class="keywordflow">if</span>(a.size() != b.size()) <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l01015"></a>01015     <span class="keyword">typename</span> concurrent_vector<T, A1>::const_iterator i(a.begin());
-<a name="l01016"></a>01016     <span class="keyword">typename</span> concurrent_vector<T, A2>::const_iterator j(b.begin());
-<a name="l01017"></a>01017     <span class="keywordflow">for</span>(; i != a.end(); ++i, ++j)
-<a name="l01018"></a>01018         <span class="keywordflow">if</span>( !(*i == *j) ) <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l01019"></a>01019     <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l01020"></a>01020 }
-<a name="l01021"></a>01021 
-<a name="l01022"></a>01022 <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="l01023"></a>01023 <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="l01024"></a>01024 {    <span class="keywordflow">return</span> !(a == b); }
-<a name="l01025"></a>01025 
-<a name="l01026"></a>01026 <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="l01027"></a>01027 <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="l01028"></a>01028 {    <span class="keywordflow">return</span> (std::lexicographical_compare(a.begin(), a.end(), b.begin(), b.end())); }
-<a name="l01029"></a>01029 
-<a name="l01030"></a>01030 <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="l01031"></a>01031 <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="l01032"></a>01032 {    <span class="keywordflow">return</span> b < a; }
-<a name="l01033"></a>01033 
-<a name="l01034"></a>01034 <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="l01035"></a>01035 <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="l01036"></a>01036 {    <span class="keywordflow">return</span> !(b < a); }
-<a name="l01037"></a>01037 
-<a name="l01038"></a>01038 <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="l01039"></a>01039 <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="l01040"></a>01040 {    <span class="keywordflow">return</span> !(a < b); }
-<a name="l01041"></a>01041 
-<a name="l01042"></a>01042 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l01043"></a>01043 <span class="keyword">inline</span> <span class="keywordtype">void</span> swap(concurrent_vector<T, A> &a, concurrent_vector<T, A> &b)
-<a name="l01044"></a>01044 {    a.swap( b ); }
-<a name="l01045"></a>01045 
-<a name="l01046"></a>01046 } <span class="comment">// namespace tbb</span>
-<a name="l01047"></a>01047 
-<a name="l01048"></a>01048 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && defined(_Wp64)</span>
-<a name="l01049"></a>01049 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
-<a name="l01050"></a>01050 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4267 is back</span>
-<a name="l01051"></a>01051 <span class="preprocessor"></span>
-<a name="l01052"></a>01052 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_concurrent_vector_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00344.html b/doc/html/a00344.html
new file mode 100644
index 0000000..78dbf54
--- /dev/null
+++ b/doc/html/a00344.html
@@ -0,0 +1,77 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>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="a00564.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="a00362.html">tbb</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00280.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="a00280.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="a00281.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="a00281.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><b>tbb::scalable_allocator< void >::rebind< U ></b></td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void *__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00373.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="a00373.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="a00373.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="a00373.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="a00373.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="a00373.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="a00373.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="a00373.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="a00373.html#g0965ce1b4b7835f92869c7fd867265f7">scalable_msize</a> (void *ptr)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="906ebb461ecb0446989739fd0399e4b8"></a><!-- doxytag: member="scalable_allocator.h::operator==" ref="906ebb461ecb0446989739fd0399e4b8" args="(const scalable_allocator< T > &, const scalable_allocator< U > &)" -->
+template<typename T, typename U> </td></tr>
+<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/a00351.html b/doc/html/a00351.html
deleted file mode 100644
index 2d7dbf7..0000000
--- a/doc/html/a00351.html
+++ /dev/null
@@ -1,163 +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>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-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef _TBB_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 <windows.h></span>
-<a name="l00026"></a>00026 <span class="preprocessor">#else</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#include <pthread.h></span>
-<a name="l00028"></a>00028 <span class="preprocessor">#include <errno.h></span>
-<a name="l00029"></a>00029 <span class="preprocessor">#endif  // _WIN32||WIN64</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include "tbb_stddef.h"</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include "tbb_thread.h"</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "tbb_exception.h"</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#include "tbb_profiling.h"</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="keyword">namespace </span>tbb {
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039     <span class="keyword">namespace </span>internal {
-<a name="l00040"></a>00040 <span class="keyword">class </span>critical_section_v4 : internal::no_copy {
-<a name="l00041"></a>00041 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00042"></a>00042 <span class="preprocessor"></span>    CRITICAL_SECTION my_impl;
-<a name="l00043"></a>00043 <span class="preprocessor">#else</span>
-<a name="l00044"></a>00044 <span class="preprocessor"></span>    pthread_mutex_t my_impl;
-<a name="l00045"></a>00045 <span class="preprocessor">#endif</span>
-<a name="l00046"></a>00046 <span class="preprocessor"></span>    tbb_thread::id my_tid;
-<a name="l00047"></a>00047 <span class="keyword">public</span>:
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct();
-<a name="l00050"></a>00050 
-<a name="l00051"></a>00051     critical_section_v4() { 
-<a name="l00052"></a>00052 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00053"></a>00053 <span class="preprocessor"></span>        InitializeCriticalSection(&my_impl);
-<a name="l00054"></a>00054 <span class="preprocessor">#else</span>
-<a name="l00055"></a>00055 <span class="preprocessor"></span>        pthread_mutex_init(&my_impl, NULL);
-<a name="l00056"></a>00056 <span class="preprocessor">#endif</span>
-<a name="l00057"></a>00057 <span class="preprocessor"></span>        internal_construct();
-<a name="l00058"></a>00058     }
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060     ~critical_section_v4() {
-<a name="l00061"></a>00061         __TBB_ASSERT(my_tid == tbb_thread::id(), <span class="stringliteral">"Destroying a still-held critical section"</span>);
-<a name="l00062"></a>00062 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00063"></a>00063 <span class="preprocessor"></span>        DeleteCriticalSection(&my_impl); 
-<a name="l00064"></a>00064 <span class="preprocessor">#else</span>
-<a name="l00065"></a>00065 <span class="preprocessor"></span>        pthread_mutex_destroy(&my_impl);
-<a name="l00066"></a>00066 <span class="preprocessor">#endif</span>
-<a name="l00067"></a>00067 <span class="preprocessor"></span>    }
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069     <span class="keyword">class </span>scoped_lock : internal::no_copy {
-<a name="l00070"></a>00070     <span class="keyword">private</span>:
-<a name="l00071"></a>00071         critical_section_v4 &my_crit;
-<a name="l00072"></a>00072     <span class="keyword">public</span>:
-<a name="l00073"></a>00073         scoped_lock( critical_section_v4& lock_me) :my_crit(lock_me) {
-<a name="l00074"></a>00074             my_crit.lock();
-<a name="l00075"></a>00075         }
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077         ~scoped_lock() {
-<a name="l00078"></a>00078             my_crit.unlock();
-<a name="l00079"></a>00079         }
-<a name="l00080"></a>00080     };
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082     <span class="keywordtype">void</span> lock() { 
-<a name="l00083"></a>00083         tbb_thread::id local_tid = this_tbb_thread::get_id();
-<a name="l00084"></a>00084         <span class="keywordflow">if</span>(local_tid == my_tid) throw_exception( eid_improper_lock );
-<a name="l00085"></a>00085 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00086"></a>00086 <span class="preprocessor"></span>        EnterCriticalSection( &my_impl );
-<a name="l00087"></a>00087 <span class="preprocessor">#else</span>
-<a name="l00088"></a>00088 <span class="preprocessor"></span>        <span class="keywordtype">int</span> rval = pthread_mutex_lock(&my_impl);
-<a name="l00089"></a>00089         __TBB_ASSERT_EX(!rval, <span class="stringliteral">"critical_section::lock: pthread_mutex_lock failed"</span>);
-<a name="l00090"></a>00090 <span class="preprocessor">#endif</span>
-<a name="l00091"></a>00091 <span class="preprocessor"></span>        __TBB_ASSERT(my_tid == tbb_thread::id(), NULL);
-<a name="l00092"></a>00092         my_tid = local_tid;
-<a name="l00093"></a>00093     }
-<a name="l00094"></a>00094 
-<a name="l00095"></a>00095     <span class="keywordtype">bool</span> try_lock() {
-<a name="l00096"></a>00096         <span class="keywordtype">bool</span> gotlock;
-<a name="l00097"></a>00097         tbb_thread::id local_tid = this_tbb_thread::get_id();
-<a name="l00098"></a>00098         <span class="keywordflow">if</span>(local_tid == my_tid) <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00099"></a>00099 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00100"></a>00100 <span class="preprocessor"></span>        gotlock = TryEnterCriticalSection( &my_impl ) != 0;
-<a name="l00101"></a>00101 <span class="preprocessor">#else</span>
-<a name="l00102"></a>00102 <span class="preprocessor"></span>        <span class="keywordtype">int</span> rval = pthread_mutex_trylock(&my_impl);
-<a name="l00103"></a>00103         <span class="comment">// valid returns are 0 (locked) and [EBUSY]</span>
-<a name="l00104"></a>00104         __TBB_ASSERT(rval == 0 || rval == EBUSY, <span class="stringliteral">"critical_section::trylock: pthread_mutex_trylock failed"</span>);
-<a name="l00105"></a>00105         gotlock = rval == 0;
-<a name="l00106"></a>00106 <span class="preprocessor">#endif</span>
-<a name="l00107"></a>00107 <span class="preprocessor"></span>        <span class="keywordflow">if</span>(gotlock)  {
-<a name="l00108"></a>00108             my_tid = local_tid;
-<a name="l00109"></a>00109         }
-<a name="l00110"></a>00110         <span class="keywordflow">return</span> gotlock;
-<a name="l00111"></a>00111     }
-<a name="l00112"></a>00112 
-<a name="l00113"></a>00113     <span class="keywordtype">void</span> unlock() {
-<a name="l00114"></a>00114         __TBB_ASSERT(this_tbb_thread::get_id() == my_tid, <span class="stringliteral">"thread unlocking critical_section is not thread that locked it"</span>);
-<a name="l00115"></a>00115         my_tid = tbb_thread::id();
-<a name="l00116"></a>00116 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00117"></a>00117 <span class="preprocessor"></span>        LeaveCriticalSection( &my_impl );
-<a name="l00118"></a>00118 <span class="preprocessor">#else</span>
-<a name="l00119"></a>00119 <span class="preprocessor"></span>        <span class="keywordtype">int</span> rval = pthread_mutex_unlock(&my_impl);
-<a name="l00120"></a>00120         __TBB_ASSERT_EX(!rval, <span class="stringliteral">"critical_section::unlock: pthread_mutex_unlock failed"</span>);
-<a name="l00121"></a>00121 <span class="preprocessor">#endif</span>
-<a name="l00122"></a>00122 <span class="preprocessor"></span>    }
-<a name="l00123"></a>00123 
-<a name="l00124"></a>00124     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_rw_mutex = <span class="keyword">false</span>;
-<a name="l00125"></a>00125     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_recursive_mutex = <span class="keyword">false</span>;
-<a name="l00126"></a>00126     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_fair_mutex = <span class="keyword">true</span>;
-<a name="l00127"></a>00127 }; <span class="comment">// critical_section_v4</span>
-<a name="l00128"></a>00128 } <span class="comment">// namespace internal</span>
-<a name="l00129"></a>00129 <span class="keyword">typedef</span> internal::critical_section_v4 critical_section;
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131 __TBB_DEFINE_PROFILING_SET_NAME(critical_section)
-<a name="l00132"></a>00132 } <span class="comment">// namespace tbb</span>
-<a name="l00133"></a>00133 <span class="preprocessor">#endif  // _TBB_CRITICAL_SECTION_H_</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the 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
deleted file mode 100644
index 7d4ccc5..0000000
--- a/doc/html/a00354.html
+++ /dev/null
@@ -1,970 +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>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-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_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 "cache_aligned_allocator.h"</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include "aligned_space.h"</span>
-<a name="l00028"></a>00028 <span class="preprocessor">#if __SUNPRO_CC</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <string.h></span>  <span class="comment">// for memcpy</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#include <windows.h></span>
-<a name="l00034"></a>00034 <span class="preprocessor">#else</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">#include <pthread.h></span>
-<a name="l00036"></a>00036 <span class="preprocessor">#endif</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span>
-<a name="l00038"></a>00038 <span class="keyword">namespace </span>tbb {
-<a name="l00039"></a>00039 
-<a name="l00041"></a><a class="code" href="a00267.html#a8622ae61b7e7737dac26542e181178e">00041</a> <span class="keyword">enum</span> <a class="code" href="a00267.html#a8622ae61b7e7737dac26542e181178e">ets_key_usage_type</a> { ets_key_per_instance, ets_no_key };
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="keyword">namespace </span>interface6 {
-<a name="l00044"></a>00044  
-<a name="l00046"></a>00046     <span class="keyword">namespace </span>internal { 
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048         <span class="keyword">template</span><ets_key_usage_type ETS_key_type>
-<a name="l00049"></a>00049         <span class="keyword">class </span>ets_base: tbb::internal::no_copy {
-<a name="l00050"></a>00050         <span class="keyword">protected</span>:
-<a name="l00051"></a>00051 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00052"></a>00052 <span class="preprocessor"></span>            <span class="keyword">typedef</span> DWORD key_type;
-<a name="l00053"></a>00053 <span class="preprocessor">#else</span>
-<a name="l00054"></a>00054 <span class="preprocessor"></span>            <span class="keyword">typedef</span> pthread_t key_type;
-<a name="l00055"></a>00055 <span class="preprocessor">#endif</span>
-<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="preprocessor">#if __TBB_GCC_3_3_PROTECTED_BROKEN</span>
-<a name="l00057"></a>00057 <span class="preprocessor"></span>        <span class="keyword">public</span>:
-<a name="l00058"></a>00058 <span class="preprocessor">#endif</span>
-<a name="l00059"></a>00059 <span class="preprocessor"></span>            <span class="keyword">struct </span>slot;
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061             <span class="keyword">struct </span>array {
-<a name="l00062"></a>00062                 array* next;
-<a name="l00063"></a>00063                 size_t lg_size;
-<a name="l00064"></a>00064                 slot& at( size_t k ) {
-<a name="l00065"></a>00065                     <span class="keywordflow">return</span> ((slot*)(<span class="keywordtype">void</span>*)(<span class="keyword">this</span>+1))[k];
-<a name="l00066"></a>00066                 }
-<a name="l00067"></a>00067                 size_t size()<span class="keyword"> const </span>{<span class="keywordflow">return</span> (size_t)1<<lg_size;}
-<a name="l00068"></a>00068                 size_t mask()<span class="keyword"> const </span>{<span class="keywordflow">return</span> size()-1;}
-<a name="l00069"></a>00069                 size_t start( size_t h )<span class="keyword"> const </span>{
-<a name="l00070"></a>00070                     <span class="keywordflow">return</span> h>>(8*<span class="keyword">sizeof</span>(size_t)-lg_size);
-<a name="l00071"></a>00071                 }
-<a name="l00072"></a>00072             };
-<a name="l00073"></a>00073             <span class="keyword">struct </span>slot {
-<a name="l00074"></a>00074                 key_type key;
-<a name="l00075"></a>00075                 <span class="keywordtype">void</span>* ptr;
-<a name="l00076"></a>00076                 <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !key;}
-<a name="l00077"></a>00077                 <span class="keywordtype">bool</span> match( key_type k )<span class="keyword"> const </span>{<span class="keywordflow">return</span> key==k;}
-<a name="l00078"></a>00078                 <span class="keywordtype">bool</span> claim( key_type k ) {
-<a name="l00079"></a>00079                     __TBB_ASSERT(<span class="keyword">sizeof</span>(<a class="code" href="a00142.html">tbb::atomic<key_type></a>)==<span class="keyword">sizeof</span>(key_type), NULL);
-<a name="l00080"></a>00080                     <span class="keywordflow">return</span> tbb::internal::punned_cast<tbb::atomic<key_type>*>(&key)->compare_and_swap(k,0)==0;
-<a name="l00081"></a>00081                 }
-<a name="l00082"></a>00082             };
-<a name="l00083"></a>00083 <span class="preprocessor">#if __TBB_GCC_3_3_PROTECTED_BROKEN</span>
-<a name="l00084"></a>00084 <span class="preprocessor"></span>        <span class="keyword">protected</span>:
-<a name="l00085"></a>00085 <span class="preprocessor">#endif</span>
-<a name="l00086"></a>00086 <span class="preprocessor"></span>        
-<a name="l00087"></a>00087             <span class="keyword">static</span> key_type key_of_current_thread() {
-<a name="l00088"></a>00088                tbb::tbb_thread::id <span class="keywordtype">id</span> = tbb::this_tbb_thread::get_id();
-<a name="l00089"></a>00089                key_type k;
-<a name="l00090"></a>00090                memcpy( &k, &<span class="keywordtype">id</span>, <span class="keyword">sizeof</span>(k) );
-<a name="l00091"></a>00091                <span class="keywordflow">return</span> k;
-<a name="l00092"></a>00092             }
-<a name="l00093"></a>00093 
-<a name="l00095"></a>00095 
-<a name="l00097"></a>00097             atomic<array*> my_root;
-<a name="l00098"></a>00098             atomic<size_t> my_count;
-<a name="l00099"></a>00099             <span class="keyword">virtual</span> <span class="keywordtype">void</span>* create_local() = 0;
-<a name="l00100"></a>00100             <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="l00101"></a>00101             <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="l00102"></a>00102             array* allocate( size_t lg_size ) {
-<a name="l00103"></a>00103                 size_t n = 1<<lg_size;  
-<a name="l00104"></a>00104                 array* a = static_cast<array*>(create_array( <span class="keyword">sizeof</span>(array)+n*<span class="keyword">sizeof</span>(slot) ));
-<a name="l00105"></a>00105                 a->lg_size = lg_size;
-<a name="l00106"></a>00106                 std::memset( a+1, 0, n*<span class="keyword">sizeof</span>(slot) );
-<a name="l00107"></a>00107                 <span class="keywordflow">return</span> a;
-<a name="l00108"></a>00108             }
-<a name="l00109"></a>00109             <span class="keywordtype">void</span> free(array* a) {
-<a name="l00110"></a>00110                 size_t n = 1<<(a->lg_size);  
-<a name="l00111"></a>00111                 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="l00112"></a>00112             }
-<a name="l00113"></a>00113             <span class="keyword">static</span> size_t hash( key_type k ) {
-<a name="l00114"></a>00114                 <span class="comment">// Multiplicative hashing.  Client should use *upper* bits.</span>
-<a name="l00115"></a>00115                 <span class="comment">// casts required for Mac gcc4.* compiler</span>
-<a name="l00116"></a>00116 <span class="preprocessor">#if __TBB_WORDSIZE == 4</span>
-<a name="l00117"></a>00117 <span class="preprocessor"></span>                <span class="keywordflow">return</span> uintptr_t(k)*0x9E3779B9;
-<a name="l00118"></a>00118 <span class="preprocessor">#else</span>
-<a name="l00119"></a>00119 <span class="preprocessor"></span>                <span class="keywordflow">return</span> uintptr_t(k)*0x9E3779B97F4A7C15;
-<a name="l00120"></a>00120 <span class="preprocessor">#endif </span>
-<a name="l00121"></a>00121 <span class="preprocessor"></span>            } 
-<a name="l00122"></a>00122         
-<a name="l00123"></a>00123             ets_base() {my_root=NULL; my_count=0;}
-<a name="l00124"></a>00124             <span class="keyword">virtual</span> ~ets_base();  <span class="comment">// g++ complains if this is not virtual...</span>
-<a name="l00125"></a>00125             <span class="keywordtype">void</span>* table_lookup( <span class="keywordtype">bool</span>& exists );
-<a name="l00126"></a>00126             <span class="keywordtype">void</span> table_clear();
-<a name="l00127"></a>00127             slot& table_find( key_type k ) {
-<a name="l00128"></a>00128                 size_t h = hash(k);
-<a name="l00129"></a>00129                 array* r = my_root;
-<a name="l00130"></a>00130                 size_t mask = r->mask();
-<a name="l00131"></a>00131                 <span class="keywordflow">for</span>(size_t i = r->start(h);;i=(i+1)&mask) {
-<a name="l00132"></a>00132                     slot& s = r->at(i);
-<a name="l00133"></a>00133                     <span class="keywordflow">if</span>( s.empty() || s.match(k) )
-<a name="l00134"></a>00134                         <span class="keywordflow">return</span> s;
-<a name="l00135"></a>00135                 }
-<a name="l00136"></a>00136             }
-<a name="l00137"></a>00137             <span class="keywordtype">void</span> table_reserve_for_copy( <span class="keyword">const</span> ets_base& other ) {
-<a name="l00138"></a>00138                 __TBB_ASSERT(!my_root,NULL);
-<a name="l00139"></a>00139                 __TBB_ASSERT(!my_count,NULL);
-<a name="l00140"></a>00140                 <span class="keywordflow">if</span>( other.my_root ) {
-<a name="l00141"></a>00141                     array* a = allocate(other.my_root->lg_size);
-<a name="l00142"></a>00142                     a->next = NULL;
-<a name="l00143"></a>00143                     my_root = a;
-<a name="l00144"></a>00144                     my_count = other.my_count;
-<a name="l00145"></a>00145                 }
-<a name="l00146"></a>00146             }
-<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         ets_base<ETS_key_type>::~ets_base() {
-<a name="l00151"></a>00151             __TBB_ASSERT(!my_root, NULL);
-<a name="l00152"></a>00152         }
-<a name="l00153"></a>00153 
-<a name="l00154"></a>00154         <span class="keyword">template</span><ets_key_usage_type ETS_key_type>
-<a name="l00155"></a>00155         <span class="keywordtype">void</span> ets_base<ETS_key_type>::table_clear() {
-<a name="l00156"></a>00156             <span class="keywordflow">while</span>( array* r = my_root ) {
-<a name="l00157"></a>00157                 my_root = r->next;
-<a name="l00158"></a>00158                 free(r);
-<a name="l00159"></a>00159             }
-<a name="l00160"></a>00160             my_count = 0;
-<a name="l00161"></a>00161         }
-<a name="l00162"></a>00162                 
-<a name="l00163"></a>00163         <span class="keyword">template</span><ets_key_usage_type ETS_key_type>
-<a name="l00164"></a>00164         <span class="keywordtype">void</span>* ets_base<ETS_key_type>::table_lookup( <span class="keywordtype">bool</span>& exists ) {
-<a name="l00165"></a>00165             <span class="keyword">const</span> key_type k = key_of_current_thread(); 
-<a name="l00166"></a>00166 
-<a name="l00167"></a>00167             __TBB_ASSERT(k!=0,NULL);
-<a name="l00168"></a>00168             <span class="keywordtype">void</span>* found;
-<a name="l00169"></a>00169             size_t h = hash(k);
-<a name="l00170"></a>00170             <span class="keywordflow">for</span>( array* r=my_root; r; r=r->next ) {
-<a name="l00171"></a>00171                 size_t mask=r->mask();
-<a name="l00172"></a>00172                 <span class="keywordflow">for</span>(size_t i = r->start(h); ;i=(i+1)&mask) {
-<a name="l00173"></a>00173                     slot& s = r->at(i);
-<a name="l00174"></a>00174                     <span class="keywordflow">if</span>( s.empty() ) <span class="keywordflow">break</span>;
-<a name="l00175"></a>00175                     <span class="keywordflow">if</span>( s.match(k) ) {
-<a name="l00176"></a>00176                         <span class="keywordflow">if</span>( r==my_root ) {
-<a name="l00177"></a>00177                             <span class="comment">// Success at top level</span>
-<a name="l00178"></a>00178                             exists = <span class="keyword">true</span>;
-<a name="l00179"></a>00179                             <span class="keywordflow">return</span> s.ptr;
-<a name="l00180"></a>00180                         } <span class="keywordflow">else</span> {
-<a name="l00181"></a>00181                             <span class="comment">// Success at some other level.  Need to insert at top level.</span>
-<a name="l00182"></a>00182                             exists = <span class="keyword">true</span>;
-<a name="l00183"></a>00183                             found = s.ptr;
-<a name="l00184"></a>00184                             <span class="keywordflow">goto</span> insert;
-<a name="l00185"></a>00185                         }
-<a name="l00186"></a>00186                     }
-<a name="l00187"></a>00187                 }
-<a name="l00188"></a>00188             }
-<a name="l00189"></a>00189             <span class="comment">// Key does not yet exist</span>
-<a name="l00190"></a>00190             exists = <span class="keyword">false</span>;
-<a name="l00191"></a>00191             found = create_local();
-<a name="l00192"></a>00192             {
-<a name="l00193"></a>00193                 size_t c = ++my_count;
-<a name="l00194"></a>00194                 array* r = my_root;
-<a name="l00195"></a>00195                 <span class="keywordflow">if</span>( !r || c>r->size()/2 ) {
-<a name="l00196"></a>00196                     size_t s = r ? r->lg_size : 2;
-<a name="l00197"></a>00197                     <span class="keywordflow">while</span>( c>size_t(1)<<(s-1) ) ++s;
-<a name="l00198"></a>00198                     array* a = allocate(s);
-<a name="l00199"></a>00199                     <span class="keywordflow">for</span>(;;) {
-<a name="l00200"></a>00200                         a->next = my_root;
-<a name="l00201"></a>00201                         array* new_r = my_root.compare_and_swap(a,r);
-<a name="l00202"></a>00202                         <span class="keywordflow">if</span>( new_r==r ) <span class="keywordflow">break</span>;
-<a name="l00203"></a>00203                         <span class="keywordflow">if</span>( new_r->lg_size>=s ) {
-<a name="l00204"></a>00204                             <span class="comment">// Another thread inserted an equal or  bigger array, so our array is superfluous.</span>
-<a name="l00205"></a>00205                             free(a);
-<a name="l00206"></a>00206                             <span class="keywordflow">break</span>;
-<a name="l00207"></a>00207                         }
-<a name="l00208"></a>00208                         r = new_r;
-<a name="l00209"></a>00209                     }
-<a name="l00210"></a>00210                 }
-<a name="l00211"></a>00211             }
-<a name="l00212"></a>00212         insert:
-<a name="l00213"></a>00213             <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="l00214"></a>00214             array* ir = my_root;
-<a name="l00215"></a>00215             size_t mask = ir->mask();
-<a name="l00216"></a>00216             <span class="keywordflow">for</span>(size_t i = ir->start(h);;i=(i+1)&mask) {
-<a name="l00217"></a>00217                 slot& s = ir->at(i);
-<a name="l00218"></a>00218                 <span class="keywordflow">if</span>( s.empty() ) {
-<a name="l00219"></a>00219                     <span class="keywordflow">if</span>( s.claim(k) ) {
-<a name="l00220"></a>00220                         s.ptr = found;
-<a name="l00221"></a>00221                         <span class="keywordflow">return</span> found;
-<a name="l00222"></a>00222                     }
-<a name="l00223"></a>00223                 }
-<a name="l00224"></a>00224             }
-<a name="l00225"></a>00225         }
-<a name="l00226"></a>00226 
-<a name="l00228"></a>00228         <span class="keyword">template</span> <>
-<a name="l00229"></a>00229         <span class="keyword">class </span>ets_base<ets_key_per_instance>: <span class="keyword">protected</span> ets_base<ets_no_key> {
-<a name="l00230"></a>00230             <span class="keyword">typedef</span> ets_base<ets_no_key> super;
-<a name="l00231"></a>00231 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00232"></a>00232 <span class="preprocessor"></span>            <span class="keyword">typedef</span> DWORD tls_key_t;
-<a name="l00233"></a>00233             <span class="keywordtype">void</span> create_key() { my_key = TlsAlloc(); }
-<a name="l00234"></a>00234             <span class="keywordtype">void</span> destroy_key() { TlsFree(my_key); }
-<a name="l00235"></a>00235             <span class="keywordtype">void</span> set_tls(<span class="keywordtype">void</span> * value) { TlsSetValue(my_key, (LPVOID)value); }
-<a name="l00236"></a>00236             <span class="keywordtype">void</span>* get_tls() { <span class="keywordflow">return</span> (<span class="keywordtype">void</span> *)TlsGetValue(my_key); }
-<a name="l00237"></a>00237 <span class="preprocessor">#else</span>
-<a name="l00238"></a>00238 <span class="preprocessor"></span>            <span class="keyword">typedef</span> pthread_key_t tls_key_t;
-<a name="l00239"></a>00239             <span class="keywordtype">void</span> create_key() { pthread_key_create(&my_key, NULL); }
-<a name="l00240"></a>00240             <span class="keywordtype">void</span> destroy_key() { pthread_key_delete(my_key); }
-<a name="l00241"></a>00241             <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="l00242"></a>00242             <span class="keywordtype">void</span>* get_tls()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> pthread_getspecific(my_key); }
-<a name="l00243"></a>00243 <span class="preprocessor">#endif</span>
-<a name="l00244"></a>00244 <span class="preprocessor"></span>            tls_key_t my_key;
-<a name="l00245"></a>00245             <span class="keyword">virtual</span> <span class="keywordtype">void</span>* create_local() = 0;
-<a name="l00246"></a>00246             <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="l00247"></a>00247             <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="l00248"></a>00248         <span class="keyword">public</span>:
-<a name="l00249"></a>00249             ets_base() {create_key();}
-<a name="l00250"></a>00250             ~ets_base() {destroy_key();}
-<a name="l00251"></a>00251             <span class="keywordtype">void</span>* table_lookup( <span class="keywordtype">bool</span>& exists ) {
-<a name="l00252"></a>00252                 <span class="keywordtype">void</span>* found = get_tls();
-<a name="l00253"></a>00253                 <span class="keywordflow">if</span>( found ) {
-<a name="l00254"></a>00254                     exists=<span class="keyword">true</span>;
-<a name="l00255"></a>00255                 } <span class="keywordflow">else</span> {
-<a name="l00256"></a>00256                     found = super::table_lookup(exists);
-<a name="l00257"></a>00257                     set_tls(found);
-<a name="l00258"></a>00258                 }
-<a name="l00259"></a>00259                 <span class="keywordflow">return</span> found; 
-<a name="l00260"></a>00260             }
-<a name="l00261"></a>00261             <span class="keywordtype">void</span> table_clear() {
-<a name="l00262"></a>00262                 destroy_key();
-<a name="l00263"></a>00263                 create_key(); 
-<a name="l00264"></a>00264                 super::table_clear();
-<a name="l00265"></a>00265             }
-<a name="l00266"></a>00266         };
-<a name="l00267"></a>00267 
-<a name="l00269"></a>00269         <span class="keyword">template</span>< <span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value >
-<a name="l00270"></a>00270         <span class="keyword">class </span>enumerable_thread_specific_iterator 
-<a name="l00271"></a>00271 #if defined(_WIN64) && defined(_MSC_VER) 
-<a name="l00272"></a>00272             <span class="comment">// Ensure that Microsoft's internal template function _Val_type works correctly.</span>
-<a name="l00273"></a>00273             : public std::iterator<std::random_access_iterator_tag,Value>
-<a name="l00274"></a>00274 #endif <span class="comment">/* defined(_WIN64) && defined(_MSC_VER) */</span>
-<a name="l00275"></a>00275         {
-<a name="l00277"></a>00277         
-<a name="l00278"></a>00278             Container *my_container;
-<a name="l00279"></a>00279             <span class="keyword">typename</span> Container::size_type my_index;
-<a name="l00280"></a>00280             <span class="keyword">mutable</span> Value *my_value;
-<a name="l00281"></a>00281         
-<a name="l00282"></a>00282             <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T>
-<a name="l00283"></a>00283             <span class="keyword">friend</span> enumerable_thread_specific_iterator<C,T> operator+( ptrdiff_t offset, 
-<a name="l00284"></a>00284                                                                        <span class="keyword">const</span> enumerable_thread_specific_iterator<C,T>& v );
-<a name="l00285"></a>00285         
-<a name="l00286"></a>00286             <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="l00287"></a>00287             <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="l00288"></a>00288                                     <span class="keyword">const</span> enumerable_thread_specific_iterator<C,U>& j );
-<a name="l00289"></a>00289         
-<a name="l00290"></a>00290             <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="l00291"></a>00291             <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator<( const enumerable_thread_specific_iterator<C,T>& i, 
-<a name="l00292"></a>00292                                    <span class="keyword">const</span> enumerable_thread_specific_iterator<C,U>& j );
-<a name="l00293"></a>00293         
-<a name="l00294"></a>00294             <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="l00295"></a>00295             <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="l00296"></a>00296             
-<a name="l00297"></a>00297             <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> U> 
-<a name="l00298"></a>00298             <span class="keyword">friend</span> <span class="keyword">class </span>enumerable_thread_specific_iterator;
-<a name="l00299"></a>00299         
-<a name="l00300"></a>00300             <span class="keyword">public</span>:
-<a name="l00301"></a>00301         
-<a name="l00302"></a>00302             enumerable_thread_specific_iterator( <span class="keyword">const</span> Container &container, <span class="keyword">typename</span> Container::size_type index ) : 
-<a name="l00303"></a>00303                 my_container(&const_cast<Container &>(container)), my_index(index), my_value(NULL) {}
-<a name="l00304"></a>00304         
-<a name="l00306"></a>00306             enumerable_thread_specific_iterator() : my_container(NULL), my_index(0), my_value(NULL) {}
-<a name="l00307"></a>00307         
-<a name="l00308"></a>00308             <span class="keyword">template</span><<span class="keyword">typename</span> U>
-<a name="l00309"></a>00309             enumerable_thread_specific_iterator( <span class="keyword">const</span> enumerable_thread_specific_iterator<Container, U>& other ) :
-<a name="l00310"></a>00310                     my_container( other.my_container ), my_index( other.my_index), my_value( const_cast<Value *>(other.my_value) ) {}
-<a name="l00311"></a>00311         
-<a name="l00312"></a>00312             enumerable_thread_specific_iterator operator+( ptrdiff_t offset )<span class="keyword"> const </span>{
-<a name="l00313"></a>00313                 <span class="keywordflow">return</span> enumerable_thread_specific_iterator(*my_container, my_index + offset);
-<a name="l00314"></a>00314             }
-<a name="l00315"></a>00315         
-<a name="l00316"></a>00316             enumerable_thread_specific_iterator &operator+=( ptrdiff_t offset ) {
-<a name="l00317"></a>00317                 my_index += offset;
-<a name="l00318"></a>00318                 my_value = NULL;
-<a name="l00319"></a>00319                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00320"></a>00320             }
-<a name="l00321"></a>00321         
-<a name="l00322"></a>00322             enumerable_thread_specific_iterator operator-( ptrdiff_t offset )<span class="keyword"> const </span>{
-<a name="l00323"></a>00323                 <span class="keywordflow">return</span> enumerable_thread_specific_iterator( *my_container, my_index-offset );
-<a name="l00324"></a>00324             }
-<a name="l00325"></a>00325         
-<a name="l00326"></a>00326             enumerable_thread_specific_iterator &operator-=( ptrdiff_t offset ) {
-<a name="l00327"></a>00327                 my_index -= offset;
-<a name="l00328"></a>00328                 my_value = NULL;
-<a name="l00329"></a>00329                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00330"></a>00330             }
-<a name="l00331"></a>00331         
-<a name="l00332"></a>00332             Value& operator*()<span class="keyword"> const </span>{
-<a name="l00333"></a>00333                 Value* value = my_value;
-<a name="l00334"></a>00334                 <span class="keywordflow">if</span>( !value ) {
-<a name="l00335"></a>00335                     value = my_value = reinterpret_cast<Value *>(&(*my_container)[my_index].value);
-<a name="l00336"></a>00336                 }
-<a name="l00337"></a>00337                 __TBB_ASSERT( value==reinterpret_cast<Value *>(&(*my_container)[my_index].value), <span class="stringliteral">"corrupt cache"</span> );
-<a name="l00338"></a>00338                 <span class="keywordflow">return</span> *value;
-<a name="l00339"></a>00339             }
-<a name="l00340"></a>00340         
-<a name="l00341"></a>00341             Value& operator[]( ptrdiff_t k )<span class="keyword"> const </span>{
-<a name="l00342"></a>00342                <span class="keywordflow">return</span> (*my_container)[my_index + k].value;
-<a name="l00343"></a>00343             }
-<a name="l00344"></a>00344         
-<a name="l00345"></a>00345             Value* operator->()<span class="keyword"> const </span>{<span class="keywordflow">return</span> &operator*();}
-<a name="l00346"></a>00346         
-<a name="l00347"></a>00347             enumerable_thread_specific_iterator& operator++() {
-<a name="l00348"></a>00348                 ++my_index;
-<a name="l00349"></a>00349                 my_value = NULL;
-<a name="l00350"></a>00350                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00351"></a>00351             }
-<a name="l00352"></a>00352         
-<a name="l00353"></a>00353             enumerable_thread_specific_iterator& operator--() {
-<a name="l00354"></a>00354                 --my_index;
-<a name="l00355"></a>00355                 my_value = NULL;
-<a name="l00356"></a>00356                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00357"></a>00357             }
-<a name="l00358"></a>00358         
-<a name="l00360"></a>00360             enumerable_thread_specific_iterator operator++(<span class="keywordtype">int</span>) {
-<a name="l00361"></a>00361                 enumerable_thread_specific_iterator result = *<span class="keyword">this</span>;
-<a name="l00362"></a>00362                 ++my_index;
-<a name="l00363"></a>00363                 my_value = NULL;
-<a name="l00364"></a>00364                 <span class="keywordflow">return</span> result;
-<a name="l00365"></a>00365             }
-<a name="l00366"></a>00366         
-<a name="l00368"></a>00368             enumerable_thread_specific_iterator operator--(<span class="keywordtype">int</span>) {
-<a name="l00369"></a>00369                 enumerable_thread_specific_iterator result = *<span class="keyword">this</span>;
-<a name="l00370"></a>00370                 --my_index;
-<a name="l00371"></a>00371                 my_value = NULL;
-<a name="l00372"></a>00372                 <span class="keywordflow">return</span> result;
-<a name="l00373"></a>00373             }
-<a name="l00374"></a>00374         
-<a name="l00375"></a>00375             <span class="comment">// STL support</span>
-<a name="l00376"></a>00376             <span class="keyword">typedef</span> ptrdiff_t difference_type;
-<a name="l00377"></a>00377             <span class="keyword">typedef</span> Value value_type;
-<a name="l00378"></a>00378             <span class="keyword">typedef</span> Value* pointer;
-<a name="l00379"></a>00379             <span class="keyword">typedef</span> Value& reference;
-<a name="l00380"></a>00380             <span class="keyword">typedef</span> std::random_access_iterator_tag iterator_category;
-<a name="l00381"></a>00381         };
-<a name="l00382"></a>00382         
-<a name="l00383"></a>00383         <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T>
-<a name="l00384"></a>00384         enumerable_thread_specific_iterator<Container,T> operator+( ptrdiff_t offset, 
-<a name="l00385"></a>00385                                                                     <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,T>& v ) {
-<a name="l00386"></a>00386             <span class="keywordflow">return</span> enumerable_thread_specific_iterator<Container,T>( v.my_container, v.my_index + offset );
-<a name="l00387"></a>00387         }
-<a name="l00388"></a>00388         
-<a name="l00389"></a>00389         <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="l00390"></a>00390         <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,T>& i, 
-<a name="l00391"></a>00391                          <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
-<a name="l00392"></a>00392             <span class="keywordflow">return</span> i.my_index==j.my_index && i.my_container == j.my_container;
-<a name="l00393"></a>00393         }
-<a name="l00394"></a>00394         
-<a name="l00395"></a>00395         <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="l00396"></a>00396         <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,T>& i, 
-<a name="l00397"></a>00397                          <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
-<a name="l00398"></a>00398             <span class="keywordflow">return</span> !(i==j);
-<a name="l00399"></a>00399         }
-<a name="l00400"></a>00400         
-<a name="l00401"></a>00401         <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="l00402"></a>00402         <span class="keywordtype">bool</span> operator<( const enumerable_thread_specific_iterator<Container,T>& i, 
-<a name="l00403"></a>00403                         <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
-<a name="l00404"></a>00404             <span class="keywordflow">return</span> i.my_index<j.my_index;
-<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> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00408"></a>00408         <span class="keywordtype">bool</span> operator>( <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,T>& i, 
-<a name="l00409"></a>00409                         <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
-<a name="l00410"></a>00410             <span class="keywordflow">return</span> j<i;
-<a name="l00411"></a>00411         }
-<a name="l00412"></a>00412         
-<a name="l00413"></a>00413         <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="l00414"></a>00414         <span class="keywordtype">bool</span> operator>=( <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,T>& i, 
-<a name="l00415"></a>00415                          <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
-<a name="l00416"></a>00416             <span class="keywordflow">return</span> !(i<j);
-<a name="l00417"></a>00417         }
-<a name="l00418"></a>00418         
-<a name="l00419"></a>00419         <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="l00420"></a>00420         <span class="keywordtype">bool</span> operator<=( const enumerable_thread_specific_iterator<Container,T>& i, 
-<a name="l00421"></a>00421                          <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
-<a name="l00422"></a>00422             <span class="keywordflow">return</span> !(j<i);
-<a name="l00423"></a>00423         }
-<a name="l00424"></a>00424         
-<a name="l00425"></a>00425         <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="l00426"></a>00426         ptrdiff_t operator-( <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,T>& i, 
-<a name="l00427"></a>00427                              <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
-<a name="l00428"></a>00428             <span class="keywordflow">return</span> i.my_index-j.my_index;
-<a name="l00429"></a>00429         }
-<a name="l00430"></a>00430 
-<a name="l00431"></a>00431     <span class="keyword">template</span><<span class="keyword">typename</span> SegmentedContainer, <span class="keyword">typename</span> Value >
-<a name="l00432"></a>00432         <span class="keyword">class </span>segmented_iterator
-<a name="l00433"></a>00433 #if defined(_WIN64) && defined(_MSC_VER)
-<a name="l00434"></a>00434         : public std::iterator<std::input_iterator_tag, Value>
-<a name="l00435"></a>00435 #endif
-<a name="l00436"></a>00436         {
-<a name="l00437"></a>00437             <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="l00438"></a>00438             <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="l00439"></a>00439 
-<a name="l00440"></a>00440             <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="l00441"></a>00441             <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="l00442"></a>00442             
-<a name="l00443"></a>00443             <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> U> 
-<a name="l00444"></a>00444             <span class="keyword">friend</span> <span class="keyword">class </span>segmented_iterator;
-<a name="l00445"></a>00445 
-<a name="l00446"></a>00446             <span class="keyword">public</span>:
-<a name="l00447"></a>00447 
-<a name="l00448"></a>00448                 segmented_iterator() {my_segcont = NULL;}
-<a name="l00449"></a>00449 
-<a name="l00450"></a>00450                 segmented_iterator( <span class="keyword">const</span> SegmentedContainer& _segmented_container ) : 
-<a name="l00451"></a>00451                     my_segcont(const_cast<SegmentedContainer*>(&_segmented_container)),
-<a name="l00452"></a>00452                     outer_iter(my_segcont->end()) { }
-<a name="l00453"></a>00453 
-<a name="l00454"></a>00454                 ~segmented_iterator() {}
-<a name="l00455"></a>00455 
-<a name="l00456"></a>00456                 <span class="keyword">typedef</span> <span class="keyword">typename</span> SegmentedContainer::iterator outer_iterator;
-<a name="l00457"></a>00457                 <span class="keyword">typedef</span> <span class="keyword">typename</span> SegmentedContainer::value_type InnerContainer;
-<a name="l00458"></a>00458                 <span class="keyword">typedef</span> <span class="keyword">typename</span> InnerContainer::iterator inner_iterator;
-<a name="l00459"></a>00459 
-<a name="l00460"></a>00460                 <span class="comment">// STL support</span>
-<a name="l00461"></a>00461                 <span class="keyword">typedef</span> ptrdiff_t difference_type;
-<a name="l00462"></a>00462                 <span class="keyword">typedef</span> Value value_type;
-<a name="l00463"></a>00463                 <span class="keyword">typedef</span> <span class="keyword">typename</span> SegmentedContainer::size_type size_type;
-<a name="l00464"></a>00464                 <span class="keyword">typedef</span> Value* pointer;
-<a name="l00465"></a>00465                 <span class="keyword">typedef</span> Value& reference;
-<a name="l00466"></a>00466                 <span class="keyword">typedef</span> std::input_iterator_tag iterator_category;
-<a name="l00467"></a>00467 
-<a name="l00468"></a>00468                 <span class="comment">// Copy Constructor</span>
-<a name="l00469"></a>00469                 <span class="keyword">template</span><<span class="keyword">typename</span> U>
-<a name="l00470"></a>00470                 segmented_iterator(<span class="keyword">const</span> segmented_iterator<SegmentedContainer, U>& other) :
-<a name="l00471"></a>00471                     my_segcont(other.my_segcont),
-<a name="l00472"></a>00472                     outer_iter(other.outer_iter),
-<a name="l00473"></a>00473                     <span class="comment">// can we assign a default-constructed iterator to inner if we're at the end?</span>
-<a name="l00474"></a>00474                     inner_iter(other.inner_iter)
-<a name="l00475"></a>00475                 {}
-<a name="l00476"></a>00476 
-<a name="l00477"></a>00477                 <span class="comment">// assignment</span>
-<a name="l00478"></a>00478                 <span class="keyword">template</span><<span class="keyword">typename</span> U>
-<a name="l00479"></a>00479                 segmented_iterator& operator=( <span class="keyword">const</span> segmented_iterator<SegmentedContainer, U>& other) {
-<a name="l00480"></a>00480                     <span class="keywordflow">if</span>(<span class="keyword">this</span> != &other) {
-<a name="l00481"></a>00481                         my_segcont = other.my_segcont;
-<a name="l00482"></a>00482                         outer_iter = other.outer_iter;
-<a name="l00483"></a>00483                         <span class="keywordflow">if</span>(outer_iter != my_segcont->end()) inner_iter = other.inner_iter;
-<a name="l00484"></a>00484                     }
-<a name="l00485"></a>00485                     <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00486"></a>00486                 }
-<a name="l00487"></a>00487 
-<a name="l00488"></a>00488                 <span class="comment">// allow assignment of outer iterator to segmented iterator.  Once it is</span>
-<a name="l00489"></a>00489                 <span class="comment">// assigned, move forward until a non-empty inner container is found or</span>
-<a name="l00490"></a>00490                 <span class="comment">// the end of the outer container is reached.</span>
-<a name="l00491"></a>00491                 segmented_iterator& operator=(<span class="keyword">const</span> outer_iterator& new_outer_iter) {
-<a name="l00492"></a>00492                     __TBB_ASSERT(my_segcont != NULL, NULL);
-<a name="l00493"></a>00493                     <span class="comment">// check that this iterator points to something inside the segmented container</span>
-<a name="l00494"></a>00494                     <span class="keywordflow">for</span>(outer_iter = new_outer_iter ;outer_iter!=my_segcont->end(); ++outer_iter) {
-<a name="l00495"></a>00495                         <span class="keywordflow">if</span>( !outer_iter->empty() ) {
-<a name="l00496"></a>00496                             inner_iter = outer_iter->begin();
-<a name="l00497"></a>00497                             <span class="keywordflow">break</span>;
-<a name="l00498"></a>00498                         }
-<a name="l00499"></a>00499                     }
-<a name="l00500"></a>00500                     <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00501"></a>00501                 }
-<a name="l00502"></a>00502 
-<a name="l00503"></a>00503                 <span class="comment">// pre-increment</span>
-<a name="l00504"></a>00504                 segmented_iterator& operator++() {
-<a name="l00505"></a>00505                     advance_me();
-<a name="l00506"></a>00506                     <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00507"></a>00507                 }
-<a name="l00508"></a>00508 
-<a name="l00509"></a>00509                 <span class="comment">// post-increment</span>
-<a name="l00510"></a>00510                 segmented_iterator operator++(<span class="keywordtype">int</span>) {
-<a name="l00511"></a>00511                     segmented_iterator tmp = *<span class="keyword">this</span>;
-<a name="l00512"></a>00512                     operator++();
-<a name="l00513"></a>00513                     <span class="keywordflow">return</span> tmp;
-<a name="l00514"></a>00514                 }
-<a name="l00515"></a>00515 
-<a name="l00516"></a>00516                 <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> outer_iterator& other_outer)<span class="keyword"> const </span>{
-<a name="l00517"></a>00517                     __TBB_ASSERT(my_segcont != NULL, NULL);
-<a name="l00518"></a>00518                     <span class="keywordflow">return</span> (outer_iter == other_outer &&
-<a name="l00519"></a>00519                             (outer_iter == my_segcont->end() || inner_iter == outer_iter->begin()));
-<a name="l00520"></a>00520                 }
-<a name="l00521"></a>00521 
-<a name="l00522"></a>00522                 <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> outer_iterator& other_outer)<span class="keyword"> const </span>{
-<a name="l00523"></a>00523                     <span class="keywordflow">return</span> !operator==(other_outer);
-<a name="l00524"></a>00524 
-<a name="l00525"></a>00525                 }
-<a name="l00526"></a>00526 
-<a name="l00527"></a>00527                 <span class="comment">// (i)* RHS</span>
-<a name="l00528"></a>00528                 reference operator*()<span class="keyword"> const </span>{
-<a name="l00529"></a>00529                     __TBB_ASSERT(my_segcont != NULL, NULL);
-<a name="l00530"></a>00530                     __TBB_ASSERT(outer_iter != my_segcont->end(), <span class="stringliteral">"Dereferencing a pointer at end of container"</span>);
-<a name="l00531"></a>00531                     __TBB_ASSERT(inner_iter != outer_iter->end(), NULL); <span class="comment">// should never happen</span>
-<a name="l00532"></a>00532                     <span class="keywordflow">return</span> *inner_iter;
-<a name="l00533"></a>00533                 }
-<a name="l00534"></a>00534 
-<a name="l00535"></a>00535                 <span class="comment">// i-></span>
-<a name="l00536"></a>00536                 pointer operator->()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> &operator*();}
-<a name="l00537"></a>00537 
-<a name="l00538"></a>00538             <span class="keyword">private</span>:
-<a name="l00539"></a>00539                 SegmentedContainer*             my_segcont;
-<a name="l00540"></a>00540                 outer_iterator outer_iter;
-<a name="l00541"></a>00541                 inner_iterator inner_iter;
-<a name="l00542"></a>00542 
-<a name="l00543"></a>00543                 <span class="keywordtype">void</span> advance_me() {
-<a name="l00544"></a>00544                     __TBB_ASSERT(my_segcont != NULL, NULL);
-<a name="l00545"></a>00545                     __TBB_ASSERT(outer_iter != my_segcont->end(), NULL); <span class="comment">// not true if there are no inner containers</span>
-<a name="l00546"></a>00546                     __TBB_ASSERT(inner_iter != outer_iter->end(), NULL); <span class="comment">// not true if the inner containers are all empty.</span>
-<a name="l00547"></a>00547                     ++inner_iter;
-<a name="l00548"></a>00548                     <span class="keywordflow">while</span>(inner_iter == outer_iter->end() && ++outer_iter != my_segcont->end()) {
-<a name="l00549"></a>00549                         inner_iter = outer_iter->begin();
-<a name="l00550"></a>00550                     }
-<a name="l00551"></a>00551                 }
-<a name="l00552"></a>00552         };    <span class="comment">// segmented_iterator</span>
-<a name="l00553"></a>00553 
-<a name="l00554"></a>00554         <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="l00555"></a>00555         <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> segmented_iterator<SegmentedContainer,T>& i, 
-<a name="l00556"></a>00556                          <span class="keyword">const</span> segmented_iterator<SegmentedContainer,U>& j ) {
-<a name="l00557"></a>00557             <span class="keywordflow">if</span>(i.my_segcont != j.my_segcont) <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00558"></a>00558             <span class="keywordflow">if</span>(i.my_segcont == NULL) <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00559"></a>00559             <span class="keywordflow">if</span>(i.outer_iter != j.outer_iter) <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00560"></a>00560             <span class="keywordflow">if</span>(i.outer_iter == i.my_segcont->end()) <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00561"></a>00561             <span class="keywordflow">return</span> i.inner_iter == j.inner_iter;
-<a name="l00562"></a>00562         }
-<a name="l00563"></a>00563 
-<a name="l00564"></a>00564         <span class="comment">// !=</span>
-<a name="l00565"></a>00565         <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="l00566"></a>00566         <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> segmented_iterator<SegmentedContainer,T>& i, 
-<a name="l00567"></a>00567                          <span class="keyword">const</span> segmented_iterator<SegmentedContainer,U>& j ) {
-<a name="l00568"></a>00568             <span class="keywordflow">return</span> !(i==j);
-<a name="l00569"></a>00569         }
-<a name="l00570"></a>00570 
-<a name="l00571"></a>00571         <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00572"></a>00572         <span class="keyword">struct </span>destruct_only: tbb::internal::no_copy {
-<a name="l00573"></a>00573             <a class="code" href="a00141.html">tbb::aligned_space<T,1></a> value;
-<a name="l00574"></a>00574             ~destruct_only() {value.begin()[0].~T();}
-<a name="l00575"></a>00575         };
-<a name="l00576"></a>00576 
-<a name="l00577"></a>00577         <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00578"></a>00578         <span class="keyword">struct </span>construct_by_default: tbb::internal::no_assign {
-<a name="l00579"></a>00579             <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="l00580"></a>00580             construct_by_default( <span class="keywordtype">int</span> ) {}
-<a name="l00581"></a>00581         };
-<a name="l00582"></a>00582 
-<a name="l00583"></a>00583         <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00584"></a>00584         <span class="keyword">struct </span>construct_by_exemplar: tbb::internal::no_assign {
-<a name="l00585"></a>00585             <span class="keyword">const</span> T exemplar;
-<a name="l00586"></a>00586             <span class="keywordtype">void</span> construct(<span class="keywordtype">void</span>*where) {<span class="keyword">new</span>(where) T(exemplar);}
-<a name="l00587"></a>00587             construct_by_exemplar( <span class="keyword">const</span> T& t ) : exemplar(t) {}
-<a name="l00588"></a>00588         };
-<a name="l00589"></a>00589 
-<a name="l00590"></a>00590         <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> Finit>
-<a name="l00591"></a>00591         <span class="keyword">struct </span>construct_by_finit: tbb::internal::no_assign {
-<a name="l00592"></a>00592             Finit f;
-<a name="l00593"></a>00593             <span class="keywordtype">void</span> construct(<span class="keywordtype">void</span>* where) {<span class="keyword">new</span>(where) T(f());}
-<a name="l00594"></a>00594             construct_by_finit( <span class="keyword">const</span> Finit& f_ ) : f(f_) {}
-<a name="l00595"></a>00595         };
-<a name="l00596"></a>00596 
-<a name="l00597"></a>00597         <span class="comment">// storage for initialization function pointer</span>
-<a name="l00598"></a>00598         <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00599"></a>00599         <span class="keyword">class </span>callback_base {
-<a name="l00600"></a>00600         <span class="keyword">public</span>:
-<a name="l00601"></a>00601             <span class="comment">// Clone *this</span>
-<a name="l00602"></a>00602             <span class="keyword">virtual</span> callback_base* clone() = 0;
-<a name="l00603"></a>00603             <span class="comment">// Destruct and free *this</span>
-<a name="l00604"></a>00604             <span class="keyword">virtual</span> <span class="keywordtype">void</span> destroy() = 0;
-<a name="l00605"></a>00605             <span class="comment">// Need virtual destructor to satisfy GCC compiler warning</span>
-<a name="l00606"></a>00606             <span class="keyword">virtual</span> ~callback_base() { }
-<a name="l00607"></a>00607             <span class="comment">// Construct T at where</span>
-<a name="l00608"></a>00608             <span class="keyword">virtual</span> <span class="keywordtype">void</span> construct(<span class="keywordtype">void</span>* where) = 0;
-<a name="l00609"></a>00609         };
-<a name="l00610"></a>00610 
-<a name="l00611"></a>00611         <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">typename</span> Constructor>
-<a name="l00612"></a>00612         <span class="keyword">class </span>callback_leaf: <span class="keyword">public</span> callback_base<T>, Constructor {
-<a name="l00613"></a>00613             <span class="keyword">template</span><<span class="keyword">typename</span> X> callback_leaf( <span class="keyword">const</span> X& x ) : Constructor(x) {}
-<a name="l00614"></a>00614 
-<a name="l00615"></a>00615             <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00204.html">tbb::tbb_allocator<callback_leaf></a> my_allocator_type;
-<a name="l00616"></a>00616 
-<a name="l00617"></a>00617             <span class="comment">/*override*/</span> callback_base<T>* clone() {
-<a name="l00618"></a>00618                 <span class="keywordtype">void</span>* where = my_allocator_type().allocate(1);
-<a name="l00619"></a>00619                 <span class="keywordflow">return</span> <span class="keyword">new</span>(where) callback_leaf(*<span class="keyword">this</span>);
-<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> destroy() {
-<a name="l00623"></a>00623                 my_allocator_type().destroy(<span class="keyword">this</span>);
-<a name="l00624"></a>00624                 my_allocator_type().deallocate(<span class="keyword">this</span>,1);
-<a name="l00625"></a>00625             }
-<a name="l00626"></a>00626 
-<a name="l00627"></a>00627             <span class="comment">/*override*/</span> <span class="keywordtype">void</span> construct(<span class="keywordtype">void</span>* where) {
-<a name="l00628"></a>00628                 Constructor::construct(where);
-<a name="l00629"></a>00629             }  
-<a name="l00630"></a>00630         <span class="keyword">public</span>:
-<a name="l00631"></a>00631             <span class="keyword">template</span><<span class="keyword">typename</span> X>
-<a name="l00632"></a>00632             <span class="keyword">static</span> callback_base<T>* make( <span class="keyword">const</span> X& x ) {
-<a name="l00633"></a>00633                 <span class="keywordtype">void</span>* where = my_allocator_type().allocate(1);
-<a name="l00634"></a>00634                 <span class="keywordflow">return</span> <span class="keyword">new</span>(where) callback_leaf(x);
-<a name="l00635"></a>00635             }
-<a name="l00636"></a>00636         };
-<a name="l00637"></a>00637 
-<a name="l00639"></a>00639 
-<a name="l00644"></a>00644         <span class="keyword">template</span><<span class="keyword">typename</span> U, size_t ModularSize>
-<a name="l00645"></a>00645         <span class="keyword">struct </span>ets_element {
-<a name="l00646"></a>00646             <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="l00647"></a>00647             <span class="keywordtype">void</span> unconstruct() {
-<a name="l00648"></a>00648                 tbb::internal::punned_cast<U*>(&value)->~U();
-<a name="l00649"></a>00649             }
-<a name="l00650"></a>00650         };
-<a name="l00651"></a>00651 
-<a name="l00652"></a>00652     } <span class="comment">// namespace internal</span>
-<a name="l00654"></a>00654 <span class="comment"></span>
-<a name="l00656"></a>00656 
-<a name="l00675"></a>00675     <span class="keyword">template</span> <<span class="keyword">typename</span> T, 
-<a name="l00676"></a>00676               <span class="keyword">typename</span> Allocator=cache_aligned_allocator<T>, 
-<a name="l00677"></a><a class="code" href="a00163.html">00677</a>               <a class="code" href="a00267.html#a8622ae61b7e7737dac26542e181178e">ets_key_usage_type</a> ETS_key_type=ets_no_key > 
-<a name="l00678"></a>00678     <span class="keyword">class </span><a class="code" href="a00163.html">enumerable_thread_specific</a>: internal::ets_base<ETS_key_type> { 
-<a name="l00679"></a>00679 
-<a name="l00680"></a>00680         <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="a00163.html">enumerable_thread_specific</a>;
-<a name="l00681"></a>00681     
-<a name="l00682"></a>00682         <span class="keyword">typedef</span> internal::ets_element<T,sizeof(T)%tbb::internal::NFS_MaxLineSize> padded_element;
-<a name="l00683"></a>00683 
-<a name="l00685"></a>00685         <span class="keyword">template</span><<span class="keyword">typename</span> I>
-<a name="l00686"></a>00686         <span class="keyword">class </span>generic_range_type: <span class="keyword">public</span> <a class="code" href="a00147.html">blocked_range</a><I> {
-<a name="l00687"></a>00687         <span class="keyword">public</span>:
-<a name="l00688"></a>00688             <span class="keyword">typedef</span> T value_type;
-<a name="l00689"></a>00689             <span class="keyword">typedef</span> T& reference;
-<a name="l00690"></a>00690             <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
-<a name="l00691"></a>00691             <span class="keyword">typedef</span> I iterator;
-<a name="l00692"></a>00692             <span class="keyword">typedef</span> ptrdiff_t difference_type;
-<a name="l00693"></a>00693             generic_range_type( I begin_, I end_, size_t grainsize_ = 1) : <a class="code" href="a00147.html">blocked_range<I></a>(begin_,end_,grainsize_) {} 
-<a name="l00694"></a>00694             template<typename U>
-<a name="l00695"></a>00695             generic_range_type( <span class="keyword">const</span> generic_range_type<U>& r) : <a class="code" href="a00147.html">blocked_range<I></a>(r.begin(),r.end(),r.grainsize()) {} 
-<a name="l00696"></a>00696             generic_range_type( generic_range_type& r, <a class="code" href="a00198.html">split</a> ) : <a class="code" href="a00147.html">blocked_range<I></a>(r,<a class="code" href="a00198.html">split</a>()) {}
-<a name="l00697"></a>00697         };
-<a name="l00698"></a>00698     
-<a name="l00699"></a>00699         <span class="keyword">typedef</span> <span class="keyword">typename</span> Allocator::template rebind< padded_element >::other padded_allocator_type;
-<a name="l00700"></a>00700         <span class="keyword">typedef</span> <a class="code" href="a00161.html">tbb::concurrent_vector< padded_element, padded_allocator_type ></a> <a class="code" href="a00161.html">internal_collection_type</a>;
-<a name="l00701"></a>00701         
-<a name="l00702"></a>00702         internal::callback_base<T> *my_construct_callback;
-<a name="l00703"></a>00703 
-<a name="l00704"></a>00704         internal_collection_type my_locals;
-<a name="l00705"></a>00705    
-<a name="l00706"></a>00706         <span class="comment">/*override*/</span> <span class="keywordtype">void</span>* create_local() {
-<a name="l00707"></a>00707 <span class="preprocessor">#if TBB_DEPRECATED</span>
-<a name="l00708"></a>00708 <span class="preprocessor"></span>            <span class="keywordtype">void</span>* lref = &my_locals[my_locals.<a class="code" href="a00161.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(padded_element())];
-<a name="l00709"></a>00709 <span class="preprocessor">#else</span>
-<a name="l00710"></a>00710 <span class="preprocessor"></span>            <span class="keywordtype">void</span>* lref = &*my_locals.<a class="code" href="a00161.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(padded_element());
-<a name="l00711"></a>00711 <span class="preprocessor">#endif</span>
-<a name="l00712"></a>00712 <span class="preprocessor"></span>            my_construct_callback->construct(lref);
-<a name="l00713"></a>00713             <span class="keywordflow">return</span> lref;
-<a name="l00714"></a>00714         } 
-<a name="l00715"></a>00715 
-<a name="l00716"></a>00716         <span class="keywordtype">void</span> unconstruct_locals() {
-<a name="l00717"></a>00717             <span class="keywordflow">for</span>(<span class="keyword">typename</span> internal_collection_type::iterator cvi = my_locals.<a class="code" href="a00161.html#730b23a251ecb6d37f692fb22f38e029">begin</a>(); cvi != my_locals.<a class="code" href="a00161.html#c0b51160e5a764982ec97a455f94f2c6">end</a>(); ++cvi) {
-<a name="l00718"></a>00718                 cvi->unconstruct();
-<a name="l00719"></a>00719             }
-<a name="l00720"></a>00720         }
-<a name="l00721"></a>00721 
-<a name="l00722"></a>00722         <span class="keyword">typedef</span> <span class="keyword">typename</span> Allocator::template rebind< uintptr_t >::other array_allocator_type;
-<a name="l00723"></a>00723 
-<a name="l00724"></a>00724         <span class="comment">// _size is in bytes</span>
-<a name="l00725"></a>00725         <span class="comment">/*override*/</span> <span class="keywordtype">void</span>* create_array(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             <span class="keywordflow">return</span> array_allocator_type().allocate(nelements);
-<a name="l00728"></a>00728         }
-<a name="l00729"></a>00729 
-<a name="l00730"></a>00730         <span class="comment">/*override*/</span> <span class="keywordtype">void</span> free_array( <span class="keywordtype">void</span>* _ptr, size_t _size) {
-<a name="l00731"></a>00731             size_t nelements = (_size + <span class="keyword">sizeof</span>(uintptr_t) -1) / <span class="keyword">sizeof</span>(uintptr_t);
-<a name="l00732"></a>00732             array_allocator_type().deallocate( reinterpret_cast<uintptr_t *>(_ptr),nelements);
-<a name="l00733"></a>00733         }
-<a name="l00734"></a>00734    
-<a name="l00735"></a>00735     <span class="keyword">public</span>:
-<a name="l00736"></a>00736     
-<a name="l00738"></a>00738         <span class="keyword">typedef</span> Allocator allocator_type;
-<a name="l00739"></a>00739         <span class="keyword">typedef</span> T value_type;
-<a name="l00740"></a>00740         <span class="keyword">typedef</span> T& reference;
-<a name="l00741"></a>00741         <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
-<a name="l00742"></a>00742         <span class="keyword">typedef</span> T* pointer;
-<a name="l00743"></a>00743         <span class="keyword">typedef</span> <span class="keyword">const</span> T* const_pointer;
-<a name="l00744"></a>00744         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal_collection_type::size_type size_type;
-<a name="l00745"></a>00745         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal_collection_type::difference_type difference_type;
-<a name="l00746"></a>00746     
-<a name="l00747"></a>00747         <span class="comment">// Iterator types</span>
-<a name="l00748"></a>00748         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::enumerable_thread_specific_iterator< internal_collection_type, value_type > iterator;
-<a name="l00749"></a>00749         <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="l00750"></a>00750 
-<a name="l00751"></a>00751         <span class="comment">// Parallel range types</span>
-<a name="l00752"></a>00752         <span class="keyword">typedef</span> generic_range_type< iterator > range_type;
-<a name="l00753"></a>00753         <span class="keyword">typedef</span> generic_range_type< const_iterator > const_range_type;
-<a name="l00754"></a>00754     
-<a name="l00756"></a>00756         <a class="code" href="a00163.html">enumerable_thread_specific</a>() : 
-<a name="l00757"></a>00757             my_construct_callback( internal::callback_leaf<T,internal::construct_by_default<T> >::make(<span class="comment">/*dummy argument*/</span>0) ) 
-<a name="l00758"></a>00758         {}
-<a name="l00759"></a>00759 
-<a name="l00761"></a><a class="code" href="a00163.html#8d4b456ff9d7b289c73254eccc11db45">00761</a>         <span class="keyword">template</span> <<span class="keyword">typename</span> Finit>
-<a name="l00762"></a>00762         <a class="code" href="a00163.html">enumerable_thread_specific</a>( Finit finit ) : 
-<a name="l00763"></a>00763             my_construct_callback( internal::callback_leaf<T,internal::construct_by_finit<T,Finit> >::make( finit ) ) 
-<a name="l00764"></a>00764         {}
-<a name="l00765"></a>00765     
-<a name="l00767"></a>00767         <a class="code" href="a00163.html">enumerable_thread_specific</a>(<span class="keyword">const</span> T& exemplar) : 
-<a name="l00768"></a>00768             my_construct_callback( internal::callback_leaf<T,internal::construct_by_exemplar<T> >::make( exemplar ) )
-<a name="l00769"></a>00769         {}
-<a name="l00770"></a>00770     
-<a name="l00772"></a>00772         ~<a class="code" href="a00163.html">enumerable_thread_specific</a>() { 
-<a name="l00773"></a>00773             my_construct_callback->destroy();
-<a name="l00774"></a>00774             this->clear();  <span class="comment">// deallocation before the derived class is finished destructing</span>
-<a name="l00775"></a>00775             <span class="comment">// So free(array *) is still accessible</span>
-<a name="l00776"></a>00776         }
-<a name="l00777"></a>00777       
-<a name="l00779"></a>00779         reference local() {
-<a name="l00780"></a>00780             <span class="keywordtype">bool</span> exists;
-<a name="l00781"></a>00781             <span class="keywordflow">return</span> local(exists);
-<a name="l00782"></a>00782         }
-<a name="l00783"></a>00783 
-<a name="l00785"></a>00785         reference local(<span class="keywordtype">bool</span>& exists)  {
-<a name="l00786"></a>00786             __TBB_ASSERT(ETS_key_type==ets_no_key,<span class="stringliteral">"ets_key_per_instance not yet implemented"</span>); 
-<a name="l00787"></a>00787             <span class="keywordtype">void</span>* ptr = this->table_lookup(exists);
-<a name="l00788"></a>00788             <span class="keywordflow">return</span> *(T*)ptr;
-<a name="l00789"></a>00789         }
-<a name="l00790"></a>00790 
-<a name="l00792"></a>00792         size_type size()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_locals.<a class="code" href="a00161.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>(); }
-<a name="l00793"></a>00793     
-<a name="l00795"></a>00795         <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_locals.<a class="code" href="a00161.html#c6426cb93cf20d3af40f3c90f1f0481a">empty</a>(); }
-<a name="l00796"></a>00796     
-<a name="l00798"></a>00798         iterator begin() { <span class="keywordflow">return</span> iterator( my_locals, 0 ); }
-<a name="l00800"></a>00800         iterator end() { <span class="keywordflow">return</span> iterator(my_locals, my_locals.<a class="code" href="a00161.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>() ); }
-<a name="l00801"></a>00801     
-<a name="l00803"></a>00803         const_iterator begin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(my_locals, 0); }
-<a name="l00804"></a>00804     
-<a name="l00806"></a>00806         const_iterator end()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(my_locals, my_locals.<a class="code" href="a00161.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>()); }
-<a name="l00807"></a>00807 
-<a name="l00809"></a>00809         range_type range( size_t grainsize=1 ) { <span class="keywordflow">return</span> range_type( begin(), end(), grainsize ); } 
-<a name="l00810"></a>00810         
-<a name="l00812"></a>00812         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="l00813"></a>00813 
-<a name="l00815"></a>00815         <span class="keywordtype">void</span> clear() {
-<a name="l00816"></a>00816             unconstruct_locals();
-<a name="l00817"></a>00817             my_locals.<a class="code" href="a00161.html#26f937a359a66b6aae904c3cd9a3c444">clear</a>();
-<a name="l00818"></a>00818             this->table_clear();
-<a name="l00819"></a>00819             <span class="comment">// callback is not destroyed</span>
-<a name="l00820"></a>00820             <span class="comment">// exemplar is not destroyed</span>
-<a name="l00821"></a>00821         }
-<a name="l00822"></a>00822 
-<a name="l00823"></a>00823     <span class="keyword">private</span>:
-<a name="l00824"></a>00824 
-<a name="l00825"></a>00825         <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> A2, ets_key_usage_type C2>
-<a name="l00826"></a>00826         <span class="keywordtype">void</span> internal_copy( <span class="keyword">const</span> enumerable_thread_specific<U, A2, C2>& other);
-<a name="l00827"></a>00827 
-<a name="l00828"></a>00828     <span class="keyword">public</span>:
-<a name="l00829"></a>00829 
-<a name="l00830"></a>00830         <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> Alloc, ets_key_usage_type Cachetype>
-<a name="l00831"></a>00831         enumerable_thread_specific( <span class="keyword">const</span> enumerable_thread_specific<U, Alloc, Cachetype>& other ) : internal::ets_base<ETS_key_type> ()
-<a name="l00832"></a>00832         {
-<a name="l00833"></a>00833             internal_copy(other);
-<a name="l00834"></a>00834         }
-<a name="l00835"></a>00835 
-<a name="l00836"></a>00836         enumerable_thread_specific( <span class="keyword">const</span> enumerable_thread_specific& other ) : internal::ets_base<ETS_key_type> ()
-<a name="l00837"></a>00837         {
-<a name="l00838"></a>00838             internal_copy(other);
-<a name="l00839"></a>00839         }
-<a name="l00840"></a>00840 
-<a name="l00841"></a>00841     <span class="keyword">private</span>:
-<a name="l00842"></a>00842 
-<a name="l00843"></a>00843         <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> A2, ets_key_usage_type C2>
-<a name="l00844"></a>00844         enumerable_thread_specific &
-<a name="l00845"></a>00845         internal_assign(<span class="keyword">const</span> enumerable_thread_specific<U, A2, C2>& other) {
-<a name="l00846"></a>00846             <span class="keywordflow">if</span>(static_cast<void *>( <span class="keyword">this</span> ) != static_cast<const void *>( &other )) {
-<a name="l00847"></a>00847                 this->clear(); 
-<a name="l00848"></a>00848                 my_construct_callback->destroy();
-<a name="l00849"></a>00849                 my_construct_callback = 0;
-<a name="l00850"></a>00850                 internal_copy( other );
-<a name="l00851"></a>00851             }
-<a name="l00852"></a>00852             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00853"></a>00853         }
-<a name="l00854"></a>00854 
-<a name="l00855"></a>00855     <span class="keyword">public</span>:
-<a name="l00856"></a>00856 
-<a name="l00857"></a>00857         <span class="comment">// assignment</span>
-<a name="l00858"></a>00858         enumerable_thread_specific& operator=(<span class="keyword">const</span> enumerable_thread_specific& other) {
-<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="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> Alloc, ets_key_usage_type Cachetype>
-<a name="l00863"></a>00863         enumerable_thread_specific& operator=(<span class="keyword">const</span> enumerable_thread_specific<U, Alloc, Cachetype>& other)
-<a name="l00864"></a>00864         {
-<a name="l00865"></a>00865             <span class="keywordflow">return</span> internal_assign(other);
-<a name="l00866"></a>00866         }
-<a name="l00867"></a>00867 
-<a name="l00868"></a>00868         <span class="comment">// combine_func_t has signature T(T,T) or T(const T&, const T&)</span>
-<a name="l00869"></a>00869         <span class="keyword">template</span> <<span class="keyword">typename</span> combine_func_t>
-<a name="l00870"></a>00870         T combine(combine_func_t f_combine) {
-<a name="l00871"></a>00871             <span class="keywordflow">if</span>(begin() == end()) {
-<a name="l00872"></a>00872                 internal::destruct_only<T> location;
-<a name="l00873"></a>00873                 my_construct_callback->construct(location.value.begin());
-<a name="l00874"></a>00874                 <span class="keywordflow">return</span> *location.value.begin();
-<a name="l00875"></a>00875             }
-<a name="l00876"></a>00876             const_iterator ci = begin();
-<a name="l00877"></a>00877             T my_result = *ci;
-<a name="l00878"></a>00878             <span class="keywordflow">while</span>(++ci != end()) 
-<a name="l00879"></a>00879                 my_result = f_combine( my_result, *ci );
-<a name="l00880"></a>00880             <span class="keywordflow">return</span> my_result;
-<a name="l00881"></a>00881         }
-<a name="l00882"></a>00882 
-<a name="l00883"></a>00883         <span class="comment">// combine_func_t has signature void(T) or void(const T&)</span>
-<a name="l00884"></a>00884         <span class="keyword">template</span> <<span class="keyword">typename</span> combine_func_t>
-<a name="l00885"></a>00885         <span class="keywordtype">void</span> combine_each(combine_func_t f_combine) {
-<a name="l00886"></a>00886             <span class="keywordflow">for</span>(const_iterator ci = begin(); ci != end(); ++ci) {
-<a name="l00887"></a>00887                 f_combine( *ci );
-<a name="l00888"></a>00888             }
-<a name="l00889"></a>00889         }
-<a name="l00890"></a>00890 
-<a name="l00891"></a>00891     }; <span class="comment">// enumerable_thread_specific</span>
-<a name="l00892"></a>00892 
-<a name="l00893"></a>00893     <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="l00894"></a>00894     <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> A2, ets_key_usage_type C2>
-<a name="l00895"></a>00895     <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="l00896"></a>00896         <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="l00897"></a>00897         my_construct_callback = other.my_construct_callback->clone();
-<a name="l00898"></a>00898 
-<a name="l00899"></a>00899         <span class="keyword">typedef</span> internal::ets_base<ets_no_key> base;
-<a name="l00900"></a>00900         __TBB_ASSERT(my_locals.<a class="code" href="a00161.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>()==0,NULL);
-<a name="l00901"></a>00901         this->table_reserve_for_copy( other );
-<a name="l00902"></a>00902         <span class="keywordflow">for</span>( base::array* r=other.my_root; r; r=r->next ) {
-<a name="l00903"></a>00903             <span class="keywordflow">for</span>( size_t i=0; i<r-><a class="code" href="a00147.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>(); ++i ) {
-<a name="l00904"></a>00904                 base::slot& s1 = r->at(i);
-<a name="l00905"></a>00905                 <span class="keywordflow">if</span>( !s1.empty() ) {
-<a name="l00906"></a>00906                     base::slot& s2 = this->table_find(s1.key);
-<a name="l00907"></a>00907                     <span class="keywordflow">if</span>( s2.empty() ) { 
-<a name="l00908"></a>00908 #<span class="keywordflow">if</span> TBB_DEPRECATED
-<a name="l00909"></a>00909                         <span class="keywordtype">void</span>* lref = &my_locals[my_locals.<a class="code" href="a00161.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(padded_element())];
-<a name="l00910"></a>00910 <span class="preprocessor">#else</span>
-<a name="l00911"></a>00911 <span class="preprocessor"></span>                        <span class="keywordtype">void</span>* lref = &*my_locals.<a class="code" href="a00161.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(padded_element());
-<a name="l00912"></a>00912 <span class="preprocessor">#endif</span>
-<a name="l00913"></a>00913 <span class="preprocessor"></span>                        s2.ptr = <span class="keyword">new</span>(lref) T(*(U*)s1.ptr);
-<a name="l00914"></a>00914                         s2.key = s1.key;
-<a name="l00915"></a>00915                     } <span class="keywordflow">else</span> {
-<a name="l00916"></a>00916                         <span class="comment">// Skip the duplicate</span>
-<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     }
-<a name="l00922"></a>00922 
-<a name="l00923"></a>00923     <span class="keyword">template</span>< <span class="keyword">typename</span> Container >
-<a name="l00924"></a>00924     <span class="keyword">class </span>flattened2d {
-<a name="l00925"></a>00925 
-<a name="l00926"></a>00926         <span class="comment">// This intermediate typedef is to address issues with VC7.1 compilers</span>
-<a name="l00927"></a>00927         <span class="keyword">typedef</span> <span class="keyword">typename</span> Container::value_type conval_type;
-<a name="l00928"></a>00928 
-<a name="l00929"></a>00929     <span class="keyword">public</span>:
-<a name="l00930"></a>00930 
-<a name="l00932"></a>00932         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::size_type size_type;
-<a name="l00933"></a>00933         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::difference_type difference_type;
-<a name="l00934"></a>00934         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::allocator_type allocator_type;
-<a name="l00935"></a>00935         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::value_type value_type;
-<a name="l00936"></a>00936         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::reference reference;
-<a name="l00937"></a>00937         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::const_reference const_reference;
-<a name="l00938"></a>00938         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::pointer pointer;
-<a name="l00939"></a>00939         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::const_pointer const_pointer;
-<a name="l00940"></a>00940 
-<a name="l00941"></a>00941         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::segmented_iterator<Container, value_type> iterator;
-<a name="l00942"></a>00942         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::segmented_iterator<Container, const value_type> const_iterator;
-<a name="l00943"></a>00943 
-<a name="l00944"></a>00944         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="l00945"></a>00945             my_container(const_cast<Container*>(&c)), my_begin(b), my_end(e) { }
-<a name="l00946"></a>00946 
-<a name="l00947"></a>00947         flattened2d( <span class="keyword">const</span> Container &c ) : 
-<a name="l00948"></a>00948             my_container(const_cast<Container*>(&c)), my_begin(c.begin()), my_end(c.end()) { }
-<a name="l00949"></a>00949 
-<a name="l00950"></a>00950         iterator begin() { <span class="keywordflow">return</span> iterator(*my_container) = my_begin; }
-<a name="l00951"></a>00951         iterator end() { <span class="keywordflow">return</span> iterator(*my_container) = my_end; }
-<a name="l00952"></a>00952         const_iterator begin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(*my_container) = my_begin; }
-<a name="l00953"></a>00953         const_iterator end()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(*my_container) = my_end; }
-<a name="l00954"></a>00954 
-<a name="l00955"></a>00955         size_type size()<span class="keyword"> const </span>{
-<a name="l00956"></a>00956             size_type tot_size = 0;
-<a name="l00957"></a>00957             <span class="keywordflow">for</span>(<span class="keyword">typename</span> Container::const_iterator i = my_begin; i != my_end; ++i) {
-<a name="l00958"></a>00958                 tot_size += i->size();
-<a name="l00959"></a>00959             }
-<a name="l00960"></a>00960             <span class="keywordflow">return</span> tot_size;
-<a name="l00961"></a>00961         }
-<a name="l00962"></a>00962 
-<a name="l00963"></a>00963     <span class="keyword">private</span>:
-<a name="l00964"></a>00964 
-<a name="l00965"></a>00965         Container *my_container;
-<a name="l00966"></a>00966         <span class="keyword">typename</span> Container::const_iterator my_begin;
-<a name="l00967"></a>00967         <span class="keyword">typename</span> Container::const_iterator my_end;
-<a name="l00968"></a>00968 
-<a name="l00969"></a>00969     };
-<a name="l00970"></a>00970 
-<a name="l00971"></a>00971     <span class="keyword">template</span> <<span class="keyword">typename</span> Container>
-<a name="l00972"></a>00972     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="l00973"></a>00973         <span class="keywordflow">return</span> flattened2d<Container>(c, b, e);
-<a name="l00974"></a>00974     }
-<a name="l00975"></a>00975 
-<a name="l00976"></a>00976     <span class="keyword">template</span> <<span class="keyword">typename</span> Container>
-<a name="l00977"></a>00977     flattened2d<Container> flatten2d(<span class="keyword">const</span> Container &c) {
-<a name="l00978"></a>00978         <span class="keywordflow">return</span> flattened2d<Container>(c);
-<a name="l00979"></a>00979     }
-<a name="l00980"></a>00980 
-<a name="l00981"></a>00981 } <span class="comment">// interface6</span>
-<a name="l00982"></a>00982 
-<a name="l00983"></a>00983 <span class="keyword">namespace </span>internal {
-<a name="l00984"></a>00984 <span class="keyword">using</span> interface6::internal::segmented_iterator;
-<a name="l00985"></a>00985 }
-<a name="l00986"></a>00986 
-<a name="l00987"></a>00987 <span class="keyword">using</span> interface6::enumerable_thread_specific;
-<a name="l00988"></a>00988 <span class="keyword">using</span> interface6::flattened2d;
-<a name="l00989"></a>00989 <span class="keyword">using</span> interface6::flatten2d;
-<a name="l00990"></a>00990 
-<a name="l00991"></a>00991 } <span class="comment">// namespace tbb</span>
-<a name="l00992"></a>00992 
-<a name="l00993"></a>00993 <span class="preprocessor">#endif</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00362.html b/doc/html/a00362.html
new file mode 100644
index 0000000..e86456d
--- /dev/null
+++ b/doc/html/a00362.html
@@ -0,0 +1,746 @@
+<!DOCTYPE HTML 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="a00215.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="a00215.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="a00216.html">atomic</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Primary template for atomic.  <a href="a00216.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html">atomic< void * ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Specialization for <a class="el" href="a00217.html">atomic<void*></a>, for sake of not allowing arithmetic or operator->.  <a href="a00217.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00221.html">blocked_range</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A range over which to iterate.  <a href="a00221.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.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="a00222.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00223.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="a00223.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00226.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="a00226.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00227.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="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="a00229.html">combinable</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Thread-local storage with optional reduction.  <a href="a00229.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="a00300.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="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="a00230.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="a00230.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>tbb_hash</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00238.html">concurrent_vector</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Concurrent vector container.  <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="a00251.html">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="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="a00239.html">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="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="a00282.html">sender</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="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="a00277.html">receiver</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="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="a00241.html">continue_receiver</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Base class for receivers of completion messages.  <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="a00250.html">graph</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The graph class.  <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="a00285.html">source_node</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="a00285.html#_details">More...</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">function_node</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Implements a function node that supports Input -> Output.  <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="a00244.html">executable_node</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Implements an executable node that supports <a class="el" href="a00239.html">continue_msg</a> -> Output.  <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"><b>overwrite_node</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>write_once_node</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html">continue_node</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Broadcasts completion message when it receives completion messages from all predecessors. Then resets.  <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="a00224.html">broadcast_node</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Forwards messages of type T to all successors.  <a href="a00224.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html">buffer_node</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Forwards messages in arbitrary order.  <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="a00269.html">queue_node</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Forwards messages in FIFO order.  <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="a00283.html">sequencer_node</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Forwards messages in sequence order.  <a href="a00283.html#_details">More...</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">priority_queue_node</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Forwards messages in priority order.  <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="a00255.html">limiter_node</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Forwards messages only if the threshold has not been reached.  <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"><b>join_node</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00258.html">mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Wrapper around the platform's native reader-writer lock.  <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="a00260.html">null_mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A mutex which does nothing.  <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="a00262.html">null_rw_mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A rw mutex which does nothing.  <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="a00264.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="a00264.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="a00267.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="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="a00247.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="a00247.html#_details">More...</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">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="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="a00284.html">simple_partitioner</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A simple partitioner.  <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="a00219.html">auto_partitioner</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">An auto partitioner.  <a href="a00219.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00212.html">affinity_partitioner</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">An affinity partitioner.  <a href="a00212.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00245.html">filter</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A stage in a pipeline.  <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="a00301.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="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="a00266.html">pipeline</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A processing pipeline that applies filters to items.  <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="a00270.html">queuing_mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Queuing lock with local-only spinning.  <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="a00272.html">queuing_rw_mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Reader-writer lock with local-only spinning.  <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="a00278.html">recursive_mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Mutex that allows recursive mutex acquisition.  <a href="a00278.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00280.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="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="a00281.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="a00281.html#_details">More...</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">spin_mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A lock that occupies a single byte.  <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="a00288.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="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="a00293.html">task_group_context</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Used to form groups of tasks.  <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="a00291.html">task</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Base class for user-defined tasks.  <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="a00242.html">empty_task</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">task that does nothing. Useful for synchronization.  <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="a00294.html">task_list</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A list of children.  <a href="a00294.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="a00295.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="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="a00296.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="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_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="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="a00306.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="a00306.html#_details">More...</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">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="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="a00220.html">bad_last_alloc</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Exception for concurrent containers.  <a href="a00220.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00252.html">improper_lock</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Exception for PPL locks.  <a href="a00252.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00256.html">missing_wait</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Exception for missing wait on structured_task_group.  <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="a00253.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="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="a00298.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="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="a00228.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="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="a00257.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="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="a00290.html">split</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Dummy type that distinguishes splitting constructor from copy constructor.  <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="a00302.html">tick_count</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Absolute timestamp.  <a href="a00302.html#_details">More...</a><br></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00370.html">strict_ppl</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <br></td></tr>
+
+<p>
+<tr><td colspan="2"><br><h2>parallel_do</h2></td></tr>
+<tr><td colspan="2">See also requirements on <a class="el" href="parallel_do_body_req.html">parallel_do Body</a>. <br><br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g3383e2703977012b6f384d673410f1f7"></a><!-- doxytag: member="tbb::parallel_do" ref="g3383e2703977012b6f384d673410f1f7" args="(Iterator first, Iterator last, const Body &body)" -->
+template<typename Iterator, typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00371.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="a00371.html#g2617dc9b88b3285a7212599d49f74228">parallel_do</a> (Iterator first, Iterator last, const Body &body, <a class="el" href="a00293.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="a00371.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="a00371.html#g13cac5dd55c7533bccea43a51c33d0e5">parallel_for</a> (const Range &range, const Body &body, const <a class="el" href="a00284.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="a00371.html#ga7ac75d532389b55b9247f3fdb0b00d1">parallel_for</a> (const Range &range, const Body &body, const <a class="el" href="a00219.html">auto_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with <a class="el" href="a00219.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="a00371.html#g9cd1b210ceb1c040f30e390b4a21bde8">parallel_for</a> (const Range &range, const Body &body, <a class="el" href="a00212.html">affinity_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with <a class="el" href="a00212.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="a00371.html#g2d317a5e0078cd193125439fed60dfdc">parallel_for</a> (const Range &range, const Body &body, const <a class="el" href="a00284.html">simple_partitioner</a> &partitioner, <a class="el" href="a00293.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="a00371.html#g1c0700e3f85e83a788ff3ede88ebb7e9">parallel_for</a> (const Range &range, const Body &body, const <a class="el" href="a00219.html">auto_partitioner</a> &partitioner, <a class="el" href="a00293.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="a00219.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="a00371.html#g04b4696b67370c01353ff5974c8f1196">parallel_for</a> (const Range &range, const Body &body, <a class="el" href="a00212.html">affinity_partitioner</a> &partitioner, <a class="el" href="a00293.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="a00212.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="a00371.html#gcd40c32f319747e61a8f73fcfc452001">parallel_for_each</a> (InputIterator first, InputIterator last, const Function &f, <a class="el" href="a00293.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="a00371.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="a00371.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a> (const F0 &f0, const F1 &f1, <a class="el" href="a00293.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="a00293.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="a00293.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="a00293.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="a00293.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="a00293.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="a00293.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="a00293.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="a00293.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="a00371.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="a00371.html#gec1b7c03f9da909bef5db12e3d41bed3">parallel_reduce</a> (const Range &range, Body &body, const <a class="el" href="a00284.html">simple_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00284.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="a00371.html#g18a19157e6245992fc00ca0adeb7dd37">parallel_reduce</a> (const Range &range, Body &body, const <a class="el" href="a00219.html">auto_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00219.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="a00371.html#gc61e73fcc36c92d79a217fc355ff4a6b">parallel_reduce</a> (const Range &range, Body &body, <a class="el" href="a00212.html">affinity_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00212.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="a00371.html#g45cb00c42a18e334bbde8b7535afe460">parallel_reduce</a> (const Range &range, Body &body, const <a class="el" href="a00284.html">simple_partitioner</a> &partitioner, <a class="el" href="a00293.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="a00371.html#g1c1ea1d7c61b3c225e92c70d669a53a5">parallel_reduce</a> (const Range &range, Body &body, const <a class="el" href="a00219.html">auto_partitioner</a> &partitioner, <a class="el" href="a00293.html">task_group_context</a> &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00219.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="a00371.html#gd9ac3a3811060314695f33b703c6e11b">parallel_reduce</a> (const Range &range, Body &body, <a class="el" href="a00212.html">affinity_partitioner</a> &partitioner, <a class="el" href="a00293.html">task_group_context</a> &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00212.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="a00371.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="a00371.html#gaddffeec0e892ac3d6fc7fc2053e1eca">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const <a class="el" href="a00284.html">simple_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00284.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="a00371.html#gb175401f0729e40dd2c5860a17c14385">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const <a class="el" href="a00219.html">auto_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00219.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="a00371.html#gb7f1f1828ae2b330ce05b8513a495154">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, <a class="el" href="a00212.html">affinity_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00212.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="a00371.html#gfbc0cc2026d87f11a96bcd62788f5bb5">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const <a class="el" href="a00284.html">simple_partitioner</a> &partitioner, <a class="el" href="a00293.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="a00371.html#g630c90a399937d9d4ae70ff883186dfd">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const <a class="el" href="a00219.html">auto_partitioner</a> &partitioner, <a class="el" href="a00293.html">task_group_context</a> &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00219.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="a00371.html#g496bd7eadb3b97495ccb5655ef90319e">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, <a class="el" href="a00212.html">affinity_partitioner</a> &partitioner, <a class="el" href="a00293.html">task_group_context</a> &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00212.html">affinity_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td colspan="2"><br><h2>parallel_scan</h2></td></tr>
+<tr><td colspan="2">See also requirements on <a class="el" href="range_req.html">Range</a> and <a class="el" href="parallel_scan_body_req.html">parallel_scan Body</a>. <br><br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ged143f31dd3d96ded02ab3db915b91c7"></a><!-- doxytag: member="tbb::parallel_scan" ref="ged143f31dd3d96ded02ab3db915b91c7" args="(const Range &range, Body &body)" -->
+template<typename Range, typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00371.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="a00371.html#gc9fac8870b2e6365fb337014404529df">parallel_scan</a> (const Range &range, Body &body, const <a class="el" href="a00284.html">simple_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with <a class="el" href="a00284.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="a00371.html#g62fde400a37bbca1a2fddc8e3d22f556">parallel_scan</a> (const Range &range, Body &body, const <a class="el" href="a00219.html">auto_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with <a class="el" href="a00219.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="a00371.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="a00371.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="a00371.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="a00371.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="a00288.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="a00362.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="a00362.html#a8686246bb5d3664bd07563749970fef">memory_semantics</a> { <a class="el" href="a00362.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">__TBB_full_fence</a>, 
+<a class="el" href="a00362.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>, 
+<a class="el" href="a00362.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>
+ }</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Specifies memory fencing.  <a href="a00362.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="a00362.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="a00362.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="a00216.html">atomic</a>< T * ></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Specialization for atomic<T*> with arithmetic and operator->. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="7af9509624a62ea848afe775f892ed12"></a><!-- doxytag: member="tbb::operator==" ref="7af9509624a62ea848afe775f892ed12" args="(const cache_aligned_allocator< T > &, const cache_aligned_allocator< U > &)" -->
+template<typename T, typename U> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00226.html">cache_aligned_allocator</a>< T > &, const <a class="el" href="a00226.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="a00226.html">cache_aligned_allocator</a>< T > &, const <a class="el" href="a00226.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="a00231.html">concurrent_hash_map</a>< Key, T, HashCompare, A1 > &a, const <a class="el" href="a00231.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="a00231.html">concurrent_hash_map</a>< Key, T, HashCompare, A1 > &a, const <a class="el" href="a00231.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="a00231.html">concurrent_hash_map</a>< Key, T, HashCompare, A > &a, <a class="el" href="a00231.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="a00238.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00238.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="a00238.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00238.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="a00238.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00238.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="a00238.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00238.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="a00238.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00238.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="a00238.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00238.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="a00238.html">concurrent_vector</a>< T, A > &a, <a class="el" href="a00238.html">concurrent_vector</a>< T, A > &b)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="0a5a2559e7d28a9bf8f9e5e60d745e86"></a><!-- doxytag: member="tbb::make_edge" ref="0a5a2559e7d28a9bf8f9e5e60d745e86" 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="a00362.html#0a5a2559e7d28a9bf8f9e5e60d745e86">make_edge</a> (<a class="el" href="a00282.html">sender</a>< T > &p, <a class="el" href="a00277.html">receiver</a>< 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="ac6def751039959ab7ab1e52c8535fd3"></a><!-- doxytag: member="tbb::make_edges" ref="ac6def751039959ab7ab1e52c8535fd3" args="(sender< T > &p, SIterator s_begin, SIterator s_end)" -->
+template<typename T, typename SIterator> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00362.html#ac6def751039959ab7ab1e52c8535fd3">make_edges</a> (<a class="el" href="a00282.html">sender</a>< T > &p, SIterator s_begin, SIterator s_end)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Makes edges between a single predecessor and multiple successors. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="9368d2f689961f790bf7aa4a8cc1135e"></a><!-- doxytag: member="tbb::make_edges" ref="9368d2f689961f790bf7aa4a8cc1135e" args="(PIterator p_begin, PIterator p_end, receiver< T > &s)" -->
+template<typename T, typename PIterator> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00362.html#9368d2f689961f790bf7aa4a8cc1135e">make_edges</a> (PIterator p_begin, PIterator p_end, <a class="el" href="a00277.html">receiver</a>< T > &s)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Makes edges between a set of predecessors and a single successor. <br></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="a00280.html">scalable_allocator</a>< T > &, const <a class="el" href="a00280.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="a00280.html">scalable_allocator</a>< T > &, const <a class="el" href="a00280.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="a00296.html">tbb_allocator</a>< T > &, const <a class="el" href="a00296.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="a00296.html">tbb_allocator</a>< T > &, const <a class="el" href="a00296.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="a00306.html">zero_allocator</a>< T1, B1 > &a, const <a class="el" href="a00306.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="a00306.html">zero_allocator</a>< T1, B1 > &a, const <a class="el" href="a00306.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="a00362.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="a00362.html#ed375248ff6019a70ca0f9da528e5d0b">assertion_handler_type</a> __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00362.html#823fa1c15dd829d1d9167157450ddcd9">set_assertion_handler</a> (<a class="el" href="a00362.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="a00362.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="a00362.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="a00303.html">tick_count::interval_t</a> </td><td class="memItemRight" valign="bottom"><b>operator-</b> (const <a class="el" href="a00302.html">tick_count</a> &t1, const <a class="el" href="a00302.html">tick_count</a> &t0)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+The namespace tbb contains all components of the library. <hr><h2>Enumeration Type Documentation</h2>
+<a class="anchor" name="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="a00362.html#a8686246bb5d3664bd07563749970fef">tbb::memory_semantics</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Specifies memory fencing. 
+<p>
+<dl compact><dt><b>Enumerator: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c"></a><!-- doxytag: member="__TBB_full_fence" ref="a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c" args="" -->__TBB_full_fence</em> </td><td>
+For internal use only. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7"></a><!-- doxytag: member="acquire" ref="a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7" args="" -->acquire</em> </td><td>
+Acquire fence. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70"></a><!-- doxytag: member="release" ref="a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70" args="" -->release</em> </td><td>
+Release fence. </td></tr>
+</table>
+</dl>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="3d1252787be39b4aef311f1cadaff9e8"></a><!-- doxytag: member="tbb::assertion_failure" ref="3d1252787be39b4aef311f1cadaff9e8" args="(const char *filename, int line, const char *expression, const char *comment)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __TBB_EXPORTED_FUNC tbb::assertion_failure           </td>
+          <td>(</td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"> <em>filename</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>line</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"> <em>expression</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"> <em>comment</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Process an assertion failure. 
+<p>
+Normally called from __TBB_ASSERT macro. If assertion handler is null, print message for assertion failure and abort. Otherwise call the assertion handler. 
+</div>
+</div><p>
+<a class="anchor" name="a6858b22e90041c9c4669674ff39b056"></a><!-- doxytag: member="tbb::TBB_runtime_interface_version" ref="a6858b22e90041c9c4669674ff39b056" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int __TBB_EXPORTED_FUNC tbb::TBB_runtime_interface_version           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The function returns the interface version of the TBB shared library being used. 
+<p>
+The version it returns is determined at runtime, not at compile/link time. So it can be different than the value of TBB_INTERFACE_VERSION obtained at compile time. 
+</div>
+</div><p>
+<hr>
+<p></p>
+Copyright © 2005-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/a00367.html b/doc/html/a00367.html
deleted file mode 100644
index 66a3ff4..0000000
--- a/doc/html/a00367.html
+++ /dev/null
@@ -1,245 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>mutex.h Source File</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li><a href="annotated.html"><span>Classes</span></a></li>
-    <li id="current"><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="files.html"><span>File List</span></a></li>
-    <li><a href="globals.html"><span>File Members</span></a></li>
-  </ul></div>
-<h1>mutex.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_mutex_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_mutex_H</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">    #include <windows.h></span>
-<a name="l00026"></a>00026 <span class="preprocessor">    #if !defined(_WIN32_WINNT)</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span>    <span class="comment">// The following Windows API function is declared explicitly;</span>
-<a name="l00028"></a>00028     <span class="comment">// otherwise any user would have to specify /D_WIN32_WINNT=0x0400</span>
-<a name="l00029"></a>00029     <span class="keyword">extern</span> <span class="stringliteral">"C"</span> BOOL WINAPI TryEnterCriticalSection( LPCRITICAL_SECTION );
-<a name="l00030"></a>00030 <span class="preprocessor">    #endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* if not _WIN32||_WIN64 */</span>
-<a name="l00032"></a>00032 <span class="preprocessor">    #include <pthread.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#include <new></span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include "aligned_space.h"</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "tbb_stddef.h"</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "tbb_profiling.h"</span>
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 <span class="keyword">namespace </span>tbb {
-<a name="l00041"></a>00041 
-<a name="l00043"></a>00043 
-<a name="l00045"></a><a class="code" href="a00172.html">00045</a> <span class="keyword">class </span><a class="code" href="a00172.html">mutex</a> {
-<a name="l00046"></a>00046 <span class="keyword">public</span>:
-<a name="l00048"></a><a class="code" href="a00172.html#05313cb77d4f85213103d4dab74ed454">00048</a>     <a class="code" href="a00172.html#05313cb77d4f85213103d4dab74ed454">mutex</a>() {
-<a name="l00049"></a>00049 <span class="preprocessor">#if TBB_USE_ASSERT || TBB_USE_THREADING_TOOLS</span>
-<a name="l00050"></a>00050 <span class="preprocessor"></span>    internal_construct();
-<a name="l00051"></a>00051 <span class="preprocessor">#else</span>
-<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
-<a name="l00053"></a>00053 <span class="preprocessor"></span>        InitializeCriticalSection(&impl);
-<a name="l00054"></a>00054 <span class="preprocessor">  #else</span>
-<a name="l00055"></a>00055 <span class="preprocessor"></span>        <span class="keywordtype">int</span> error_code = pthread_mutex_init(&impl,NULL);
-<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">"mutex: pthread_mutex_init failed"</span>);
-<a name="l00058"></a>00058 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64*/</span>
-<a name="l00059"></a>00059 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00060"></a>00060     };
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062     ~<a class="code" href="a00172.html">mutex</a>() {
-<a name="l00063"></a>00063 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00064"></a>00064 <span class="preprocessor"></span>        internal_destroy();
-<a name="l00065"></a>00065 <span class="preprocessor">#else</span>
-<a name="l00066"></a>00066 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
-<a name="l00067"></a>00067 <span class="preprocessor"></span>        DeleteCriticalSection(&impl);
-<a name="l00068"></a>00068 <span class="preprocessor">  #else</span>
-<a name="l00069"></a>00069 <span class="preprocessor"></span>        pthread_mutex_destroy(&impl); 
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00072"></a>00072 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00073"></a>00073     };
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075     <span class="keyword">class </span>scoped_lock;
-<a name="l00076"></a>00076     <span class="keyword">friend</span> <span class="keyword">class </span>scoped_lock;
-<a name="l00077"></a>00077 
-<a name="l00079"></a>00079 
-<a name="l00081"></a><a class="code" href="a00173.html">00081</a>     <span class="keyword">class </span><a class="code" href="a00173.html">scoped_lock</a> : internal::no_copy {
-<a name="l00082"></a>00082     <span class="keyword">public</span>:
-<a name="l00084"></a><a class="code" href="a00173.html#1d403ae51b484df5d86d85ae38f11e6e">00084</a>         <a class="code" href="a00173.html#1d403ae51b484df5d86d85ae38f11e6e">scoped_lock</a>() : my_mutex(NULL) {};
-<a name="l00085"></a>00085 
-<a name="l00087"></a><a class="code" href="a00173.html#605a6b9af0f8cdabdf81825e0de99600">00087</a>         <a class="code" href="a00173.html#1d403ae51b484df5d86d85ae38f11e6e">scoped_lock</a>( <a class="code" href="a00172.html">mutex</a>& <a class="code" href="a00172.html">mutex</a> ) {
-<a name="l00088"></a>00088             <a class="code" href="a00173.html#862e022841cdc522e4296a5533b22efd">acquire</a>( mutex );
-<a name="l00089"></a>00089         }
-<a name="l00090"></a>00090 
-<a name="l00092"></a><a class="code" href="a00173.html#0ebbbecaf4311e9df7362cb76ceaa368">00092</a>         <a class="code" href="a00173.html#0ebbbecaf4311e9df7362cb76ceaa368">~scoped_lock</a>() {
-<a name="l00093"></a>00093             <span class="keywordflow">if</span>( my_mutex ) 
-<a name="l00094"></a>00094                 <a class="code" href="a00173.html#0d51d18cd99df3b2e93bf07378d0992c">release</a>();
-<a name="l00095"></a>00095         }
-<a name="l00096"></a>00096 
-<a name="l00098"></a><a class="code" href="a00173.html#862e022841cdc522e4296a5533b22efd">00098</a>         <span class="keywordtype">void</span> <a class="code" href="a00173.html#862e022841cdc522e4296a5533b22efd">acquire</a>( <a class="code" href="a00172.html">mutex</a>& <a class="code" href="a00172.html">mutex</a> ) {
-<a name="l00099"></a>00099 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00100"></a>00100 <span class="preprocessor"></span>            internal_acquire(mutex);
-<a name="l00101"></a>00101 <span class="preprocessor">#else</span>
-<a name="l00102"></a>00102 <span class="preprocessor"></span>            mutex.<a class="code" href="a00172.html#4470e61c24c129a0299ca6c17240adbb">lock</a>();
-<a name="l00103"></a>00103             my_mutex = &mutex;
-<a name="l00104"></a>00104 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00105"></a>00105         }
-<a name="l00106"></a>00106 
-<a name="l00108"></a><a class="code" href="a00173.html#591e0c49b82bcedffcbe0923f1b915ec">00108</a>         <span class="keywordtype">bool</span> <a class="code" href="a00173.html#591e0c49b82bcedffcbe0923f1b915ec">try_acquire</a>( <a class="code" href="a00172.html">mutex</a>& <a class="code" href="a00172.html">mutex</a> ) {
-<a name="l00109"></a>00109 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00110"></a>00110 <span class="preprocessor"></span>            <span class="keywordflow">return</span> internal_try_acquire (mutex);
-<a name="l00111"></a>00111 <span class="preprocessor">#else</span>
-<a name="l00112"></a>00112 <span class="preprocessor"></span>            <span class="keywordtype">bool</span> result = mutex.<a class="code" href="a00172.html#4331652c79dea1c1131bd59ab161b234">try_lock</a>();
-<a name="l00113"></a>00113             <span class="keywordflow">if</span>( result )
-<a name="l00114"></a>00114                 my_mutex = &mutex;
-<a name="l00115"></a>00115             <span class="keywordflow">return</span> result;
-<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 
-<a name="l00120"></a><a class="code" href="a00173.html#0d51d18cd99df3b2e93bf07378d0992c">00120</a>         <span class="keywordtype">void</span> <a class="code" href="a00173.html#0d51d18cd99df3b2e93bf07378d0992c">release</a>() {
-<a name="l00121"></a>00121 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00122"></a>00122 <span class="preprocessor"></span>            internal_release ();
-<a name="l00123"></a>00123 <span class="preprocessor">#else</span>
-<a name="l00124"></a>00124 <span class="preprocessor"></span>            my_mutex-><a class="code" href="a00172.html#5fc9ef443ae75d966695546be399cc6b">unlock</a>();
-<a name="l00125"></a>00125             my_mutex = NULL;
-<a name="l00126"></a>00126 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00127"></a>00127         }
-<a name="l00128"></a>00128 
-<a name="l00129"></a>00129     <span class="keyword">private</span>:
-<a name="l00131"></a>00131         <a class="code" href="a00172.html">mutex</a>* my_mutex;
-<a name="l00132"></a>00132 
-<a name="l00134"></a>00134         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_acquire( <a class="code" href="a00172.html">mutex</a>& m );
-<a name="l00135"></a>00135 
-<a name="l00137"></a>00137         <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_try_acquire( <a class="code" href="a00172.html">mutex</a>& m );
-<a name="l00138"></a>00138 
-<a name="l00140"></a>00140         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_release();
-<a name="l00141"></a>00141 
-<a name="l00142"></a>00142         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00172.html">mutex</a>;
-<a name="l00143"></a>00143     };
-<a name="l00144"></a>00144 
-<a name="l00145"></a>00145     <span class="comment">// Mutex traits</span>
-<a name="l00146"></a>00146     <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="l00147"></a>00147     <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="l00148"></a>00148     <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="l00149"></a>00149 
-<a name="l00150"></a>00150     <span class="comment">// ISO C++0x compatibility methods</span>
-<a name="l00151"></a>00151 
-<a name="l00153"></a><a class="code" href="a00172.html#4470e61c24c129a0299ca6c17240adbb">00153</a>     <span class="keywordtype">void</span> <a class="code" href="a00172.html#4470e61c24c129a0299ca6c17240adbb">lock</a>() {
-<a name="l00154"></a>00154 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00155"></a>00155 <span class="preprocessor"></span>        <a class="code" href="a00141.html">aligned_space<scoped_lock,1></a> tmp;
-<a name="l00156"></a>00156         <span class="keyword">new</span>(tmp.<a class="code" href="a00141.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00173.html">scoped_lock</a>(*<span class="keyword">this</span>);
-<a name="l00157"></a>00157 <span class="preprocessor">#else</span>
-<a name="l00158"></a>00158 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
-<a name="l00159"></a>00159 <span class="preprocessor"></span>        EnterCriticalSection(&impl);
-<a name="l00160"></a>00160 <span class="preprocessor">  #else</span>
-<a name="l00161"></a>00161 <span class="preprocessor"></span>        pthread_mutex_lock(&impl);
-<a name="l00162"></a>00162 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00163"></a>00163 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00164"></a>00164     }
-<a name="l00165"></a>00165 
-<a name="l00167"></a>00167 
-<a name="l00168"></a><a class="code" href="a00172.html#4331652c79dea1c1131bd59ab161b234">00168</a>     <span class="keywordtype">bool</span> <a class="code" href="a00172.html#4331652c79dea1c1131bd59ab161b234">try_lock</a>() {
-<a name="l00169"></a>00169 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00170"></a>00170 <span class="preprocessor"></span>        <a class="code" href="a00141.html">aligned_space<scoped_lock,1></a> tmp;
-<a name="l00171"></a>00171         <a class="code" href="a00173.html">scoped_lock</a>& s = *tmp.<a class="code" href="a00141.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>();
-<a name="l00172"></a>00172         s.<a class="code" href="a00173.html#be42c8fe11cce1af4fe1e9eaab717567">my_mutex</a> = NULL;
-<a name="l00173"></a>00173         <span class="keywordflow">return</span> s.<a class="code" href="a00173.html#e86ffb41a026694b16637f78aa337874">internal_try_acquire</a>(*<span class="keyword">this</span>);
-<a name="l00174"></a>00174 <span class="preprocessor">#else</span>
-<a name="l00175"></a>00175 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
-<a name="l00176"></a>00176 <span class="preprocessor"></span>        <span class="keywordflow">return</span> TryEnterCriticalSection(&impl)!=0;
-<a name="l00177"></a>00177 <span class="preprocessor">  #else</span>
-<a name="l00178"></a>00178 <span class="preprocessor"></span>        <span class="keywordflow">return</span> pthread_mutex_trylock(&impl)==0;
-<a name="l00179"></a>00179 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00180"></a>00180 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00181"></a>00181     }
-<a name="l00182"></a>00182 
-<a name="l00184"></a><a class="code" href="a00172.html#5fc9ef443ae75d966695546be399cc6b">00184</a>     <span class="keywordtype">void</span> <a class="code" href="a00172.html#5fc9ef443ae75d966695546be399cc6b">unlock</a>() {
-<a name="l00185"></a>00185 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00186"></a>00186 <span class="preprocessor"></span>        <a class="code" href="a00141.html">aligned_space<scoped_lock,1></a> tmp;
-<a name="l00187"></a>00187         <a class="code" href="a00173.html">scoped_lock</a>& s = *tmp.<a class="code" href="a00141.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>();
-<a name="l00188"></a>00188         s.<a class="code" href="a00173.html#be42c8fe11cce1af4fe1e9eaab717567">my_mutex</a> = <span class="keyword">this</span>;
-<a name="l00189"></a>00189         s.<a class="code" href="a00173.html#448b7e9042afcdc455ea3f929ac4c594">internal_release</a>();
-<a name="l00190"></a>00190 <span class="preprocessor">#else</span>
-<a name="l00191"></a>00191 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
-<a name="l00192"></a>00192 <span class="preprocessor"></span>        LeaveCriticalSection(&impl);
-<a name="l00193"></a>00193 <span class="preprocessor">  #else</span>
-<a name="l00194"></a>00194 <span class="preprocessor"></span>        pthread_mutex_unlock(&impl);
-<a name="l00195"></a>00195 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00196"></a>00196 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00197"></a>00197     }
-<a name="l00198"></a>00198 
-<a name="l00200"></a>00200 <span class="preprocessor">  #if _WIN32||_WIN64</span>
-<a name="l00201"></a><a class="code" href="a00172.html#9f1ec84d5815263ceae853f06ddb4cac">00201</a> <span class="preprocessor"></span>    <span class="keyword">typedef</span> LPCRITICAL_SECTION <a class="code" href="a00172.html#9f1ec84d5815263ceae853f06ddb4cac">native_handle_type</a>;
-<a name="l00202"></a>00202 <span class="preprocessor">  #else</span>
-<a name="l00203"></a>00203 <span class="preprocessor"></span>    <span class="keyword">typedef</span> pthread_mutex_t* <a class="code" href="a00172.html#9f1ec84d5815263ceae853f06ddb4cac">native_handle_type</a>;
-<a name="l00204"></a>00204 <span class="preprocessor">  #endif</span>
-<a name="l00205"></a>00205 <span class="preprocessor"></span>    <a class="code" href="a00172.html#9f1ec84d5815263ceae853f06ddb4cac">native_handle_type</a> native_handle() { <span class="keywordflow">return</span> (<a class="code" href="a00172.html#9f1ec84d5815263ceae853f06ddb4cac">native_handle_type</a>) &impl; }
-<a name="l00206"></a>00206 
-<a name="l00207"></a>00207     <span class="keyword">enum</span> state_t {
-<a name="l00208"></a>00208         INITIALIZED=0x1234,
-<a name="l00209"></a>00209         DESTROYED=0x789A,
-<a name="l00210"></a>00210         HELD=0x56CD
-<a name="l00211"></a>00211     };
-<a name="l00212"></a>00212 <span class="keyword">private</span>:
-<a name="l00213"></a>00213 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00214"></a>00214 <span class="preprocessor"></span>    CRITICAL_SECTION impl;    
-<a name="l00215"></a>00215     <span class="keyword">enum</span> state_t state;
-<a name="l00216"></a>00216 <span class="preprocessor">#else</span>
-<a name="l00217"></a>00217 <span class="preprocessor"></span>    pthread_mutex_t impl;
-<a name="l00218"></a>00218 <span class="preprocessor">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00219"></a>00219 
-<a name="l00221"></a>00221     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct();
-<a name="l00222"></a>00222 
-<a name="l00224"></a>00224     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_destroy();
-<a name="l00225"></a>00225 
-<a name="l00226"></a>00226 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00227"></a>00227 <span class="preprocessor"></span><span class="keyword">public</span>:
-<a name="l00229"></a><a class="code" href="a00172.html#795649a185b0d6af6dc81c5f378616dd">00229</a>     <span class="keywordtype">void</span> <a class="code" href="a00172.html#795649a185b0d6af6dc81c5f378616dd">set_state</a>( state_t to ) { state = to; }
-<a name="l00230"></a>00230 <span class="preprocessor">#endif</span>
-<a name="l00231"></a>00231 <span class="preprocessor"></span>};
-<a name="l00232"></a>00232 
-<a name="l00233"></a>00233 __TBB_DEFINE_PROFILING_SET_NAME(mutex)
-<a name="l00234"></a>00234 
-<a name="l00235"></a>00235 } <span class="comment">// namespace tbb </span>
-<a name="l00236"></a>00236 
-<a name="l00237"></a>00237 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_mutex_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00369.html b/doc/html/a00369.html
deleted file mode 100644
index 4713d74..0000000
--- a/doc/html/a00369.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-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_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="a00174.html">00029</a> <span class="keyword">class </span><a class="code" href="a00174.html">null_mutex</a> {   
-<a name="l00031"></a>00031     <a class="code" href="a00174.html">null_mutex</a>( <span class="keyword">const</span> <a class="code" href="a00174.html">null_mutex</a>& );   
-<a name="l00032"></a>00032     <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> <a class="code" href="a00174.html">null_mutex</a>& );   
-<a name="l00033"></a>00033 <span class="keyword">public</span>:   
-<a name="l00035"></a><a class="code" href="a00175.html">00035</a>     <span class="keyword">class </span><a class="code" href="a00175.html">scoped_lock</a> {   
-<a name="l00036"></a>00036     <span class="keyword">public</span>:   
-<a name="l00037"></a>00037         <a class="code" href="a00175.html">scoped_lock</a>() {}
-<a name="l00038"></a>00038         <a class="code" href="a00175.html">scoped_lock</a>( <a class="code" href="a00174.html">null_mutex</a>& ) {}   
-<a name="l00039"></a>00039         ~<a class="code" href="a00175.html">scoped_lock</a>() {}
-<a name="l00040"></a>00040         <span class="keywordtype">void</span> acquire( <a class="code" href="a00174.html">null_mutex</a>& ) {}
-<a name="l00041"></a>00041         <span class="keywordtype">bool</span> try_acquire( <a class="code" href="a00174.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="a00174.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-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00370.html b/doc/html/a00370.html
index b2fc592..e113fb8 100644
--- a/doc/html/a00370.html
+++ b/doc/html/a00370.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>null_rw_mutex.h Source File</title>
+<title>tbb::strict_ppl Namespace Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -9,72 +9,50 @@
   <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>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-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_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="a00176.html">00029</a> <span class="keyword">class </span><a class="code" href="a00176.html">null_rw_mutex</a> {
-<a name="l00031"></a>00031     <a class="code" href="a00176.html">null_rw_mutex</a>( <span class="keyword">const</span> <a class="code" href="a00176.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="a00176.html">null_rw_mutex</a>& );   
-<a name="l00033"></a>00033 <span class="keyword">public</span>:   
-<a name="l00035"></a><a class="code" href="a00177.html">00035</a>     <span class="keyword">class </span><a class="code" href="a00177.html">scoped_lock</a> {   
-<a name="l00036"></a>00036     <span class="keyword">public</span>:   
-<a name="l00037"></a>00037         <a class="code" href="a00177.html">scoped_lock</a>() {}
-<a name="l00038"></a>00038         <a class="code" href="a00177.html">scoped_lock</a>( <a class="code" href="a00176.html">null_rw_mutex</a>& , <span class="keywordtype">bool</span> = <span class="keyword">true</span> ) {}
-<a name="l00039"></a>00039         ~<a class="code" href="a00177.html">scoped_lock</a>() {}
-<a name="l00040"></a>00040         <span class="keywordtype">void</span> acquire( <a class="code" href="a00176.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="a00176.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="a00176.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>
+<div class="nav">
+<a class="el" href="a00362.html">tbb</a>::<a class="el" href="a00370.html">strict_ppl</a></div>
+<h1>tbb::strict_ppl Namespace Reference</h1>For internal use only.  
+<a href="#_details">More...</a>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html">concurrent_queue</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A high-performance thread-safe non-blocking concurrent queue.  <a href="a00236.html#_details">More...</a><br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="15c764c70c8a32e7a4b8c291d0cc8dde"></a><!-- doxytag: member="tbb::strict_ppl::parallel_for" ref="15c764c70c8a32e7a4b8c291d0cc8dde" args="(Index first, Index last, Index step, const Function &f)" -->
+template<typename Index, typename Function> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00370.html#15c764c70c8a32e7a4b8c291d0cc8dde">parallel_for</a> (Index first, Index last, Index step, const Function &f)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over a range of integers with a step provided. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="fb5925ad98ec9608139661cfd2b9b88f"></a><!-- doxytag: member="tbb::strict_ppl::parallel_for" ref="fb5925ad98ec9608139661cfd2b9b88f" args="(Index first, Index last, Index step, const Function &f, tbb::task_group_context &context)" -->
+template<typename Index, typename Function> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_for</b> (Index first, Index last, Index step, const Function &f, <a class="el" href="a00293.html">tbb::task_group_context</a> &context)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="490399525b1e690ec31d6db964c6b272"></a><!-- doxytag: member="tbb::strict_ppl::parallel_for" ref="490399525b1e690ec31d6db964c6b272" args="(Index first, Index last, const Function &f)" -->
+template<typename Index, typename Function> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00370.html#490399525b1e690ec31d6db964c6b272">parallel_for</a> (Index first, Index last, const Function &f)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over a range of integers with a default step value. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="bda0b331c88a836cb756fff0f661d609"></a><!-- doxytag: member="tbb::strict_ppl::parallel_for" ref="bda0b331c88a836cb756fff0f661d609" args="(Index first, Index last, const Function &f, tbb::task_group_context &context)" -->
+template<typename Index, typename Function> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_for</b> (Index first, Index last, const Function &f, <a class="el" href="a00293.html">tbb::task_group_context</a> &context)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+For internal use only. <hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00371.html b/doc/html/a00371.html
index e5833ed..286e5b1 100644
--- a/doc/html/a00371.html
+++ b/doc/html/a00371.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>parallel_do.h Source File</title>
+<title>Algorithms</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -11,467 +11,331 @@
     <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>parallel_do.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<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="a00178.html">00060</a> <span class="keyword">class </span><a class="code" href="a00178.html">parallel_do_feeder</a>: internal::no_copy
-<a name="l00061"></a>00061 {
-<a name="l00062"></a>00062     <a class="code" href="a00178.html">parallel_do_feeder</a>() {}
-<a name="l00063"></a>00063     <span class="keyword">virtual</span> ~<a class="code" href="a00178.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="a00178.html#40baaf0f6856f4491dd0adf896c93516">00068</a>     <span class="keywordtype">void</span> <a class="code" href="a00178.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="a00199.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="a00201.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="a00199.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="a00275.html#g3383e2703977012b6f384d673410f1f7">00470</a> <span class="keywordtype">void</span> <a class="code" href="a00275.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="a00201.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="a00275.html#g2617dc9b88b3285a7212599d49f74228">00488</a> <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="a00275.html#g3383e2703977012b6f384d673410f1f7">parallel_do</a>( Iterator first, Iterator last, <span class="keyword">const</span> Body& body, <a class="code" href="a00201.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>
+<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="a00221.html">tbb::blocked_range< Value ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A range over which to iterate.  <a href="a00221.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.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="a00222.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00223.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="a00223.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="a00267.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="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="a00247.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="a00247.html#_details">More...</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::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="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="a00284.html">tbb::simple_partitioner</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A simple partitioner.  <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="a00219.html">tbb::auto_partitioner</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">An auto partitioner.  <a href="a00219.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00245.html">tbb::filter</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A stage in a pipeline.  <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="a00301.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="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="a00266.html">tbb::pipeline</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A processing pipeline that applies filters to items.  <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="a00290.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="a00290.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="a00371.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="a00371.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="a00371.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="a00371.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="a00371.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="a00219.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="a00371.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="a00212.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="a00371.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="a00371.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="a00219.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="a00371.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="a00212.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="a00371.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="a00371.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="a00371.html#gd3e2998f171494f94c2103f4eb924084">tbb::parallel_invoke</a> (const F0 &f0, const F1 &f1, <a class="el" href="a00293.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="a00293.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="a00293.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="a00293.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="a00293.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="a00293.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="a00293.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="a00293.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="a00293.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="a00371.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="a00371.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="a00284.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="a00371.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="a00219.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="a00371.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="a00212.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="a00371.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="a00371.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="a00219.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="a00371.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="a00212.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="a00371.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="a00371.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="a00284.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="a00371.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="a00219.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="a00371.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="a00212.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="a00371.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="a00371.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="a00219.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="a00371.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="a00212.html">affinity_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td colspan="2"><br><h2>parallel_scan</h2></td></tr>
+<tr><td colspan="2">See also requirements on <a class="el" href="range_req.html">Range</a> and <a class="el" href="parallel_scan_body_req.html">parallel_scan Body</a>. <br><br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ged143f31dd3d96ded02ab3db915b91c7"></a><!-- doxytag: member="algorithms::parallel_scan" ref="ged143f31dd3d96ded02ab3db915b91c7" args="(const Range &range, Body &body)" -->
+template<typename Range, typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00371.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="a00371.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="a00284.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="a00371.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="a00219.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="a00371.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="a00371.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="a00371.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-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00372.html b/doc/html/a00372.html
new file mode 100644
index 0000000..a7e1e0d
--- /dev/null
+++ b/doc/html/a00372.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="a00229.html">tbb::combinable< T ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Thread-local storage with optional reduction.  <a href="a00229.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html">tbb::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="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="a00236.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="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="a00230.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="a00230.html#_details">More...</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::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="a00237.html#_details">More...</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::concurrent_vector< T, A ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Concurrent vector container.  <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="a00243.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="a00243.html">enumerable_thread_specific</a> container.  <a href="a00243.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/a00373.html b/doc/html/a00373.html
new file mode 100644
index 0000000..5eb792c
--- /dev/null
+++ b/doc/html/a00373.html
@@ -0,0 +1,313 @@
+<!DOCTYPE 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="a00215.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="a00215.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00226.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="a00226.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00227.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="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="a00280.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="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="a00281.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="a00281.html#_details">More...</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::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="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::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="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="a00306.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="a00306.html#_details">More...</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::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="a00307.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="a00373.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="a00373.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="a00373.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="a00373.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="a00373.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="a00373.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="a00373.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="a00373.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="a00373.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/a00374.html b/doc/html/a00374.html
new file mode 100644
index 0000000..9a0d85b
--- /dev/null
+++ b/doc/html/a00374.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>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="a00216.html">tbb::atomic< T ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Primary template for atomic.  <a href="a00216.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00258.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="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="a00260.html">tbb::null_mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A mutex which does nothing.  <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="a00262.html">tbb::null_rw_mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A rw mutex which does nothing.  <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="a00270.html">tbb::queuing_mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Queuing lock with local-only spinning.  <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="a00272.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="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="a00274.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="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="a00278.html">tbb::recursive_mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Mutex that allows recursive mutex acquisition.  <a href="a00278.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00286.html">tbb::spin_mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A lock that occupies a single byte.  <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="a00288.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="a00288.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/a00375.html b/doc/html/a00375.html
new file mode 100644
index 0000000..f797583
--- /dev/null
+++ b/doc/html/a00375.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="a00302.html">tbb::tick_count</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Absolute timestamp.  <a href="a00302.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/a00376.html b/doc/html/a00376.html
new file mode 100644
index 0000000..001c4bc
--- /dev/null
+++ b/doc/html/a00376.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="a00293.html">tbb::task_group_context</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Used to form groups of tasks.  <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="a00291.html">tbb::task</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Base class for user-defined tasks.  <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="a00242.html">tbb::empty_task</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">task that does nothing. Useful for synchronization.  <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="a00294.html">tbb::task_list</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A list of children.  <a href="a00294.html#_details">More...</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::task_scheduler_init</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Class delimiting the scope of task scheduler activity.  <a href="a00295.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/a00377.html b/doc/html/a00377.html
new file mode 100644
index 0000000..1c71169
--- /dev/null
+++ b/doc/html/a00377.html
@@ -0,0 +1,159 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>_aggregator_internal.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File List</span></a></li>
+    <li><a href="globals.html"><span>File Members</span></a></li>
+  </ul></div>
+<h1>_aggregator_internal.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-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_aggregator_internal_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_aggregator_internal_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 "tbb_profiling.h"</span>
+<a name="l00026"></a>00026 
+<a name="l00027"></a><a class="code" href="a00362.html">00027</a> <span class="keyword">namespace </span>tbb {
+<a name="l00028"></a>00028 <span class="keyword">namespace </span>interface6 {
+<a name="l00029"></a>00029 <span class="keyword">namespace </span>internal {
+<a name="l00030"></a>00030 
+<a name="l00031"></a>00031 <span class="keyword">using namespace </span>tbb::internal;
+<a name="l00032"></a>00032 
+<a name="l00034"></a>00034 <span class="keyword">template</span> <<span class="keyword">typename</span> Derived>
+<a name="l00035"></a><a class="code" href="a00213.html">00035</a> <span class="keyword">class </span><a class="code" href="a00213.html">aggregated_operation</a> {
+<a name="l00036"></a>00036  <span class="keyword">public</span>:
+<a name="l00037"></a>00037     uintptr_t status;
+<a name="l00038"></a>00038     Derived *next;
+<a name="l00039"></a>00039     <a class="code" href="a00213.html">aggregated_operation</a>() : status(0), next(NULL) {}
+<a name="l00040"></a>00040 };
+<a name="l00041"></a>00041 
+<a name="l00043"></a>00043 
+<a name="l00048"></a>00048  <span class="keyword">template</span> < <span class="keyword">typename</span> handler_type, <span class="keyword">typename</span> operation_type >
+<a name="l00049"></a><a class="code" href="a00214.html">00049</a> <span class="keyword">class </span><a class="code" href="a00214.html">aggregator</a> {
+<a name="l00050"></a>00050  <span class="keyword">public</span>:
+<a name="l00051"></a>00051     <a class="code" href="a00214.html">aggregator</a>() : handler_busy(<span class="keyword">false</span>) { pending_operations = NULL; }
+<a name="l00052"></a>00052     ~<a class="code" href="a00214.html">aggregator</a>() {}
+<a name="l00053"></a>00053 
+<a name="l00054"></a>00054     <span class="keywordtype">void</span> initialize_handler(handler_type h) { handle_operations = h; }
+<a name="l00055"></a>00055 
+<a name="l00057"></a>00057 
+<a name="l00059"></a><a class="code" href="a00214.html#282d5a2f1216b185c91ed23d00119481">00059</a>     <span class="keywordtype">void</span> <a class="code" href="a00214.html#282d5a2f1216b185c91ed23d00119481">execute</a>(operation_type *op) {
+<a name="l00060"></a>00060         operation_type *res;
+<a name="l00061"></a>00061 
+<a name="l00062"></a>00062         <span class="comment">// ITT note: &(op->status) tag is used to cover accesses to this op node. This</span>
+<a name="l00063"></a>00063         <span class="comment">// thread has created the operation, and now releases it so that the handler</span>
+<a name="l00064"></a>00064         <span class="comment">// thread may handle the associated operation w/o triggering a race condition;</span>
+<a name="l00065"></a>00065         <span class="comment">// thus this tag will be acquired just before the operation is handled in the</span>
+<a name="l00066"></a>00066         <span class="comment">// handle_operations functor.</span>
+<a name="l00067"></a>00067         call_itt_notify(releasing, &(op->status));
+<a name="l00068"></a>00068         <span class="comment">// insert the operation in the queue</span>
+<a name="l00069"></a>00069         <span class="keywordflow">do</span> {
+<a name="l00070"></a>00070             <span class="comment">// ITT may flag the following line as a race; it is a false positive:</span>
+<a name="l00071"></a>00071             <span class="comment">// This is an atomic read; we don't provide itt_hide_load_word for atomics</span>
+<a name="l00072"></a>00072             op->next = res = pending_operations; <span class="comment">// NOT A RACE </span>
+<a name="l00073"></a>00073         } <span class="keywordflow">while</span> (pending_operations.compare_and_swap(op, res) != res);
+<a name="l00074"></a>00074         <span class="keywordflow">if</span> (!res) { <span class="comment">// first in the list; handle the operations</span>
+<a name="l00075"></a>00075             <span class="comment">// ITT note: &pending_operations tag covers access to the handler_busy flag,</span>
+<a name="l00076"></a>00076             <span class="comment">// which this waiting handler thread will try to set before entering</span>
+<a name="l00077"></a>00077             <span class="comment">// handle_operations.</span>
+<a name="l00078"></a>00078             call_itt_notify(acquired, &pending_operations);
+<a name="l00079"></a>00079             start_handle_operations();
+<a name="l00080"></a>00080             __TBB_ASSERT(op->status, NULL);
+<a name="l00081"></a>00081         }
+<a name="l00082"></a>00082         <span class="keywordflow">else</span> { <span class="comment">// not first; wait for op to be ready</span>
+<a name="l00083"></a>00083             call_itt_notify(prepare, &(op->status));
+<a name="l00084"></a>00084             spin_wait_while_eq(op->status, uintptr_t(0));
+<a name="l00085"></a>00085             itt_load_word_with_acquire(op->status);
+<a name="l00086"></a>00086         }
+<a name="l00087"></a>00087     }
+<a name="l00088"></a>00088 
+<a name="l00089"></a>00089  <span class="keyword">private</span>:
+<a name="l00091"></a>00091     <a class="code" href="a00216.html">atomic<operation_type *></a> pending_operations;
+<a name="l00093"></a>00093     uintptr_t handler_busy;
+<a name="l00094"></a>00094     handler_type handle_operations;
+<a name="l00095"></a>00095 
+<a name="l00097"></a>00097     <span class="keywordtype">void</span> start_handle_operations() {
+<a name="l00098"></a>00098         operation_type *op_list;
+<a name="l00099"></a>00099 
+<a name="l00100"></a>00100         <span class="comment">// ITT note: &handler_busy tag covers access to pending_operations as it is passed</span>
+<a name="l00101"></a>00101         <span class="comment">// between active and waiting handlers.  Below, the waiting handler waits until</span>
+<a name="l00102"></a>00102         <span class="comment">// the active handler releases, and the waiting handler acquires &handler_busy as</span>
+<a name="l00103"></a>00103         <span class="comment">// it becomes the active_handler. The release point is at the end of this</span>
+<a name="l00104"></a>00104         <span class="comment">// function, when all operations in pending_operations have been handled by the</span>
+<a name="l00105"></a>00105         <span class="comment">// owner of this aggregator.</span>
+<a name="l00106"></a>00106         call_itt_notify(prepare, &handler_busy);
+<a name="l00107"></a>00107         <span class="comment">// get the handler_busy:</span>
+<a name="l00108"></a>00108         <span class="comment">// only one thread can possibly spin here at a time</span>
+<a name="l00109"></a>00109         spin_wait_until_eq(handler_busy, uintptr_t(0));
+<a name="l00110"></a>00110         call_itt_notify(acquired, &handler_busy);
+<a name="l00111"></a>00111         <span class="comment">// acquire fence not necessary here due to causality rule and surrounding atomics</span>
+<a name="l00112"></a>00112         __TBB_store_with_release(handler_busy, uintptr_t(1));
+<a name="l00113"></a>00113 
+<a name="l00114"></a>00114         <span class="comment">// ITT note: &pending_operations tag covers access to the handler_busy flag</span>
+<a name="l00115"></a>00115         <span class="comment">// itself. Capturing the state of the pending_operations signifies that</span>
+<a name="l00116"></a>00116         <span class="comment">// handler_busy has been set and a new active handler will now process that list's</span>
+<a name="l00117"></a>00117         <span class="comment">// operations.</span>
+<a name="l00118"></a>00118         call_itt_notify(releasing, &pending_operations);
+<a name="l00119"></a>00119         <span class="comment">// grab pending_operations</span>
+<a name="l00120"></a>00120         op_list = pending_operations.fetch_and_store(NULL);
+<a name="l00121"></a>00121 
+<a name="l00122"></a>00122         <span class="comment">// handle all the operations</span>
+<a name="l00123"></a>00123         handle_operations(op_list);
+<a name="l00124"></a>00124 
+<a name="l00125"></a>00125         <span class="comment">// release the handler</span>
+<a name="l00126"></a>00126         itt_store_word_with_release(handler_busy, uintptr_t(0));
+<a name="l00127"></a>00127     }
+<a name="l00128"></a>00128 };
+<a name="l00129"></a>00129 
+<a name="l00130"></a>00130 } <span class="comment">// namespace internal</span>
+<a name="l00131"></a>00131 } <span class="comment">// namespace interface6</span>
+<a name="l00132"></a>00132 
+<a name="l00133"></a>00133 <span class="keyword">namespace </span>internal {
+<a name="l00134"></a>00134     <span class="keyword">using</span> interface6::internal::aggregated_operation;
+<a name="l00135"></a>00135     <span class="keyword">using</span> interface6::internal::aggregator;
+<a name="l00136"></a>00136 } <span class="comment">// namespace internal</span>
+<a name="l00137"></a>00137 
+<a name="l00138"></a>00138 } <span class="comment">// namespace tbb</span>
+<a name="l00139"></a>00139 
+<a name="l00140"></a>00140 <span class="preprocessor">#endif</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/a00380.html b/doc/html/a00380.html
deleted file mode 100644
index c9b8394..0000000
--- a/doc/html/a00380.html
+++ /dev/null
@@ -1,235 +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-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_parallel_for_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_parallel_for_H</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include "task.h"</span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include "partitioner.h"</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include "blocked_range.h"</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include <new></span>
-<a name="l00028"></a>00028 <span class="preprocessor">#include "tbb_exception.h"</span>
-<a name="l00029"></a>00029 
-<a name="l00030"></a>00030 <span class="keyword">namespace </span>tbb {
-<a name="l00031"></a>00031 
-<a name="l00033"></a>00033 <span class="keyword">namespace </span>internal {
-<a name="l00034"></a>00034 
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037     <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner>
-<a name="l00038"></a>00038     <span class="keyword">class </span>start_for: <span class="keyword">public</span> task {
-<a name="l00039"></a>00039         Range my_range;
-<a name="l00040"></a>00040         <span class="keyword">const</span> Body my_body;
-<a name="l00041"></a>00041         <span class="keyword">typename</span> Partitioner::partition_type my_partition;
-<a name="l00042"></a>00042         <span class="comment">/*override*/</span> task* execute();
-<a name="l00043"></a>00043 
-<a name="l00045"></a>00045         start_for( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, Partitioner& partitioner ) :
-<a name="l00046"></a>00046             my_range(range),    
-<a name="l00047"></a>00047             my_body(body),
-<a name="l00048"></a>00048             my_partition(partitioner)
-<a name="l00049"></a>00049         {
-<a name="l00050"></a>00050         }
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053         start_for( start_for& parent_, split ) :
-<a name="l00054"></a>00054             my_range(parent_.my_range,split()),    
-<a name="l00055"></a>00055             my_body(parent_.my_body),
-<a name="l00056"></a>00056             my_partition(parent_.my_partition,split())
-<a name="l00057"></a>00057         {
-<a name="l00058"></a>00058             my_partition.set_affinity(*<span class="keyword">this</span>);
-<a name="l00059"></a>00059         }
-<a name="l00061"></a>00061         <span class="comment">/*override*/</span> <span class="keywordtype">void</span> note_affinity( affinity_id <span class="keywordtype">id</span> ) {
-<a name="l00062"></a>00062             my_partition.note_affinity( <span class="keywordtype">id</span> );
-<a name="l00063"></a>00063         }
-<a name="l00064"></a>00064     <span class="keyword">public</span>:
-<a name="l00065"></a>00065         <span class="keyword">static</span> <span class="keywordtype">void</span> run(  <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <span class="keyword">const</span> Partitioner& partitioner ) {
-<a name="l00066"></a>00066             <span class="keywordflow">if</span>( !range.empty() ) {
-<a name="l00067"></a>00067 #<span class="keywordflow">if</span> !__TBB_TASK_GROUP_CONTEXT || TBB_JOIN_OUTER_TASK_GROUP
-<a name="l00068"></a>00068                 start_for& a = *<span class="keyword">new</span>(<a class="code" href="a00199.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>()) start_for(range,body,const_cast<Partitioner&>(partitioner));
-<a name="l00069"></a>00069 <span class="preprocessor">#else</span>
-<a name="l00070"></a>00070 <span class="preprocessor"></span>                <span class="comment">// Bound context prevents exceptions from body to affect nesting or sibling algorithms,</span>
-<a name="l00071"></a>00071                 <span class="comment">// and allows users to handle exceptions safely by wrapping parallel_for in the try-block.</span>
-<a name="l00072"></a>00072                 task_group_context context;
-<a name="l00073"></a>00073                 start_for& a = *<span class="keyword">new</span>(task::allocate_root(context)) start_for(range,body,const_cast<Partitioner&>(partitioner));
-<a name="l00074"></a>00074 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT && !TBB_JOIN_OUTER_TASK_GROUP */</span>
-<a name="l00075"></a>00075                 <a class="code" href="a00199.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>(a);
-<a name="l00076"></a>00076             }
-<a name="l00077"></a>00077         }
-<a name="l00078"></a>00078 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00079"></a>00079 <span class="preprocessor"></span>        <span class="keyword">static</span> <span class="keywordtype">void</span> run(  <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <span class="keyword">const</span> Partitioner& partitioner, task_group_context& context ) {
-<a name="l00080"></a>00080             <span class="keywordflow">if</span>( !range.empty() ) {
-<a name="l00081"></a>00081                 start_for& a = *<span class="keyword">new</span>(task::allocate_root(context)) start_for(range,body,const_cast<Partitioner&>(partitioner));
-<a name="l00082"></a>00082                 <a class="code" href="a00199.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>(a);
-<a name="l00083"></a>00083             }
-<a name="l00084"></a>00084         }
-<a name="l00085"></a>00085 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00086"></a>00086     };
-<a name="l00087"></a>00087 
-<a name="l00088"></a>00088     <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner>
-<a name="l00089"></a>00089     task* start_for<Range,Body,Partitioner>::execute() {
-<a name="l00090"></a>00090         <span class="keywordflow">if</span>( !my_range.is_divisible() || my_partition.should_execute_range(*<span class="keyword">this</span>) ) {
-<a name="l00091"></a>00091             my_body( my_range );
-<a name="l00092"></a>00092             <span class="keywordflow">return</span> my_partition.continue_after_execute_range(); 
-<a name="l00093"></a>00093         } <span class="keywordflow">else</span> {
-<a name="l00094"></a>00094             empty_task& c = *<span class="keyword">new</span>( this->allocate_continuation() ) empty_task;
-<a name="l00095"></a>00095             recycle_as_child_of(c);
-<a name="l00096"></a>00096             c.set_ref_count(2);
-<a name="l00097"></a>00097             <span class="keywordtype">bool</span> delay = my_partition.decide_whether_to_delay();
-<a name="l00098"></a>00098             start_for& b = *<span class="keyword">new</span>( c.allocate_child() ) start_for(*<span class="keyword">this</span>,split());
-<a name="l00099"></a>00099             my_partition.spawn_or_delay(delay,b);
-<a name="l00100"></a>00100             <span class="keywordflow">return</span> <span class="keyword">this</span>;
-<a name="l00101"></a>00101         }
-<a name="l00102"></a>00102     } 
-<a name="l00103"></a>00103 } <span class="comment">// namespace internal</span>
-<a name="l00105"></a>00105 <span class="comment"></span>
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107 <span class="comment">// Requirements on Range concept are documented in blocked_range.h</span>
-<a name="l00108"></a>00108 
-<a name="l00119"></a>00119 
-<a name="l00121"></a>00121 
-<a name="l00122"></a>00122 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00123"></a><a class="code" href="a00275.html#g68cc046ef72c42ce205fccbc435a0d81">00123</a> <span class="keywordtype">void</span> <a class="code" href="a00275.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body ) {
-<a name="l00124"></a>00124     internal::start_for<Range,Body,__TBB_DEFAULT_PARTITIONER>::run(range,body,__TBB_DEFAULT_PARTITIONER());
-<a name="l00125"></a>00125 }
-<a name="l00126"></a>00126 
-<a name="l00128"></a>00128 
-<a name="l00129"></a>00129 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00130"></a><a class="code" href="a00275.html#g13cac5dd55c7533bccea43a51c33d0e5">00130</a> <span class="keywordtype">void</span> <a class="code" href="a00275.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="a00193.html">simple_partitioner</a>& partitioner ) {
-<a name="l00131"></a>00131     internal::start_for<Range,Body,simple_partitioner>::run(range,body,partitioner);
-<a name="l00132"></a>00132 }
-<a name="l00133"></a>00133 
-<a name="l00135"></a>00135 
-<a name="l00136"></a>00136 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00137"></a><a class="code" href="a00275.html#ga7ac75d532389b55b9247f3fdb0b00d1">00137</a> <span class="keywordtype">void</span> <a class="code" href="a00275.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="a00145.html">auto_partitioner</a>& partitioner ) {
-<a name="l00138"></a>00138     internal::start_for<Range,Body,auto_partitioner>::run(range,body,partitioner);
-<a name="l00139"></a>00139 }
-<a name="l00140"></a>00140 
-<a name="l00142"></a>00142 
-<a name="l00143"></a>00143 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00144"></a><a class="code" href="a00275.html#g9cd1b210ceb1c040f30e390b4a21bde8">00144</a> <span class="keywordtype">void</span> <a class="code" href="a00275.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <a class="code" href="a00140.html">affinity_partitioner</a>& partitioner ) {
-<a name="l00145"></a>00145     internal::start_for<Range,Body,affinity_partitioner>::run(range,body,partitioner);
-<a name="l00146"></a>00146 }
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00150"></a>00150 <span class="preprocessor"></span>
-<a name="l00151"></a>00151 <span class="preprocessor">template<typename Range, typename Body></span>
-<a name="l00152"></a><a class="code" href="a00275.html#g2d317a5e0078cd193125439fed60dfdc">00152</a> <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="a00275.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="a00193.html">simple_partitioner</a>& partitioner, <a class="code" hr [...]
-<a name="l00153"></a>00153     internal::start_for<Range,Body,simple_partitioner>::run(range, body, partitioner, context);
-<a name="l00154"></a>00154 }
-<a name="l00155"></a>00155 
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00159"></a><a class="code" href="a00275.html#g1c0700e3f85e83a788ff3ede88ebb7e9">00159</a> <span class="keywordtype">void</span> <a class="code" href="a00275.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="a00145.html">auto_partitioner</a>& partitioner, <a class="code" href="a00201.html">task_group_context< [...]
-<a name="l00160"></a>00160     internal::start_for<Range,Body,auto_partitioner>::run(range, body, partitioner, context);
-<a name="l00161"></a>00161 }
-<a name="l00162"></a>00162 
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00166"></a><a class="code" href="a00275.html#g04b4696b67370c01353ff5974c8f1196">00166</a> <span class="keywordtype">void</span> <a class="code" href="a00275.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <a class="code" href="a00140.html">affinity_partitioner</a>& partitioner, <a class="code" href="a00201.html">task_group_context</a>& context ) {
-<a name="l00167"></a>00167     internal::start_for<Range,Body,affinity_partitioner>::run(range,body,partitioner, context);
-<a name="l00168"></a>00168 }
-<a name="l00169"></a>00169 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00170"></a>00170 
-<a name="l00171"></a>00171 
-<a name="l00173"></a>00173 <span class="keyword">namespace </span>internal {
-<a name="l00175"></a>00175 <span class="keyword">template</span><<span class="keyword">typename</span> Function, <span class="keyword">typename</span> Index>
-<a name="l00176"></a>00176 <span class="keyword">class </span>parallel_for_body : internal::no_assign {
-<a name="l00177"></a>00177     <span class="keyword">const</span> Function &my_func;
-<a name="l00178"></a>00178     <span class="keyword">const</span> Index my_begin;
-<a name="l00179"></a>00179     <span class="keyword">const</span> Index my_step; 
-<a name="l00180"></a>00180 <span class="keyword">public</span>:
-<a name="l00181"></a>00181     parallel_for_body( <span class="keyword">const</span> Function& _func, Index& _begin, Index& _step) 
-<a name="l00182"></a>00182         : my_func(_func), my_begin(_begin), my_step(_step) {}
-<a name="l00183"></a>00183     
-<a name="l00184"></a>00184     <span class="keywordtype">void</span> operator()( <a class="code" href="a00147.html">tbb::blocked_range<Index></a>& r )<span class="keyword"> const </span>{
-<a name="l00185"></a>00185         <span class="keywordflow">for</span>( Index i = r.<a class="code" href="a00147.html#18d2258400756ac1446dac7676b18df3">begin</a>(),  k = my_begin + i * my_step; i < r.<a class="code" href="a00147.html#8b929d93ddc13f148b11bceef3a3bdf8">end</a>(); i++, k = k + my_step)
-<a name="l00186"></a>00186             my_func( k );
-<a name="l00187"></a>00187     }
-<a name="l00188"></a>00188 };
-<a name="l00189"></a>00189 } <span class="comment">// namespace internal</span>
-<a name="l00191"></a>00191 <span class="comment"></span>
-<a name="l00192"></a>00192 <span class="keyword">namespace </span>strict_ppl {
-<a name="l00193"></a>00193 
-<a name="l00195"></a>00195 
-<a name="l00196"></a>00196 <span class="keyword">template</span> <<span class="keyword">typename</span> Index, <span class="keyword">typename</span> Function>
-<a name="l00197"></a><a class="code" href="a00274.html#15c764c70c8a32e7a4b8c291d0cc8dde">00197</a> <span class="keywordtype">void</span> <a class="code" href="a00275.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(Index first, Index last, Index step, <span class="keyword">const</span> Function& f) {
-<a name="l00198"></a>00198     <a class="code" href="a00201.html">tbb::task_group_context</a> context;
-<a name="l00199"></a>00199     <a class="code" href="a00275.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(first, last, step, f, context);
-<a name="l00200"></a>00200 }
-<a name="l00201"></a>00201 <span class="keyword">template</span> <<span class="keyword">typename</span> Index, <span class="keyword">typename</span> Function>
-<a name="l00202"></a>00202 <span class="keywordtype">void</span> <a class="code" href="a00275.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(Index first, Index last, Index step, <span class="keyword">const</span> Function& f, <a class="code" href="a00201.html">tbb::task_group_context</a> &context) {
-<a name="l00203"></a>00203     <span class="keywordflow">if</span> (step <= 0 )
-<a name="l00204"></a>00204         internal::throw_exception(internal::eid_nonpositive_step); <span class="comment">// throws std::invalid_argument</span>
-<a name="l00205"></a>00205     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (last > first) {
-<a name="l00206"></a>00206         <span class="comment">// Above "else" is necessary to prevent "potential divide by zero" warning</span>
-<a name="l00207"></a>00207         Index end = (last - first) / step;
-<a name="l00208"></a>00208         <span class="keywordflow">if</span> (first + end * step < last) end++;
-<a name="l00209"></a>00209         <a class="code" href="a00147.html">tbb::blocked_range<Index></a> range(static_cast<Index>(0), end);
-<a name="l00210"></a>00210         internal::parallel_for_body<Function, Index> body(f, first, step);
-<a name="l00211"></a>00211         <a class="code" href="a00275.html#g68cc046ef72c42ce205fccbc435a0d81">tbb::parallel_for</a>(range, body, <a class="code" href="a00145.html">tbb::auto_partitioner</a>(), context);
-<a name="l00212"></a>00212     }
-<a name="l00213"></a>00213 }
-<a name="l00215"></a>00215 <span class="keyword">template</span> <<span class="keyword">typename</span> Index, <span class="keyword">typename</span> Function>
-<a name="l00216"></a><a class="code" href="a00274.html#490399525b1e690ec31d6db964c6b272">00216</a> <span class="keywordtype">void</span> <a class="code" href="a00275.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(Index first, Index last, <span class="keyword">const</span> Function& f) {
-<a name="l00217"></a>00217     <a class="code" href="a00201.html">tbb::task_group_context</a> context;
-<a name="l00218"></a>00218     <a class="code" href="a00275.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(first, last, static_cast<Index>(1), f, context);
-<a name="l00219"></a>00219 }
-<a name="l00220"></a>00220 <span class="keyword">template</span> <<span class="keyword">typename</span> Index, <span class="keyword">typename</span> Function>
-<a name="l00221"></a>00221 <span class="keywordtype">void</span> <a class="code" href="a00275.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(Index first, Index last, <span class="keyword">const</span> Function& f, <a class="code" href="a00201.html">tbb::task_group_context</a> &context) {
-<a name="l00222"></a>00222     <a class="code" href="a00275.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(first, last, static_cast<Index>(1), f, context);
-<a name="l00223"></a>00223 }
-<a name="l00224"></a>00224 
-<a name="l00226"></a>00226 
-<a name="l00227"></a>00227 } <span class="comment">// namespace strict_ppl</span>
-<a name="l00228"></a>00228 
-<a name="l00229"></a>00229 <span class="keyword">using</span> <a class="code" href="a00275.html#g68cc046ef72c42ce205fccbc435a0d81">strict_ppl::parallel_for</a>;
-<a name="l00230"></a>00230 
-<a name="l00231"></a>00231 } <span class="comment">// namespace tbb</span>
-<a name="l00232"></a>00232 
-<a name="l00233"></a>00233 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_for_H */</span>
-<a name="l00234"></a>00234 
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00381.html b/doc/html/a00381.html
new file mode 100644
index 0000000..5f6bb29
--- /dev/null
+++ b/doc/html/a00381.html
@@ -0,0 +1,942 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>_concurrent_queue_internal.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File List</span></a></li>
+    <li><a href="globals.html"><span>File Members</span></a></li>
+  </ul></div>
+<h1>_concurrent_queue_internal.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-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_queue_internal_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_concurrent_queue_internal_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "tbb_machine.h"</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include "atomic.h"</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include "spin_mutex.h"</span>
+<a name="l00028"></a>00028 <span class="preprocessor">#include "cache_aligned_allocator.h"</span>
+<a name="l00029"></a>00029 <span class="preprocessor">#include "tbb_exception.h"</span>
+<a name="l00030"></a>00030 <span class="preprocessor">#include "tbb_profiling.h"</span>
+<a name="l00031"></a>00031 <span class="preprocessor">#include <new></span>
+<a name="l00032"></a>00032 
+<a name="l00033"></a>00033 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
+<a name="l00034"></a>00034 <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="l00035"></a>00035 <span class="preprocessor">    #pragma warning (push)</span>
+<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4530)</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="preprocessor">#include <iterator></span>
+<a name="l00040"></a>00040 
+<a name="l00041"></a>00041 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
+<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</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="l00045"></a>00045 <span class="keyword">namespace </span>tbb {
+<a name="l00046"></a>00046 
+<a name="l00047"></a>00047 <span class="preprocessor">#if !__TBB_TEMPLATE_FRIENDS_BROKEN</span>
+<a name="l00048"></a>00048 <span class="preprocessor"></span>
+<a name="l00049"></a>00049 <span class="comment">// forward declaration</span>
+<a name="l00050"></a><a class="code" href="a00370.html">00050</a> <span class="keyword">namespace </span>strict_ppl {
+<a name="l00051"></a>00051 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> A> <span class="keyword">class </span><a class="code" href="a00236.html">concurrent_queue</a>;
+<a name="l00052"></a>00052 }
+<a name="l00053"></a>00053 
+<a name="l00054"></a>00054 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> A> <span class="keyword">class </span><a class="code" href="a00230.html">concurrent_bounded_queue</a>;
+<a name="l00055"></a>00055 
+<a name="l00056"></a>00056 <span class="keyword">namespace </span>deprecated {
+<a name="l00057"></a>00057 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> A> <span class="keyword">class </span><a class="code" href="a00236.html">concurrent_queue</a>;
+<a name="l00058"></a>00058 }
+<a name="l00059"></a>00059 <span class="preprocessor">#endif</span>
+<a name="l00060"></a>00060 <span class="preprocessor"></span>
+<a name="l00062"></a>00062 <span class="keyword">namespace </span>strict_ppl {
+<a name="l00063"></a>00063 
+<a name="l00065"></a>00065 <span class="keyword">namespace </span>internal {
+<a name="l00066"></a>00066 
+<a name="l00067"></a>00067 <span class="keyword">using namespace </span>tbb::internal;
+<a name="l00068"></a>00068 
+<a name="l00069"></a>00069 <span class="keyword">typedef</span> size_t ticket;
+<a name="l00070"></a>00070 
+<a name="l00071"></a>00071 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">class </span>micro_queue ;
+<a name="l00072"></a>00072 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">class </span>micro_queue_pop_finalizer ;
+<a name="l00073"></a>00073 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">class </span>concurrent_queue_base_v3;
+<a name="l00074"></a>00074 
+<a name="l00076"></a>00076 
+<a name="l00079"></a>00079 <span class="keyword">struct </span>concurrent_queue_rep_base : no_copy {
+<a name="l00080"></a>00080     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">friend</span> <span class="keyword">class </span>micro_queue;
+<a name="l00081"></a>00081     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_queue_base_v3;
+<a name="l00082"></a>00082 
+<a name="l00083"></a>00083 <span class="keyword">protected</span>:
+<a name="l00085"></a>00085     <span class="keyword">static</span> <span class="keyword">const</span> size_t phi = 3;
+<a name="l00086"></a>00086 
+<a name="l00087"></a>00087 <span class="keyword">public</span>:
+<a name="l00088"></a>00088     <span class="comment">// must be power of 2</span>
+<a name="l00089"></a>00089     <span class="keyword">static</span> <span class="keyword">const</span> size_t n_queue = 8;
+<a name="l00090"></a>00090 
+<a name="l00092"></a>00092     <span class="keyword">struct </span>page {
+<a name="l00093"></a>00093         page* next;
+<a name="l00094"></a>00094         uintptr_t mask; 
+<a name="l00095"></a>00095     };
+<a name="l00096"></a>00096 
+<a name="l00097"></a>00097     atomic<ticket> head_counter;
+<a name="l00098"></a>00098     <span class="keywordtype">char</span> pad1[NFS_MaxLineSize-<span class="keyword">sizeof</span>(atomic<ticket>)];
+<a name="l00099"></a>00099     atomic<ticket> tail_counter;
+<a name="l00100"></a>00100     <span class="keywordtype">char</span> pad2[NFS_MaxLineSize-<span class="keyword">sizeof</span>(atomic<ticket>)];
+<a name="l00101"></a>00101 
+<a name="l00103"></a>00103     size_t items_per_page;
+<a name="l00104"></a>00104 
+<a name="l00106"></a>00106     size_t item_size;
+<a name="l00107"></a>00107 
+<a name="l00109"></a>00109     atomic<size_t> n_invalid_entries;
+<a name="l00110"></a>00110 
+<a name="l00111"></a>00111     <span class="keywordtype">char</span> pad3[NFS_MaxLineSize-<span class="keyword">sizeof</span>(size_t)-<span class="keyword">sizeof</span>(size_t)-<span class="keyword">sizeof</span>(atomic<size_t>)];
+<a name="l00112"></a>00112 } ;
+<a name="l00113"></a>00113 
+<a name="l00114"></a>00114 <span class="keyword">inline</span> <span class="keywordtype">bool</span> is_valid_page(<span class="keyword">const</span> concurrent_queue_rep_base::page* p) {
+<a name="l00115"></a>00115     <span class="keywordflow">return</span> uintptr_t(p)>1;
+<a name="l00116"></a>00116 }
+<a name="l00117"></a>00117 
+<a name="l00119"></a>00119 
+<a name="l00122"></a>00122 <span class="keyword">class </span>concurrent_queue_page_allocator
+<a name="l00123"></a>00123 {
+<a name="l00124"></a>00124     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">friend</span> <span class="keyword">class </span>micro_queue ;
+<a name="l00125"></a>00125     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">friend</span> <span class="keyword">class </span>micro_queue_pop_finalizer ;
+<a name="l00126"></a>00126 <span class="keyword">protected</span>:
+<a name="l00127"></a>00127     <span class="keyword">virtual</span> ~concurrent_queue_page_allocator() {}
+<a name="l00128"></a>00128 <span class="keyword">private</span>:
+<a name="l00129"></a>00129     <span class="keyword">virtual</span> concurrent_queue_rep_base::page* allocate_page() = 0;
+<a name="l00130"></a>00130     <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate_page( concurrent_queue_rep_base::page* p ) = 0;
+<a name="l00131"></a>00131 } ;
+<a name="l00132"></a>00132 
+<a name="l00133"></a>00133 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
+<a name="l00134"></a>00134 <span class="preprocessor"></span><span class="comment">// unary minus operator applied to unsigned type, result still unsigned</span>
+<a name="l00135"></a>00135 <span class="preprocessor">#pragma warning( push )</span>
+<a name="l00136"></a>00136 <span class="preprocessor"></span><span class="preprocessor">#pragma warning( disable: 4146 )</span>
+<a name="l00137"></a>00137 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00138"></a>00138 <span class="preprocessor"></span>
+<a name="l00140"></a>00140 
+<a name="l00142"></a>00142 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00143"></a>00143 <span class="keyword">class </span>micro_queue : no_copy {
+<a name="l00144"></a>00144     <span class="keyword">typedef</span> concurrent_queue_rep_base::page page;
+<a name="l00145"></a>00145 
+<a name="l00147"></a>00147     <span class="keyword">class </span>destroyer: no_copy {
+<a name="l00148"></a>00148         T& my_value;
+<a name="l00149"></a>00149     <span class="keyword">public</span>:
+<a name="l00150"></a>00150         destroyer( T& value ) : my_value(value) {}
+<a name="l00151"></a>00151         ~destroyer() {my_value.~T();}          
+<a name="l00152"></a>00152     };
+<a name="l00153"></a>00153 
+<a name="l00154"></a>00154     <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="l00155"></a>00155         <span class="keyword">new</span>( &get_ref(dst,index) ) T(*static_cast<const T*>(src)); 
+<a name="l00156"></a>00156     }
+<a name="l00157"></a>00157 
+<a name="l00158"></a>00158     <span class="keywordtype">void</span> copy_item( page& dst, size_t dindex, <span class="keyword">const</span> page& src, size_t sindex ) {
+<a name="l00159"></a>00159         <span class="keyword">new</span>( &get_ref(dst,dindex) ) T( get_ref(const_cast<page&>(src),sindex) );
+<a name="l00160"></a>00160     }
+<a name="l00161"></a>00161 
+<a name="l00162"></a>00162     <span class="keywordtype">void</span> assign_and_destroy_item( <span class="keywordtype">void</span>* dst, page& src, size_t index ) {
+<a name="l00163"></a>00163         T& from = get_ref(src,index);
+<a name="l00164"></a>00164         destroyer d(from);
+<a name="l00165"></a>00165         *static_cast<T*>(dst) = from;
+<a name="l00166"></a>00166     }
+<a name="l00167"></a>00167 
+<a name="l00168"></a>00168     <span class="keywordtype">void</span> spin_wait_until_my_turn( atomic<ticket>& counter, ticket k, concurrent_queue_rep_base& rb ) <span class="keyword">const </span>;
+<a name="l00169"></a>00169 
+<a name="l00170"></a>00170 <span class="keyword">public</span>:
+<a name="l00171"></a>00171     <span class="keyword">friend</span> <span class="keyword">class </span>micro_queue_pop_finalizer<T>;
+<a name="l00172"></a>00172 
+<a name="l00173"></a>00173     <span class="keyword">struct </span>padded_page: page {
+<a name="l00175"></a>00175         padded_page(); 
+<a name="l00177"></a>00177         <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> padded_page& );
+<a name="l00179"></a>00179         T last;
+<a name="l00180"></a>00180     };
+<a name="l00181"></a>00181 
+<a name="l00182"></a>00182     <span class="keyword">static</span> T& get_ref( page& p, size_t index ) {
+<a name="l00183"></a>00183         <span class="keywordflow">return</span> (&static_cast<padded_page*>(static_cast<void*>(&p))->last)[index];
+<a name="l00184"></a>00184     }
+<a name="l00185"></a>00185 
+<a name="l00186"></a>00186     atomic<page*> head_page;
+<a name="l00187"></a>00187     atomic<ticket> head_counter;
+<a name="l00188"></a>00188 
+<a name="l00189"></a>00189     atomic<page*> tail_page;
+<a name="l00190"></a>00190     atomic<ticket> tail_counter;
+<a name="l00191"></a>00191 
+<a name="l00192"></a>00192     spin_mutex page_mutex;
+<a name="l00193"></a>00193     
+<a name="l00194"></a>00194     <span class="keywordtype">void</span> push( <span class="keyword">const</span> <span class="keywordtype">void</span>* item, ticket k, concurrent_queue_base_v3<T>& base ) ;
+<a name="l00195"></a>00195 
+<a name="l00196"></a>00196     <span class="keywordtype">bool</span> pop( <span class="keywordtype">void</span>* dst, ticket k, concurrent_queue_base_v3<T>& base ) ;
+<a name="l00197"></a>00197 
+<a name="l00198"></a>00198     micro_queue& assign( <span class="keyword">const</span> micro_queue& src, concurrent_queue_base_v3<T>& base ) ;
+<a name="l00199"></a>00199 
+<a name="l00200"></a>00200     page* make_copy( concurrent_queue_base_v3<T>& base, <span class="keyword">const</span> page* src_page, size_t begin_in_page, size_t end_in_page, ticket& g_index ) ;
+<a name="l00201"></a>00201 
+<a name="l00202"></a>00202     <span class="keywordtype">void</span> invalidate_page_and_rethrow( ticket k ) ;
+<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> T>
+<a name="l00206"></a>00206 <span class="keywordtype">void</span> micro_queue<T>::spin_wait_until_my_turn( atomic<ticket>& counter, ticket k, concurrent_queue_rep_base& rb )<span class="keyword"> const </span>{
+<a name="l00207"></a>00207     atomic_backoff backoff;
+<a name="l00208"></a>00208     <span class="keywordflow">do</span> {
+<a name="l00209"></a>00209         backoff.pause();
+<a name="l00210"></a>00210         <span class="keywordflow">if</span>( counter&1 ) {
+<a name="l00211"></a>00211             ++rb.n_invalid_entries;
+<a name="l00212"></a>00212             throw_exception( eid_bad_last_alloc );
+<a name="l00213"></a>00213         }
+<a name="l00214"></a>00214     } <span class="keywordflow">while</span>( counter!=k ) ;
+<a name="l00215"></a>00215 }
+<a name="l00216"></a>00216 
+<a name="l00217"></a>00217 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00218"></a>00218 <span class="keywordtype">void</span> micro_queue<T>::push( <span class="keyword">const</span> <span class="keywordtype">void</span>* item, ticket k, concurrent_queue_base_v3<T>& base ) {
+<a name="l00219"></a>00219     k &= -concurrent_queue_rep_base::n_queue;
+<a name="l00220"></a>00220     page* p = NULL;
+<a name="l00221"></a>00221     size_t index = k/concurrent_queue_rep_base::n_queue & (base.my_rep->items_per_page-1);
+<a name="l00222"></a>00222     <span class="keywordflow">if</span>( !index ) {
+<a name="l00223"></a>00223         __TBB_TRY {
+<a name="l00224"></a>00224             concurrent_queue_page_allocator& pa = base;
+<a name="l00225"></a>00225             p = pa.allocate_page();
+<a name="l00226"></a>00226         } __TBB_CATCH (...) {
+<a name="l00227"></a>00227             ++base.my_rep->n_invalid_entries;
+<a name="l00228"></a>00228             invalidate_page_and_rethrow( k );
+<a name="l00229"></a>00229         }
+<a name="l00230"></a>00230         p->mask = 0;
+<a name="l00231"></a>00231         p->next = NULL;
+<a name="l00232"></a>00232     }
+<a name="l00233"></a>00233 
+<a name="l00234"></a>00234     <span class="keywordflow">if</span>( tail_counter!=k ) spin_wait_until_my_turn( tail_counter, k, *base.my_rep );
+<a name="l00235"></a>00235     call_itt_notify(acquired, &tail_counter);
+<a name="l00236"></a>00236         
+<a name="l00237"></a>00237     <span class="keywordflow">if</span>( p ) {
+<a name="l00238"></a>00238         spin_mutex::scoped_lock lock( page_mutex );
+<a name="l00239"></a>00239         page* q = tail_page;
+<a name="l00240"></a>00240         <span class="keywordflow">if</span>( is_valid_page(q) )
+<a name="l00241"></a>00241             q->next = p;
+<a name="l00242"></a>00242         <span class="keywordflow">else</span>
+<a name="l00243"></a>00243             head_page = p; 
+<a name="l00244"></a>00244         tail_page = p;
+<a name="l00245"></a>00245     } <span class="keywordflow">else</span> {
+<a name="l00246"></a>00246         p = tail_page;
+<a name="l00247"></a>00247     }
+<a name="l00248"></a>00248     __TBB_TRY {
+<a name="l00249"></a>00249         copy_item( *p, index, item );
+<a name="l00250"></a>00250         <span class="comment">// If no exception was thrown, mark item as present.</span>
+<a name="l00251"></a>00251         itt_hide_store_word(p->mask,  p->mask | uintptr_t(1)<<index);
+<a name="l00252"></a>00252         call_itt_notify(releasing, &tail_counter);
+<a name="l00253"></a>00253         tail_counter += concurrent_queue_rep_base::n_queue; 
+<a name="l00254"></a>00254     } __TBB_CATCH (...) {
+<a name="l00255"></a>00255         ++base.my_rep->n_invalid_entries;
+<a name="l00256"></a>00256         call_itt_notify(releasing, &tail_counter);
+<a name="l00257"></a>00257         tail_counter += concurrent_queue_rep_base::n_queue; 
+<a name="l00258"></a>00258         __TBB_RETHROW();
+<a name="l00259"></a>00259     }
+<a name="l00260"></a>00260 }
+<a name="l00261"></a>00261 
+<a name="l00262"></a>00262 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00263"></a>00263 <span class="keywordtype">bool</span> micro_queue<T>::pop( <span class="keywordtype">void</span>* dst, ticket k, concurrent_queue_base_v3<T>& base ) {
+<a name="l00264"></a>00264     k &= -concurrent_queue_rep_base::n_queue;
+<a name="l00265"></a>00265     <span class="keywordflow">if</span>( head_counter!=k ) spin_wait_until_eq( head_counter, k );
+<a name="l00266"></a>00266     call_itt_notify(acquired, &head_counter);
+<a name="l00267"></a>00267     <span class="keywordflow">if</span>( tail_counter==k ) spin_wait_while_eq( tail_counter, k );
+<a name="l00268"></a>00268     call_itt_notify(acquired, &tail_counter);
+<a name="l00269"></a>00269     page& p = *head_page;
+<a name="l00270"></a>00270     __TBB_ASSERT( &p, NULL );
+<a name="l00271"></a>00271     size_t index = k/concurrent_queue_rep_base::n_queue & (base.my_rep->items_per_page-1);
+<a name="l00272"></a>00272     <span class="keywordtype">bool</span> success = <span class="keyword">false</span>; 
+<a name="l00273"></a>00273     {
+<a name="l00274"></a>00274         micro_queue_pop_finalizer<T> finalizer( *<span class="keyword">this</span>, base, k+concurrent_queue_rep_base::n_queue, index==base.my_rep->items_per_page-1 ? &p : NULL ); 
+<a name="l00275"></a>00275         <span class="keywordflow">if</span>( p.mask & uintptr_t(1)<<index ) {
+<a name="l00276"></a>00276             success = <span class="keyword">true</span>;
+<a name="l00277"></a>00277             assign_and_destroy_item( dst, p, index );
+<a name="l00278"></a>00278         } <span class="keywordflow">else</span> {
+<a name="l00279"></a>00279             --base.my_rep->n_invalid_entries;
+<a name="l00280"></a>00280         }
+<a name="l00281"></a>00281     }
+<a name="l00282"></a>00282     <span class="keywordflow">return</span> success;
+<a name="l00283"></a>00283 }
+<a name="l00284"></a>00284 
+<a name="l00285"></a>00285 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00286"></a>00286 micro_queue<T>& micro_queue<T>::assign( <span class="keyword">const</span> micro_queue<T>& src, concurrent_queue_base_v3<T>& base ) {
+<a name="l00287"></a>00287     head_counter = src.head_counter;
+<a name="l00288"></a>00288     tail_counter = src.tail_counter;
+<a name="l00289"></a>00289     page_mutex   = src.page_mutex;
+<a name="l00290"></a>00290 
+<a name="l00291"></a>00291     <span class="keyword">const</span> page* srcp = src.head_page;
+<a name="l00292"></a>00292     <span class="keywordflow">if</span>( is_valid_page(srcp) ) {
+<a name="l00293"></a>00293         ticket g_index = head_counter;
+<a name="l00294"></a>00294         __TBB_TRY {
+<a name="l00295"></a>00295             size_t n_items  = (tail_counter-head_counter)/concurrent_queue_rep_base::n_queue;
+<a name="l00296"></a>00296             size_t index = head_counter/concurrent_queue_rep_base::n_queue & (base.my_rep->items_per_page-1);
+<a name="l00297"></a>00297             size_t end_in_first_page = (index+n_items<base.my_rep->items_per_page)?(index+n_items):base.my_rep->items_per_page;
+<a name="l00298"></a>00298 
+<a name="l00299"></a>00299             head_page = make_copy( base, srcp, index, end_in_first_page, g_index );
+<a name="l00300"></a>00300             page* cur_page = head_page;
+<a name="l00301"></a>00301 
+<a name="l00302"></a>00302             <span class="keywordflow">if</span>( srcp != src.tail_page ) {
+<a name="l00303"></a>00303                 <span class="keywordflow">for</span>( srcp = srcp->next; srcp!=src.tail_page; srcp=srcp->next ) {
+<a name="l00304"></a>00304                     cur_page->next = make_copy( base, srcp, 0, base.my_rep->items_per_page, g_index );
+<a name="l00305"></a>00305                     cur_page = cur_page->next;
+<a name="l00306"></a>00306                 }
+<a name="l00307"></a>00307 
+<a name="l00308"></a>00308                 __TBB_ASSERT( srcp==src.tail_page, NULL );
+<a name="l00309"></a>00309                 size_t last_index = tail_counter/concurrent_queue_rep_base::n_queue & (base.my_rep->items_per_page-1);
+<a name="l00310"></a>00310                 <span class="keywordflow">if</span>( last_index==0 ) last_index = base.my_rep->items_per_page;
+<a name="l00311"></a>00311 
+<a name="l00312"></a>00312                 cur_page->next = make_copy( base, srcp, 0, last_index, g_index );
+<a name="l00313"></a>00313                 cur_page = cur_page->next;
+<a name="l00314"></a>00314             }
+<a name="l00315"></a>00315             tail_page = cur_page;
+<a name="l00316"></a>00316         } __TBB_CATCH (...) {
+<a name="l00317"></a>00317             invalidate_page_and_rethrow( g_index );
+<a name="l00318"></a>00318         }
+<a name="l00319"></a>00319     } <span class="keywordflow">else</span> {
+<a name="l00320"></a>00320         head_page = tail_page = NULL;
+<a name="l00321"></a>00321     }
+<a name="l00322"></a>00322     <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<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>
+<a name="l00326"></a>00326 <span class="keywordtype">void</span> micro_queue<T>::invalidate_page_and_rethrow( ticket k ) {
+<a name="l00327"></a>00327     <span class="comment">// Append an invalid page at address 1 so that no more pushes are allowed.</span>
+<a name="l00328"></a>00328     page* invalid_page = (page*)uintptr_t(1);
+<a name="l00329"></a>00329     {
+<a name="l00330"></a>00330         spin_mutex::scoped_lock lock( page_mutex );
+<a name="l00331"></a>00331         itt_store_word_with_release(tail_counter, k+concurrent_queue_rep_base::n_queue+1);
+<a name="l00332"></a>00332         page* q = tail_page;
+<a name="l00333"></a>00333         <span class="keywordflow">if</span>( is_valid_page(q) )
+<a name="l00334"></a>00334             q->next = invalid_page;
+<a name="l00335"></a>00335         <span class="keywordflow">else</span>
+<a name="l00336"></a>00336             head_page = invalid_page;
+<a name="l00337"></a>00337         tail_page = invalid_page;
+<a name="l00338"></a>00338     }
+<a name="l00339"></a>00339     __TBB_RETHROW();
+<a name="l00340"></a>00340 }
+<a name="l00341"></a>00341 
+<a name="l00342"></a>00342 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00343"></a>00343 concurrent_queue_rep_base::page* micro_queue<T>::make_copy( concurrent_queue_base_v3<T>& base, <span class="keyword">const</span> concurrent_queue_rep_base::page* src_page, size_t begin_in_page, size_t end_in_page, ticket& g_index ) {
+<a name="l00344"></a>00344     concurrent_queue_page_allocator& pa = base;
+<a name="l00345"></a>00345     page* new_page = pa.allocate_page();
+<a name="l00346"></a>00346     new_page->next = NULL;
+<a name="l00347"></a>00347     new_page->mask = src_page->mask;
+<a name="l00348"></a>00348     <span class="keywordflow">for</span>( ; begin_in_page!=end_in_page; ++begin_in_page, ++g_index )
+<a name="l00349"></a>00349         <span class="keywordflow">if</span>( new_page->mask & uintptr_t(1)<<begin_in_page )
+<a name="l00350"></a>00350             copy_item( *new_page, begin_in_page, *src_page, begin_in_page );
+<a name="l00351"></a>00351     <span class="keywordflow">return</span> new_page;
+<a name="l00352"></a>00352 }
+<a name="l00353"></a>00353 
+<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>micro_queue_pop_finalizer: no_copy {
+<a name="l00356"></a>00356     <span class="keyword">typedef</span> concurrent_queue_rep_base::page page;
+<a name="l00357"></a>00357     ticket my_ticket;
+<a name="l00358"></a>00358     micro_queue<T>& my_queue;
+<a name="l00359"></a>00359     page* my_page; 
+<a name="l00360"></a>00360     concurrent_queue_page_allocator& allocator;
+<a name="l00361"></a>00361 <span class="keyword">public</span>:
+<a name="l00362"></a>00362     micro_queue_pop_finalizer( micro_queue<T>& queue, concurrent_queue_base_v3<T>& b, ticket k, page* p ) :
+<a name="l00363"></a>00363         my_ticket(k), my_queue(queue), my_page(p), allocator(b)
+<a name="l00364"></a>00364     {}
+<a name="l00365"></a>00365     ~micro_queue_pop_finalizer() ;
+<a name="l00366"></a>00366 };
+<a name="l00367"></a>00367 
+<a name="l00368"></a>00368 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00369"></a>00369 micro_queue_pop_finalizer<T>::~micro_queue_pop_finalizer() {
+<a name="l00370"></a>00370     page* p = my_page;
+<a name="l00371"></a>00371     <span class="keywordflow">if</span>( is_valid_page(p) ) {
+<a name="l00372"></a>00372         spin_mutex::scoped_lock lock( my_queue.page_mutex );
+<a name="l00373"></a>00373         page* q = p->next;
+<a name="l00374"></a>00374         my_queue.head_page = q;
+<a name="l00375"></a>00375         <span class="keywordflow">if</span>( !is_valid_page(q) ) {
+<a name="l00376"></a>00376             my_queue.tail_page = NULL;
+<a name="l00377"></a>00377         }
+<a name="l00378"></a>00378     }
+<a name="l00379"></a>00379     itt_store_word_with_release(my_queue.head_counter, my_ticket);
+<a name="l00380"></a>00380     <span class="keywordflow">if</span>( is_valid_page(p) ) {
+<a name="l00381"></a>00381         allocator.deallocate_page( p );
+<a name="l00382"></a>00382     }
+<a name="l00383"></a>00383 }
+<a name="l00384"></a>00384 
+<a name="l00385"></a>00385 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
+<a name="l00386"></a>00386 <span class="preprocessor"></span><span class="preprocessor">#pragma warning( pop )</span>
+<a name="l00387"></a>00387 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4146 is back</span>
+<a name="l00388"></a>00388 <span class="preprocessor"></span>
+<a name="l00389"></a>00389 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">class </span>concurrent_queue_iterator_rep ;
+<a name="l00390"></a>00390 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">class </span>concurrent_queue_iterator_base_v3;
+<a name="l00391"></a>00391 
+<a name="l00393"></a>00393 
+<a name="l00396"></a>00396 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00397"></a>00397 <span class="keyword">struct </span>concurrent_queue_rep : <span class="keyword">public</span> concurrent_queue_rep_base {
+<a name="l00398"></a>00398     micro_queue<T> array[n_queue];
+<a name="l00399"></a>00399 
+<a name="l00401"></a>00401     <span class="keyword">static</span> size_t index( ticket k ) {
+<a name="l00402"></a>00402         <span class="keywordflow">return</span> k*phi%n_queue;
+<a name="l00403"></a>00403     }
+<a name="l00404"></a>00404 
+<a name="l00405"></a>00405     micro_queue<T>& choose( ticket k ) {
+<a name="l00406"></a>00406         <span class="comment">// The formula here approximates LRU in a cache-oblivious way.</span>
+<a name="l00407"></a>00407         <span class="keywordflow">return</span> array[index(k)];
+<a name="l00408"></a>00408     }
+<a name="l00409"></a>00409 };
+<a name="l00410"></a>00410 
+<a name="l00412"></a>00412 
+<a name="l00416"></a>00416 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00417"></a>00417 <span class="keyword">class </span>concurrent_queue_base_v3: <span class="keyword">public</span> concurrent_queue_page_allocator {
+<a name="l00419"></a>00419     concurrent_queue_rep<T>* my_rep;
+<a name="l00420"></a>00420 
+<a name="l00421"></a>00421     <span class="keyword">friend</span> <span class="keyword">struct </span>concurrent_queue_rep<T>;
+<a name="l00422"></a>00422     <span class="keyword">friend</span> <span class="keyword">class </span>micro_queue<T>;
+<a name="l00423"></a>00423     <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_queue_iterator_rep<T>;
+<a name="l00424"></a>00424     <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_queue_iterator_base_v3<T>;
+<a name="l00425"></a>00425 
+<a name="l00426"></a>00426 <span class="keyword">protected</span>:
+<a name="l00427"></a>00427     <span class="keyword">typedef</span> <span class="keyword">typename</span> concurrent_queue_rep<T>::page page;
+<a name="l00428"></a>00428 
+<a name="l00429"></a>00429 <span class="keyword">private</span>:
+<a name="l00430"></a>00430     <span class="keyword">typedef</span> <span class="keyword">typename</span> micro_queue<T>::padded_page padded_page;
+<a name="l00431"></a>00431 
+<a name="l00432"></a>00432     <span class="comment">/* override */</span> <span class="keyword">virtual</span> page *allocate_page() {
+<a name="l00433"></a>00433         concurrent_queue_rep<T>& r = *my_rep;
+<a name="l00434"></a>00434         size_t n = <span class="keyword">sizeof</span>(padded_page) + (r.items_per_page-1)*<span class="keyword">sizeof</span>(T);
+<a name="l00435"></a>00435         <span class="keywordflow">return</span> reinterpret_cast<page*>(allocate_block ( n ));
+<a name="l00436"></a>00436     }
+<a name="l00437"></a>00437 
+<a name="l00438"></a>00438     <span class="comment">/* override */</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate_page( concurrent_queue_rep_base::page *p ) {
+<a name="l00439"></a>00439         concurrent_queue_rep<T>& r = *my_rep;
+<a name="l00440"></a>00440         size_t n = <span class="keyword">sizeof</span>(padded_page) + (r.items_per_page-1)*<span class="keyword">sizeof</span>(T);
+<a name="l00441"></a>00441         deallocate_block( reinterpret_cast<void*>(p), n );
+<a name="l00442"></a>00442     }
+<a name="l00443"></a>00443 
+<a name="l00445"></a>00445     <span class="keyword">virtual</span> <span class="keywordtype">void</span> *allocate_block( size_t n ) = 0;
+<a name="l00446"></a>00446 
+<a name="l00448"></a>00448     <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate_block( <span class="keywordtype">void</span> *p, size_t n ) = 0;
+<a name="l00449"></a>00449 
+<a name="l00450"></a>00450 <span class="keyword">protected</span>:
+<a name="l00451"></a>00451     concurrent_queue_base_v3();
+<a name="l00452"></a>00452 
+<a name="l00453"></a>00453     <span class="comment">/* override */</span> <span class="keyword">virtual</span> ~concurrent_queue_base_v3() {
+<a name="l00454"></a>00454 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00455"></a>00455 <span class="preprocessor"></span>        size_t nq = my_rep->n_queue;
+<a name="l00456"></a>00456         <span class="keywordflow">for</span>( size_t i=0; i<nq; i++ )
+<a name="l00457"></a>00457             __TBB_ASSERT( my_rep->array[i].tail_page==NULL, <span class="stringliteral">"pages were not freed properly"</span> );
+<a name="l00458"></a>00458 #endif <span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00459"></a>00459         cache_aligned_allocator<concurrent_queue_rep<T> >().deallocate(my_rep,1);
+<a name="l00460"></a>00460     }
+<a name="l00461"></a>00461 
+<a name="l00463"></a>00463     <span class="keywordtype">void</span> internal_push( <span class="keyword">const</span> <span class="keywordtype">void</span>* src ) {
+<a name="l00464"></a>00464         concurrent_queue_rep<T>& r = *my_rep;
+<a name="l00465"></a>00465         ticket k = r.tail_counter++;
+<a name="l00466"></a>00466         r.choose(k).push( src, k, *<span class="keyword">this</span> );
+<a name="l00467"></a>00467     }
+<a name="l00468"></a>00468 
+<a name="l00470"></a>00470 
+<a name="l00471"></a>00471     <span class="keywordtype">bool</span> internal_try_pop( <span class="keywordtype">void</span>* dst ) ;
+<a name="l00472"></a>00472 
+<a name="l00474"></a>00474     size_t internal_size() <span class="keyword">const </span>;
+<a name="l00475"></a>00475 
+<a name="l00477"></a>00477     <span class="keywordtype">bool</span> internal_empty() <span class="keyword">const </span>;
+<a name="l00478"></a>00478 
+<a name="l00480"></a>00480     <span class="comment">/* note that the name may be misleading, but it remains so due to a historical accident. */</span>
+<a name="l00481"></a>00481     <span class="keywordtype">void</span> internal_finish_clear() ;
+<a name="l00482"></a>00482 
+<a name="l00484"></a>00484     <span class="keywordtype">void</span> internal_throw_exception()<span class="keyword"> const </span>{
+<a name="l00485"></a>00485         throw_exception( eid_bad_alloc );
+<a name="l00486"></a>00486     }
+<a name="l00487"></a>00487 
+<a name="l00489"></a>00489     <span class="keywordtype">void</span> assign( <span class="keyword">const</span> concurrent_queue_base_v3& src ) ;
+<a name="l00490"></a>00490 };
+<a name="l00491"></a>00491 
+<a name="l00492"></a>00492 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00493"></a>00493 concurrent_queue_base_v3<T>::concurrent_queue_base_v3() {
+<a name="l00494"></a>00494     <span class="keyword">const</span> size_t item_size = <span class="keyword">sizeof</span>(T);
+<a name="l00495"></a>00495     my_rep = cache_aligned_allocator<concurrent_queue_rep<T> >().allocate(1);
+<a name="l00496"></a>00496     __TBB_ASSERT( (size_t)my_rep % NFS_GetLineSize()==0, <span class="stringliteral">"alignment error"</span> );
+<a name="l00497"></a>00497     __TBB_ASSERT( (size_t)&my_rep->head_counter % NFS_GetLineSize()==0, <span class="stringliteral">"alignment error"</span> );
+<a name="l00498"></a>00498     __TBB_ASSERT( (size_t)&my_rep->tail_counter % NFS_GetLineSize()==0, <span class="stringliteral">"alignment error"</span> );
+<a name="l00499"></a>00499     __TBB_ASSERT( (size_t)&my_rep->array % NFS_GetLineSize()==0, <span class="stringliteral">"alignment error"</span> );
+<a name="l00500"></a>00500     memset(my_rep,0,<span class="keyword">sizeof</span>(concurrent_queue_rep<T>));
+<a name="l00501"></a>00501     my_rep->item_size = item_size;
+<a name="l00502"></a>00502     my_rep->items_per_page = item_size<=8 ? 32 :
+<a name="l00503"></a>00503                              item_size<=16 ? 16 : 
+<a name="l00504"></a>00504                              item_size<=32 ? 8 :
+<a name="l00505"></a>00505                              item_size<=64 ? 4 :
+<a name="l00506"></a>00506                              item_size<=128 ? 2 :
+<a name="l00507"></a>00507                              1;
+<a name="l00508"></a>00508 }
+<a name="l00509"></a>00509 
+<a name="l00510"></a>00510 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00511"></a>00511 <span class="keywordtype">bool</span> concurrent_queue_base_v3<T>::internal_try_pop( <span class="keywordtype">void</span>* dst ) {
+<a name="l00512"></a>00512     concurrent_queue_rep<T>& r = *my_rep;
+<a name="l00513"></a>00513     ticket k;
+<a name="l00514"></a>00514     <span class="keywordflow">do</span> {
+<a name="l00515"></a>00515         k = r.head_counter;
+<a name="l00516"></a>00516         <span class="keywordflow">for</span>(;;) {
+<a name="l00517"></a>00517             <span class="keywordflow">if</span>( r.tail_counter<=k ) {
+<a name="l00518"></a>00518                 <span class="comment">// Queue is empty </span>
+<a name="l00519"></a>00519                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00520"></a>00520             }
+<a name="l00521"></a>00521             <span class="comment">// Queue had item with ticket k when we looked.  Attempt to get that item.</span>
+<a name="l00522"></a>00522             ticket tk=k;
+<a name="l00523"></a>00523 <span class="preprocessor">#if defined(_MSC_VER) && defined(_Wp64)</span>
+<a name="l00524"></a>00524 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (push)</span>
+<a name="l00525"></a>00525 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4267)</span>
+<a name="l00526"></a>00526 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00527"></a>00527 <span class="preprocessor"></span>            k = r.head_counter.compare_and_swap( tk+1, tk );
+<a name="l00528"></a>00528 <span class="preprocessor">#if defined(_MSC_VER) && defined(_Wp64)</span>
+<a name="l00529"></a>00529 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
+<a name="l00530"></a>00530 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00531"></a>00531 <span class="preprocessor"></span>            <span class="keywordflow">if</span>( k==tk )
+<a name="l00532"></a>00532                 <span class="keywordflow">break</span>;
+<a name="l00533"></a>00533             <span class="comment">// Another thread snatched the item, retry.</span>
+<a name="l00534"></a>00534         }
+<a name="l00535"></a>00535     } <span class="keywordflow">while</span>( !r.choose( k ).pop( dst, k, *<span class="keyword">this</span> ) );
+<a name="l00536"></a>00536     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00537"></a>00537 }
+<a name="l00538"></a>00538 
+<a name="l00539"></a>00539 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00540"></a>00540 size_t concurrent_queue_base_v3<T>::internal_size()<span class="keyword"> const </span>{
+<a name="l00541"></a>00541     concurrent_queue_rep<T>& r = *my_rep;
+<a name="l00542"></a>00542     __TBB_ASSERT( <span class="keyword">sizeof</span>(ptrdiff_t)<=<span class="keyword">sizeof</span>(size_t), NULL );
+<a name="l00543"></a>00543     ticket hc = r.head_counter;
+<a name="l00544"></a>00544     size_t nie = r.n_invalid_entries;
+<a name="l00545"></a>00545     ticket tc = r.tail_counter;
+<a name="l00546"></a>00546     __TBB_ASSERT( hc!=tc || !nie, NULL );
+<a name="l00547"></a>00547     ptrdiff_t sz = tc-hc-nie;
+<a name="l00548"></a>00548     <span class="keywordflow">return</span> sz<0 ? 0 :  size_t(sz);
+<a name="l00549"></a>00549 }
+<a name="l00550"></a>00550 
+<a name="l00551"></a>00551 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00552"></a>00552 <span class="keywordtype">bool</span> concurrent_queue_base_v3<T>::internal_empty()<span class="keyword"> const </span>{
+<a name="l00553"></a>00553     concurrent_queue_rep<T>& r = *my_rep;
+<a name="l00554"></a>00554     ticket tc = r.tail_counter;
+<a name="l00555"></a>00555     ticket hc = r.head_counter;
+<a name="l00556"></a>00556     <span class="comment">// if tc!=r.tail_counter, the queue was not empty at some point between the two reads.</span>
+<a name="l00557"></a>00557     <span class="keywordflow">return</span> tc==r.tail_counter && tc==hc+r.n_invalid_entries ;
+<a name="l00558"></a>00558 }
+<a name="l00559"></a>00559 
+<a name="l00560"></a>00560 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00561"></a>00561 <span class="keywordtype">void</span> concurrent_queue_base_v3<T>::internal_finish_clear() {
+<a name="l00562"></a>00562     concurrent_queue_rep<T>& r = *my_rep;
+<a name="l00563"></a>00563     size_t nq = r.n_queue;
+<a name="l00564"></a>00564     <span class="keywordflow">for</span>( size_t i=0; i<nq; ++i ) {
+<a name="l00565"></a>00565         page* tp = r.array[i].tail_page;
+<a name="l00566"></a>00566         <span class="keywordflow">if</span>( is_valid_page(tp) ) {
+<a name="l00567"></a>00567             __TBB_ASSERT( r.array[i].head_page==tp, <span class="stringliteral">"at most one page should remain"</span> );
+<a name="l00568"></a>00568             deallocate_page( tp );
+<a name="l00569"></a>00569             r.array[i].tail_page = NULL;
+<a name="l00570"></a>00570         } <span class="keywordflow">else</span> 
+<a name="l00571"></a>00571             __TBB_ASSERT( !is_valid_page(r.array[i].head_page), <span class="stringliteral">"head page pointer corrupt?"</span> );
+<a name="l00572"></a>00572     }
+<a name="l00573"></a>00573 }
+<a name="l00574"></a>00574 
+<a name="l00575"></a>00575 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00576"></a>00576 <span class="keywordtype">void</span> concurrent_queue_base_v3<T>::assign( <span class="keyword">const</span> concurrent_queue_base_v3& src ) {
+<a name="l00577"></a>00577     concurrent_queue_rep<T>& r = *my_rep;
+<a name="l00578"></a>00578     r.items_per_page = src.my_rep->items_per_page;
+<a name="l00579"></a>00579 
+<a name="l00580"></a>00580     <span class="comment">// copy concurrent_queue_rep.</span>
+<a name="l00581"></a>00581     r.head_counter = src.my_rep->head_counter;
+<a name="l00582"></a>00582     r.tail_counter = src.my_rep->tail_counter;
+<a name="l00583"></a>00583     r.n_invalid_entries = src.my_rep->n_invalid_entries;
+<a name="l00584"></a>00584 
+<a name="l00585"></a>00585     <span class="comment">// copy micro_queues</span>
+<a name="l00586"></a>00586     <span class="keywordflow">for</span>( size_t i = 0; i<r.n_queue; ++i )
+<a name="l00587"></a>00587         r.array[i].assign( src.my_rep->array[i], *<span class="keyword">this</span>);
+<a name="l00588"></a>00588 
+<a name="l00589"></a>00589     __TBB_ASSERT( r.head_counter==src.my_rep->head_counter && r.tail_counter==src.my_rep->tail_counter, 
+<a name="l00590"></a>00590             <span class="stringliteral">"the source concurrent queue should not be concurrently modified."</span> );
+<a name="l00591"></a>00591 }
+<a name="l00592"></a>00592 
+<a name="l00593"></a>00593 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value> <span class="keyword">class </span>concurrent_queue_iterator;
+<a name="l00594"></a>00594 
+<a name="l00595"></a>00595 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00596"></a>00596 <span class="keyword">class </span>concurrent_queue_iterator_rep: no_assign {
+<a name="l00597"></a>00597     <span class="keyword">typedef</span> <span class="keyword">typename</span> micro_queue<T>::padded_page padded_page;
+<a name="l00598"></a>00598 <span class="keyword">public</span>:
+<a name="l00599"></a>00599     ticket head_counter;
+<a name="l00600"></a>00600     <span class="keyword">const</span> concurrent_queue_base_v3<T>& my_queue;
+<a name="l00601"></a>00601     <span class="keyword">typename</span> concurrent_queue_base_v3<T>::page* array[concurrent_queue_rep<T>::n_queue];
+<a name="l00602"></a>00602     concurrent_queue_iterator_rep( <span class="keyword">const</span> concurrent_queue_base_v3<T>& queue ) :
+<a name="l00603"></a>00603         head_counter(queue.my_rep->head_counter),
+<a name="l00604"></a>00604         my_queue(queue)
+<a name="l00605"></a>00605     {
+<a name="l00606"></a>00606         <span class="keywordflow">for</span>( size_t k=0; k<concurrent_queue_rep<T>::n_queue; ++k )
+<a name="l00607"></a>00607             array[k] = queue.my_rep->array[k].head_page;
+<a name="l00608"></a>00608     }
+<a name="l00609"></a>00609 
+<a name="l00611"></a>00611     <span class="keywordtype">bool</span> get_item( T*& item, size_t k ) ;
+<a name="l00612"></a>00612 };
+<a name="l00613"></a>00613 
+<a name="l00614"></a>00614 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00615"></a>00615 <span class="keywordtype">bool</span> concurrent_queue_iterator_rep<T>::get_item( T*& item, size_t k ) {
+<a name="l00616"></a>00616     <span class="keywordflow">if</span>( k==my_queue.my_rep->tail_counter ) {
+<a name="l00617"></a>00617         item = NULL;
+<a name="l00618"></a>00618         <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00619"></a>00619     } <span class="keywordflow">else</span> {
+<a name="l00620"></a>00620         <span class="keyword">typename</span> concurrent_queue_base_v3<T>::page* p = array[concurrent_queue_rep<T>::index(k)];
+<a name="l00621"></a>00621         __TBB_ASSERT(p,NULL);
+<a name="l00622"></a>00622         size_t i = k/concurrent_queue_rep<T>::n_queue & (my_queue.my_rep->items_per_page-1);
+<a name="l00623"></a>00623         item = &micro_queue<T>::get_ref(*p,i);
+<a name="l00624"></a>00624         <span class="keywordflow">return</span> (p->mask & uintptr_t(1)<<i)!=0;
+<a name="l00625"></a>00625     }
+<a name="l00626"></a>00626 }
+<a name="l00627"></a>00627 
+<a name="l00629"></a>00629 
+<a name="l00630"></a>00630 <span class="keyword">template</span><<span class="keyword">typename</span> Value>
+<a name="l00631"></a>00631 <span class="keyword">class </span>concurrent_queue_iterator_base_v3 : no_assign {
+<a name="l00633"></a>00633 
+<a name="l00634"></a>00634     concurrent_queue_iterator_rep<Value>* my_rep;
+<a name="l00635"></a>00635 
+<a name="l00636"></a>00636     <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="l00637"></a>00637     <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> concurrent_queue_iterator<C,T>& i, <span class="keyword">const</span> concurrent_queue_iterator<C,U>& j );
+<a name="l00638"></a>00638 
+<a name="l00639"></a>00639     <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="l00640"></a>00640     <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> concurrent_queue_iterator<C,T>& i, <span class="keyword">const</span> concurrent_queue_iterator<C,U>& j );
+<a name="l00641"></a>00641 <span class="keyword">protected</span>:
+<a name="l00643"></a>00643     Value* my_item;
+<a name="l00644"></a>00644 
+<a name="l00646"></a>00646     concurrent_queue_iterator_base_v3() : my_rep(NULL), my_item(NULL) {
+<a name="l00647"></a>00647 <span class="preprocessor">#if __TBB_GCC_OPTIMIZER_ORDERING_BROKEN</span>
+<a name="l00648"></a>00648 <span class="preprocessor"></span>        __asm__ __volatile__(<span class="stringliteral">""</span>: : :<span class="stringliteral">"memory"</span>);
+<a name="l00649"></a>00649 <span class="preprocessor">#endif</span>
+<a name="l00650"></a>00650 <span class="preprocessor"></span>    }
+<a name="l00651"></a>00651 
+<a name="l00653"></a>00653     concurrent_queue_iterator_base_v3( <span class="keyword">const</span> concurrent_queue_iterator_base_v3& i )
+<a name="l00654"></a>00654     : no_assign(), my_rep(NULL), my_item(NULL) {
+<a name="l00655"></a>00655         assign(i);
+<a name="l00656"></a>00656     }
+<a name="l00657"></a>00657 
+<a name="l00659"></a>00659     concurrent_queue_iterator_base_v3( <span class="keyword">const</span> concurrent_queue_base_v3<Value>& queue ) ;
+<a name="l00660"></a>00660 
+<a name="l00662"></a>00662     <span class="keywordtype">void</span> assign( <span class="keyword">const</span> concurrent_queue_iterator_base_v3<Value>& other ) ;
+<a name="l00663"></a>00663 
+<a name="l00665"></a>00665     <span class="keywordtype">void</span> advance() ;
+<a name="l00666"></a>00666 
+<a name="l00668"></a>00668     ~concurrent_queue_iterator_base_v3() {
+<a name="l00669"></a>00669         cache_aligned_allocator<concurrent_queue_iterator_rep<Value> >().deallocate(my_rep, 1);
+<a name="l00670"></a>00670         my_rep = NULL;
+<a name="l00671"></a>00671     }
+<a name="l00672"></a>00672 };
+<a name="l00673"></a>00673 
+<a name="l00674"></a>00674 <span class="keyword">template</span><<span class="keyword">typename</span> Value>
+<a name="l00675"></a>00675 concurrent_queue_iterator_base_v3<Value>::concurrent_queue_iterator_base_v3( <span class="keyword">const</span> concurrent_queue_base_v3<Value>& queue ) {
+<a name="l00676"></a>00676     my_rep = cache_aligned_allocator<concurrent_queue_iterator_rep<Value> >().allocate(1);
+<a name="l00677"></a>00677     <span class="keyword">new</span>( my_rep ) concurrent_queue_iterator_rep<Value>(queue);
+<a name="l00678"></a>00678     size_t k = my_rep->head_counter;
+<a name="l00679"></a>00679     <span class="keywordflow">if</span>( !my_rep->get_item(my_item, k) ) advance();
+<a name="l00680"></a>00680 }
+<a name="l00681"></a>00681 
+<a name="l00682"></a>00682 <span class="keyword">template</span><<span class="keyword">typename</span> Value>
+<a name="l00683"></a>00683 <span class="keywordtype">void</span> concurrent_queue_iterator_base_v3<Value>::assign( <span class="keyword">const</span> concurrent_queue_iterator_base_v3<Value>& other ) {
+<a name="l00684"></a>00684     <span class="keywordflow">if</span>( my_rep!=other.my_rep ) {
+<a name="l00685"></a>00685         <span class="keywordflow">if</span>( my_rep ) {
+<a name="l00686"></a>00686             cache_aligned_allocator<concurrent_queue_iterator_rep<Value> >().deallocate(my_rep, 1);
+<a name="l00687"></a>00687             my_rep = NULL;
+<a name="l00688"></a>00688         }
+<a name="l00689"></a>00689         <span class="keywordflow">if</span>( other.my_rep ) {
+<a name="l00690"></a>00690             my_rep = cache_aligned_allocator<concurrent_queue_iterator_rep<Value> >().allocate(1);
+<a name="l00691"></a>00691             <span class="keyword">new</span>( my_rep ) concurrent_queue_iterator_rep<Value>( *other.my_rep );
+<a name="l00692"></a>00692         }
+<a name="l00693"></a>00693     }
+<a name="l00694"></a>00694     my_item = other.my_item;
+<a name="l00695"></a>00695 }
+<a name="l00696"></a>00696 
+<a name="l00697"></a>00697 <span class="keyword">template</span><<span class="keyword">typename</span> Value>
+<a name="l00698"></a>00698 <span class="keywordtype">void</span> concurrent_queue_iterator_base_v3<Value>::advance() {
+<a name="l00699"></a>00699     __TBB_ASSERT( my_item, <span class="stringliteral">"attempt to increment iterator past end of queue"</span> );  
+<a name="l00700"></a>00700     size_t k = my_rep->head_counter;
+<a name="l00701"></a>00701     <span class="keyword">const</span> concurrent_queue_base_v3<Value>& queue = my_rep->my_queue;
+<a name="l00702"></a>00702 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00703"></a>00703 <span class="preprocessor"></span>    Value* tmp;
+<a name="l00704"></a>00704     my_rep->get_item(tmp,k);
+<a name="l00705"></a>00705     __TBB_ASSERT( my_item==tmp, NULL );
+<a name="l00706"></a>00706 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00707"></a>00707     size_t i = k/concurrent_queue_rep<Value>::n_queue & (queue.my_rep->items_per_page-1);
+<a name="l00708"></a>00708     <span class="keywordflow">if</span>( i==queue.my_rep->items_per_page-1 ) {
+<a name="l00709"></a>00709         <span class="keyword">typename</span> concurrent_queue_base_v3<Value>::page*& root = my_rep->array[concurrent_queue_rep<Value>::index(k)];
+<a name="l00710"></a>00710         root = root->next;
+<a name="l00711"></a>00711     }
+<a name="l00712"></a>00712     <span class="comment">// advance k</span>
+<a name="l00713"></a>00713     my_rep->head_counter = ++k;
+<a name="l00714"></a>00714     <span class="keywordflow">if</span>( !my_rep->get_item(my_item, k) ) advance();
+<a name="l00715"></a>00715 }
+<a name="l00716"></a>00716 
+<a name="l00718"></a>00718 
+<a name="l00719"></a>00719 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span>tbb_remove_cv {<span class="keyword">typedef</span> T type;};
+<a name="l00720"></a>00720 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span>tbb_remove_cv<const T> {<span class="keyword">typedef</span> T type;};
+<a name="l00721"></a>00721 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span>tbb_remove_cv<volatile T> {<span class="keyword">typedef</span> T type;};
+<a name="l00722"></a>00722 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span>tbb_remove_cv<const volatile T> {<span class="keyword">typedef</span> T type;};
+<a name="l00723"></a>00723 
+<a name="l00725"></a>00725 
+<a name="l00727"></a>00727 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
+<a name="l00728"></a>00728 <span class="keyword">class </span>concurrent_queue_iterator: <span class="keyword">public</span> concurrent_queue_iterator_base_v3<typename tbb_remove_cv<Value>::type>,
+<a name="l00729"></a>00729         <span class="keyword">public</span> std::iterator<std::forward_iterator_tag,Value> {
+<a name="l00730"></a>00730 <span class="preprocessor">#if !__TBB_TEMPLATE_FRIENDS_BROKEN</span>
+<a name="l00731"></a>00731 <span class="preprocessor"></span>    <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00732"></a>00732     <span class="keyword">friend</span> class ::tbb::strict_ppl::concurrent_queue;
+<a name="l00733"></a>00733 <span class="preprocessor">#else</span>
+<a name="l00734"></a>00734 <span class="preprocessor"></span><span class="keyword">public</span>: <span class="comment">// workaround for MSVC</span>
+<a name="l00735"></a>00735 <span class="preprocessor">#endif </span>
+<a name="l00737"></a>00737 <span class="preprocessor">    concurrent_queue_iterator( const concurrent_queue_base_v3<Value>& queue ) :</span>
+<a name="l00738"></a>00738 <span class="preprocessor"></span>        concurrent_queue_iterator_base_v3<typename tbb_remove_cv<Value>::type>(queue)
+<a name="l00739"></a>00739     {
+<a name="l00740"></a>00740     }
+<a name="l00741"></a>00741 
+<a name="l00742"></a>00742 <span class="keyword">public</span>:
+<a name="l00743"></a>00743     concurrent_queue_iterator() {}
+<a name="l00744"></a>00744 
+<a name="l00745"></a>00745     concurrent_queue_iterator( <span class="keyword">const</span> concurrent_queue_iterator<Container,typename Container::value_type>& other ) :
+<a name="l00746"></a>00746         concurrent_queue_iterator_base_v3<typename tbb_remove_cv<Value>::type>(other)
+<a name="l00747"></a>00747     {}
+<a name="l00748"></a>00748 
+<a name="l00750"></a>00750     concurrent_queue_iterator& operator=( <span class="keyword">const</span> concurrent_queue_iterator& other ) {
+<a name="l00751"></a>00751         this->assign(other);
+<a name="l00752"></a>00752         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00753"></a>00753     }
+<a name="l00754"></a>00754 
+<a name="l00756"></a>00756     Value& operator*()<span class="keyword"> const </span>{
+<a name="l00757"></a>00757         <span class="keywordflow">return</span> *static_cast<Value*>(this->my_item);
+<a name="l00758"></a>00758     }
+<a name="l00759"></a>00759 
+<a name="l00760"></a>00760     Value* operator->()<span class="keyword"> const </span>{<span class="keywordflow">return</span> &operator*();}
+<a name="l00761"></a>00761 
+<a name="l00763"></a>00763     concurrent_queue_iterator& operator++() {
+<a name="l00764"></a>00764         this->advance();
+<a name="l00765"></a>00765         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00766"></a>00766     }
+<a name="l00767"></a>00767 
+<a name="l00769"></a>00769     Value* operator++(<span class="keywordtype">int</span>) {
+<a name="l00770"></a>00770         Value* result = &operator*();
+<a name="l00771"></a>00771         operator++();
+<a name="l00772"></a>00772         <span class="keywordflow">return</span> result;
+<a name="l00773"></a>00773     }
+<a name="l00774"></a>00774 }; <span class="comment">// concurrent_queue_iterator</span>
+<a name="l00775"></a>00775 
+<a name="l00776"></a>00776 
+<a name="l00777"></a>00777 <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="l00778"></a>00778 <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> concurrent_queue_iterator<C,T>& i, <span class="keyword">const</span> concurrent_queue_iterator<C,U>& j ) {
+<a name="l00779"></a>00779     <span class="keywordflow">return</span> i.my_item==j.my_item;
+<a name="l00780"></a>00780 }
+<a name="l00781"></a>00781 
+<a name="l00782"></a>00782 <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="l00783"></a>00783 <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> concurrent_queue_iterator<C,T>& i, <span class="keyword">const</span> concurrent_queue_iterator<C,U>& j ) {
+<a name="l00784"></a>00784     <span class="keywordflow">return</span> i.my_item!=j.my_item;
+<a name="l00785"></a>00785 }
+<a name="l00786"></a>00786 
+<a name="l00787"></a>00787 } <span class="comment">// namespace internal</span>
+<a name="l00788"></a>00788 
+<a name="l00790"></a>00790 
+<a name="l00791"></a>00791 } <span class="comment">// namespace strict_ppl</span>
+<a name="l00792"></a>00792 
+<a name="l00794"></a>00794 <span class="keyword">namespace </span>internal {
+<a name="l00795"></a>00795 
+<a name="l00796"></a>00796 <span class="keyword">class </span>concurrent_queue_rep;
+<a name="l00797"></a>00797 <span class="keyword">class </span>concurrent_queue_iterator_rep;
+<a name="l00798"></a>00798 <span class="keyword">class </span>concurrent_queue_iterator_base_v3;
+<a name="l00799"></a>00799 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value> <span class="keyword">class </span>concurrent_queue_iterator;
+<a name="l00800"></a>00800 
+<a name="l00802"></a>00802 
+<a name="l00804"></a>00804 <span class="keyword">class </span>concurrent_queue_base_v3: no_copy {
+<a name="l00806"></a>00806     concurrent_queue_rep* my_rep;
+<a name="l00807"></a>00807 
+<a name="l00808"></a>00808     <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_queue_rep;
+<a name="l00809"></a>00809     <span class="keyword">friend</span> <span class="keyword">struct </span>micro_queue;
+<a name="l00810"></a>00810     <span class="keyword">friend</span> <span class="keyword">class </span>micro_queue_pop_finalizer;
+<a name="l00811"></a>00811     <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_queue_iterator_rep;
+<a name="l00812"></a>00812     <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_queue_iterator_base_v3;
+<a name="l00813"></a>00813 <span class="keyword">protected</span>:
+<a name="l00815"></a>00815     <span class="keyword">struct </span>page {
+<a name="l00816"></a>00816         page* next;
+<a name="l00817"></a>00817         uintptr_t mask; 
+<a name="l00818"></a>00818     };
+<a name="l00819"></a>00819 
+<a name="l00821"></a>00821     ptrdiff_t my_capacity;
+<a name="l00822"></a>00822    
+<a name="l00824"></a>00824     size_t items_per_page;
+<a name="l00825"></a>00825 
+<a name="l00827"></a>00827     size_t item_size;
+<a name="l00828"></a>00828 
+<a name="l00829"></a>00829 <span class="preprocessor">#if __TBB_GCC_3_3_PROTECTED_BROKEN</span>
+<a name="l00830"></a>00830 <span class="preprocessor"></span><span class="keyword">public</span>:
+<a name="l00831"></a>00831 <span class="preprocessor">#endif</span>
+<a name="l00832"></a>00832 <span class="preprocessor"></span>    <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00833"></a>00833     <span class="keyword">struct </span>padded_page: page {
+<a name="l00835"></a>00835         padded_page(); 
+<a name="l00837"></a>00837         <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> padded_page& );
+<a name="l00839"></a>00839         T last;
+<a name="l00840"></a>00840     };
+<a name="l00841"></a>00841 
+<a name="l00842"></a>00842 <span class="keyword">private</span>:
+<a name="l00843"></a>00843     <span class="keyword">virtual</span> <span class="keywordtype">void</span> copy_item( page& dst, size_t index, <span class="keyword">const</span> <span class="keywordtype">void</span>* src ) = 0;
+<a name="l00844"></a>00844     <span class="keyword">virtual</span> <span class="keywordtype">void</span> assign_and_destroy_item( <span class="keywordtype">void</span>* dst, page& src, size_t index ) = 0;
+<a name="l00845"></a>00845 <span class="keyword">protected</span>:
+<a name="l00846"></a>00846     __TBB_EXPORTED_METHOD concurrent_queue_base_v3( size_t item_size );
+<a name="l00847"></a>00847     <span class="keyword">virtual</span> __TBB_EXPORTED_METHOD ~concurrent_queue_base_v3();
+<a name="l00848"></a>00848 
+<a name="l00850"></a>00850     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_push( <span class="keyword">const</span> <span class="keywordtype">void</span>* src );
+<a name="l00851"></a>00851 
+<a name="l00853"></a>00853     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_pop( <span class="keywordtype">void</span>* dst );
+<a name="l00854"></a>00854 
+<a name="l00856"></a>00856     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_push_if_not_full( <span class="keyword">const</span> <span class="keywordtype">void</span>* src );
+<a name="l00857"></a>00857 
+<a name="l00859"></a>00859 
+<a name="l00860"></a>00860     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_pop_if_present( <span class="keywordtype">void</span>* dst );
+<a name="l00861"></a>00861 
+<a name="l00863"></a>00863     ptrdiff_t __TBB_EXPORTED_METHOD internal_size() <span class="keyword">const</span>;
+<a name="l00864"></a>00864 
+<a name="l00866"></a>00866     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_empty() <span class="keyword">const</span>;
+<a name="l00867"></a>00867 
+<a name="l00869"></a>00869     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_set_capacity( ptrdiff_t capacity, size_t element_size );
+<a name="l00870"></a>00870 
+<a name="l00872"></a>00872     <span class="keyword">virtual</span> page *allocate_page() = 0;
+<a name="l00873"></a>00873 
+<a name="l00875"></a>00875     <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate_page( page *p ) = 0;
+<a name="l00876"></a>00876 
+<a name="l00878"></a>00878     <span class="comment">/* note that the name may be misleading, but it remains so due to a historical accident. */</span>
+<a name="l00879"></a>00879     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_finish_clear() ;
+<a name="l00880"></a>00880 
+<a name="l00882"></a>00882     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_throw_exception() <span class="keyword">const</span>;
+<a name="l00883"></a>00883 
+<a name="l00885"></a>00885     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD assign( <span class="keyword">const</span> concurrent_queue_base_v3& src ) ;
+<a name="l00886"></a>00886 
+<a name="l00887"></a>00887 <span class="keyword">private</span>:
+<a name="l00888"></a>00888     <span class="keyword">virtual</span> <span class="keywordtype">void</span> copy_page_item( page& dst, size_t dindex, <span class="keyword">const</span> page& src, size_t sindex ) = 0;
+<a name="l00889"></a>00889 };
+<a name="l00890"></a>00890 
+<a name="l00892"></a>00892 
+<a name="l00893"></a>00893 <span class="keyword">class </span>concurrent_queue_iterator_base_v3 {
+<a name="l00895"></a>00895 
+<a name="l00896"></a>00896     concurrent_queue_iterator_rep* my_rep;
+<a name="l00897"></a>00897 
+<a name="l00898"></a>00898     <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="l00899"></a>00899     <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> concurrent_queue_iterator<C,T>& i, <span class="keyword">const</span> concurrent_queue_iterator<C,U>& j );
+<a name="l00900"></a>00900 
+<a name="l00901"></a>00901     <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="l00902"></a>00902     <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> concurrent_queue_iterator<C,T>& i, <span class="keyword">const</span> concurrent_queue_iterator<C,U>& j );
+<a name="l00903"></a>00903 
+<a name="l00904"></a>00904     <span class="keywordtype">void</span> initialize( <span class="keyword">const</span> concurrent_queue_base_v3& queue, size_t offset_of_data );
+<a name="l00905"></a>00905 <span class="keyword">protected</span>:
+<a name="l00907"></a>00907     <span class="keywordtype">void</span>* my_item;
+<a name="l00908"></a>00908 
+<a name="l00910"></a>00910     concurrent_queue_iterator_base_v3() : my_rep(NULL), my_item(NULL) {}
+<a name="l00911"></a>00911 
+<a name="l00913"></a>00913     concurrent_queue_iterator_base_v3( <span class="keyword">const</span> concurrent_queue_iterator_base_v3& i ) : my_rep(NULL), my_item(NULL) {
+<a name="l00914"></a>00914         assign(i);
+<a name="l00915"></a>00915     }
+<a name="l00916"></a>00916 
+<a name="l00918"></a>00918 
+<a name="l00919"></a>00919     __TBB_EXPORTED_METHOD concurrent_queue_iterator_base_v3( <span class="keyword">const</span> concurrent_queue_base_v3& queue );
+<a name="l00920"></a>00920 
+<a name="l00922"></a>00922     __TBB_EXPORTED_METHOD concurrent_queue_iterator_base_v3( <span class="keyword">const</span> concurrent_queue_base_v3& queue, size_t offset_of_data );
+<a name="l00923"></a>00923 
+<a name="l00925"></a>00925     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD assign( <span class="keyword">const</span> concurrent_queue_iterator_base_v3& i );
+<a name="l00926"></a>00926 
+<a name="l00928"></a>00928     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD advance();
+<a name="l00929"></a>00929 
+<a name="l00931"></a>00931     __TBB_EXPORTED_METHOD ~concurrent_queue_iterator_base_v3();
+<a name="l00932"></a>00932 };
+<a name="l00933"></a>00933 
+<a name="l00934"></a>00934 <span class="keyword">typedef</span> concurrent_queue_iterator_base_v3 concurrent_queue_iterator_base;
+<a name="l00935"></a>00935 
+<a name="l00937"></a>00937 
+<a name="l00939"></a>00939 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
+<a name="l00940"></a>00940 <span class="keyword">class </span>concurrent_queue_iterator: <span class="keyword">public</span> concurrent_queue_iterator_base,
+<a name="l00941"></a>00941         <span class="keyword">public</span> std::iterator<std::forward_iterator_tag,Value> {
+<a name="l00942"></a>00942 
+<a name="l00943"></a>00943 <span class="preprocessor">#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)</span>
+<a name="l00944"></a>00944 <span class="preprocessor"></span>    <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00945"></a>00945     <span class="keyword">friend</span> class ::tbb::concurrent_bounded_queue;
+<a name="l00946"></a>00946 
+<a name="l00947"></a>00947     <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00948"></a>00948     <span class="keyword">friend</span> class ::tbb::deprecated::concurrent_queue;
+<a name="l00949"></a>00949 <span class="preprocessor">#else</span>
+<a name="l00950"></a>00950 <span class="preprocessor"></span><span class="keyword">public</span>: <span class="comment">// workaround for MSVC</span>
+<a name="l00951"></a>00951 <span class="preprocessor">#endif </span>
+<a name="l00953"></a>00953 <span class="preprocessor">    concurrent_queue_iterator( const concurrent_queue_base_v3& queue ) :</span>
+<a name="l00954"></a>00954 <span class="preprocessor"></span>        concurrent_queue_iterator_base_v3(queue,__TBB_offsetof(concurrent_queue_base_v3::padded_page<Value>,last))
+<a name="l00955"></a>00955     {
+<a name="l00956"></a>00956     }
+<a name="l00957"></a>00957 
+<a name="l00958"></a>00958 <span class="keyword">public</span>:
+<a name="l00959"></a>00959     concurrent_queue_iterator() {}
+<a name="l00960"></a>00960 
+<a name="l00963"></a>00963     concurrent_queue_iterator( <span class="keyword">const</span> concurrent_queue_iterator<Container,typename Container::value_type>& other ) :
+<a name="l00964"></a>00964         concurrent_queue_iterator_base_v3(other)
+<a name="l00965"></a>00965     {}
+<a name="l00966"></a>00966 
+<a name="l00968"></a>00968     concurrent_queue_iterator& operator=( <span class="keyword">const</span> concurrent_queue_iterator& other ) {
+<a name="l00969"></a>00969         assign(other);
+<a name="l00970"></a>00970         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00971"></a>00971     }
+<a name="l00972"></a>00972 
+<a name="l00974"></a>00974     Value& operator*()<span class="keyword"> const </span>{
+<a name="l00975"></a>00975         <span class="keywordflow">return</span> *static_cast<Value*>(my_item);
+<a name="l00976"></a>00976     }
+<a name="l00977"></a>00977 
+<a name="l00978"></a>00978     Value* operator->()<span class="keyword"> const </span>{<span class="keywordflow">return</span> &operator*();}
+<a name="l00979"></a>00979 
+<a name="l00981"></a>00981     concurrent_queue_iterator& operator++() {
+<a name="l00982"></a>00982         advance();
+<a name="l00983"></a>00983         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00984"></a>00984     }
+<a name="l00985"></a>00985 
+<a name="l00987"></a>00987     Value* operator++(<span class="keywordtype">int</span>) {
+<a name="l00988"></a>00988         Value* result = &operator*();
+<a name="l00989"></a>00989         operator++();
+<a name="l00990"></a>00990         <span class="keywordflow">return</span> result;
+<a name="l00991"></a>00991     }
+<a name="l00992"></a>00992 }; <span class="comment">// concurrent_queue_iterator</span>
+<a name="l00993"></a>00993 
+<a name="l00994"></a>00994 
+<a name="l00995"></a>00995 <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="l00996"></a>00996 <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> concurrent_queue_iterator<C,T>& i, <span class="keyword">const</span> concurrent_queue_iterator<C,U>& j ) {
+<a name="l00997"></a>00997     <span class="keywordflow">return</span> i.my_item==j.my_item;
+<a name="l00998"></a>00998 }
+<a name="l00999"></a>00999 
+<a name="l01000"></a>01000 <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="l01001"></a>01001 <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> concurrent_queue_iterator<C,T>& i, <span class="keyword">const</span> concurrent_queue_iterator<C,U>& j ) {
+<a name="l01002"></a>01002     <span class="keywordflow">return</span> i.my_item!=j.my_item;
+<a name="l01003"></a>01003 }
+<a name="l01004"></a>01004 
+<a name="l01005"></a>01005 } <span class="comment">// namespace internal;</span>
+<a name="l01006"></a>01006 
+<a name="l01008"></a>01008 
+<a name="l01009"></a>01009 } <span class="comment">// namespace tbb</span>
+<a name="l01010"></a>01010 
+<a name="l01011"></a>01011 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_concurrent_queue_internal_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/a00384.html b/doc/html/a00384.html
deleted file mode 100644
index 5d7a145..0000000
--- a/doc/html/a00384.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-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_parallel_for_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>::value_type& value )<span class="keyword"> const </span>{
-<a name="l00039"></a>00039             my_func(value);
-<a name="l00040"></a>00040         }
-<a name="l00041"></a>00041     };
-<a name="l00042"></a>00042 } <span class="comment">// namespace internal</span>
-<a name="l00044"></a>00044 <span class="comment"></span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="keyword">template</span><<span class="keyword">typename</span> InputIterator, <span class="keyword">typename</span> Function>
-<a name="l00051"></a><a class="code" href="a00275.html#gcd40c32f319747e61a8f73fcfc452001">00051</a> <span class="keywordtype">void</span> <a class="code" href="a00275.html#gcd40c32f319747e61a8f73fcfc452001">parallel_for_each</a>(InputIterator first, InputIterator last, <span class="keyword">const</span> Function& f, <a class="code" href="a00201.html">task_group_context</a> &context) {
-<a name="l00052"></a>00052     internal::parallel_for_each_body<Function, InputIterator> body(f);
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054     <a class="code" href="a00275.html#g3383e2703977012b6f384d673410f1f7">tbb::parallel_do</a> (first, last, body, context);
-<a name="l00055"></a>00055 }
-<a name="l00056"></a>00056 
-<a name="l00058"></a>00058 <span class="keyword">template</span><<span class="keyword">typename</span> InputIterator, <span class="keyword">typename</span> Function>
-<a name="l00059"></a><a class="code" href="a00275.html#gc2d710ca573f0a9bd94379cba3772def">00059</a> <span class="keywordtype">void</span> <a class="code" href="a00275.html#gcd40c32f319747e61a8f73fcfc452001">parallel_for_each</a>(InputIterator first, InputIterator last, <span class="keyword">const</span> Function& f) {
-<a name="l00060"></a>00060     internal::parallel_for_each_body<Function, InputIterator> body(f);
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062     <a class="code" href="a00275.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-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00386.html b/doc/html/a00386.html
deleted file mode 100644
index 0b95e43..0000000
--- a/doc/html/a00386.html
+++ /dev/null
@@ -1,374 +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-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_parallel_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="l00029"></a>00029 <span class="keyword">namespace </span>internal {
-<a name="l00030"></a>00030     <span class="comment">// Simple task object, executing user method</span>
-<a name="l00031"></a>00031     <span class="keyword">template</span><<span class="keyword">typename</span> function>
-<a name="l00032"></a>00032     <span class="keyword">class </span>function_invoker : <span class="keyword">public</span> task{
-<a name="l00033"></a>00033     <span class="keyword">public</span>:
-<a name="l00034"></a>00034         function_invoker(<span class="keyword">const</span> function& _function) : my_function(_function) {}
-<a name="l00035"></a>00035     <span class="keyword">private</span>:
-<a name="l00036"></a>00036         <span class="keyword">const</span> function &my_function;
-<a name="l00037"></a>00037         <span class="comment">/*override*/</span>
-<a name="l00038"></a>00038         task* execute()
-<a name="l00039"></a>00039         {
-<a name="l00040"></a>00040             my_function();
-<a name="l00041"></a>00041             <span class="keywordflow">return</span> NULL;
-<a name="l00042"></a>00042         }
-<a name="l00043"></a>00043     };
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045     <span class="comment">// The class spawns two or three child tasks</span>
-<a name="l00046"></a>00046     <span class="keyword">template</span> <size_t N, <span class="keyword">typename</span> function1, <span class="keyword">typename</span> function2, <span class="keyword">typename</span> function3>
-<a name="l00047"></a>00047     <span class="keyword">class </span>spawner : <span class="keyword">public</span> task {
-<a name="l00048"></a>00048     <span class="keyword">private</span>:
-<a name="l00049"></a>00049         <span class="keyword">const</span> function1& my_func1;
-<a name="l00050"></a>00050         <span class="keyword">const</span> function2& my_func2;
-<a name="l00051"></a>00051         <span class="keyword">const</span> function3& my_func3;
-<a name="l00052"></a>00052         <span class="keywordtype">bool</span> is_recycled;
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054         task* execute (){
-<a name="l00055"></a>00055             <span class="keywordflow">if</span>(is_recycled){
-<a name="l00056"></a>00056                 <span class="keywordflow">return</span> NULL;
-<a name="l00057"></a>00057             }<span class="keywordflow">else</span>{
-<a name="l00058"></a>00058                 __TBB_ASSERT(N==2 || N==3, <span class="stringliteral">"Number of arguments passed to spawner is wrong"</span>);
-<a name="l00059"></a>00059                 set_ref_count(N);
-<a name="l00060"></a>00060                 recycle_as_safe_continuation();
-<a name="l00061"></a>00061                 internal::function_invoker<function2>* invoker2 = <span class="keyword">new</span> (allocate_child()) internal::function_invoker<function2>(my_func2);
-<a name="l00062"></a>00062                 __TBB_ASSERT(invoker2, <span class="stringliteral">"Child task allocation failed"</span>);
-<a name="l00063"></a>00063                 spawn(*invoker2);
-<a name="l00064"></a>00064                 size_t n = N; <span class="comment">// To prevent compiler warnings</span>
-<a name="l00065"></a>00065                 <span class="keywordflow">if</span> (n>2) {
-<a name="l00066"></a>00066                     internal::function_invoker<function3>* invoker3 = <span class="keyword">new</span> (allocate_child()) internal::function_invoker<function3>(my_func3);
-<a name="l00067"></a>00067                     __TBB_ASSERT(invoker3, <span class="stringliteral">"Child task allocation failed"</span>);
-<a name="l00068"></a>00068                     spawn(*invoker3);
-<a name="l00069"></a>00069                 }
-<a name="l00070"></a>00070                 my_func1();
-<a name="l00071"></a>00071                 is_recycled = <span class="keyword">true</span>;
-<a name="l00072"></a>00072                 <span class="keywordflow">return</span> NULL;
-<a name="l00073"></a>00073             }
-<a name="l00074"></a>00074         } <span class="comment">// execute</span>
-<a name="l00075"></a>00075 
-<a name="l00076"></a>00076     <span class="keyword">public</span>:
-<a name="l00077"></a>00077         spawner(<span class="keyword">const</span> function1& _func1, <span class="keyword">const</span> function2& _func2, <span class="keyword">const</span> function3& _func3) : my_func1(_func1), my_func2(_func2), my_func3(_func3), is_recycled(false) {}
-<a name="l00078"></a>00078     };
-<a name="l00079"></a>00079 
-<a name="l00080"></a>00080     <span class="comment">// Creates and spawns child tasks</span>
-<a name="l00081"></a>00081     <span class="keyword">class </span>parallel_invoke_helper : <span class="keyword">public</span> empty_task {
-<a name="l00082"></a>00082     <span class="keyword">public</span>:
-<a name="l00083"></a>00083         <span class="comment">// Dummy functor class</span>
-<a name="l00084"></a>00084         <span class="keyword">class </span>parallel_invoke_noop {
-<a name="l00085"></a>00085         <span class="keyword">public</span>:
-<a name="l00086"></a>00086             <span class="keywordtype">void</span> operator() ()<span class="keyword"> const </span>{}
-<a name="l00087"></a>00087         };
-<a name="l00088"></a>00088         <span class="comment">// Creates a helper object with user-defined number of children expected</span>
-<a name="l00089"></a>00089         parallel_invoke_helper(<span class="keywordtype">int</span> number_of_children)
-<a name="l00090"></a>00090         {
-<a name="l00091"></a>00091             set_ref_count(number_of_children + 1);
-<a name="l00092"></a>00092         }
-<a name="l00093"></a>00093         <span class="comment">// Adds child task and spawns it</span>
-<a name="l00094"></a>00094         <span class="keyword">template</span> <<span class="keyword">typename</span> function>
-<a name="l00095"></a>00095         <span class="keywordtype">void</span> add_child (<span class="keyword">const</span> function &_func)
-<a name="l00096"></a>00096         {
-<a name="l00097"></a>00097             internal::function_invoker<function>* invoker = <span class="keyword">new</span> (allocate_child()) internal::function_invoker<function>(_func);
-<a name="l00098"></a>00098             __TBB_ASSERT(invoker, <span class="stringliteral">"Child task allocation failed"</span>);
-<a name="l00099"></a>00099             spawn(*invoker);
-<a name="l00100"></a>00100         }
-<a name="l00101"></a>00101 
-<a name="l00102"></a>00102         <span class="comment">// Adds a task with multiple child tasks and spawns it</span>
-<a name="l00103"></a>00103         <span class="comment">// two arguments</span>
-<a name="l00104"></a>00104         <span class="keyword">template</span> <<span class="keyword">typename</span> function1, <span class="keyword">typename</span> function2>
-<a name="l00105"></a>00105         <span class="keywordtype">void</span> add_children (<span class="keyword">const</span> function1& _func1, <span class="keyword">const</span> function2& _func2)
-<a name="l00106"></a>00106         {
-<a name="l00107"></a>00107             <span class="comment">// The third argument is dummy, it is ignored actually.</span>
-<a name="l00108"></a>00108             parallel_invoke_noop noop;
-<a name="l00109"></a>00109             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="l00110"></a>00110             spawn(sub_root);
-<a name="l00111"></a>00111         }
-<a name="l00112"></a>00112         <span class="comment">// three arguments</span>
-<a name="l00113"></a>00113         <span class="keyword">template</span> <<span class="keyword">typename</span> function1, <span class="keyword">typename</span> function2, <span class="keyword">typename</span> function3>
-<a name="l00114"></a>00114         <span class="keywordtype">void</span> add_children (<span class="keyword">const</span> function1& _func1, <span class="keyword">const</span> function2& _func2, <span class="keyword">const</span> function3& _func3)
-<a name="l00115"></a>00115         {
-<a name="l00116"></a>00116             internal::spawner<3, function1, function2, function3>& sub_root = *<span class="keyword">new</span>(allocate_child())internal::spawner<3, function1, function2, function3>(_func1, _func2, _func3);
-<a name="l00117"></a>00117             spawn(sub_root);
-<a name="l00118"></a>00118         }
-<a name="l00119"></a>00119 
-<a name="l00120"></a>00120         <span class="comment">// Waits for all child tasks</span>
-<a name="l00121"></a>00121         <span class="keyword">template</span> <<span class="keyword">typename</span> F0>
-<a name="l00122"></a>00122         <span class="keywordtype">void</span> run_and_finish(<span class="keyword">const</span> F0& f0)
-<a name="l00123"></a>00123         {
-<a name="l00124"></a>00124             internal::function_invoker<F0>* invoker = <span class="keyword">new</span> (allocate_child()) internal::function_invoker<F0>(f0);
-<a name="l00125"></a>00125             __TBB_ASSERT(invoker, <span class="stringliteral">"Child task allocation failed"</span>);
-<a name="l00126"></a>00126             spawn_and_wait_for_all(*invoker);
-<a name="l00127"></a>00127         }
-<a name="l00128"></a>00128     };
-<a name="l00129"></a>00129     <span class="comment">// The class destroys root if exception occured as well as in normal case</span>
-<a name="l00130"></a>00130     <span class="keyword">class </span>parallel_invoke_cleaner: internal::no_copy { 
-<a name="l00131"></a>00131     <span class="keyword">public</span>:
-<a name="l00132"></a>00132         parallel_invoke_cleaner(<span class="keywordtype">int</span> number_of_children, <a class="code" href="a00201.html">tbb::task_group_context</a>& context) : root(*new(task::allocate_root(context)) internal::parallel_invoke_helper(number_of_children))
-<a name="l00133"></a>00133         {}
-<a name="l00134"></a>00134         ~parallel_invoke_cleaner(){
-<a name="l00135"></a>00135             root.destroy(root);
-<a name="l00136"></a>00136         }
-<a name="l00137"></a>00137         internal::parallel_invoke_helper& root;
-<a name="l00138"></a>00138     };
-<a name="l00139"></a>00139 } <span class="comment">// namespace internal</span>
-<a name="l00141"></a>00141 <span class="comment"></span>
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146 
-<a name="l00148"></a>00148 <span class="comment">// parallel_invoke with user-defined context</span>
-<a name="l00149"></a>00149 <span class="comment">// two arguments</span>
-<a name="l00150"></a>00150 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1 >
-<a name="l00151"></a><a class="code" href="a00275.html#gd3e2998f171494f94c2103f4eb924084">00151</a> <span class="keywordtype">void</span> <a class="code" href="a00275.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <a class="code" href="a00201.html">tbb::task_group_context</a>& context) {
-<a name="l00152"></a>00152     internal::parallel_invoke_cleaner cleaner(2, context);
-<a name="l00153"></a>00153     internal::parallel_invoke_helper& root = cleaner.root;
-<a name="l00154"></a>00154 
-<a name="l00155"></a>00155     root.add_child(f1);
-<a name="l00156"></a>00156 
-<a name="l00157"></a>00157     root.run_and_finish(f0);
-<a name="l00158"></a>00158 }
-<a name="l00159"></a>00159 
-<a name="l00160"></a>00160 <span class="comment">// three arguments</span>
-<a name="l00161"></a>00161 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2 >
-<a name="l00162"></a>00162 <span class="keywordtype">void</span> <a class="code" href="a00275.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="a00201.html">tbb::task_group_context</a>& context) {
-<a name="l00163"></a>00163     internal::parallel_invoke_cleaner cleaner(3, context);
-<a name="l00164"></a>00164     internal::parallel_invoke_helper& root = cleaner.root;
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166     root.add_child(f2);
-<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">// four arguments</span>
-<a name="l00173"></a>00173 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3>
-<a name="l00174"></a>00174 <span class="keywordtype">void</span> <a class="code" href="a00275.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3,
-<a name="l00175"></a>00175                      <a class="code" href="a00201.html">tbb::task_group_context</a>& context)
-<a name="l00176"></a>00176 {
-<a name="l00177"></a>00177     internal::parallel_invoke_cleaner cleaner(4, context);
-<a name="l00178"></a>00178     internal::parallel_invoke_helper& root = cleaner.root;
-<a name="l00179"></a>00179 
-<a name="l00180"></a>00180     root.add_child(f3);
-<a name="l00181"></a>00181     root.add_child(f2);
-<a name="l00182"></a>00182     root.add_child(f1);
-<a name="l00183"></a>00183 
-<a name="l00184"></a>00184     root.run_and_finish(f0);
-<a name="l00185"></a>00185 }
-<a name="l00186"></a>00186 
-<a name="l00187"></a>00187 <span class="comment">// five arguments</span>
-<a name="l00188"></a>00188 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4 >
-<a name="l00189"></a>00189 <span class="keywordtype">void</span> <a class="code" href="a00275.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3, <span class="keyword">const</span> F4& f4,
-<a name="l00190"></a>00190                      <a class="code" href="a00201.html">tbb::task_group_context</a>& context)
-<a name="l00191"></a>00191 {
-<a name="l00192"></a>00192     internal::parallel_invoke_cleaner cleaner(3, context);
-<a name="l00193"></a>00193     internal::parallel_invoke_helper& root = cleaner.root;
-<a name="l00194"></a>00194 
-<a name="l00195"></a>00195     root.add_children(f4, f3);
-<a name="l00196"></a>00196     root.add_children(f2, f1);
-<a name="l00197"></a>00197 
-<a name="l00198"></a>00198     root.run_and_finish(f0);
-<a name="l00199"></a>00199 }
-<a name="l00200"></a>00200 
-<a name="l00201"></a>00201 <span class="comment">// six arguments</span>
-<a name="l00202"></a>00202 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4, <span class="keyword">typename</span> F5>
-<a name="l00203"></a>00203 <span class="keywordtype">void</span> <a class="code" href="a00275.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3, <span class="keyword">const</span> F4& f4, <span class="keyword">const</span> F5& f5,
-<a name="l00204"></a>00204                      <a class="code" href="a00201.html">tbb::task_group_context</a>& context)
-<a name="l00205"></a>00205 {
-<a name="l00206"></a>00206     internal::parallel_invoke_cleaner cleaner(3, context);
-<a name="l00207"></a>00207     internal::parallel_invoke_helper& root = cleaner.root;
-<a name="l00208"></a>00208 
-<a name="l00209"></a>00209     root.add_children(f5, f4, f3);
-<a name="l00210"></a>00210     root.add_children(f2, f1);
-<a name="l00211"></a>00211 
-<a name="l00212"></a>00212     root.run_and_finish(f0);
-<a name="l00213"></a>00213 }
-<a name="l00214"></a>00214 
-<a name="l00215"></a>00215 <span class="comment">// seven arguments</span>
-<a name="l00216"></a>00216 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4, <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6>
-<a name="l00217"></a>00217 <span class="keywordtype">void</span> <a class="code" href="a00275.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3, <span class="keyword">const</span> F4& f4,
-<a name="l00218"></a>00218                      <span class="keyword">const</span> F5& f5, <span class="keyword">const</span> F6& f6,
-<a name="l00219"></a>00219                      <a class="code" href="a00201.html">tbb::task_group_context</a>& context)
-<a name="l00220"></a>00220 {
-<a name="l00221"></a>00221     internal::parallel_invoke_cleaner cleaner(3, context);
-<a name="l00222"></a>00222     internal::parallel_invoke_helper& root = cleaner.root;
-<a name="l00223"></a>00223 
-<a name="l00224"></a>00224     root.add_children(f6, f5, f4);
-<a name="l00225"></a>00225     root.add_children(f3, f2, f1);
-<a name="l00226"></a>00226 
-<a name="l00227"></a>00227     root.run_and_finish(f0);
-<a name="l00228"></a>00228 }
-<a name="l00229"></a>00229 
-<a name="l00230"></a>00230 <span class="comment">// eight arguments</span>
-<a name="l00231"></a>00231 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4,
-<a name="l00232"></a>00232          <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6, <span class="keyword">typename</span> F7>
-<a name="l00233"></a>00233 <span class="keywordtype">void</span> <a class="code" href="a00275.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3, <span class="keyword">const</span> F4& f4,
-<a name="l00234"></a>00234                      <span class="keyword">const</span> F5& f5, <span class="keyword">const</span> F6& f6, <span class="keyword">const</span> F7& f7,
-<a name="l00235"></a>00235                      <a class="code" href="a00201.html">tbb::task_group_context</a>& context)
-<a name="l00236"></a>00236 {
-<a name="l00237"></a>00237     internal::parallel_invoke_cleaner cleaner(4, context);
-<a name="l00238"></a>00238     internal::parallel_invoke_helper& root = cleaner.root;
-<a name="l00239"></a>00239 
-<a name="l00240"></a>00240     root.add_children(f7, f6, f5);
-<a name="l00241"></a>00241     root.add_children(f4, f3);
-<a name="l00242"></a>00242     root.add_children(f2, f1);
-<a name="l00243"></a>00243 
-<a name="l00244"></a>00244     root.run_and_finish(f0);
-<a name="l00245"></a>00245 }
-<a name="l00246"></a>00246 
-<a name="l00247"></a>00247 <span class="comment">// nine arguments</span>
-<a name="l00248"></a>00248 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4,
-<a name="l00249"></a>00249          <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6, <span class="keyword">typename</span> F7, <span class="keyword">typename</span> F8>
-<a name="l00250"></a>00250 <span class="keywordtype">void</span> <a class="code" href="a00275.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3, <span class="keyword">const</span> F4& f4,
-<a name="l00251"></a>00251                      <span class="keyword">const</span> F5& f5, <span class="keyword">const</span> F6& f6, <span class="keyword">const</span> F7& f7, <span class="keyword">const</span> F8& f8,
-<a name="l00252"></a>00252                      <a class="code" href="a00201.html">tbb::task_group_context</a>& context)
-<a name="l00253"></a>00253 {
-<a name="l00254"></a>00254     internal::parallel_invoke_cleaner cleaner(4, context);
-<a name="l00255"></a>00255     internal::parallel_invoke_helper& root = cleaner.root;
-<a name="l00256"></a>00256 
-<a name="l00257"></a>00257     root.add_children(f8, f7, f6);
-<a name="l00258"></a>00258     root.add_children(f5, f4, f3);
-<a name="l00259"></a>00259     root.add_children(f2, f1);
-<a name="l00260"></a>00260 
-<a name="l00261"></a>00261     root.run_and_finish(f0);
-<a name="l00262"></a>00262 }
-<a name="l00263"></a>00263 
-<a name="l00264"></a>00264 <span class="comment">// ten arguments</span>
-<a name="l00265"></a>00265 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4,
-<a name="l00266"></a>00266          <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6, <span class="keyword">typename</span> F7, <span class="keyword">typename</span> F8, <span class="keyword">typename</span> F9>
-<a name="l00267"></a>00267 <span class="keywordtype">void</span> <a class="code" href="a00275.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3, <span class="keyword">const</span> F4& f4,
-<a name="l00268"></a>00268                      <span class="keyword">const</span> F5& f5, <span class="keyword">const</span> F6& f6, <span class="keyword">const</span> F7& f7, <span class="keyword">const</span> F8& f8, <span class="keyword">const</span> F9& f9,
-<a name="l00269"></a>00269                      <a class="code" href="a00201.html">tbb::task_group_context</a>& context)
-<a name="l00270"></a>00270 {
-<a name="l00271"></a>00271     internal::parallel_invoke_cleaner cleaner(4, context);
-<a name="l00272"></a>00272     internal::parallel_invoke_helper& root = cleaner.root;
-<a name="l00273"></a>00273 
-<a name="l00274"></a>00274     root.add_children(f9, f8, f7);
-<a name="l00275"></a>00275     root.add_children(f6, f5, f4);
-<a name="l00276"></a>00276     root.add_children(f3, f2, f1);
-<a name="l00277"></a>00277 
-<a name="l00278"></a>00278     root.run_and_finish(f0);
-<a name="l00279"></a>00279 }
-<a name="l00280"></a>00280 
-<a name="l00281"></a>00281 <span class="comment">// two arguments</span>
-<a name="l00282"></a>00282 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1>
-<a name="l00283"></a>00283 <span class="keywordtype">void</span> <a class="code" href="a00275.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1) {
-<a name="l00284"></a>00284     task_group_context context;
-<a name="l00285"></a>00285     parallel_invoke<F0, F1>(f0, f1, context);
-<a name="l00286"></a>00286 }
-<a name="l00287"></a>00287 <span class="comment">// three arguments</span>
-<a name="l00288"></a>00288 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2>
-<a name="l00289"></a>00289 <span class="keywordtype">void</span> <a class="code" href="a00275.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2) {
-<a name="l00290"></a>00290     task_group_context context;
-<a name="l00291"></a>00291     parallel_invoke<F0, F1, F2>(f0, f1, f2, context);
-<a name="l00292"></a>00292 }
-<a name="l00293"></a>00293 <span class="comment">// four arguments</span>
-<a name="l00294"></a>00294 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3 >
-<a name="l00295"></a>00295 <span class="keywordtype">void</span> <a class="code" href="a00275.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3) {
-<a name="l00296"></a>00296     task_group_context context;
-<a name="l00297"></a>00297     parallel_invoke<F0, F1, F2, F3>(f0, f1, f2, f3, context);
-<a name="l00298"></a>00298 }
-<a name="l00299"></a>00299 <span class="comment">// five arguments</span>
-<a name="l00300"></a>00300 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4>
-<a name="l00301"></a>00301 <span class="keywordtype">void</span> <a class="code" href="a00275.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3, <span class="keyword">const</span> F4& f4) {
-<a name="l00302"></a>00302     task_group_context context;
-<a name="l00303"></a>00303     parallel_invoke<F0, F1, F2, F3, F4>(f0, f1, f2, f3, f4, context);
-<a name="l00304"></a>00304 }
-<a name="l00305"></a>00305 <span class="comment">// six arguments</span>
-<a name="l00306"></a>00306 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4, <span class="keyword">typename</span> F5>
-<a name="l00307"></a>00307 <span class="keywordtype">void</span> <a class="code" href="a00275.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3, <span class="keyword">const</span> F4& f4, <span class="keyword">const</span> F5& f5) {
-<a name="l00308"></a>00308     task_group_context context;
-<a name="l00309"></a>00309     parallel_invoke<F0, F1, F2, F3, F4, F5>(f0, f1, f2, f3, f4, f5, context);
-<a name="l00310"></a>00310 }
-<a name="l00311"></a>00311 <span class="comment">// seven arguments</span>
-<a name="l00312"></a>00312 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4, <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6>
-<a name="l00313"></a>00313 <span class="keywordtype">void</span> <a class="code" href="a00275.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3, <span class="keyword">const</span> F4& f4,
-<a name="l00314"></a>00314                      <span class="keyword">const</span> F5& f5, <span class="keyword">const</span> F6& f6)
-<a name="l00315"></a>00315 {
-<a name="l00316"></a>00316     task_group_context context;
-<a name="l00317"></a>00317     parallel_invoke<F0, F1, F2, F3, F4, F5, F6>(f0, f1, f2, f3, f4, f5, f6, context);
-<a name="l00318"></a>00318 }
-<a name="l00319"></a>00319 <span class="comment">// eigth arguments</span>
-<a name="l00320"></a>00320 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4, 
-<a name="l00321"></a>00321          <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6, <span class="keyword">typename</span> F7>
-<a name="l00322"></a>00322 <span class="keywordtype">void</span> <a class="code" href="a00275.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3, <span class="keyword">const</span> F4& f4,
-<a name="l00323"></a>00323                      <span class="keyword">const</span> F5& f5, <span class="keyword">const</span> F6& f6, <span class="keyword">const</span> F7& f7)
-<a name="l00324"></a>00324 {
-<a name="l00325"></a>00325     task_group_context context;
-<a name="l00326"></a>00326     parallel_invoke<F0, F1, F2, F3, F4, F5, F6, F7>(f0, f1, f2, f3, f4, f5, f6, f7, context);
-<a name="l00327"></a>00327 }
-<a name="l00328"></a>00328 <span class="comment">// nine arguments</span>
-<a name="l00329"></a>00329 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4,
-<a name="l00330"></a>00330          <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6, <span class="keyword">typename</span> F7, <span class="keyword">typename</span> F8>
-<a name="l00331"></a>00331 <span class="keywordtype">void</span> <a class="code" href="a00275.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3, <span class="keyword">const</span> F4& f4,
-<a name="l00332"></a>00332                      <span class="keyword">const</span> F5& f5, <span class="keyword">const</span> F6& f6, <span class="keyword">const</span> F7& f7, <span class="keyword">const</span> F8& f8)
-<a name="l00333"></a>00333 {
-<a name="l00334"></a>00334     task_group_context context;
-<a name="l00335"></a>00335     parallel_invoke<F0, F1, F2, F3, F4, F5, F6, F7, F8>(f0, f1, f2, f3, f4, f5, f6, f7, f8, context);
-<a name="l00336"></a>00336 }
-<a name="l00337"></a>00337 <span class="comment">// ten arguments</span>
-<a name="l00338"></a>00338 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4,
-<a name="l00339"></a>00339          <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6, <span class="keyword">typename</span> F7, <span class="keyword">typename</span> F8, <span class="keyword">typename</span> F9>
-<a name="l00340"></a>00340 <span class="keywordtype">void</span> <a class="code" href="a00275.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3, <span class="keyword">const</span> F4& f4,
-<a name="l00341"></a>00341                      <span class="keyword">const</span> F5& f5, <span class="keyword">const</span> F6& f6, <span class="keyword">const</span> F7& f7, <span class="keyword">const</span> F8& f8, <span class="keyword">const</span> F9& f9)
-<a name="l00342"></a>00342 {
-<a name="l00343"></a>00343     task_group_context context;
-<a name="l00344"></a>00344     parallel_invoke<F0, F1, F2, F3, F4, F5, F6, F7, F8, F9>(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, context);
-<a name="l00345"></a>00345 }
-<a name="l00346"></a>00346 
-<a name="l00348"></a>00348 
-<a name="l00349"></a>00349 } <span class="comment">// namespace</span>
-<a name="l00350"></a>00350 
-<a name="l00351"></a>00351 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_invoke_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the 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
deleted file mode 100644
index 3ba930e..0000000
--- a/doc/html/a00392.html
+++ /dev/null
@@ -1,360 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>parallel_reduce.h Source File</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li><a href="annotated.html"><span>Classes</span></a></li>
-    <li id="current"><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="files.html"><span>File List</span></a></li>
-    <li><a href="globals.html"><span>File Members</span></a></li>
-  </ul></div>
-<h1>parallel_reduce.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_parallel_reduce_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_parallel_reduce_H</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include "task.h"</span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include "aligned_space.h"</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include "partitioner.h"</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include <new></span>
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="keyword">namespace </span>tbb {
-<a name="l00030"></a>00030 
-<a name="l00032"></a>00032 <span class="keyword">namespace </span>internal {
-<a name="l00033"></a>00033 
-<a name="l00035"></a>00035     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC itt_store_pointer_with_release_v3( <span class="keywordtype">void</span>* dst, <span class="keywordtype">void</span>* src );
-<a name="l00036"></a>00036 
-<a name="l00038"></a>00038     <span class="keywordtype">void</span>* __TBB_EXPORTED_FUNC itt_load_pointer_with_acquire_v3( <span class="keyword">const</span> <span class="keywordtype">void</span>* src );
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">inline</span> <span class="keywordtype">void</span> parallel_reduce_store_body( T*& dst, T* src ) {
-<a name="l00041"></a>00041 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l00042"></a>00042 <span class="preprocessor"></span>        itt_store_pointer_with_release_v3(&dst,src);
-<a name="l00043"></a>00043 <span class="preprocessor">#else</span>
-<a name="l00044"></a>00044 <span class="preprocessor"></span>        __TBB_store_with_release(dst,src);
-<a name="l00045"></a>00045 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS */</span>
-<a name="l00046"></a>00046     }
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">inline</span> T* parallel_reduce_load_body( T*& src ) {
-<a name="l00049"></a>00049 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l00050"></a>00050 <span class="preprocessor"></span>        <span class="keywordflow">return</span> static_cast<T*>(itt_load_pointer_with_acquire_v3(&src));
-<a name="l00051"></a>00051 <span class="preprocessor">#else</span>
-<a name="l00052"></a>00052 <span class="preprocessor"></span>        <span class="keywordflow">return</span> __TBB_load_with_acquire(src);
-<a name="l00053"></a>00053 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS */</span>
-<a name="l00054"></a>00054     }
-<a name="l00055"></a>00055 
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058     <span class="keyword">typedef</span> <span class="keywordtype">char</span> reduction_context;
-<a name="l00059"></a>00059 
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062     <span class="keyword">template</span><<span class="keyword">typename</span> Body>
-<a name="l00063"></a>00063     <span class="keyword">class </span>finish_reduce: <span class="keyword">public</span> task {
-<a name="l00065"></a>00065         Body* my_body;
-<a name="l00066"></a>00066         <span class="keywordtype">bool</span> has_right_zombie;
-<a name="l00067"></a>00067         <span class="keyword">const</span> reduction_context my_context;
-<a name="l00068"></a>00068         aligned_space<Body,1> zombie_space;
-<a name="l00069"></a>00069         finish_reduce( <span class="keywordtype">char</span> context_ ) : 
-<a name="l00070"></a>00070             my_body(NULL),
-<a name="l00071"></a>00071             has_right_zombie(false),
-<a name="l00072"></a>00072             my_context(context_)
-<a name="l00073"></a>00073         {
-<a name="l00074"></a>00074         }
-<a name="l00075"></a>00075         task* execute() {
-<a name="l00076"></a>00076             <span class="keywordflow">if</span>( has_right_zombie ) {
-<a name="l00077"></a>00077                 <span class="comment">// Right child was stolen.</span>
-<a name="l00078"></a>00078                 Body* s = zombie_space.begin();
-<a name="l00079"></a>00079                 my_body->join( *s );
-<a name="l00080"></a>00080                 s->~Body();
-<a name="l00081"></a>00081             }
-<a name="l00082"></a>00082             <span class="keywordflow">if</span>( my_context==1 ) 
-<a name="l00083"></a>00083                 parallel_reduce_store_body( static_cast<finish_reduce*>(parent())->my_body, my_body );
-<a name="l00084"></a>00084             <span class="keywordflow">return</span> NULL;
-<a name="l00085"></a>00085         }       
-<a name="l00086"></a>00086         <span class="keyword">template</span><<span class="keyword">typename</span> Range,<span class="keyword">typename</span> Body_, <span class="keyword">typename</span> Partitioner>
-<a name="l00087"></a>00087         <span class="keyword">friend</span> <span class="keyword">class </span>start_reduce;
-<a name="l00088"></a>00088     };
-<a name="l00089"></a>00089 
-<a name="l00091"></a>00091 
-<a name="l00092"></a>00092     <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner>
-<a name="l00093"></a>00093     <span class="keyword">class </span>start_reduce: <span class="keyword">public</span> task {
-<a name="l00094"></a>00094         <span class="keyword">typedef</span> finish_reduce<Body> finish_type;
-<a name="l00095"></a>00095         Body* my_body;
-<a name="l00096"></a>00096         Range my_range;
-<a name="l00097"></a>00097         <span class="keyword">typename</span> Partitioner::partition_type my_partition;
-<a name="l00098"></a>00098         reduction_context my_context;
-<a name="l00099"></a>00099         <span class="comment">/*override*/</span> task* execute();
-<a name="l00100"></a>00100         <span class="keyword">template</span><<span class="keyword">typename</span> Body_>
-<a name="l00101"></a>00101         <span class="keyword">friend</span> <span class="keyword">class </span>finish_reduce;
-<a name="l00102"></a>00102     
-<a name="l00104"></a>00104         start_reduce( <span class="keyword">const</span> Range& range, Body* body, Partitioner& partitioner ) :
-<a name="l00105"></a>00105             my_body(body),
-<a name="l00106"></a>00106             my_range(range),
-<a name="l00107"></a>00107             my_partition(partitioner),
-<a name="l00108"></a>00108             my_context(0)
-<a name="l00109"></a>00109         {
-<a name="l00110"></a>00110         }
-<a name="l00112"></a>00112 
-<a name="l00113"></a>00113         start_reduce( start_reduce& parent_, split ) :
-<a name="l00114"></a>00114             my_body(parent_.my_body),
-<a name="l00115"></a>00115             my_range(parent_.my_range,split()),
-<a name="l00116"></a>00116             my_partition(parent_.my_partition,split()),
-<a name="l00117"></a>00117             my_context(2)
-<a name="l00118"></a>00118         {
-<a name="l00119"></a>00119             my_partition.set_affinity(*<span class="keyword">this</span>);
-<a name="l00120"></a>00120             parent_.my_context = 1;
-<a name="l00121"></a>00121         }
-<a name="l00123"></a>00123         <span class="comment">/*override*/</span> <span class="keywordtype">void</span> note_affinity( affinity_id <span class="keywordtype">id</span> ) {
-<a name="l00124"></a>00124             my_partition.note_affinity( <span class="keywordtype">id</span> );
-<a name="l00125"></a>00125         }
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127 <span class="keyword">public</span>:
-<a name="l00128"></a>00128         <span class="keyword">static</span> <span class="keywordtype">void</span> run( <span class="keyword">const</span> Range& range, Body& body, Partitioner& partitioner ) {
-<a name="l00129"></a>00129             <span class="keywordflow">if</span>( !range.empty() ) {
-<a name="l00130"></a>00130 #<span class="keywordflow">if</span> !__TBB_TASK_GROUP_CONTEXT || TBB_JOIN_OUTER_TASK_GROUP
-<a name="l00131"></a>00131                 <a class="code" href="a00199.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>( *<span class="keyword">new</span>(<a class="code" href="a00199.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>()) start_reduce(range,&body,partitioner) );
-<a name="l00132"></a>00132 <span class="preprocessor">#else</span>
-<a name="l00133"></a>00133 <span class="preprocessor"></span>                <span class="comment">// Bound context prevents exceptions from body to affect nesting or sibling algorithms,</span>
-<a name="l00134"></a>00134                 <span class="comment">// and allows users to handle exceptions safely by wrapping parallel_for in the try-block.</span>
-<a name="l00135"></a>00135                 task_group_context context;
-<a name="l00136"></a>00136                 <a class="code" href="a00199.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>( *<span class="keyword">new</span>(task::allocate_root(context)) start_reduce(range,&body,partitioner) );
-<a name="l00137"></a>00137 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT && !TBB_JOIN_OUTER_TASK_GROUP */</span>
-<a name="l00138"></a>00138             }
-<a name="l00139"></a>00139         }
-<a name="l00140"></a>00140 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00141"></a>00141 <span class="preprocessor"></span>        <span class="keyword">static</span> <span class="keywordtype">void</span> run( <span class="keyword">const</span> Range& range, Body& body, Partitioner& partitioner, task_group_context& context ) {
-<a name="l00142"></a>00142             <span class="keywordflow">if</span>( !range.empty() ) 
-<a name="l00143"></a>00143                 <a class="code" href="a00199.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>( *<span class="keyword">new</span>(task::allocate_root(context)) start_reduce(range,&body,partitioner) );
-<a name="l00144"></a>00144         }
-<a name="l00145"></a>00145 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00146"></a>00146     };
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148     <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner>
-<a name="l00149"></a>00149     task* start_reduce<Range,Body,Partitioner>::execute() {
-<a name="l00150"></a>00150         <span class="keywordflow">if</span>( my_context==2 ) {
-<a name="l00151"></a>00151             finish_type* p = static_cast<finish_type*>(parent() );
-<a name="l00152"></a>00152             <span class="keywordflow">if</span>( !parallel_reduce_load_body(p->my_body) ) {
-<a name="l00153"></a>00153                 my_body = <span class="keyword">new</span>( p->zombie_space.begin() ) Body(*my_body,split());
-<a name="l00154"></a>00154                 p->has_right_zombie = <span class="keyword">true</span>;
-<a name="l00155"></a>00155             } 
-<a name="l00156"></a>00156         }
-<a name="l00157"></a>00157         <span class="keywordflow">if</span>( !my_range.is_divisible() || my_partition.should_execute_range(*<span class="keyword">this</span>) ) {
-<a name="l00158"></a>00158             (*my_body)( my_range );
-<a name="l00159"></a>00159             <span class="keywordflow">if</span>( my_context==1 ) 
-<a name="l00160"></a>00160                 parallel_reduce_store_body(static_cast<finish_type*>(parent())->my_body, my_body );
-<a name="l00161"></a>00161             <span class="keywordflow">return</span> my_partition.continue_after_execute_range();
-<a name="l00162"></a>00162         } <span class="keywordflow">else</span> {
-<a name="l00163"></a>00163             finish_type& c = *<span class="keyword">new</span>( allocate_continuation()) finish_type(my_context);
-<a name="l00164"></a>00164             recycle_as_child_of(c);
-<a name="l00165"></a>00165             c.set_ref_count(2);    
-<a name="l00166"></a>00166             <span class="keywordtype">bool</span> delay = my_partition.decide_whether_to_delay();
-<a name="l00167"></a>00167             start_reduce& b = *<span class="keyword">new</span>( c.allocate_child() ) start_reduce(*<span class="keyword">this</span>,split());
-<a name="l00168"></a>00168             my_partition.spawn_or_delay(delay,b);
-<a name="l00169"></a>00169             <span class="keywordflow">return</span> <span class="keyword">this</span>;
-<a name="l00170"></a>00170         }
-<a name="l00171"></a>00171     } 
-<a name="l00172"></a>00172 
-<a name="l00174"></a>00174 
-<a name="l00178"></a>00178     <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Value, <span class="keyword">typename</span> RealBody, <span class="keyword">typename</span> Reduction>
-<a name="l00179"></a>00179     <span class="keyword">class </span>lambda_reduce_body {
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181 <span class="comment">//FIXME: decide if my_real_body, my_reduction, and identity_element should be copied or referenced</span>
-<a name="l00182"></a>00182 <span class="comment">//       (might require some performance measurements)</span>
-<a name="l00183"></a>00183 
-<a name="l00184"></a>00184         <span class="keyword">const</span> Value&     identity_element;
-<a name="l00185"></a>00185         <span class="keyword">const</span> RealBody&  my_real_body;
-<a name="l00186"></a>00186         <span class="keyword">const</span> Reduction& my_reduction;
-<a name="l00187"></a>00187         Value            my_value;
-<a name="l00188"></a>00188         lambda_reduce_body& operator= ( <span class="keyword">const</span> lambda_reduce_body& other );
-<a name="l00189"></a>00189     <span class="keyword">public</span>:
-<a name="l00190"></a>00190         lambda_reduce_body( <span class="keyword">const</span> Value& identity, <span class="keyword">const</span> RealBody& body, <span class="keyword">const</span> Reduction& reduction )
-<a name="l00191"></a>00191             : identity_element(identity)
-<a name="l00192"></a>00192             , my_real_body(body)
-<a name="l00193"></a>00193             , my_reduction(reduction)
-<a name="l00194"></a>00194             , my_value(identity)
-<a name="l00195"></a>00195         { }
-<a name="l00196"></a>00196         lambda_reduce_body( <span class="keyword">const</span> lambda_reduce_body& other )
-<a name="l00197"></a>00197             : identity_element(other.identity_element)
-<a name="l00198"></a>00198             , my_real_body(other.my_real_body)
-<a name="l00199"></a>00199             , my_reduction(other.my_reduction)
-<a name="l00200"></a>00200             , my_value(other.my_value)
-<a name="l00201"></a>00201         { }
-<a name="l00202"></a>00202         lambda_reduce_body( lambda_reduce_body& other, <a class="code" href="a00198.html">tbb::split</a> )
-<a name="l00203"></a>00203             : identity_element(other.identity_element)
-<a name="l00204"></a>00204             , my_real_body(other.my_real_body)
-<a name="l00205"></a>00205             , my_reduction(other.my_reduction)
-<a name="l00206"></a>00206             , my_value(other.identity_element)
-<a name="l00207"></a>00207         { }
-<a name="l00208"></a>00208         <span class="keywordtype">void</span> operator()(Range& range) {
-<a name="l00209"></a>00209             my_value = my_real_body(range, const_cast<const Value&>(my_value));
-<a name="l00210"></a>00210         }
-<a name="l00211"></a>00211         <span class="keywordtype">void</span> join( lambda_reduce_body& rhs ) {
-<a name="l00212"></a>00212             my_value = my_reduction(const_cast<const Value&>(my_value), const_cast<const Value&>(rhs.my_value));
-<a name="l00213"></a>00213         }
-<a name="l00214"></a>00214         Value result()<span class="keyword"> const </span>{
-<a name="l00215"></a>00215             <span class="keywordflow">return</span> my_value;
-<a name="l00216"></a>00216         }
-<a name="l00217"></a>00217     };
-<a name="l00218"></a>00218 
-<a name="l00219"></a>00219 } <span class="comment">// namespace internal</span>
-<a name="l00221"></a>00221 <span class="comment"></span>
-<a name="l00222"></a>00222 <span class="comment">// Requirements on Range concept are documented in blocked_range.h</span>
-<a name="l00223"></a>00223 
-<a name="l00242"></a>00242 
-<a name="l00244"></a>00244 
-<a name="l00245"></a>00245 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00246"></a><a class="code" href="a00275.html#g1b3d59c5eb62683c5754db6970392fa3">00246</a> <span class="keywordtype">void</span> <a class="code" href="a00275.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body ) {
-<a name="l00247"></a>00247     internal::start_reduce<Range,Body, const __TBB_DEFAULT_PARTITIONER>::run( range, body, __TBB_DEFAULT_PARTITIONER() );
-<a name="l00248"></a>00248 }
-<a name="l00249"></a>00249 
-<a name="l00251"></a>00251 
-<a name="l00252"></a>00252 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00253"></a><a class="code" href="a00275.html#gec1b7c03f9da909bef5db12e3d41bed3">00253</a> <span class="keywordtype">void</span> <a class="code" href="a00275.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00193.html">simple_partitioner</a>& partitioner ) {
-<a name="l00254"></a>00254     internal::start_reduce<Range,Body,const simple_partitioner>::run( range, body, partitioner );
-<a name="l00255"></a>00255 }
-<a name="l00256"></a>00256 
-<a name="l00258"></a>00258 
-<a name="l00259"></a>00259 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00260"></a><a class="code" href="a00275.html#g18a19157e6245992fc00ca0adeb7dd37">00260</a> <span class="keywordtype">void</span> <a class="code" href="a00275.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00145.html">auto_partitioner</a>& partitioner ) {
-<a name="l00261"></a>00261     internal::start_reduce<Range,Body,const auto_partitioner>::run( range, body, partitioner );
-<a name="l00262"></a>00262 }
-<a name="l00263"></a>00263 
-<a name="l00265"></a>00265 
-<a name="l00266"></a>00266 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00267"></a><a class="code" href="a00275.html#gc61e73fcc36c92d79a217fc355ff4a6b">00267</a> <span class="keywordtype">void</span> <a class="code" href="a00275.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <a class="code" href="a00140.html">affinity_partitioner</a>& partitioner ) {
-<a name="l00268"></a>00268     internal::start_reduce<Range,Body,affinity_partitioner>::run( range, body, partitioner );
-<a name="l00269"></a>00269 }
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00273"></a>00273 <span class="preprocessor"></span>
-<a name="l00274"></a>00274 <span class="preprocessor">template<typename Range, typename Body></span>
-<a name="l00275"></a><a class="code" href="a00275.html#g45cb00c42a18e334bbde8b7535afe460">00275</a> <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="a00275.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00193.html">simple_partitioner</a>& partitioner, <a class="code" href="a00201.html">task_group_cont [...]
-<a name="l00276"></a>00276     internal::start_reduce<Range,Body,const simple_partitioner>::run( range, body, partitioner, context );
-<a name="l00277"></a>00277 }
-<a name="l00278"></a>00278 
-<a name="l00280"></a>00280 
-<a name="l00281"></a>00281 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00282"></a><a class="code" href="a00275.html#g1c1ea1d7c61b3c225e92c70d669a53a5">00282</a> <span class="keywordtype">void</span> <a class="code" href="a00275.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00145.html">auto_partitioner</a>& partitioner, <a class="code" href="a00201.html">task_group_context</a>& context ) {
-<a name="l00283"></a>00283     internal::start_reduce<Range,Body,const auto_partitioner>::run( range, body, partitioner, context );
-<a name="l00284"></a>00284 }
-<a name="l00285"></a>00285 
-<a name="l00287"></a>00287 
-<a name="l00288"></a>00288 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00289"></a><a class="code" href="a00275.html#gd9ac3a3811060314695f33b703c6e11b">00289</a> <span class="keywordtype">void</span> <a class="code" href="a00275.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <a class="code" href="a00140.html">affinity_partitioner</a>& partitioner, <a class="code" href="a00201.html">task_group_context</a>& context ) {
-<a name="l00290"></a>00290     internal::start_reduce<Range,Body,affinity_partitioner>::run( range, body, partitioner, context );
-<a name="l00291"></a>00291 }
-<a name="l00292"></a>00292 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00293"></a>00293 
-<a name="l00297"></a>00297 
-<a name="l00298"></a>00298 
-<a name="l00299"></a>00299 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Value, <span class="keyword">typename</span> RealBody, <span class="keyword">typename</span> Reduction>
-<a name="l00300"></a><a class="code" href="a00275.html#gc9412e09fb01fcad8c018ea9cffb28ef">00300</a> Value <a class="code" href="a00275.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Value& identity, <span class="keyword">const</span> RealBody& real_body, <span class="keyword">const</span> Reduction& reduction ) {
-<a name="l00301"></a>00301     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
-<a name="l00302"></a>00302     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<span class="keyword">const</span> __TBB_DEFAULT_PARTITIONER>
-<a name="l00303"></a>00303                           ::run(range, body, __TBB_DEFAULT_PARTITIONER() );
-<a name="l00304"></a>00304     <span class="keywordflow">return</span> body.result();
-<a name="l00305"></a>00305 }
-<a name="l00306"></a>00306 
-<a name="l00308"></a>00308 
-<a name="l00309"></a>00309 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Value, <span class="keyword">typename</span> RealBody, <span class="keyword">typename</span> Reduction>
-<a name="l00310"></a><a class="code" href="a00275.html#gaddffeec0e892ac3d6fc7fc2053e1eca">00310</a> Value <a class="code" href="a00275.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Value& identity, <span class="keyword">const</span> RealBody& real_body, <span class="keyword">const</span> Reduction& reduction,
-<a name="l00311"></a>00311                        <span class="keyword">const</span> <a class="code" href="a00193.html">simple_partitioner</a>& partitioner ) {
-<a name="l00312"></a>00312     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
-<a name="l00313"></a>00313     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<span class="keyword">const</span> <a class="code" href="a00193.html">simple_partitioner</a>>
-<a name="l00314"></a>00314                           ::run(range, body, partitioner );
-<a name="l00315"></a>00315     <span class="keywordflow">return</span> body.result();
-<a name="l00316"></a>00316 }
-<a name="l00317"></a>00317 
-<a name="l00319"></a>00319 
-<a name="l00320"></a>00320 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Value, <span class="keyword">typename</span> RealBody, <span class="keyword">typename</span> Reduction>
-<a name="l00321"></a><a class="code" href="a00275.html#gb175401f0729e40dd2c5860a17c14385">00321</a> Value <a class="code" href="a00275.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Value& identity, <span class="keyword">const</span> RealBody& real_body, <span class="keyword">const</span> Reduction& reduction,
-<a name="l00322"></a>00322                        <span class="keyword">const</span> <a class="code" href="a00145.html">auto_partitioner</a>& partitioner ) {
-<a name="l00323"></a>00323     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
-<a name="l00324"></a>00324     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<span class="keyword">const</span> <a class="code" href="a00145.html">auto_partitioner</a>>
-<a name="l00325"></a>00325                           ::run( range, body, partitioner );
-<a name="l00326"></a>00326     <span class="keywordflow">return</span> body.result();
-<a name="l00327"></a>00327 }
-<a name="l00328"></a>00328 
-<a name="l00330"></a>00330 
-<a name="l00331"></a>00331 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Value, <span class="keyword">typename</span> RealBody, <span class="keyword">typename</span> Reduction>
-<a name="l00332"></a><a class="code" href="a00275.html#gb7f1f1828ae2b330ce05b8513a495154">00332</a> Value <a class="code" href="a00275.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Value& identity, <span class="keyword">const</span> RealBody& real_body, <span class="keyword">const</span> Reduction& reduction,
-<a name="l00333"></a>00333                        <a class="code" href="a00140.html">affinity_partitioner</a>& partitioner ) {
-<a name="l00334"></a>00334     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
-<a name="l00335"></a>00335     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<a class="code" href="a00140.html">affinity_partitioner</a>>
-<a name="l00336"></a>00336                                         ::run( range, body, partitioner );
-<a name="l00337"></a>00337     <span class="keywordflow">return</span> body.result();
-<a name="l00338"></a>00338 }
-<a name="l00339"></a>00339 
-<a name="l00340"></a>00340 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00342"></a>00342 <span class="preprocessor"></span>
-<a name="l00343"></a>00343 <span class="preprocessor">template<typename Range, typename Value, typename RealBody, typename Reduction></span>
-<a name="l00344"></a><a class="code" href="a00275.html#gfbc0cc2026d87f11a96bcd62788f5bb5">00344</a> <span class="preprocessor"></span>Value <a class="code" href="a00275.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Value& identity, <span class="keyword">const</span> RealBody& real_body, <span class="keyword">const</span> Reduction& reduction,
-<a name="l00345"></a>00345                        <span class="keyword">const</span> <a class="code" href="a00193.html">simple_partitioner</a>& partitioner, <a class="code" href="a00201.html">task_group_context</a>& context ) {
-<a name="l00346"></a>00346     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
-<a name="l00347"></a>00347     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<span class="keyword">const</span> <a class="code" href="a00193.html">simple_partitioner</a>>
-<a name="l00348"></a>00348                           ::run( range, body, partitioner, context );
-<a name="l00349"></a>00349     <span class="keywordflow">return</span> body.result();
-<a name="l00350"></a>00350 }
-<a name="l00351"></a>00351 
-<a name="l00353"></a>00353 
-<a name="l00354"></a>00354 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Value, <span class="keyword">typename</span> RealBody, <span class="keyword">typename</span> Reduction>
-<a name="l00355"></a><a class="code" href="a00275.html#g630c90a399937d9d4ae70ff883186dfd">00355</a> Value <a class="code" href="a00275.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Value& identity, <span class="keyword">const</span> RealBody& real_body, <span class="keyword">const</span> Reduction& reduction,
-<a name="l00356"></a>00356                        <span class="keyword">const</span> <a class="code" href="a00145.html">auto_partitioner</a>& partitioner, <a class="code" href="a00201.html">task_group_context</a>& context ) {
-<a name="l00357"></a>00357     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
-<a name="l00358"></a>00358     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<span class="keyword">const</span> <a class="code" href="a00145.html">auto_partitioner</a>>
-<a name="l00359"></a>00359                           ::run( range, body, partitioner, context );
-<a name="l00360"></a>00360     <span class="keywordflow">return</span> body.result();
-<a name="l00361"></a>00361 }
-<a name="l00362"></a>00362 
-<a name="l00364"></a>00364 
-<a name="l00365"></a>00365 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Value, <span class="keyword">typename</span> RealBody, <span class="keyword">typename</span> Reduction>
-<a name="l00366"></a><a class="code" href="a00275.html#g496bd7eadb3b97495ccb5655ef90319e">00366</a> Value <a class="code" href="a00275.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Value& identity, <span class="keyword">const</span> RealBody& real_body, <span class="keyword">const</span> Reduction& reduction,
-<a name="l00367"></a>00367                        <a class="code" href="a00140.html">affinity_partitioner</a>& partitioner, <a class="code" href="a00201.html">task_group_context</a>& context ) {
-<a name="l00368"></a>00368     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
-<a name="l00369"></a>00369     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<a class="code" href="a00140.html">affinity_partitioner</a>>
-<a name="l00370"></a>00370                                         ::run( range, body, partitioner, context );
-<a name="l00371"></a>00371     <span class="keywordflow">return</span> body.result();
-<a name="l00372"></a>00372 }
-<a name="l00373"></a>00373 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00374"></a>00374 
-<a name="l00375"></a>00375 
-<a name="l00376"></a>00376 } <span class="comment">// namespace tbb</span>
-<a name="l00377"></a>00377 
-<a name="l00378"></a>00378 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_reduce_H */</span>
-<a name="l00379"></a>00379 
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the 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 dbb49ca..0000000
--- a/doc/html/a00396.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-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_parallel_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="a00181.html">00033</a> <span class="keyword">struct </span><a class="code" href="a00181.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="a00166.html">00039</a> <span class="keyword">struct </span><a class="code" href="a00166.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="a00199.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="a00141.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="a00198.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="a00199.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="a00199.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="a00199.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="a00199.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="a00199.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="a00275.html#ged143f31dd3d96ded02ab3db915b91c7">00321</a> <span class="keywordtype">void</span> <a class="code" href="a00275.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="a00275.html#gc9fac8870b2e6365fb337014404529df">00328</a> <span class="keywordtype">void</span> <a class="code" href="a00275.html#ged143f31dd3d96ded02ab3db915b91c7">parallel_scan</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00193.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="a00275.html#g62fde400a37bbca1a2fddc8e3d22f556">00335</a> <span class="keywordtype">void</span> <a class="code" href="a00275.html#ged143f31dd3d96ded02ab3db915b91c7">parallel_scan</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00145.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-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the 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
new file mode 100644
index 0000000..9f13e4f
--- /dev/null
+++ b/doc/html/a00397.html
@@ -0,0 +1,1417 @@
+<!DOCTYPE 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_internal.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File List</span></a></li>
+    <li><a href="globals.html"><span>File Members</span></a></li>
+  </ul></div>
+<h1>_concurrent_unordered_internal.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-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_internal_H</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_concurrent_unordered_internal_H</span>
+<a name="l00026"></a>00026 <span class="preprocessor"></span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00028"></a>00028 
+<a name="l00029"></a>00029 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
+<a name="l00030"></a>00030 <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="l00031"></a>00031 <span class="preprocessor">    #pragma warning (push)</span>
+<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4530)</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">#include <iterator></span>
+<a name="l00036"></a>00036 <span class="preprocessor">#include <utility></span>      <span class="comment">// Need std::pair</span>
+<a name="l00037"></a>00037 <span class="preprocessor">#include <functional></span>
+<a name="l00038"></a>00038 <span class="preprocessor">#include <string></span>       <span class="comment">// For tbb_hasher</span>
+<a name="l00039"></a>00039 <span class="preprocessor">#include <cstring></span>      <span class="comment">// Need std::memset</span>
+<a name="l00040"></a>00040 
+<a name="l00041"></a>00041 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
+<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</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="l00045"></a>00045 <span class="preprocessor">#include "atomic.h"</span>
+<a name="l00046"></a>00046 <span class="preprocessor">#include "tbb_exception.h"</span>
+<a name="l00047"></a>00047 <span class="preprocessor">#include "tbb_allocator.h"</span>
+<a name="l00048"></a>00048 
+<a name="l00049"></a>00049 <span class="keyword">namespace </span>tbb {
+<a name="l00050"></a>00050 <span class="keyword">namespace </span>interface5 {
+<a name="l00052"></a>00052 <span class="keyword">namespace </span>internal {
+<a name="l00053"></a>00053 
+<a name="l00054"></a>00054 <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">typename</span> Allocator>
+<a name="l00055"></a>00055 <span class="keyword">class </span>split_ordered_list;
+<a name="l00056"></a>00056 <span class="keyword">template</span> <<span class="keyword">typename</span> Traits>
+<a name="l00057"></a>00057 <span class="keyword">class </span>concurrent_unordered_base;
+<a name="l00058"></a>00058 
+<a name="l00059"></a>00059 <span class="comment">// Forward list iterators (without skipping dummy elements)</span>
+<a name="l00060"></a>00060 <span class="keyword">template</span><<span class="keyword">class</span> Solist, <span class="keyword">typename</span> Value>
+<a name="l00061"></a>00061 <span class="keyword">class </span>flist_iterator : <span class="keyword">public</span> std::iterator<std::forward_iterator_tag, Value>
+<a name="l00062"></a>00062 {
+<a name="l00063"></a>00063     <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">typename</span> Allocator>
+<a name="l00064"></a>00064     <span class="keyword">friend</span> <span class="keyword">class </span>split_ordered_list;
+<a name="l00065"></a>00065     <span class="keyword">template</span> <<span class="keyword">typename</span> Traits>
+<a name="l00066"></a>00066     <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_unordered_base;
+<a name="l00067"></a>00067     <span class="keyword">template</span><<span class="keyword">class</span> M, <span class="keyword">typename</span> V>
+<a name="l00068"></a>00068     <span class="keyword">friend</span> <span class="keyword">class </span>flist_iterator;
+<a name="l00069"></a>00069 
+<a name="l00070"></a>00070     <span class="keyword">typedef</span> <span class="keyword">typename</span> Solist::nodeptr_t nodeptr_t;
+<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> Solist::value_type value_type;
+<a name="l00073"></a>00073     <span class="keyword">typedef</span> <span class="keyword">typename</span> Solist::difference_type difference_type;
+<a name="l00074"></a>00074     <span class="keyword">typedef</span> <span class="keyword">typename</span> Solist::pointer pointer;
+<a name="l00075"></a>00075     <span class="keyword">typedef</span> <span class="keyword">typename</span> Solist::reference reference;
+<a name="l00076"></a>00076 
+<a name="l00077"></a>00077     flist_iterator() : my_node_ptr(0) {}
+<a name="l00078"></a>00078     flist_iterator( <span class="keyword">const</span> flist_iterator<Solist, typename Solist::value_type> &other )
+<a name="l00079"></a>00079         : my_node_ptr(other.my_node_ptr) {}
+<a name="l00080"></a>00080 
+<a name="l00081"></a>00081     reference operator*()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_node_ptr->my_element; }
+<a name="l00082"></a>00082     pointer operator->()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> &**<span class="keyword">this</span>; }
+<a name="l00083"></a>00083 
+<a name="l00084"></a>00084     flist_iterator& operator++() {
+<a name="l00085"></a>00085         my_node_ptr = my_node_ptr->my_next;
+<a name="l00086"></a>00086         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00087"></a>00087     }
+<a name="l00088"></a>00088 
+<a name="l00089"></a>00089     flist_iterator operator++(<span class="keywordtype">int</span>) {
+<a name="l00090"></a>00090         flist_iterator tmp = *<span class="keyword">this</span>;
+<a name="l00091"></a>00091         ++*<span class="keyword">this</span>;
+<a name="l00092"></a>00092         <span class="keywordflow">return</span> tmp;
+<a name="l00093"></a>00093     }
+<a name="l00094"></a>00094 
+<a name="l00095"></a>00095 <span class="keyword">protected</span>:
+<a name="l00096"></a>00096     flist_iterator(nodeptr_t pnode) : my_node_ptr(pnode) {}
+<a name="l00097"></a>00097     nodeptr_t get_node_ptr()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_node_ptr; }
+<a name="l00098"></a>00098 
+<a name="l00099"></a>00099     nodeptr_t my_node_ptr;
+<a name="l00100"></a>00100 
+<a name="l00101"></a>00101     <span class="keyword">template</span><<span class="keyword">typename</span> M, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00102"></a>00102     <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> flist_iterator<M,T> &i, <span class="keyword">const</span> flist_iterator<M,U> &j );
+<a name="l00103"></a>00103     <span class="keyword">template</span><<span class="keyword">typename</span> M, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00104"></a>00104     <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> flist_iterator<M,T>& i, <span class="keyword">const</span> flist_iterator<M,U>& j );
+<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> Solist, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00108"></a>00108 <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> flist_iterator<Solist,T> &i, <span class="keyword">const</span> flist_iterator<Solist,U> &j ) {
+<a name="l00109"></a>00109     <span class="keywordflow">return</span> i.my_node_ptr == j.my_node_ptr;
+<a name="l00110"></a>00110 }
+<a name="l00111"></a>00111 <span class="keyword">template</span><<span class="keyword">typename</span> Solist, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00112"></a>00112 <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> flist_iterator<Solist,T>& i, <span class="keyword">const</span> flist_iterator<Solist,U>& j ) {
+<a name="l00113"></a>00113     <span class="keywordflow">return</span> i.my_node_ptr != j.my_node_ptr;
+<a name="l00114"></a>00114 }
+<a name="l00115"></a>00115 
+<a name="l00116"></a>00116 <span class="comment">// Split-order list iterators, needed to skip dummy elements</span>
+<a name="l00117"></a>00117 <span class="keyword">template</span><<span class="keyword">class</span> Solist, <span class="keyword">typename</span> Value>
+<a name="l00118"></a>00118 <span class="keyword">class </span>solist_iterator : <span class="keyword">public</span> flist_iterator<Solist, Value>
+<a name="l00119"></a>00119 {
+<a name="l00120"></a>00120     <span class="keyword">typedef</span> flist_iterator<Solist, Value> base_type;
+<a name="l00121"></a>00121     <span class="keyword">typedef</span> <span class="keyword">typename</span> Solist::nodeptr_t nodeptr_t;
+<a name="l00122"></a>00122     <span class="keyword">using</span> base_type::get_node_ptr;
+<a name="l00123"></a>00123     <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">typename</span> Allocator>
+<a name="l00124"></a>00124     <span class="keyword">friend</span> <span class="keyword">class </span>split_ordered_list;
+<a name="l00125"></a>00125     <span class="keyword">template</span><<span class="keyword">class</span> M, <span class="keyword">typename</span> V>
+<a name="l00126"></a>00126     <span class="keyword">friend</span> <span class="keyword">class </span>solist_iterator;
+<a name="l00127"></a>00127     <span class="keyword">template</span><<span class="keyword">typename</span> M, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00128"></a>00128     <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> solist_iterator<M,T> &i, <span class="keyword">const</span> solist_iterator<M,U> &j );
+<a name="l00129"></a>00129     <span class="keyword">template</span><<span class="keyword">typename</span> M, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00130"></a>00130     <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> solist_iterator<M,T>& i, <span class="keyword">const</span> solist_iterator<M,U>& j );
+<a name="l00131"></a>00131 
+<a name="l00132"></a>00132     <span class="keyword">const</span> Solist *my_list_ptr;
+<a name="l00133"></a>00133     solist_iterator(nodeptr_t pnode, <span class="keyword">const</span> Solist *plist) : base_type(pnode), my_list_ptr(plist) {}
+<a name="l00134"></a>00134 
+<a name="l00135"></a>00135 <span class="keyword">public</span>:
+<a name="l00136"></a>00136     <span class="keyword">typedef</span> <span class="keyword">typename</span> Solist::value_type value_type;
+<a name="l00137"></a>00137     <span class="keyword">typedef</span> <span class="keyword">typename</span> Solist::difference_type difference_type;
+<a name="l00138"></a>00138     <span class="keyword">typedef</span> <span class="keyword">typename</span> Solist::pointer pointer;
+<a name="l00139"></a>00139     <span class="keyword">typedef</span> <span class="keyword">typename</span> Solist::reference reference;
+<a name="l00140"></a>00140 
+<a name="l00141"></a>00141     solist_iterator() {}
+<a name="l00142"></a>00142     solist_iterator(<span class="keyword">const</span> solist_iterator<Solist, typename Solist::value_type> &other )
+<a name="l00143"></a>00143         : base_type(other), my_list_ptr(other.my_list_ptr) {}
+<a name="l00144"></a>00144 
+<a name="l00145"></a>00145     reference operator*()<span class="keyword"> const </span>{
+<a name="l00146"></a>00146         <span class="keywordflow">return</span> this->base_type::operator*();
+<a name="l00147"></a>00147     }
+<a name="l00148"></a>00148 
+<a name="l00149"></a>00149     pointer operator->()<span class="keyword"> const </span>{
+<a name="l00150"></a>00150         <span class="keywordflow">return</span> (&**<span class="keyword">this</span>);
+<a name="l00151"></a>00151     }
+<a name="l00152"></a>00152 
+<a name="l00153"></a>00153     solist_iterator& operator++() {
+<a name="l00154"></a>00154         <span class="keywordflow">do</span> ++(*(base_type *)<span class="keyword">this</span>);
+<a name="l00155"></a>00155         <span class="keywordflow">while</span> (get_node_ptr() != NULL && get_node_ptr()->is_dummy());
+<a name="l00156"></a>00156 
+<a name="l00157"></a>00157         <span class="keywordflow">return</span> (*<span class="keyword">this</span>);
+<a name="l00158"></a>00158     }
+<a name="l00159"></a>00159 
+<a name="l00160"></a>00160     solist_iterator operator++(<span class="keywordtype">int</span>) {
+<a name="l00161"></a>00161         solist_iterator tmp = *<span class="keyword">this</span>;
+<a name="l00162"></a>00162         <span class="keywordflow">do</span> ++*<span class="keyword">this</span>;
+<a name="l00163"></a>00163         <span class="keywordflow">while</span> (get_node_ptr() != NULL && get_node_ptr()->is_dummy());
+<a name="l00164"></a>00164 
+<a name="l00165"></a>00165         <span class="keywordflow">return</span> (tmp);
+<a name="l00166"></a>00166     }
+<a name="l00167"></a>00167 };
+<a name="l00168"></a>00168 
+<a name="l00169"></a>00169 <span class="keyword">template</span><<span class="keyword">typename</span> Solist, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00170"></a>00170 <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> solist_iterator<Solist,T> &i, <span class="keyword">const</span> solist_iterator<Solist,U> &j ) {
+<a name="l00171"></a>00171     <span class="keywordflow">return</span> i.my_node_ptr == j.my_node_ptr && i.my_list_ptr == j.my_list_ptr;
+<a name="l00172"></a>00172 }
+<a name="l00173"></a>00173 <span class="keyword">template</span><<span class="keyword">typename</span> Solist, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00174"></a>00174 <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> solist_iterator<Solist,T>& i, <span class="keyword">const</span> solist_iterator<Solist,U>& j ) {
+<a name="l00175"></a>00175     <span class="keywordflow">return</span> i.my_node_ptr != j.my_node_ptr || i.my_list_ptr != j.my_list_ptr;
+<a name="l00176"></a>00176 }
+<a name="l00177"></a>00177 
+<a name="l00178"></a>00178 <span class="comment">// Forward type and class definitions</span>
+<a name="l00179"></a>00179 <span class="keyword">typedef</span> size_t sokey_t;
+<a name="l00180"></a>00180 
+<a name="l00181"></a>00181 <span class="comment">// Forward list in which elements are sorted in a split-order</span>
+<a name="l00182"></a>00182 <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">typename</span> Allocator>
+<a name="l00183"></a>00183 <span class="keyword">class </span>split_ordered_list
+<a name="l00184"></a>00184 {
+<a name="l00185"></a>00185 <span class="keyword">public</span>:
+<a name="l00186"></a>00186     <span class="keyword">typedef</span> split_ordered_list<T, Allocator> self_type;
+<a name="l00187"></a>00187     <span class="keyword">typedef</span> <span class="keyword">typename</span> Allocator::template rebind<T>::other allocator_type;
+<a name="l00188"></a>00188     <span class="keyword">struct </span>node;
+<a name="l00189"></a>00189     <span class="keyword">typedef</span> node *nodeptr_t;
+<a name="l00190"></a>00190 
+<a name="l00191"></a>00191     <span class="keyword">typedef</span> <span class="keyword">typename</span> allocator_type::size_type size_type;
+<a name="l00192"></a>00192     <span class="keyword">typedef</span> <span class="keyword">typename</span> allocator_type::difference_type difference_type;
+<a name="l00193"></a>00193     <span class="keyword">typedef</span> <span class="keyword">typename</span> allocator_type::pointer pointer;
+<a name="l00194"></a>00194     <span class="keyword">typedef</span> <span class="keyword">typename</span> allocator_type::const_pointer const_pointer;
+<a name="l00195"></a>00195     <span class="keyword">typedef</span> <span class="keyword">typename</span> allocator_type::reference reference;
+<a name="l00196"></a>00196     <span class="keyword">typedef</span> <span class="keyword">typename</span> allocator_type::const_reference const_reference;
+<a name="l00197"></a>00197     <span class="keyword">typedef</span> <span class="keyword">typename</span> allocator_type::value_type value_type;
+<a name="l00198"></a>00198 
+<a name="l00199"></a>00199     <span class="keyword">typedef</span> solist_iterator<self_type, const value_type> const_iterator;
+<a name="l00200"></a>00200     <span class="keyword">typedef</span> solist_iterator<self_type, value_type> iterator;
+<a name="l00201"></a>00201     <span class="keyword">typedef</span> flist_iterator<self_type, const value_type> raw_const_iterator;
+<a name="l00202"></a>00202     <span class="keyword">typedef</span> flist_iterator<self_type, value_type> raw_iterator;
+<a name="l00203"></a>00203 
+<a name="l00204"></a>00204     <span class="comment">// Node that holds the element in a split-ordered list</span>
+<a name="l00205"></a>00205     <span class="keyword">struct </span>node : tbb::internal::no_assign
+<a name="l00206"></a>00206     {
+<a name="l00207"></a>00207         <span class="comment">// Initialize the node with the given order key</span>
+<a name="l00208"></a>00208         <span class="keywordtype">void</span> init(sokey_t order_key) {
+<a name="l00209"></a>00209             my_order_key = order_key;
+<a name="l00210"></a>00210             my_next = NULL;
+<a name="l00211"></a>00211         }
+<a name="l00212"></a>00212 
+<a name="l00213"></a>00213         <span class="comment">// Return the order key (needed for hashing)</span>
+<a name="l00214"></a>00214         sokey_t get_order_key()<span class="keyword"> const </span>{ <span class="comment">// TODO: remove</span>
+<a name="l00215"></a>00215             <span class="keywordflow">return</span> my_order_key;
+<a name="l00216"></a>00216         }
+<a name="l00217"></a>00217 
+<a name="l00218"></a>00218         <span class="comment">// Inserts the new element in the list in an atomic fashion</span>
+<a name="l00219"></a>00219         nodeptr_t atomic_set_next(nodeptr_t new_node, nodeptr_t current_node)
+<a name="l00220"></a>00220         {
+<a name="l00221"></a>00221             <span class="comment">// Try to change the next pointer on the current element to a new element, only if it still points to the cached next</span>
+<a name="l00222"></a>00222             nodeptr_t exchange_node = (nodeptr_t) __TBB_CompareAndSwapW((<span class="keywordtype">void</span> *) &my_next, (uintptr_t)new_node, (uintptr_t)current_node);
+<a name="l00223"></a>00223 
+<a name="l00224"></a>00224             <span class="keywordflow">if</span> (exchange_node == current_node) <span class="comment">// TODO: why this branch?</span>
+<a name="l00225"></a>00225             {
+<a name="l00226"></a>00226                 <span class="comment">// Operation succeeded, return the new node</span>
+<a name="l00227"></a>00227                 <span class="keywordflow">return</span> new_node;
+<a name="l00228"></a>00228             }
+<a name="l00229"></a>00229             <span class="keywordflow">else</span>
+<a name="l00230"></a>00230             {
+<a name="l00231"></a>00231                 <span class="comment">// Operation failed, return the "interfering" node</span>
+<a name="l00232"></a>00232                 <span class="keywordflow">return</span> exchange_node;
+<a name="l00233"></a>00233             }
+<a name="l00234"></a>00234         }
+<a name="l00235"></a>00235 
+<a name="l00236"></a>00236         <span class="comment">// Checks if this element in the list is a dummy, order enforcing node. Dummy nodes are used by buckets</span>
+<a name="l00237"></a>00237         <span class="comment">// in the hash table to quickly index into the right subsection of the split-ordered list.</span>
+<a name="l00238"></a>00238         <span class="keywordtype">bool</span> is_dummy()<span class="keyword"> const </span>{
+<a name="l00239"></a>00239             <span class="keywordflow">return</span> (my_order_key & 0x1) == 0;
+<a name="l00240"></a>00240         }
+<a name="l00241"></a>00241 
+<a name="l00242"></a>00242 
+<a name="l00243"></a>00243         nodeptr_t  my_next;      <span class="comment">// Next element in the list</span>
+<a name="l00244"></a>00244         value_type my_element;   <span class="comment">// Element storage</span>
+<a name="l00245"></a>00245         sokey_t    my_order_key; <span class="comment">// Order key for this element</span>
+<a name="l00246"></a>00246     };
+<a name="l00247"></a>00247 
+<a name="l00248"></a>00248     <span class="comment">// Allocate a new node with the given order key and value</span>
+<a name="l00249"></a>00249     nodeptr_t create_node(sokey_t order_key, <span class="keyword">const</span> T &value) {
+<a name="l00250"></a>00250         nodeptr_t pnode = my_node_allocator.allocate(1);
+<a name="l00251"></a>00251 
+<a name="l00252"></a>00252         __TBB_TRY {
+<a name="l00253"></a>00253             <span class="keyword">new</span>(static_cast<void*>(&pnode->my_element)) T(value);
+<a name="l00254"></a>00254             pnode->init(order_key);
+<a name="l00255"></a>00255         } __TBB_CATCH(...) {
+<a name="l00256"></a>00256             my_node_allocator.deallocate(pnode, 1);
+<a name="l00257"></a>00257             __TBB_RETHROW();
+<a name="l00258"></a>00258         }
+<a name="l00259"></a>00259 
+<a name="l00260"></a>00260         <span class="keywordflow">return</span> (pnode);
+<a name="l00261"></a>00261     }
+<a name="l00262"></a>00262 
+<a name="l00263"></a>00263     <span class="comment">// Allocate a new node with the given order key; used to allocate dummy nodes</span>
+<a name="l00264"></a>00264     nodeptr_t create_node(sokey_t order_key) {
+<a name="l00265"></a>00265         nodeptr_t pnode = my_node_allocator.allocate(1);
+<a name="l00266"></a>00266 
+<a name="l00267"></a>00267         __TBB_TRY {
+<a name="l00268"></a>00268             <span class="keyword">new</span>(static_cast<void*>(&pnode->my_element)) T();
+<a name="l00269"></a>00269             pnode->init(order_key);
+<a name="l00270"></a>00270         } __TBB_CATCH(...) {
+<a name="l00271"></a>00271             my_node_allocator.deallocate(pnode, 1);
+<a name="l00272"></a>00272             __TBB_RETHROW();
+<a name="l00273"></a>00273         }
+<a name="l00274"></a>00274 
+<a name="l00275"></a>00275         <span class="keywordflow">return</span> (pnode);
+<a name="l00276"></a>00276     }
+<a name="l00277"></a>00277 
+<a name="l00278"></a>00278    split_ordered_list(allocator_type a = allocator_type())
+<a name="l00279"></a>00279        : my_node_allocator(a), my_element_count(0)
+<a name="l00280"></a>00280     {
+<a name="l00281"></a>00281         <span class="comment">// Immediately allocate a dummy node with order key of 0. This node</span>
+<a name="l00282"></a>00282         <span class="comment">// will always be the head of the list.</span>
+<a name="l00283"></a>00283         my_head = create_node(0);
+<a name="l00284"></a>00284     }
+<a name="l00285"></a>00285 
+<a name="l00286"></a>00286     ~split_ordered_list()
+<a name="l00287"></a>00287     {
+<a name="l00288"></a>00288         <span class="comment">// Clear the list</span>
+<a name="l00289"></a>00289         clear();
+<a name="l00290"></a>00290 
+<a name="l00291"></a>00291         <span class="comment">// Remove the head element which is not cleared by clear()</span>
+<a name="l00292"></a>00292         nodeptr_t pnode = my_head;
+<a name="l00293"></a>00293         my_head = NULL;
+<a name="l00294"></a>00294 
+<a name="l00295"></a>00295         __TBB_ASSERT(pnode != NULL && pnode->my_next == NULL, <span class="stringliteral">"Invalid head list node"</span>);
+<a name="l00296"></a>00296 
+<a name="l00297"></a>00297         destroy_node(pnode);
+<a name="l00298"></a>00298     }
+<a name="l00299"></a>00299 
+<a name="l00300"></a>00300     <span class="comment">// Common forward list functions</span>
+<a name="l00301"></a>00301 
+<a name="l00302"></a>00302     allocator_type get_allocator()<span class="keyword"> const </span>{
+<a name="l00303"></a>00303         <span class="keywordflow">return</span> (my_node_allocator);
+<a name="l00304"></a>00304     }
+<a name="l00305"></a>00305 
+<a name="l00306"></a>00306     <span class="keywordtype">void</span> clear() {
+<a name="l00307"></a>00307         nodeptr_t pnext;
+<a name="l00308"></a>00308         nodeptr_t pnode = my_head;
+<a name="l00309"></a>00309 
+<a name="l00310"></a>00310         __TBB_ASSERT(my_head != NULL, <span class="stringliteral">"Invalid head list node"</span>);
+<a name="l00311"></a>00311         pnext = pnode->my_next;
+<a name="l00312"></a>00312         pnode->my_next = NULL;
+<a name="l00313"></a>00313         pnode = pnext;
+<a name="l00314"></a>00314 
+<a name="l00315"></a>00315         <span class="keywordflow">while</span> (pnode != NULL)
+<a name="l00316"></a>00316         {
+<a name="l00317"></a>00317             pnext = pnode->my_next;
+<a name="l00318"></a>00318             destroy_node(pnode);
+<a name="l00319"></a>00319             pnode = pnext;
+<a name="l00320"></a>00320         }
+<a name="l00321"></a>00321 
+<a name="l00322"></a>00322         my_element_count = 0;
+<a name="l00323"></a>00323     }
+<a name="l00324"></a>00324 
+<a name="l00325"></a>00325     <span class="comment">// Returns a first non-dummy element in the SOL</span>
+<a name="l00326"></a>00326     iterator begin() {
+<a name="l00327"></a>00327         <span class="keywordflow">return</span> first_real_iterator(raw_begin());
+<a name="l00328"></a>00328     }
+<a name="l00329"></a>00329 
+<a name="l00330"></a>00330     <span class="comment">// Returns a first non-dummy element in the SOL</span>
+<a name="l00331"></a>00331     const_iterator begin()<span class="keyword"> const </span>{
+<a name="l00332"></a>00332         <span class="keywordflow">return</span> first_real_iterator(raw_begin());
+<a name="l00333"></a>00333     }
+<a name="l00334"></a>00334 
+<a name="l00335"></a>00335     iterator end() {
+<a name="l00336"></a>00336         <span class="keywordflow">return</span> (iterator(0, <span class="keyword">this</span>));
+<a name="l00337"></a>00337     }
+<a name="l00338"></a>00338 
+<a name="l00339"></a>00339     const_iterator end()<span class="keyword"> const </span>{
+<a name="l00340"></a>00340         <span class="keywordflow">return</span> (const_iterator(0, <span class="keyword">this</span>));
+<a name="l00341"></a>00341     }
+<a name="l00342"></a>00342 
+<a name="l00343"></a>00343     const_iterator cbegin()<span class="keyword"> const </span>{
+<a name="l00344"></a>00344         <span class="keywordflow">return</span> (((<span class="keyword">const</span> self_type *)<span class="keyword">this</span>)->begin());
+<a name="l00345"></a>00345     }
+<a name="l00346"></a>00346 
+<a name="l00347"></a>00347     const_iterator cend()<span class="keyword"> const </span>{
+<a name="l00348"></a>00348         <span class="keywordflow">return</span> (((<span class="keyword">const</span> self_type *)<span class="keyword">this</span>)->end());
+<a name="l00349"></a>00349     }
+<a name="l00350"></a>00350 
+<a name="l00351"></a>00351     <span class="comment">// Checks if the number of elements (non-dummy) is 0</span>
+<a name="l00352"></a>00352     <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{
+<a name="l00353"></a>00353         <span class="keywordflow">return</span> (my_element_count == 0);
+<a name="l00354"></a>00354     }
+<a name="l00355"></a>00355 
+<a name="l00356"></a>00356     <span class="comment">// Returns the number of non-dummy elements in the list</span>
+<a name="l00357"></a>00357     size_type size()<span class="keyword"> const </span>{
+<a name="l00358"></a>00358         <span class="keywordflow">return</span> my_element_count;
+<a name="l00359"></a>00359     }
+<a name="l00360"></a>00360 
+<a name="l00361"></a>00361     <span class="comment">// Returns the maximum size of the list, determined by the allocator</span>
+<a name="l00362"></a>00362     size_type max_size()<span class="keyword"> const </span>{
+<a name="l00363"></a>00363         <span class="keywordflow">return</span> my_node_allocator.max_size();
+<a name="l00364"></a>00364     }
+<a name="l00365"></a>00365 
+<a name="l00366"></a>00366     <span class="comment">// Swaps 'this' list with the passed in one</span>
+<a name="l00367"></a>00367     <span class="keywordtype">void</span> swap(self_type& other)
+<a name="l00368"></a>00368     {
+<a name="l00369"></a>00369         <span class="keywordflow">if</span> (<span class="keyword">this</span> == &other)
+<a name="l00370"></a>00370         {
+<a name="l00371"></a>00371             <span class="comment">// Nothing to do</span>
+<a name="l00372"></a>00372             <span class="keywordflow">return</span>;
+<a name="l00373"></a>00373         }
+<a name="l00374"></a>00374 
+<a name="l00375"></a>00375         std::swap(my_element_count, other.my_element_count);
+<a name="l00376"></a>00376         std::swap(my_head, other.my_head);
+<a name="l00377"></a>00377     }
+<a name="l00378"></a>00378 
+<a name="l00379"></a>00379     <span class="comment">// Split-order list functions</span>
+<a name="l00380"></a>00380 
+<a name="l00381"></a>00381     <span class="comment">// Returns a first element in the SOL, which is always a dummy</span>
+<a name="l00382"></a>00382     raw_iterator raw_begin() {
+<a name="l00383"></a>00383         <span class="keywordflow">return</span> raw_iterator(my_head);
+<a name="l00384"></a>00384     }
+<a name="l00385"></a>00385 
+<a name="l00386"></a>00386     <span class="comment">// Returns a first element in the SOL, which is always a dummy</span>
+<a name="l00387"></a>00387     raw_const_iterator raw_begin()<span class="keyword"> const </span>{
+<a name="l00388"></a>00388         <span class="keywordflow">return</span> raw_const_iterator(my_head);
+<a name="l00389"></a>00389     }
+<a name="l00390"></a>00390 
+<a name="l00391"></a>00391     raw_iterator raw_end() {
+<a name="l00392"></a>00392         <span class="keywordflow">return</span> raw_iterator(0);
+<a name="l00393"></a>00393     }
+<a name="l00394"></a>00394 
+<a name="l00395"></a>00395     raw_const_iterator raw_end()<span class="keyword"> const </span>{
+<a name="l00396"></a>00396         <span class="keywordflow">return</span> raw_const_iterator(0);
+<a name="l00397"></a>00397     }
+<a name="l00398"></a>00398 
+<a name="l00399"></a>00399     <span class="keyword">static</span> sokey_t get_order_key(<span class="keyword">const</span> raw_const_iterator& it) {
+<a name="l00400"></a>00400         <span class="keywordflow">return</span> it.get_node_ptr()->get_order_key();
+<a name="l00401"></a>00401     }
+<a name="l00402"></a>00402 
+<a name="l00403"></a>00403     <span class="keyword">static</span> sokey_t get_safe_order_key(<span class="keyword">const</span> raw_const_iterator& it) {
+<a name="l00404"></a>00404         <span class="keywordflow">if</span>( !it.get_node_ptr() ) <span class="keywordflow">return</span> sokey_t(~0U);
+<a name="l00405"></a>00405         <span class="keywordflow">return</span> it.get_node_ptr()->get_order_key();
+<a name="l00406"></a>00406     }
+<a name="l00407"></a>00407 
+<a name="l00408"></a>00408     <span class="comment">// Returns a public iterator version of the internal iterator. Public iterator must not</span>
+<a name="l00409"></a>00409     <span class="comment">// be a dummy private iterator.</span>
+<a name="l00410"></a>00410     iterator get_iterator(raw_iterator it) {
+<a name="l00411"></a>00411         __TBB_ASSERT(it.get_node_ptr() == NULL || !it.get_node_ptr()->is_dummy(), <span class="stringliteral">"Invalid user node (dummy)"</span>);
+<a name="l00412"></a>00412         <span class="keywordflow">return</span> iterator(it.get_node_ptr(), <span class="keyword">this</span>);
+<a name="l00413"></a>00413     }
+<a name="l00414"></a>00414 
+<a name="l00415"></a>00415     <span class="comment">// Returns a public iterator version of the internal iterator. Public iterator must not</span>
+<a name="l00416"></a>00416     <span class="comment">// be a dummy private iterator.</span>
+<a name="l00417"></a>00417     const_iterator get_iterator(raw_const_iterator it)<span class="keyword"> const </span>{
+<a name="l00418"></a>00418         __TBB_ASSERT(it.get_node_ptr() == NULL || !it.get_node_ptr()->is_dummy(), <span class="stringliteral">"Invalid user node (dummy)"</span>);
+<a name="l00419"></a>00419         <span class="keywordflow">return</span> const_iterator(it.get_node_ptr(), <span class="keyword">this</span>);
+<a name="l00420"></a>00420     }
+<a name="l00421"></a>00421 
+<a name="l00422"></a>00422     <span class="comment">// Returns a non-const version of the raw_iterator</span>
+<a name="l00423"></a>00423     raw_iterator get_iterator(raw_const_iterator it) {
+<a name="l00424"></a>00424         <span class="keywordflow">return</span> raw_iterator(it.get_node_ptr());
+<a name="l00425"></a>00425     }
+<a name="l00426"></a>00426 
+<a name="l00427"></a>00427     <span class="comment">// Returns a non-const version of the iterator</span>
+<a name="l00428"></a>00428     <span class="keyword">static</span> iterator get_iterator(const_iterator it) {
+<a name="l00429"></a>00429         <span class="keywordflow">return</span> iterator(it.my_node_ptr, it.my_list_ptr);
+<a name="l00430"></a>00430     }
+<a name="l00431"></a>00431 
+<a name="l00432"></a>00432     <span class="comment">// Returns a public iterator version of a first non-dummy internal iterator at or after</span>
+<a name="l00433"></a>00433     <span class="comment">// the passed in internal iterator.</span>
+<a name="l00434"></a>00434     iterator first_real_iterator(raw_iterator it)
+<a name="l00435"></a>00435     {
+<a name="l00436"></a>00436         <span class="comment">// Skip all dummy, internal only iterators</span>
+<a name="l00437"></a>00437         <span class="keywordflow">while</span> (it != raw_end() && it.get_node_ptr()->is_dummy())
+<a name="l00438"></a>00438             ++it;
+<a name="l00439"></a>00439 
+<a name="l00440"></a>00440         <span class="keywordflow">return</span> iterator(it.get_node_ptr(), <span class="keyword">this</span>);
+<a name="l00441"></a>00441     }
+<a name="l00442"></a>00442 
+<a name="l00443"></a>00443     <span class="comment">// Returns a public iterator version of a first non-dummy internal iterator at or after</span>
+<a name="l00444"></a>00444     <span class="comment">// the passed in internal iterator.</span>
+<a name="l00445"></a>00445     const_iterator first_real_iterator(raw_const_iterator it)<span class="keyword"> const</span>
+<a name="l00446"></a>00446 <span class="keyword">    </span>{
+<a name="l00447"></a>00447         <span class="comment">// Skip all dummy, internal only iterators</span>
+<a name="l00448"></a>00448         <span class="keywordflow">while</span> (it != raw_end() && it.get_node_ptr()->is_dummy())
+<a name="l00449"></a>00449             ++it;
+<a name="l00450"></a>00450 
+<a name="l00451"></a>00451         <span class="keywordflow">return</span> const_iterator(it.get_node_ptr(), <span class="keyword">this</span>);
+<a name="l00452"></a>00452     }
+<a name="l00453"></a>00453 
+<a name="l00454"></a>00454     <span class="comment">// Erase an element using the allocator</span>
+<a name="l00455"></a>00455     <span class="keywordtype">void</span> destroy_node(nodeptr_t pnode) {
+<a name="l00456"></a>00456         my_node_allocator.destroy(pnode);
+<a name="l00457"></a>00457         my_node_allocator.deallocate(pnode, 1);
+<a name="l00458"></a>00458     }
+<a name="l00459"></a>00459 
+<a name="l00460"></a>00460     <span class="comment">// Try to insert a new element in the list. If insert fails, return the node that</span>
+<a name="l00461"></a>00461     <span class="comment">// was inserted instead.</span>
+<a name="l00462"></a>00462     nodeptr_t try_insert(nodeptr_t previous, nodeptr_t new_node, nodeptr_t current_node) {
+<a name="l00463"></a>00463         new_node->my_next = current_node;
+<a name="l00464"></a>00464         <span class="keywordflow">return</span> previous->atomic_set_next(new_node, current_node);
+<a name="l00465"></a>00465     }
+<a name="l00466"></a>00466 
+<a name="l00467"></a>00467     <span class="comment">// Insert a new element between passed in iterators</span>
+<a name="l00468"></a>00468     std::pair<iterator, bool> try_insert(raw_iterator it, raw_iterator next, <span class="keyword">const</span> value_type &value, sokey_t order_key, size_type *new_count)
+<a name="l00469"></a>00469     {
+<a name="l00470"></a>00470         nodeptr_t pnode = create_node(order_key, value);
+<a name="l00471"></a>00471         nodeptr_t inserted_node = try_insert(it.get_node_ptr(), pnode, next.get_node_ptr());
+<a name="l00472"></a>00472 
+<a name="l00473"></a>00473         <span class="keywordflow">if</span> (inserted_node == pnode)
+<a name="l00474"></a>00474         {
+<a name="l00475"></a>00475             <span class="comment">// If the insert succeeded, check that the order is correct and increment the element count</span>
+<a name="l00476"></a>00476             check_range();
+<a name="l00477"></a>00477             *new_count = __TBB_FetchAndAddW((uintptr_t*)&my_element_count, uintptr_t(1));
+<a name="l00478"></a>00478             <span class="keywordflow">return</span> std::pair<iterator, bool>(iterator(pnode, <span class="keyword">this</span>), <span class="keyword">true</span>);
+<a name="l00479"></a>00479         }
+<a name="l00480"></a>00480         <span class="keywordflow">else</span>
+<a name="l00481"></a>00481         {
+<a name="l00482"></a>00482             <span class="comment">// If the insert failed (element already there), then delete the new one</span>
+<a name="l00483"></a>00483             destroy_node(pnode);
+<a name="l00484"></a>00484             <span class="keywordflow">return</span> std::pair<iterator, bool>(end(), <span class="keyword">false</span>);
+<a name="l00485"></a>00485         }
+<a name="l00486"></a>00486     }
+<a name="l00487"></a>00487 
+<a name="l00488"></a>00488     <span class="comment">// Insert a new dummy element, starting search at a parent dummy element</span>
+<a name="l00489"></a>00489     raw_iterator insert_dummy(raw_iterator it, sokey_t order_key)
+<a name="l00490"></a>00490     {
+<a name="l00491"></a>00491         raw_iterator last = raw_end();
+<a name="l00492"></a>00492         raw_iterator where = it;
+<a name="l00493"></a>00493 
+<a name="l00494"></a>00494         __TBB_ASSERT(where != last, <span class="stringliteral">"Invalid head node"</span>);
+<a name="l00495"></a>00495 
+<a name="l00496"></a>00496         ++where;
+<a name="l00497"></a>00497 
+<a name="l00498"></a>00498         <span class="comment">// Create a dummy element up front, even though it may be discarded (due to concurrent insertion)</span>
+<a name="l00499"></a>00499         nodeptr_t dummy_node = create_node(order_key);
+<a name="l00500"></a>00500 
+<a name="l00501"></a>00501         <span class="keywordflow">for</span> (;;)
+<a name="l00502"></a>00502         {
+<a name="l00503"></a>00503             __TBB_ASSERT(it != last, <span class="stringliteral">"Invalid head list node"</span>);
+<a name="l00504"></a>00504 
+<a name="l00505"></a>00505             <span class="comment">// If the head iterator is at the end of the list, or past the point where this dummy</span>
+<a name="l00506"></a>00506             <span class="comment">// node needs to be inserted, then try to insert it.</span>
+<a name="l00507"></a>00507             <span class="keywordflow">if</span> (where == last || get_order_key(where) > order_key)
+<a name="l00508"></a>00508             {
+<a name="l00509"></a>00509                 __TBB_ASSERT(get_order_key(it) < order_key, <span class="stringliteral">"Invalid node order in the list"</span>);
+<a name="l00510"></a>00510 
+<a name="l00511"></a>00511                 <span class="comment">// Try to insert it in the right place</span>
+<a name="l00512"></a>00512                 nodeptr_t inserted_node = try_insert(it.get_node_ptr(), dummy_node, where.get_node_ptr());
+<a name="l00513"></a>00513 
+<a name="l00514"></a>00514                 <span class="keywordflow">if</span> (inserted_node == dummy_node)
+<a name="l00515"></a>00515                 {
+<a name="l00516"></a>00516                     <span class="comment">// Insertion succeeded, check the list for order violations</span>
+<a name="l00517"></a>00517                     check_range();
+<a name="l00518"></a>00518                     <span class="keywordflow">return</span> raw_iterator(dummy_node);
+<a name="l00519"></a>00519                 }
+<a name="l00520"></a>00520                 <span class="keywordflow">else</span>
+<a name="l00521"></a>00521                 {
+<a name="l00522"></a>00522                     <span class="comment">// Insertion failed: either dummy node was inserted by another thread, or</span>
+<a name="l00523"></a>00523                     <span class="comment">// a real element was inserted at exactly the same place as dummy node.</span>
+<a name="l00524"></a>00524                     <span class="comment">// Proceed with the search from the previous location where order key was</span>
+<a name="l00525"></a>00525                     <span class="comment">// known to be larger (note: this is legal only because there is no safe</span>
+<a name="l00526"></a>00526                     <span class="comment">// concurrent erase operation supported).</span>
+<a name="l00527"></a>00527                     where = it;
+<a name="l00528"></a>00528                     ++where;
+<a name="l00529"></a>00529                     <span class="keywordflow">continue</span>;
+<a name="l00530"></a>00530                 }
+<a name="l00531"></a>00531             }
+<a name="l00532"></a>00532             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (get_order_key(where) == order_key)
+<a name="l00533"></a>00533             {
+<a name="l00534"></a>00534                 <span class="comment">// Another dummy node with the same value found, discard the new one.</span>
+<a name="l00535"></a>00535                 destroy_node(dummy_node);
+<a name="l00536"></a>00536                 <span class="keywordflow">return</span> where;
+<a name="l00537"></a>00537             }
+<a name="l00538"></a>00538 
+<a name="l00539"></a>00539             <span class="comment">// Move the iterator forward</span>
+<a name="l00540"></a>00540             it = where;
+<a name="l00541"></a>00541             ++where;
+<a name="l00542"></a>00542         }
+<a name="l00543"></a>00543 
+<a name="l00544"></a>00544     }
+<a name="l00545"></a>00545 
+<a name="l00546"></a>00546     <span class="comment">// This erase function can handle both real and dummy nodes</span>
+<a name="l00547"></a>00547     <span class="keywordtype">void</span> erase_node(raw_iterator previous, raw_const_iterator& where)
+<a name="l00548"></a>00548     {
+<a name="l00549"></a>00549         nodeptr_t pnode = (where++).get_node_ptr();
+<a name="l00550"></a>00550         nodeptr_t prevnode = previous.get_node_ptr();
+<a name="l00551"></a>00551         __TBB_ASSERT(prevnode->my_next == pnode, <span class="stringliteral">"Erase must take consecutive iterators"</span>);
+<a name="l00552"></a>00552         prevnode->my_next = pnode->my_next;
+<a name="l00553"></a>00553 
+<a name="l00554"></a>00554         destroy_node(pnode);
+<a name="l00555"></a>00555     }
+<a name="l00556"></a>00556 
+<a name="l00557"></a>00557     <span class="comment">// Erase the element (previous node needs to be passed because this is a forward only list)</span>
+<a name="l00558"></a>00558     iterator erase_node(raw_iterator previous, const_iterator where)
+<a name="l00559"></a>00559     {
+<a name="l00560"></a>00560         raw_const_iterator it = where;
+<a name="l00561"></a>00561         erase_node(previous, it);
+<a name="l00562"></a>00562         my_element_count--;
+<a name="l00563"></a>00563 
+<a name="l00564"></a>00564         <span class="keywordflow">return</span> get_iterator(first_real_iterator(it));
+<a name="l00565"></a>00565     }
+<a name="l00566"></a>00566 
+<a name="l00567"></a>00567     <span class="comment">// Move all elements from the passed in split-ordered list to this one</span>
+<a name="l00568"></a>00568     <span class="keywordtype">void</span> move_all(self_type& source)
+<a name="l00569"></a>00569     {
+<a name="l00570"></a>00570         raw_const_iterator first = source.raw_begin();
+<a name="l00571"></a>00571         raw_const_iterator last = source.raw_end();
+<a name="l00572"></a>00572 
+<a name="l00573"></a>00573         <span class="keywordflow">if</span> (first == last)
+<a name="l00574"></a>00574             <span class="keywordflow">return</span>;
+<a name="l00575"></a>00575 
+<a name="l00576"></a>00576         nodeptr_t previous_node = my_head;
+<a name="l00577"></a>00577         raw_const_iterator begin_iterator = first++;
+<a name="l00578"></a>00578 
+<a name="l00579"></a>00579         <span class="comment">// Move all elements one by one, including dummy ones</span>
+<a name="l00580"></a>00580         <span class="keywordflow">for</span> (raw_const_iterator it = first; it != last;)
+<a name="l00581"></a>00581         {
+<a name="l00582"></a>00582             nodeptr_t pnode = it.get_node_ptr();
+<a name="l00583"></a>00583 
+<a name="l00584"></a>00584             nodeptr_t dummy_node = pnode->is_dummy() ? create_node(pnode->get_order_key()) : create_node(pnode->get_order_key(), pnode->my_element);
+<a name="l00585"></a>00585             previous_node = try_insert(previous_node, dummy_node, NULL);
+<a name="l00586"></a>00586             __TBB_ASSERT(previous_node != NULL, <span class="stringliteral">"Insertion must succeed"</span>);
+<a name="l00587"></a>00587             raw_const_iterator where = it++;
+<a name="l00588"></a>00588             source.erase_node(get_iterator(begin_iterator), where);
+<a name="l00589"></a>00589         }
+<a name="l00590"></a>00590         check_range();
+<a name="l00591"></a>00591     }
+<a name="l00592"></a>00592 
+<a name="l00593"></a>00593 
+<a name="l00594"></a>00594 <span class="keyword">private</span>:
+<a name="l00595"></a>00595 
+<a name="l00596"></a>00596     <span class="comment">// Check the list for order violations</span>
+<a name="l00597"></a>00597     <span class="keywordtype">void</span> check_range()
+<a name="l00598"></a>00598     {
+<a name="l00599"></a>00599 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00600"></a>00600 <span class="preprocessor"></span>        <span class="keywordflow">for</span> (raw_iterator it = raw_begin(); it != raw_end(); ++it)
+<a name="l00601"></a>00601         {
+<a name="l00602"></a>00602             raw_iterator next_iterator = it;
+<a name="l00603"></a>00603             ++next_iterator;
+<a name="l00604"></a>00604 
+<a name="l00605"></a>00605             __TBB_ASSERT(next_iterator == end() || next_iterator.get_node_ptr()->get_order_key() >= it.get_node_ptr()->get_order_key(), <span class="stringliteral">"!!! List order inconsistency !!!"</span>);
+<a name="l00606"></a>00606         }
+<a name="l00607"></a>00607 <span class="preprocessor">#endif</span>
+<a name="l00608"></a>00608 <span class="preprocessor"></span>    }
+<a name="l00609"></a>00609 
+<a name="l00610"></a>00610     <span class="keyword">typename</span> allocator_type::template rebind<node>::other my_node_allocator;  <span class="comment">// allocator object for nodes</span>
+<a name="l00611"></a>00611     size_type                                             my_element_count;   <span class="comment">// Total item count, not counting dummy nodes</span>
+<a name="l00612"></a>00612     nodeptr_t                                             my_head;            <span class="comment">// pointer to head node</span>
+<a name="l00613"></a>00613 };
+<a name="l00614"></a>00614 
+<a name="l00615"></a>00615 <span class="comment">// Template class for hash compare</span>
+<a name="l00616"></a>00616 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> Hasher, <span class="keyword">typename</span> Key_equality>
+<a name="l00617"></a>00617 <span class="keyword">class </span>hash_compare
+<a name="l00618"></a>00618 {
+<a name="l00619"></a>00619 <span class="keyword">public</span>:
+<a name="l00620"></a>00620     hash_compare() {}
+<a name="l00621"></a>00621 
+<a name="l00622"></a>00622     hash_compare(Hasher a_hasher) : my_hash_object(a_hasher) {}
+<a name="l00623"></a>00623 
+<a name="l00624"></a>00624     hash_compare(Hasher a_hasher, Key_equality a_keyeq) : my_hash_object(a_hasher), my_key_compare_object(a_keyeq) {}
+<a name="l00625"></a>00625 
+<a name="l00626"></a>00626     size_t operator()(<span class="keyword">const</span> Key& key)<span class="keyword"> const </span>{
+<a name="l00627"></a>00627         <span class="keywordflow">return</span> ((size_t)my_hash_object(key));
+<a name="l00628"></a>00628     }
+<a name="l00629"></a>00629 
+<a name="l00630"></a>00630     <span class="keywordtype">bool</span> operator()(<span class="keyword">const</span> Key& key1, <span class="keyword">const</span> Key& key2)<span class="keyword"> const </span>{
+<a name="l00631"></a>00631         <span class="keywordflow">return</span> (!my_key_compare_object(key1, key2));
+<a name="l00632"></a>00632     }
+<a name="l00633"></a>00633 
+<a name="l00634"></a>00634     Hasher       my_hash_object;        <span class="comment">// The hash object</span>
+<a name="l00635"></a>00635     Key_equality my_key_compare_object; <span class="comment">// The equality comparator object</span>
+<a name="l00636"></a>00636 };
+<a name="l00637"></a>00637 
+<a name="l00638"></a>00638 <span class="preprocessor">#if _MSC_VER</span>
+<a name="l00639"></a>00639 <span class="preprocessor"></span><span class="preprocessor">#pragma warning(push)</span>
+<a name="l00640"></a>00640 <span class="preprocessor"></span><span class="preprocessor">#pragma warning(disable: 4127) // warning 4127 -- while (true) has a constant expression in it (for allow_multimapping)</span>
+<a name="l00641"></a>00641 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00642"></a>00642 <span class="preprocessor"></span>
+<a name="l00643"></a>00643 <span class="keyword">template</span> <<span class="keyword">typename</span> Traits>
+<a name="l00644"></a>00644 <span class="keyword">class </span>concurrent_unordered_base : <span class="keyword">public</span> Traits
+<a name="l00645"></a>00645 {
+<a name="l00646"></a>00646 <span class="keyword">protected</span>:
+<a name="l00647"></a>00647     <span class="comment">// Type definitions</span>
+<a name="l00648"></a>00648     <span class="keyword">typedef</span> concurrent_unordered_base<Traits> self_type;
+<a name="l00649"></a>00649     <span class="keyword">typedef</span> <span class="keyword">typename</span> Traits::value_type value_type;
+<a name="l00650"></a>00650     <span class="keyword">typedef</span> <span class="keyword">typename</span> Traits::key_type key_type;
+<a name="l00651"></a>00651     <span class="keyword">typedef</span> <span class="keyword">typename</span> Traits::hash_compare hash_compare;
+<a name="l00652"></a>00652     <span class="keyword">typedef</span> <span class="keyword">typename</span> Traits::value_compare value_compare;
+<a name="l00653"></a>00653     <span class="keyword">typedef</span> <span class="keyword">typename</span> Traits::allocator_type allocator_type;
+<a name="l00654"></a>00654     <span class="keyword">typedef</span> <span class="keyword">typename</span> allocator_type::pointer pointer;
+<a name="l00655"></a>00655     <span class="keyword">typedef</span> <span class="keyword">typename</span> allocator_type::const_pointer const_pointer;
+<a name="l00656"></a>00656     <span class="keyword">typedef</span> <span class="keyword">typename</span> allocator_type::reference reference;
+<a name="l00657"></a>00657     <span class="keyword">typedef</span> <span class="keyword">typename</span> allocator_type::const_reference const_reference;
+<a name="l00658"></a>00658     <span class="keyword">typedef</span> <span class="keyword">typename</span> allocator_type::size_type size_type;
+<a name="l00659"></a>00659     <span class="keyword">typedef</span> <span class="keyword">typename</span> allocator_type::difference_type difference_type;
+<a name="l00660"></a>00660     <span class="keyword">typedef</span> split_ordered_list<value_type, typename Traits::allocator_type> solist_t;
+<a name="l00661"></a>00661     <span class="keyword">typedef</span> <span class="keyword">typename</span> solist_t::nodeptr_t nodeptr_t;
+<a name="l00662"></a>00662     <span class="comment">// Iterators that walk the entire split-order list, including dummy nodes</span>
+<a name="l00663"></a>00663     <span class="keyword">typedef</span> <span class="keyword">typename</span> solist_t::raw_iterator raw_iterator;
+<a name="l00664"></a>00664     <span class="keyword">typedef</span> <span class="keyword">typename</span> solist_t::raw_const_iterator raw_const_iterator;
+<a name="l00665"></a>00665     <span class="keyword">typedef</span> <span class="keyword">typename</span> solist_t::iterator iterator; <span class="comment">// TODO: restore const iterator for unordered_sets</span>
+<a name="l00666"></a>00666     <span class="keyword">typedef</span> <span class="keyword">typename</span> solist_t::const_iterator const_iterator;
+<a name="l00667"></a>00667     <span class="keyword">typedef</span> iterator local_iterator;
+<a name="l00668"></a>00668     <span class="keyword">typedef</span> const_iterator const_local_iterator;
+<a name="l00669"></a>00669     <span class="keyword">using</span> Traits::my_hash_compare;
+<a name="l00670"></a>00670     <span class="keyword">using</span> Traits::get_key;
+<a name="l00671"></a>00671     <span class="keyword">using</span> Traits::allow_multimapping;
+<a name="l00672"></a>00672 
+<a name="l00673"></a>00673 <span class="keyword">private</span>:
+<a name="l00674"></a>00674     <span class="keyword">typedef</span> std::pair<iterator, iterator> pairii_t;
+<a name="l00675"></a>00675     <span class="keyword">typedef</span> std::pair<const_iterator, const_iterator> paircc_t;
+<a name="l00676"></a>00676 
+<a name="l00677"></a>00677     <span class="keyword">static</span> size_type <span class="keyword">const</span> pointers_per_table = <span class="keyword">sizeof</span>(size_type) * 8;              <span class="comment">// One bucket segment per bit</span>
+<a name="l00678"></a>00678     <span class="keyword">static</span> <span class="keyword">const</span> size_type initial_bucket_number = 8;                               <span class="comment">// Initial number of buckets</span>
+<a name="l00679"></a>00679     <span class="keyword">static</span> <span class="keyword">const</span> size_type initial_bucket_load = 4;                                <span class="comment">// Initial maximum number of elements per bucket</span>
+<a name="l00680"></a>00680 
+<a name="l00681"></a>00681 <span class="keyword">protected</span>:
+<a name="l00682"></a>00682     <span class="comment">// Constructors/Destructors</span>
+<a name="l00683"></a>00683     concurrent_unordered_base(size_type n_of_buckets = initial_bucket_number,
+<a name="l00684"></a>00684         <span class="keyword">const</span> hash_compare& hc = hash_compare(), <span class="keyword">const</span> allocator_type& a = allocator_type())
+<a name="l00685"></a>00685         : Traits(hc), my_solist(a),
+<a name="l00686"></a>00686           my_allocator(a), my_maximum_bucket_size((float) initial_bucket_load)
+<a name="l00687"></a>00687     {
+<a name="l00688"></a>00688         <span class="keywordflow">if</span>( n_of_buckets == 0) ++n_of_buckets;
+<a name="l00689"></a>00689         my_number_of_buckets = 1<<__TBB_Log2((uintptr_t)n_of_buckets*2-1); <span class="comment">// round up to power of 2</span>
+<a name="l00690"></a>00690         internal_init();
+<a name="l00691"></a>00691     }
+<a name="l00692"></a>00692 
+<a name="l00693"></a>00693     concurrent_unordered_base(<span class="keyword">const</span> concurrent_unordered_base& right, <span class="keyword">const</span> allocator_type& a)
+<a name="l00694"></a>00694         : Traits(right.my_hash_compare), my_solist(a), my_allocator(a)
+<a name="l00695"></a>00695     {
+<a name="l00696"></a>00696         internal_init();
+<a name="l00697"></a>00697         internal_copy(right);
+<a name="l00698"></a>00698     }
+<a name="l00699"></a>00699 
+<a name="l00700"></a>00700     concurrent_unordered_base(<span class="keyword">const</span> concurrent_unordered_base& right)
+<a name="l00701"></a>00701         : Traits(right.my_hash_compare), my_solist(right.get_allocator()), my_allocator(right.get_allocator())
+<a name="l00702"></a>00702     {
+<a name="l00703"></a>00703         internal_init();
+<a name="l00704"></a>00704         internal_copy(right);
+<a name="l00705"></a>00705     }
+<a name="l00706"></a>00706 
+<a name="l00707"></a>00707     concurrent_unordered_base& operator=(<span class="keyword">const</span> concurrent_unordered_base& right) {
+<a name="l00708"></a>00708         <span class="keywordflow">if</span> (<span class="keyword">this</span> != &right)
+<a name="l00709"></a>00709             internal_copy(right);
+<a name="l00710"></a>00710         <span class="keywordflow">return</span> (*<span class="keyword">this</span>);
+<a name="l00711"></a>00711     }
+<a name="l00712"></a>00712 
+<a name="l00713"></a>00713     ~concurrent_unordered_base() {
+<a name="l00714"></a>00714         <span class="comment">// Delete all node segments</span>
+<a name="l00715"></a>00715         internal_clear();
+<a name="l00716"></a>00716     }
+<a name="l00717"></a>00717 
+<a name="l00718"></a>00718 <span class="keyword">public</span>:
+<a name="l00719"></a>00719     allocator_type get_allocator()<span class="keyword"> const </span>{
+<a name="l00720"></a>00720         <span class="keywordflow">return</span> my_solist.get_allocator();
+<a name="l00721"></a>00721     }
+<a name="l00722"></a>00722 
+<a name="l00723"></a>00723     <span class="comment">// Size and capacity function</span>
+<a name="l00724"></a>00724     <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{
+<a name="l00725"></a>00725         <span class="keywordflow">return</span> my_solist.empty();
+<a name="l00726"></a>00726     }
+<a name="l00727"></a>00727 
+<a name="l00728"></a>00728     size_type size()<span class="keyword"> const </span>{
+<a name="l00729"></a>00729         <span class="keywordflow">return</span> my_solist.size();
+<a name="l00730"></a>00730     }
+<a name="l00731"></a>00731 
+<a name="l00732"></a>00732     size_type max_size()<span class="keyword"> const </span>{
+<a name="l00733"></a>00733         <span class="keywordflow">return</span> my_solist.max_size();
+<a name="l00734"></a>00734     }
+<a name="l00735"></a>00735 
+<a name="l00736"></a>00736     <span class="comment">// Iterators </span>
+<a name="l00737"></a>00737     iterator begin() {
+<a name="l00738"></a>00738         <span class="keywordflow">return</span> my_solist.begin();
+<a name="l00739"></a>00739     }
+<a name="l00740"></a>00740 
+<a name="l00741"></a>00741     const_iterator begin()<span class="keyword"> const </span>{
+<a name="l00742"></a>00742         <span class="keywordflow">return</span> my_solist.begin();
+<a name="l00743"></a>00743     }
+<a name="l00744"></a>00744 
+<a name="l00745"></a>00745     iterator end() {
+<a name="l00746"></a>00746         <span class="keywordflow">return</span> my_solist.end();
+<a name="l00747"></a>00747     }
+<a name="l00748"></a>00748 
+<a name="l00749"></a>00749     const_iterator end()<span class="keyword"> const </span>{
+<a name="l00750"></a>00750         <span class="keywordflow">return</span> my_solist.end();
+<a name="l00751"></a>00751     }
+<a name="l00752"></a>00752 
+<a name="l00753"></a>00753     const_iterator cbegin()<span class="keyword"> const </span>{
+<a name="l00754"></a>00754         <span class="keywordflow">return</span> my_solist.cbegin();
+<a name="l00755"></a>00755     }
+<a name="l00756"></a>00756 
+<a name="l00757"></a>00757     const_iterator cend()<span class="keyword"> const </span>{
+<a name="l00758"></a>00758         <span class="keywordflow">return</span> my_solist.cend();
+<a name="l00759"></a>00759     }
+<a name="l00760"></a>00760 
+<a name="l00761"></a>00761     <span class="comment">// Parallel traversal support</span>
+<a name="l00762"></a>00762     <span class="keyword">class </span>const_range_type : tbb::internal::no_assign {
+<a name="l00763"></a>00763         <span class="keyword">const</span> concurrent_unordered_base &my_table;
+<a name="l00764"></a>00764         raw_const_iterator my_begin_node;
+<a name="l00765"></a>00765         raw_const_iterator my_end_node;
+<a name="l00766"></a>00766         <span class="keyword">mutable</span> raw_const_iterator my_midpoint_node;
+<a name="l00767"></a>00767     <span class="keyword">public</span>:
+<a name="l00769"></a>00769         <span class="keyword">typedef</span> <span class="keyword">typename</span> concurrent_unordered_base::size_type size_type;
+<a name="l00770"></a>00770         <span class="keyword">typedef</span> <span class="keyword">typename</span> concurrent_unordered_base::value_type value_type;
+<a name="l00771"></a>00771         <span class="keyword">typedef</span> <span class="keyword">typename</span> concurrent_unordered_base::reference reference;
+<a name="l00772"></a>00772         <span class="keyword">typedef</span> <span class="keyword">typename</span> concurrent_unordered_base::difference_type difference_type;
+<a name="l00773"></a>00773         <span class="keyword">typedef</span> <span class="keyword">typename</span> concurrent_unordered_base::const_iterator iterator;
+<a name="l00774"></a>00774 
+<a name="l00776"></a>00776         <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_begin_node == my_end_node;}
+<a name="l00777"></a>00777 
+<a name="l00779"></a>00779         <span class="keywordtype">bool</span> is_divisible()<span class="keyword"> const </span>{
+<a name="l00780"></a>00780             <span class="keywordflow">return</span> my_midpoint_node != my_end_node;
+<a name="l00781"></a>00781         }
+<a name="l00783"></a>00783         const_range_type( const_range_type &r, split ) : 
+<a name="l00784"></a>00784             my_table(r.my_table), my_end_node(r.my_end_node)
+<a name="l00785"></a>00785         {
+<a name="l00786"></a>00786             r.my_end_node = my_begin_node = r.my_midpoint_node;
+<a name="l00787"></a>00787             __TBB_ASSERT( !empty(), <span class="stringliteral">"Splitting despite the range is not divisible"</span> );
+<a name="l00788"></a>00788             __TBB_ASSERT( !r.empty(), <span class="stringliteral">"Splitting despite the range is not divisible"</span> );
+<a name="l00789"></a>00789             set_midpoint();
+<a name="l00790"></a>00790             r.set_midpoint();
+<a name="l00791"></a>00791         }
+<a name="l00793"></a>00793         const_range_type( <span class="keyword">const</span> concurrent_unordered_base &a_table ) : 
+<a name="l00794"></a>00794             my_table(a_table), my_begin_node(a_table.my_solist.begin()),
+<a name="l00795"></a>00795             my_end_node(a_table.my_solist.end())
+<a name="l00796"></a>00796         {
+<a name="l00797"></a>00797             set_midpoint();
+<a name="l00798"></a>00798         }
+<a name="l00799"></a>00799         iterator begin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_table.my_solist.get_iterator(my_begin_node); }
+<a name="l00800"></a>00800         iterator end()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_table.my_solist.get_iterator(my_end_node); }
+<a name="l00802"></a>00802         size_type grainsize()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> 1; }
+<a name="l00803"></a>00803 
+<a name="l00805"></a>00805         <span class="keywordtype">void</span> set_midpoint()<span class="keyword"> const </span>{
+<a name="l00806"></a>00806             <span class="keywordflow">if</span>( my_begin_node == my_end_node ) <span class="comment">// not divisible</span>
+<a name="l00807"></a>00807                 my_midpoint_node = my_end_node;
+<a name="l00808"></a>00808             <span class="keywordflow">else</span> {
+<a name="l00809"></a>00809                 sokey_t begin_key = solist_t::get_safe_order_key(my_begin_node);
+<a name="l00810"></a>00810                 sokey_t end_key = solist_t::get_safe_order_key(my_end_node);
+<a name="l00811"></a>00811                 size_t mid_bucket = __TBB_ReverseBits( begin_key + (end_key-begin_key)/2 ) % my_table.my_number_of_buckets;
+<a name="l00812"></a>00812                 <span class="keywordflow">while</span> ( !my_table.is_initialized(mid_bucket) ) mid_bucket = my_table.get_parent(mid_bucket);
+<a name="l00813"></a>00813                 my_midpoint_node = my_table.my_solist.first_real_iterator(my_table.get_bucket( mid_bucket ));
+<a name="l00814"></a>00814                 <span class="keywordflow">if</span>( my_midpoint_node == my_begin_node )
+<a name="l00815"></a>00815                     my_midpoint_node = my_end_node;
+<a name="l00816"></a>00816 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00817"></a>00817 <span class="preprocessor"></span>                <span class="keywordflow">else</span> {
+<a name="l00818"></a>00818                     sokey_t mid_key = solist_t::get_safe_order_key(my_midpoint_node);
+<a name="l00819"></a>00819                     __TBB_ASSERT( begin_key < mid_key, <span class="stringliteral">"my_begin_node is after my_midpoint_node"</span> );
+<a name="l00820"></a>00820                     __TBB_ASSERT( mid_key <= end_key, <span class="stringliteral">"my_midpoint_node is after my_end_node"</span> );
+<a name="l00821"></a>00821                 }
+<a name="l00822"></a>00822 <span class="preprocessor">#endif // TBB_USE_ASSERT</span>
+<a name="l00823"></a>00823 <span class="preprocessor"></span>            }
+<a name="l00824"></a>00824         }
+<a name="l00825"></a>00825     };
+<a name="l00826"></a>00826 
+<a name="l00827"></a>00827     <span class="keyword">class </span>range_type : <span class="keyword">public</span> const_range_type {
+<a name="l00828"></a>00828     <span class="keyword">public</span>:
+<a name="l00829"></a>00829         <span class="keyword">typedef</span> <span class="keyword">typename</span> concurrent_unordered_base::iterator iterator;
+<a name="l00831"></a>00831         range_type( range_type &r, split ) : const_range_type( r, split() ) {}
+<a name="l00833"></a>00833         range_type( <span class="keyword">const</span> concurrent_unordered_base &a_table ) : const_range_type(a_table) {}
+<a name="l00834"></a>00834 
+<a name="l00835"></a>00835         iterator begin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> solist_t::get_iterator( const_range_type::begin() ); }
+<a name="l00836"></a>00836         iterator end()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> solist_t::get_iterator( const_range_type::end() ); }
+<a name="l00837"></a>00837     };
+<a name="l00838"></a>00838 
+<a name="l00839"></a>00839     range_type range() {
+<a name="l00840"></a>00840         <span class="keywordflow">return</span> range_type( *<span class="keyword">this</span> );
+<a name="l00841"></a>00841     }
+<a name="l00842"></a>00842 
+<a name="l00843"></a>00843     const_range_type range()<span class="keyword"> const </span>{
+<a name="l00844"></a>00844         <span class="keywordflow">return</span> const_range_type( *<span class="keyword">this</span> );
+<a name="l00845"></a>00845     }
+<a name="l00846"></a>00846 
+<a name="l00847"></a>00847     <span class="comment">// Modifiers</span>
+<a name="l00848"></a>00848     std::pair<iterator, bool> insert(<span class="keyword">const</span> value_type& value) {
+<a name="l00849"></a>00849         <span class="keywordflow">return</span> internal_insert(value);
+<a name="l00850"></a>00850     }
+<a name="l00851"></a>00851 
+<a name="l00852"></a>00852     iterator insert(const_iterator, <span class="keyword">const</span> value_type& value) {
+<a name="l00853"></a>00853         <span class="comment">// Ignore hint</span>
+<a name="l00854"></a>00854         <span class="keywordflow">return</span> insert(value).first;
+<a name="l00855"></a>00855     }
+<a name="l00856"></a>00856 
+<a name="l00857"></a>00857     <span class="keyword">template</span><<span class="keyword">class</span> Iterator>
+<a name="l00858"></a>00858     <span class="keywordtype">void</span> insert(Iterator first, Iterator last) {
+<a name="l00859"></a>00859         <span class="keywordflow">for</span> (Iterator it = first; it != last; ++it)
+<a name="l00860"></a>00860             insert(*it);
+<a name="l00861"></a>00861     }
+<a name="l00862"></a>00862 
+<a name="l00863"></a>00863     iterator unsafe_erase(const_iterator where) {
+<a name="l00864"></a>00864         <span class="keywordflow">return</span> internal_erase(where);
+<a name="l00865"></a>00865     }
+<a name="l00866"></a>00866 
+<a name="l00867"></a>00867     iterator unsafe_erase(const_iterator first, const_iterator last) {
+<a name="l00868"></a>00868         <span class="keywordflow">while</span> (first != last)
+<a name="l00869"></a>00869             unsafe_erase(first++);
+<a name="l00870"></a>00870         <span class="keywordflow">return</span> my_solist.get_iterator(first);
+<a name="l00871"></a>00871     }
+<a name="l00872"></a>00872 
+<a name="l00873"></a>00873     size_type unsafe_erase(<span class="keyword">const</span> key_type& key) {
+<a name="l00874"></a>00874         pairii_t where = equal_range(key);
+<a name="l00875"></a>00875         size_type item_count = internal_distance(where.first, where.second);
+<a name="l00876"></a>00876         unsafe_erase(where.first, where.second);
+<a name="l00877"></a>00877         <span class="keywordflow">return</span> item_count;
+<a name="l00878"></a>00878     }
+<a name="l00879"></a>00879 
+<a name="l00880"></a>00880     <span class="keywordtype">void</span> swap(concurrent_unordered_base& right) {
+<a name="l00881"></a>00881         <span class="keywordflow">if</span> (<span class="keyword">this</span> != &right) {
+<a name="l00882"></a>00882             std::swap(my_hash_compare, right.my_hash_compare); <span class="comment">// TODO: check what ADL meant here</span>
+<a name="l00883"></a>00883             my_solist.swap(right.my_solist);
+<a name="l00884"></a>00884             internal_swap_buckets(right);
+<a name="l00885"></a>00885             std::swap(my_number_of_buckets, right.my_number_of_buckets);
+<a name="l00886"></a>00886             std::swap(my_maximum_bucket_size, right.my_maximum_bucket_size);
+<a name="l00887"></a>00887         }
+<a name="l00888"></a>00888     }
+<a name="l00889"></a>00889 
+<a name="l00890"></a>00890     <span class="comment">// Observers</span>
+<a name="l00891"></a>00891     <span class="keywordtype">void</span> clear() {
+<a name="l00892"></a>00892         <span class="comment">// Clear list</span>
+<a name="l00893"></a>00893         my_solist.clear();
+<a name="l00894"></a>00894 
+<a name="l00895"></a>00895         <span class="comment">// Clear buckets</span>
+<a name="l00896"></a>00896         internal_clear();
+<a name="l00897"></a>00897 
+<a name="l00898"></a>00898         <span class="comment">// Initialize bucket 0</span>
+<a name="l00899"></a>00899         __TBB_ASSERT(my_buckets[0] == NULL, NULL);
+<a name="l00900"></a>00900         raw_iterator dummy_node = my_solist.raw_begin();
+<a name="l00901"></a>00901         set_bucket(0, dummy_node);
+<a name="l00902"></a>00902     }
+<a name="l00903"></a>00903 
+<a name="l00904"></a>00904     <span class="comment">// Lookup</span>
+<a name="l00905"></a>00905     iterator find(<span class="keyword">const</span> key_type& key) {
+<a name="l00906"></a>00906         <span class="keywordflow">return</span> internal_find(key);
+<a name="l00907"></a>00907     }
+<a name="l00908"></a>00908 
+<a name="l00909"></a>00909     const_iterator find(<span class="keyword">const</span> key_type& key)<span class="keyword"> const </span>{
+<a name="l00910"></a>00910         <span class="keywordflow">return</span> const_cast<self_type*>(<span class="keyword">this</span>)->internal_find(key);
+<a name="l00911"></a>00911     }
+<a name="l00912"></a>00912 
+<a name="l00913"></a>00913     size_type count(<span class="keyword">const</span> key_type& key)<span class="keyword"> const </span>{
+<a name="l00914"></a>00914         <span class="keywordflow">if</span>(allow_multimapping) {
+<a name="l00915"></a>00915             paircc_t answer = equal_range(key);
+<a name="l00916"></a>00916             size_type item_count = internal_distance(answer.first, answer.second);
+<a name="l00917"></a>00917             <span class="keywordflow">return</span> item_count;
+<a name="l00918"></a>00918         } <span class="keywordflow">else</span> {
+<a name="l00919"></a>00919             <span class="keywordflow">return</span> const_cast<self_type*>(<span class="keyword">this</span>)->internal_find(key) == end()?0:1;
+<a name="l00920"></a>00920         }
+<a name="l00921"></a>00921     }
+<a name="l00922"></a>00922 
+<a name="l00923"></a>00923     std::pair<iterator, iterator> equal_range(<span class="keyword">const</span> key_type& key) {
+<a name="l00924"></a>00924         <span class="keywordflow">return</span> internal_equal_range(key);
+<a name="l00925"></a>00925     }
+<a name="l00926"></a>00926 
+<a name="l00927"></a>00927     std::pair<const_iterator, const_iterator> equal_range(<span class="keyword">const</span> key_type& key)<span class="keyword"> const </span>{
+<a name="l00928"></a>00928         <span class="keywordflow">return</span> const_cast<self_type*>(<span class="keyword">this</span>)->internal_equal_range(key);
+<a name="l00929"></a>00929     }
+<a name="l00930"></a>00930 
+<a name="l00931"></a>00931     <span class="comment">// Bucket interface - for debugging </span>
+<a name="l00932"></a>00932     size_type unsafe_bucket_count()<span class="keyword"> const </span>{
+<a name="l00933"></a>00933         <span class="keywordflow">return</span> my_number_of_buckets;
+<a name="l00934"></a>00934     }
+<a name="l00935"></a>00935 
+<a name="l00936"></a>00936     size_type unsafe_max_bucket_count()<span class="keyword"> const </span>{
+<a name="l00937"></a>00937         <span class="keywordflow">return</span> segment_size(pointers_per_table-1);
+<a name="l00938"></a>00938     }
+<a name="l00939"></a>00939 
+<a name="l00940"></a>00940     size_type unsafe_bucket_size(size_type bucket) {
+<a name="l00941"></a>00941         size_type item_count = 0;
+<a name="l00942"></a>00942         <span class="keywordflow">if</span> (is_initialized(bucket)) {
+<a name="l00943"></a>00943             raw_iterator it = get_bucket(bucket);
+<a name="l00944"></a>00944             ++it;
+<a name="l00945"></a>00945             <span class="keywordflow">for</span> (; it != my_solist.raw_end() && !it.get_node_ptr()->is_dummy(); ++it)
+<a name="l00946"></a>00946                 ++item_count;
+<a name="l00947"></a>00947         }
+<a name="l00948"></a>00948         <span class="keywordflow">return</span> item_count;
+<a name="l00949"></a>00949     }
+<a name="l00950"></a>00950 
+<a name="l00951"></a>00951     size_type unsafe_bucket(<span class="keyword">const</span> key_type& key)<span class="keyword"> const </span>{
+<a name="l00952"></a>00952         sokey_t order_key = (sokey_t) my_hash_compare(key);
+<a name="l00953"></a>00953         size_type bucket = order_key % my_number_of_buckets;
+<a name="l00954"></a>00954         <span class="keywordflow">return</span> bucket;
+<a name="l00955"></a>00955     }
+<a name="l00956"></a>00956 
+<a name="l00957"></a>00957     <span class="comment">// If the bucket is initialized, return a first non-dummy element in it</span>
+<a name="l00958"></a>00958     local_iterator unsafe_begin(size_type bucket) {
+<a name="l00959"></a>00959         <span class="keywordflow">if</span> (!is_initialized(bucket))
+<a name="l00960"></a>00960             <span class="keywordflow">return</span> end();
+<a name="l00961"></a>00961 
+<a name="l00962"></a>00962         raw_iterator it = get_bucket(bucket);
+<a name="l00963"></a>00963         <span class="keywordflow">return</span> my_solist.first_real_iterator(it);
+<a name="l00964"></a>00964     }
+<a name="l00965"></a>00965 
+<a name="l00966"></a>00966     <span class="comment">// If the bucket is initialized, return a first non-dummy element in it</span>
+<a name="l00967"></a>00967     const_local_iterator unsafe_begin(size_type bucket)<span class="keyword"> const</span>
+<a name="l00968"></a>00968 <span class="keyword">    </span>{
+<a name="l00969"></a>00969         <span class="keywordflow">if</span> (!is_initialized(bucket))
+<a name="l00970"></a>00970             <span class="keywordflow">return</span> end();
+<a name="l00971"></a>00971 
+<a name="l00972"></a>00972         raw_const_iterator it = get_bucket(bucket);
+<a name="l00973"></a>00973         <span class="keywordflow">return</span> my_solist.first_real_iterator(it);
+<a name="l00974"></a>00974     }
+<a name="l00975"></a>00975 
+<a name="l00976"></a>00976     <span class="comment">// @REVIEW: Takes O(n)</span>
+<a name="l00977"></a>00977     <span class="comment">// Returns the iterator after the last non-dummy element in the bucket</span>
+<a name="l00978"></a>00978     local_iterator unsafe_end(size_type bucket)
+<a name="l00979"></a>00979     {
+<a name="l00980"></a>00980         <span class="keywordflow">if</span> (!is_initialized(bucket))
+<a name="l00981"></a>00981             <span class="keywordflow">return</span> end();
+<a name="l00982"></a>00982 
+<a name="l00983"></a>00983         raw_iterator it = get_bucket(bucket);
+<a name="l00984"></a>00984     
+<a name="l00985"></a>00985         <span class="comment">// Find the end of the bucket, denoted by the dummy element</span>
+<a name="l00986"></a>00986         <span class="keywordflow">do</span> ++it;
+<a name="l00987"></a>00987         <span class="keywordflow">while</span>(it != my_solist.raw_end() && !it.get_node_ptr()->is_dummy());
+<a name="l00988"></a>00988 
+<a name="l00989"></a>00989         <span class="comment">// Return the first real element past the end of the bucket</span>
+<a name="l00990"></a>00990         <span class="keywordflow">return</span> my_solist.first_real_iterator(it);
+<a name="l00991"></a>00991     }
+<a name="l00992"></a>00992 
+<a name="l00993"></a>00993     <span class="comment">// @REVIEW: Takes O(n)</span>
+<a name="l00994"></a>00994     <span class="comment">// Returns the iterator after the last non-dummy element in the bucket</span>
+<a name="l00995"></a>00995     const_local_iterator unsafe_end(size_type bucket)<span class="keyword"> const</span>
+<a name="l00996"></a>00996 <span class="keyword">    </span>{
+<a name="l00997"></a>00997         <span class="keywordflow">if</span> (!is_initialized(bucket))
+<a name="l00998"></a>00998             <span class="keywordflow">return</span> end();
+<a name="l00999"></a>00999 
+<a name="l01000"></a>01000         raw_const_iterator it = get_bucket(bucket);
+<a name="l01001"></a>01001     
+<a name="l01002"></a>01002         <span class="comment">// Find the end of the bucket, denoted by the dummy element</span>
+<a name="l01003"></a>01003         <span class="keywordflow">do</span> ++it;
+<a name="l01004"></a>01004         <span class="keywordflow">while</span>(it != my_solist.raw_end() && !it.get_node_ptr()->is_dummy());
+<a name="l01005"></a>01005 
+<a name="l01006"></a>01006         <span class="comment">// Return the first real element past the end of the bucket</span>
+<a name="l01007"></a>01007         <span class="keywordflow">return</span> my_solist.first_real_iterator(it);
+<a name="l01008"></a>01008     }
+<a name="l01009"></a>01009 
+<a name="l01010"></a>01010     const_local_iterator unsafe_cbegin(size_type bucket)<span class="keyword"> const </span>{
+<a name="l01011"></a>01011         <span class="keywordflow">return</span> ((<span class="keyword">const</span> self_type *) <span class="keyword">this</span>)->begin();
+<a name="l01012"></a>01012     }
+<a name="l01013"></a>01013 
+<a name="l01014"></a>01014     const_local_iterator unsafe_cend(size_type bucket)<span class="keyword"> const </span>{
+<a name="l01015"></a>01015         <span class="keywordflow">return</span> ((<span class="keyword">const</span> self_type *) <span class="keyword">this</span>)->end();
+<a name="l01016"></a>01016     }
+<a name="l01017"></a>01017 
+<a name="l01018"></a>01018     <span class="comment">// Hash policy</span>
+<a name="l01019"></a>01019     <span class="keywordtype">float</span> load_factor()<span class="keyword"> const </span>{
+<a name="l01020"></a>01020         <span class="keywordflow">return</span> (<span class="keywordtype">float</span>) size() / (float) unsafe_bucket_count();
+<a name="l01021"></a>01021     }
+<a name="l01022"></a>01022 
+<a name="l01023"></a>01023     <span class="keywordtype">float</span> max_load_factor()<span class="keyword"> const </span>{
+<a name="l01024"></a>01024         <span class="keywordflow">return</span> my_maximum_bucket_size;
+<a name="l01025"></a>01025     }
+<a name="l01026"></a>01026 
+<a name="l01027"></a>01027     <span class="keywordtype">void</span> max_load_factor(<span class="keywordtype">float</span> newmax) {
+<a name="l01028"></a>01028         <span class="keywordflow">if</span> (newmax != newmax || newmax < 0)
+<a name="l01029"></a>01029             tbb::internal::throw_exception(tbb::internal::eid_invalid_load_factor);
+<a name="l01030"></a>01030         my_maximum_bucket_size = newmax;
+<a name="l01031"></a>01031     }
+<a name="l01032"></a>01032 
+<a name="l01033"></a>01033     <span class="comment">// This function is a noop, because the underlying split-ordered list</span>
+<a name="l01034"></a>01034     <span class="comment">// is already sorted, so an increase in the bucket number will be</span>
+<a name="l01035"></a>01035     <span class="comment">// reflected next time this bucket is touched.</span>
+<a name="l01036"></a>01036     <span class="keywordtype">void</span> rehash(size_type buckets) {
+<a name="l01037"></a>01037         size_type current_buckets = my_number_of_buckets;
+<a name="l01038"></a>01038         <span class="keywordflow">if</span> (current_buckets >= buckets)
+<a name="l01039"></a>01039             <span class="keywordflow">return</span>;
+<a name="l01040"></a>01040         my_number_of_buckets = 1<<__TBB_Log2((uintptr_t)buckets*2-1); <span class="comment">// round up to power of 2</span>
+<a name="l01041"></a>01041     }
+<a name="l01042"></a>01042 
+<a name="l01043"></a>01043 <span class="keyword">private</span>:
+<a name="l01044"></a>01044 
+<a name="l01045"></a>01045     <span class="comment">// Initialize the hash and keep the first bucket open</span>
+<a name="l01046"></a>01046     <span class="keywordtype">void</span> internal_init() {
+<a name="l01047"></a>01047         <span class="comment">// Allocate an array of segment pointers</span>
+<a name="l01048"></a>01048         memset(my_buckets, 0, pointers_per_table * <span class="keyword">sizeof</span>(<span class="keywordtype">void</span> *));
+<a name="l01049"></a>01049 
+<a name="l01050"></a>01050         <span class="comment">// Initialize bucket 0</span>
+<a name="l01051"></a>01051         raw_iterator dummy_node = my_solist.raw_begin();
+<a name="l01052"></a>01052         set_bucket(0, dummy_node);
+<a name="l01053"></a>01053     }
+<a name="l01054"></a>01054 
+<a name="l01055"></a>01055     <span class="keywordtype">void</span> internal_clear() {
+<a name="l01056"></a>01056         <span class="keywordflow">for</span> (size_type index = 0; index < pointers_per_table; ++index) {
+<a name="l01057"></a>01057             <span class="keywordflow">if</span> (my_buckets[index] != NULL) {
+<a name="l01058"></a>01058                 size_type sz = segment_size(index);
+<a name="l01059"></a>01059                 <span class="keywordflow">for</span> (size_type index2 = 0; index2 < sz; ++index2)
+<a name="l01060"></a>01060                     my_allocator.destroy(&my_buckets[index][index2]);
+<a name="l01061"></a>01061                 my_allocator.deallocate(my_buckets[index], sz);
+<a name="l01062"></a>01062                 my_buckets[index] = 0;
+<a name="l01063"></a>01063             }
+<a name="l01064"></a>01064         }
+<a name="l01065"></a>01065     }
+<a name="l01066"></a>01066 
+<a name="l01067"></a>01067     <span class="keywordtype">void</span> internal_copy(<span class="keyword">const</span> self_type& right) {
+<a name="l01068"></a>01068         clear();
+<a name="l01069"></a>01069 
+<a name="l01070"></a>01070         my_maximum_bucket_size = right.my_maximum_bucket_size;
+<a name="l01071"></a>01071         my_number_of_buckets = right.my_number_of_buckets;
+<a name="l01072"></a>01072 
+<a name="l01073"></a>01073         __TBB_TRY {
+<a name="l01074"></a>01074             insert(right.begin(), right.end());
+<a name="l01075"></a>01075             my_hash_compare = right.my_hash_compare;
+<a name="l01076"></a>01076         } __TBB_CATCH(...) {
+<a name="l01077"></a>01077             my_solist.clear();
+<a name="l01078"></a>01078             __TBB_RETHROW();
+<a name="l01079"></a>01079         }
+<a name="l01080"></a>01080     }
+<a name="l01081"></a>01081 
+<a name="l01082"></a>01082     <span class="keywordtype">void</span> internal_swap_buckets(concurrent_unordered_base& right)
+<a name="l01083"></a>01083     {
+<a name="l01084"></a>01084         <span class="comment">// Swap all node segments</span>
+<a name="l01085"></a>01085         <span class="keywordflow">for</span> (size_type index = 0; index < pointers_per_table; ++index)
+<a name="l01086"></a>01086         {
+<a name="l01087"></a>01087             raw_iterator * iterator_pointer = my_buckets[index];
+<a name="l01088"></a>01088             my_buckets[index] = right.my_buckets[index];
+<a name="l01089"></a>01089             right.my_buckets[index] = iterator_pointer;
+<a name="l01090"></a>01090         }
+<a name="l01091"></a>01091     }
+<a name="l01092"></a>01092 
+<a name="l01093"></a>01093     <span class="comment">// Hash APIs</span>
+<a name="l01094"></a>01094     size_type internal_distance(const_iterator first, const_iterator last)<span class="keyword"> const</span>
+<a name="l01095"></a>01095 <span class="keyword">    </span>{
+<a name="l01096"></a>01096         size_type num = 0;
+<a name="l01097"></a>01097 
+<a name="l01098"></a>01098         <span class="keywordflow">for</span> (const_iterator it = first; it != last; ++it)
+<a name="l01099"></a>01099             ++num;
+<a name="l01100"></a>01100 
+<a name="l01101"></a>01101         <span class="keywordflow">return</span> num;
+<a name="l01102"></a>01102     }
+<a name="l01103"></a>01103 
+<a name="l01104"></a>01104     <span class="comment">// Insert an element in the hash given its value</span>
+<a name="l01105"></a>01105     std::pair<iterator, bool> internal_insert(<span class="keyword">const</span> value_type& value)
+<a name="l01106"></a>01106     {
+<a name="l01107"></a>01107         sokey_t order_key = (sokey_t) my_hash_compare(get_key(value));
+<a name="l01108"></a>01108         size_type bucket = order_key % my_number_of_buckets;
+<a name="l01109"></a>01109 
+<a name="l01110"></a>01110         <span class="comment">// If bucket is empty, initialize it first</span>
+<a name="l01111"></a>01111         <span class="keywordflow">if</span> (!is_initialized(bucket))
+<a name="l01112"></a>01112             init_bucket(bucket);
+<a name="l01113"></a>01113 
+<a name="l01114"></a>01114         size_type new_count;
+<a name="l01115"></a>01115         order_key = split_order_key_regular(order_key);
+<a name="l01116"></a>01116         raw_iterator it = get_bucket(bucket);
+<a name="l01117"></a>01117         raw_iterator last = my_solist.raw_end();
+<a name="l01118"></a>01118         raw_iterator where = it;
+<a name="l01119"></a>01119 
+<a name="l01120"></a>01120         __TBB_ASSERT(where != last, <span class="stringliteral">"Invalid head node"</span>);
+<a name="l01121"></a>01121 
+<a name="l01122"></a>01122         <span class="comment">// First node is a dummy node</span>
+<a name="l01123"></a>01123         ++where;
+<a name="l01124"></a>01124 
+<a name="l01125"></a>01125         <span class="keywordflow">for</span> (;;)
+<a name="l01126"></a>01126         {
+<a name="l01127"></a>01127             <span class="keywordflow">if</span> (where == last || solist_t::get_order_key(where) > order_key)
+<a name="l01128"></a>01128             {
+<a name="l01129"></a>01129                 <span class="comment">// Try to insert it in the right place</span>
+<a name="l01130"></a>01130                 std::pair<iterator, bool> result = my_solist.try_insert(it, where, value, order_key, &new_count);
+<a name="l01131"></a>01131                 
+<a name="l01132"></a>01132                 <span class="keywordflow">if</span> (result.second)
+<a name="l01133"></a>01133                 {
+<a name="l01134"></a>01134                     <span class="comment">// Insertion succeeded, adjust the table size, if needed</span>
+<a name="l01135"></a>01135                     adjust_table_size(new_count, my_number_of_buckets);
+<a name="l01136"></a>01136                     <span class="keywordflow">return</span> result;
+<a name="l01137"></a>01137                 }
+<a name="l01138"></a>01138                 <span class="keywordflow">else</span>
+<a name="l01139"></a>01139                 {
+<a name="l01140"></a>01140                     <span class="comment">// Insertion failed: either the same node was inserted by another thread, or</span>
+<a name="l01141"></a>01141                     <span class="comment">// another element was inserted at exactly the same place as this node.</span>
+<a name="l01142"></a>01142                     <span class="comment">// Proceed with the search from the previous location where order key was</span>
+<a name="l01143"></a>01143                     <span class="comment">// known to be larger (note: this is legal only because there is no safe</span>
+<a name="l01144"></a>01144                     <span class="comment">// concurrent erase operation supported).</span>
+<a name="l01145"></a>01145                     where = it;
+<a name="l01146"></a>01146                     ++where;
+<a name="l01147"></a>01147                     <span class="keywordflow">continue</span>;
+<a name="l01148"></a>01148                 }
+<a name="l01149"></a>01149             }
+<a name="l01150"></a>01150             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!allow_multimapping && solist_t::get_order_key(where) == order_key && my_hash_compare(get_key(*where), get_key(value)) == 0)
+<a name="l01151"></a>01151             {
+<a name="l01152"></a>01152                 <span class="comment">// Element already in the list, return it</span>
+<a name="l01153"></a>01153                 <span class="keywordflow">return</span> std::pair<iterator, bool>(my_solist.get_iterator(where), <span class="keyword">false</span>);
+<a name="l01154"></a>01154             }
+<a name="l01155"></a>01155 
+<a name="l01156"></a>01156             <span class="comment">// Move the iterator forward</span>
+<a name="l01157"></a>01157             it = where;
+<a name="l01158"></a>01158             ++where;
+<a name="l01159"></a>01159         }
+<a name="l01160"></a>01160     }
+<a name="l01161"></a>01161 
+<a name="l01162"></a>01162     <span class="comment">// Find the element in the split-ordered list</span>
+<a name="l01163"></a>01163     iterator internal_find(<span class="keyword">const</span> key_type& key)
+<a name="l01164"></a>01164     {
+<a name="l01165"></a>01165         sokey_t order_key = (sokey_t) my_hash_compare(key);
+<a name="l01166"></a>01166         size_type bucket = order_key % my_number_of_buckets;
+<a name="l01167"></a>01167 
+<a name="l01168"></a>01168         <span class="comment">// If bucket is empty, initialize it first</span>
+<a name="l01169"></a>01169         <span class="keywordflow">if</span> (!is_initialized(bucket))
+<a name="l01170"></a>01170             init_bucket(bucket);
+<a name="l01171"></a>01171 
+<a name="l01172"></a>01172         order_key = split_order_key_regular(order_key);
+<a name="l01173"></a>01173         raw_iterator last = my_solist.raw_end();
+<a name="l01174"></a>01174 
+<a name="l01175"></a>01175         <span class="keywordflow">for</span> (raw_iterator it = get_bucket(bucket); it != last; ++it)
+<a name="l01176"></a>01176         {
+<a name="l01177"></a>01177             <span class="keywordflow">if</span> (solist_t::get_order_key(it) > order_key)
+<a name="l01178"></a>01178             {
+<a name="l01179"></a>01179                 <span class="comment">// If the order key is smaller than the current order key, the element</span>
+<a name="l01180"></a>01180                 <span class="comment">// is not in the hash.</span>
+<a name="l01181"></a>01181                 <span class="keywordflow">return</span> end();
+<a name="l01182"></a>01182             }
+<a name="l01183"></a>01183             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (solist_t::get_order_key(it) == order_key)
+<a name="l01184"></a>01184             {
+<a name="l01185"></a>01185                 <span class="comment">// The fact that order keys match does not mean that the element is found.</span>
+<a name="l01186"></a>01186                 <span class="comment">// Key function comparison has to be performed to check whether this is the</span>
+<a name="l01187"></a>01187                 <span class="comment">// right element. If not, keep searching while order key is the same.</span>
+<a name="l01188"></a>01188                 <span class="keywordflow">if</span> (!my_hash_compare(get_key(*it), key))
+<a name="l01189"></a>01189                     <span class="keywordflow">return</span> my_solist.get_iterator(it);
+<a name="l01190"></a>01190             }
+<a name="l01191"></a>01191         }
+<a name="l01192"></a>01192 
+<a name="l01193"></a>01193         <span class="keywordflow">return</span> end();
+<a name="l01194"></a>01194     }
+<a name="l01195"></a>01195 
+<a name="l01196"></a>01196     <span class="comment">// Erase an element from the list. This is not a concurrency safe function.</span>
+<a name="l01197"></a>01197     iterator internal_erase(const_iterator it)
+<a name="l01198"></a>01198     {
+<a name="l01199"></a>01199         key_type key = get_key(*it);
+<a name="l01200"></a>01200         sokey_t order_key = (sokey_t) my_hash_compare(key);
+<a name="l01201"></a>01201         size_type bucket = order_key % my_number_of_buckets;
+<a name="l01202"></a>01202 
+<a name="l01203"></a>01203         <span class="comment">// If bucket is empty, initialize it first</span>
+<a name="l01204"></a>01204         <span class="keywordflow">if</span> (!is_initialized(bucket))
+<a name="l01205"></a>01205             init_bucket(bucket);
+<a name="l01206"></a>01206 
+<a name="l01207"></a>01207         order_key = split_order_key_regular(order_key);
+<a name="l01208"></a>01208 
+<a name="l01209"></a>01209         raw_iterator previous = get_bucket(bucket);
+<a name="l01210"></a>01210         raw_iterator last = my_solist.raw_end();
+<a name="l01211"></a>01211         raw_iterator where = previous;
+<a name="l01212"></a>01212 
+<a name="l01213"></a>01213         __TBB_ASSERT(where != last, <span class="stringliteral">"Invalid head node"</span>);
+<a name="l01214"></a>01214 
+<a name="l01215"></a>01215         <span class="comment">// First node is a dummy node</span>
+<a name="l01216"></a>01216         ++where;
+<a name="l01217"></a>01217 
+<a name="l01218"></a>01218         <span class="keywordflow">for</span> (;;) {
+<a name="l01219"></a>01219             <span class="keywordflow">if</span> (where == last)
+<a name="l01220"></a>01220                 <span class="keywordflow">return</span> end();
+<a name="l01221"></a>01221             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (my_solist.get_iterator(where) == it)
+<a name="l01222"></a>01222                 <span class="keywordflow">return</span> my_solist.erase_node(previous, it);
+<a name="l01223"></a>01223 
+<a name="l01224"></a>01224             <span class="comment">// Move the iterator forward</span>
+<a name="l01225"></a>01225             previous = where;
+<a name="l01226"></a>01226             ++where;
+<a name="l01227"></a>01227         }
+<a name="l01228"></a>01228     }
+<a name="l01229"></a>01229 
+<a name="l01230"></a>01230     <span class="comment">// Return the [begin, end) pair of iterators with the same key values.</span>
+<a name="l01231"></a>01231     <span class="comment">// This operation makes sense only if mapping is many-to-one.</span>
+<a name="l01232"></a>01232     pairii_t internal_equal_range(<span class="keyword">const</span> key_type& key)
+<a name="l01233"></a>01233     {
+<a name="l01234"></a>01234         sokey_t order_key = (sokey_t) my_hash_compare(key);
+<a name="l01235"></a>01235         size_type bucket = order_key % my_number_of_buckets;
+<a name="l01236"></a>01236 
+<a name="l01237"></a>01237         <span class="comment">// If bucket is empty, initialize it first</span>
+<a name="l01238"></a>01238         <span class="keywordflow">if</span> (!is_initialized(bucket))
+<a name="l01239"></a>01239             init_bucket(bucket);
+<a name="l01240"></a>01240 
+<a name="l01241"></a>01241         order_key = split_order_key_regular(order_key);
+<a name="l01242"></a>01242         raw_iterator end_it = my_solist.raw_end();
+<a name="l01243"></a>01243 
+<a name="l01244"></a>01244         <span class="keywordflow">for</span> (raw_iterator it = get_bucket(bucket); it != end_it; ++it)
+<a name="l01245"></a>01245         {
+<a name="l01246"></a>01246             <span class="keywordflow">if</span> (solist_t::get_order_key(it) > order_key)
+<a name="l01247"></a>01247             {
+<a name="l01248"></a>01248                 <span class="comment">// There is no element with the given key</span>
+<a name="l01249"></a>01249                 <span class="keywordflow">return</span> pairii_t(end(), end());
+<a name="l01250"></a>01250             }
+<a name="l01251"></a>01251             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (solist_t::get_order_key(it) == order_key && !my_hash_compare(get_key(*it), key))
+<a name="l01252"></a>01252             {
+<a name="l01253"></a>01253                 iterator first = my_solist.get_iterator(it);
+<a name="l01254"></a>01254                 iterator last = first;
+<a name="l01255"></a>01255                 <span class="keywordflow">do</span> ++last; <span class="keywordflow">while</span>( allow_multimapping && last != end() && !my_hash_compare(get_key(*last), key) );
+<a name="l01256"></a>01256                 <span class="keywordflow">return</span> pairii_t(first, last);
+<a name="l01257"></a>01257             }
+<a name="l01258"></a>01258         }
+<a name="l01259"></a>01259 
+<a name="l01260"></a>01260         <span class="keywordflow">return</span> pairii_t(end(), end());
+<a name="l01261"></a>01261     }
+<a name="l01262"></a>01262 
+<a name="l01263"></a>01263     <span class="comment">// Bucket APIs</span>
+<a name="l01264"></a>01264     <span class="keywordtype">void</span> init_bucket(size_type bucket)
+<a name="l01265"></a>01265     {
+<a name="l01266"></a>01266         <span class="comment">// Bucket 0 has no parent.</span>
+<a name="l01267"></a>01267         __TBB_ASSERT( bucket != 0, <span class="stringliteral">"The first bucket must always be initialized"</span>);
+<a name="l01268"></a>01268 
+<a name="l01269"></a>01269         size_type parent_bucket = get_parent(bucket);
+<a name="l01270"></a>01270 
+<a name="l01271"></a>01271         <span class="comment">// All parent_bucket buckets have to be initialized before this bucket is</span>
+<a name="l01272"></a>01272         <span class="keywordflow">if</span> (!is_initialized(parent_bucket))
+<a name="l01273"></a>01273             init_bucket(parent_bucket);
+<a name="l01274"></a>01274 
+<a name="l01275"></a>01275         raw_iterator parent = get_bucket(parent_bucket);
+<a name="l01276"></a>01276 
+<a name="l01277"></a>01277         <span class="comment">// Create a dummy first node in this bucket</span>
+<a name="l01278"></a>01278         raw_iterator dummy_node = my_solist.insert_dummy(parent, split_order_key_dummy(bucket));
+<a name="l01279"></a>01279         set_bucket(bucket, dummy_node);
+<a name="l01280"></a>01280     }
+<a name="l01281"></a>01281 
+<a name="l01282"></a>01282     <span class="keywordtype">void</span> adjust_table_size(size_type total_elements, size_type current_size)
+<a name="l01283"></a>01283     {
+<a name="l01284"></a>01284         <span class="comment">// Grow the table by a factor of 2 if possible and needed</span>
+<a name="l01285"></a>01285         <span class="keywordflow">if</span> ( ((<span class="keywordtype">float</span>) total_elements / (<span class="keywordtype">float</span>) current_size) > my_maximum_bucket_size )
+<a name="l01286"></a>01286         {
+<a name="l01287"></a>01287             <span class="comment">// Double the size of the hash only if size has not changed inbetween loads</span>
+<a name="l01288"></a>01288             __TBB_CompareAndSwapW((uintptr_t*)&my_number_of_buckets, uintptr_t(2u*current_size), uintptr_t(current_size) );
+<a name="l01289"></a>01289             <span class="comment">//Simple "my_number_of_buckets.compare_and_swap( current_size<<1, current_size );" does not work for VC8</span>
+<a name="l01290"></a>01290             <span class="comment">//due to overzealous compiler warnings in /Wp64 mode</span>
+<a name="l01291"></a>01291         }
+<a name="l01292"></a>01292     }
+<a name="l01293"></a>01293 
+<a name="l01294"></a>01294     size_type get_parent(size_type bucket)<span class="keyword"> const</span>
+<a name="l01295"></a>01295 <span class="keyword">    </span>{
+<a name="l01296"></a>01296         <span class="comment">// Unsets bucket's most significant turned-on bit</span>
+<a name="l01297"></a>01297         size_type msb = __TBB_Log2((uintptr_t)bucket);
+<a name="l01298"></a>01298         <span class="keywordflow">return</span> bucket & ~(size_type(1) << msb);
+<a name="l01299"></a>01299     }
+<a name="l01300"></a>01300 
+<a name="l01301"></a>01301 
+<a name="l01302"></a>01302     <span class="comment">// Dynamic sized array (segments)</span>
+<a name="l01304"></a>01304 <span class="comment"></span>    <span class="keyword">static</span> size_type segment_index_of( size_type index ) {
+<a name="l01305"></a>01305         <span class="keywordflow">return</span> size_type( __TBB_Log2( uintptr_t(index|1) ) );
+<a name="l01306"></a>01306     }
+<a name="l01307"></a>01307 
+<a name="l01309"></a>01309     <span class="keyword">static</span> size_type segment_base( size_type k ) {
+<a name="l01310"></a>01310         <span class="keywordflow">return</span> (size_type(1)<<k & ~size_type(1));
+<a name="l01311"></a>01311     }
+<a name="l01312"></a>01312 
+<a name="l01314"></a>01314     <span class="keyword">static</span> size_type segment_size( size_type k ) {
+<a name="l01315"></a>01315         <span class="keywordflow">return</span> k? size_type(1)<<k : 2;
+<a name="l01316"></a>01316     }
+<a name="l01317"></a>01317 
+<a name="l01318"></a>01318     raw_iterator get_bucket(size_type bucket)<span class="keyword"> const </span>{
+<a name="l01319"></a>01319         size_type segment = segment_index_of(bucket);
+<a name="l01320"></a>01320         bucket -= segment_base(segment);
+<a name="l01321"></a>01321         __TBB_ASSERT( my_buckets[segment], <span class="stringliteral">"bucket must be in an allocated segment"</span> );
+<a name="l01322"></a>01322         <span class="keywordflow">return</span> my_buckets[segment][bucket];
+<a name="l01323"></a>01323     }
+<a name="l01324"></a>01324 
+<a name="l01325"></a>01325     <span class="keywordtype">void</span> set_bucket(size_type bucket, raw_iterator dummy_head) {
+<a name="l01326"></a>01326         size_type segment = segment_index_of(bucket);
+<a name="l01327"></a>01327         bucket -= segment_base(segment);
+<a name="l01328"></a>01328 
+<a name="l01329"></a>01329         <span class="keywordflow">if</span> (my_buckets[segment] == NULL) {
+<a name="l01330"></a>01330             size_type sz = segment_size(segment);
+<a name="l01331"></a>01331             raw_iterator * new_segment = my_allocator.allocate(sz);
+<a name="l01332"></a>01332             std::memset(new_segment, 0, sz*<span class="keyword">sizeof</span>(raw_iterator));
+<a name="l01333"></a>01333 
+<a name="l01334"></a>01334             <span class="keywordflow">if</span> (__TBB_CompareAndSwapW((<span class="keywordtype">void</span> *) &my_buckets[segment], (uintptr_t)new_segment, 0) != 0)
+<a name="l01335"></a>01335                 my_allocator.deallocate(new_segment, sz);
+<a name="l01336"></a>01336         }
+<a name="l01337"></a>01337 
+<a name="l01338"></a>01338         my_buckets[segment][bucket] = dummy_head;
+<a name="l01339"></a>01339     }
+<a name="l01340"></a>01340 
+<a name="l01341"></a>01341     <span class="keywordtype">bool</span> is_initialized(size_type bucket)<span class="keyword"> const </span>{
+<a name="l01342"></a>01342         size_type segment = segment_index_of(bucket);
+<a name="l01343"></a>01343         bucket -= segment_base(segment);
+<a name="l01344"></a>01344 
+<a name="l01345"></a>01345         <span class="keywordflow">if</span> (my_buckets[segment] == NULL)
+<a name="l01346"></a>01346             <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01347"></a>01347 
+<a name="l01348"></a>01348         raw_iterator it = my_buckets[segment][bucket];
+<a name="l01349"></a>01349         <span class="keywordflow">return</span> (it.get_node_ptr() != NULL);
+<a name="l01350"></a>01350     }
+<a name="l01351"></a>01351 
+<a name="l01352"></a>01352     <span class="comment">// Utilities for keys</span>
+<a name="l01353"></a>01353 
+<a name="l01354"></a>01354     <span class="comment">// A regular order key has its original hash value reversed and the last bit set</span>
+<a name="l01355"></a>01355     sokey_t split_order_key_regular(sokey_t order_key)<span class="keyword"> const </span>{
+<a name="l01356"></a>01356         <span class="keywordflow">return</span> __TBB_ReverseBits(order_key) | 0x1;
+<a name="l01357"></a>01357     }
+<a name="l01358"></a>01358 
+<a name="l01359"></a>01359     <span class="comment">// A dummy order key has its original hash value reversed and the last bit unset</span>
+<a name="l01360"></a>01360     sokey_t split_order_key_dummy(sokey_t order_key)<span class="keyword"> const </span>{
+<a name="l01361"></a>01361         <span class="keywordflow">return</span> __TBB_ReverseBits(order_key) & ~(0x1);
+<a name="l01362"></a>01362     }
+<a name="l01363"></a>01363 
+<a name="l01364"></a>01364     <span class="comment">// Shared variables</span>
+<a name="l01365"></a>01365     atomic<size_type>                                             my_number_of_buckets;       <span class="comment">// Current table size</span>
+<a name="l01366"></a>01366     solist_t                                                      my_solist;                  <span class="comment">// List where all the elements are kept</span>
+<a name="l01367"></a>01367     <span class="keyword">typename</span> allocator_type::template rebind<raw_iterator>::other my_allocator;               <span class="comment">// Allocator object for segments</span>
+<a name="l01368"></a>01368     <span class="keywordtype">float</span>                                                         my_maximum_bucket_size;     <span class="comment">// Maximum size of the bucket</span>
+<a name="l01369"></a>01369     atomic<raw_iterator*>                                         my_buckets[pointers_per_table]; <span class="comment">// The segment table</span>
+<a name="l01370"></a>01370 };
+<a name="l01371"></a>01371 <span class="preprocessor">#if _MSC_VER</span>
+<a name="l01372"></a>01372 <span class="preprocessor"></span><span class="preprocessor">#pragma warning(pop) // warning 4127 -- while (true) has a constant expression in it</span>
+<a name="l01373"></a>01373 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l01374"></a>01374 <span class="preprocessor"></span>
+<a name="l01376"></a>01376 <span class="keyword">static</span> <span class="keyword">const</span> size_t hash_multiplier = <span class="keyword">sizeof</span>(size_t)==4? 2654435769U : 11400714819323198485ULL;
+<a name="l01377"></a>01377 } <span class="comment">// namespace internal</span>
+<a name="l01380"></a>01380 <span class="comment"></span><span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l01381"></a>01381 <span class="keyword">inline</span> size_t tbb_hasher( <span class="keyword">const</span> T& t ) {
+<a name="l01382"></a>01382     <span class="keywordflow">return</span> static_cast<size_t>( t ) * internal::hash_multiplier;
+<a name="l01383"></a>01383 }
+<a name="l01384"></a>01384 <span class="keyword">template</span><<span class="keyword">typename</span> P>
+<a name="l01385"></a>01385 <span class="keyword">inline</span> size_t tbb_hasher( P* ptr ) {
+<a name="l01386"></a>01386     size_t <span class="keyword">const</span> h = reinterpret_cast<size_t>( ptr );
+<a name="l01387"></a>01387     <span class="keywordflow">return</span> (h >> 3) ^ h;
+<a name="l01388"></a>01388 }
+<a name="l01389"></a>01389 <span class="keyword">template</span><<span class="keyword">typename</span> E, <span class="keyword">typename</span> S, <span class="keyword">typename</span> A>
+<a name="l01390"></a>01390 <span class="keyword">inline</span> size_t tbb_hasher( <span class="keyword">const</span> std::basic_string<E,S,A>& s ) {
+<a name="l01391"></a>01391     size_t h = 0;
+<a name="l01392"></a>01392     <span class="keywordflow">for</span>( <span class="keyword">const</span> E* c = s.c_str(); *c; ++c )
+<a name="l01393"></a>01393         h = static_cast<size_t>(*c) ^ (h * internal::hash_multiplier);
+<a name="l01394"></a>01394     <span class="keywordflow">return</span> h;
+<a name="l01395"></a>01395 }
+<a name="l01396"></a>01396 <span class="keyword">template</span><<span class="keyword">typename</span> F, <span class="keyword">typename</span> S>
+<a name="l01397"></a>01397 <span class="keyword">inline</span> size_t tbb_hasher( <span class="keyword">const</span> std::pair<F,S>& p ) {
+<a name="l01398"></a>01398     <span class="keywordflow">return</span> tbb_hasher(p.first) ^ tbb_hasher(p.second);
+<a name="l01399"></a>01399 }
+<a name="l01400"></a>01400 } <span class="comment">// namespace interface5</span>
+<a name="l01401"></a>01401 <span class="keyword">using</span> interface5::tbb_hasher;
+<a name="l01402"></a>01402 } <span class="comment">// namespace tbb</span>
+<a name="l01403"></a>01403 <span class="preprocessor">#endif// __TBB_concurrent_unordered_internal_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/a00401.html b/doc/html/a00401.html
deleted file mode 100644
index e3a1547..0000000
--- a/doc/html/a00401.html
+++ /dev/null
@@ -1,225 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>parallel_sort.h Source File</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li><a href="annotated.html"><span>Classes</span></a></li>
-    <li id="current"><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="files.html"><span>File List</span></a></li>
-    <li><a href="globals.html"><span>File Members</span></a></li>
-  </ul></div>
-<h1>parallel_sort.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_parallel_sort_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_parallel_sort_H</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include "parallel_for.h"</span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include "blocked_range.h"</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include <algorithm></span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include <iterator></span>
-<a name="l00028"></a>00028 <span class="preprocessor">#include <functional></span>
-<a name="l00029"></a>00029 
-<a name="l00030"></a>00030 <span class="keyword">namespace </span>tbb {
-<a name="l00031"></a>00031 
-<a name="l00033"></a>00033 <span class="keyword">namespace </span>internal {
-<a name="l00034"></a>00034 
-<a name="l00036"></a>00036 
-<a name="l00039"></a>00039 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator, <span class="keyword">typename</span> Compare>
-<a name="l00040"></a>00040 <span class="keyword">class </span>quick_sort_range: <span class="keyword">private</span> no_assign {
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042     <span class="keyword">inline</span> size_t median_of_three(<span class="keyword">const</span> RandomAccessIterator &array, size_t l, size_t m, size_t r)<span class="keyword"> const </span>{
-<a name="l00043"></a>00043         <span class="keywordflow">return</span> comp(array[l], array[m]) ? ( comp(array[m], array[r]) ? m : ( comp( array[l], array[r]) ? r : l ) ) 
-<a name="l00044"></a>00044                                         : ( comp(array[r], array[m]) ? m : ( comp( array[r], array[l] ) ? r : l ) );
-<a name="l00045"></a>00045     }
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047     <span class="keyword">inline</span> size_t pseudo_median_of_nine( <span class="keyword">const</span> RandomAccessIterator &array, <span class="keyword">const</span> quick_sort_range &range )<span class="keyword"> const </span>{
-<a name="l00048"></a>00048         size_t offset = range.size/8u;
-<a name="l00049"></a>00049         <span class="keywordflow">return</span> median_of_three(array, 
-<a name="l00050"></a>00050                                median_of_three(array, 0, offset, offset*2),
-<a name="l00051"></a>00051                                median_of_three(array, offset*3, offset*4, offset*5),
-<a name="l00052"></a>00052                                median_of_three(array, offset*6, offset*7, range.size - 1) );
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054     }
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 <span class="keyword">public</span>:
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058     <span class="keyword">static</span> <span class="keyword">const</span> size_t grainsize = 500;
-<a name="l00059"></a>00059     <span class="keyword">const</span> Compare &comp;
-<a name="l00060"></a>00060     RandomAccessIterator begin;
-<a name="l00061"></a>00061     size_t size;
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063     quick_sort_range( RandomAccessIterator begin_, size_t size_, <span class="keyword">const</span> Compare &comp_ ) :
-<a name="l00064"></a>00064         comp(comp_), begin(begin_), size(size_) {}
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066     <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> size==0;}
-<a name="l00067"></a>00067     <span class="keywordtype">bool</span> is_divisible()<span class="keyword"> const </span>{<span class="keywordflow">return</span> size>=grainsize;}
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069     quick_sort_range( quick_sort_range& range, split ) : comp(range.comp) {
-<a name="l00070"></a>00070         RandomAccessIterator array = range.begin;
-<a name="l00071"></a>00071         RandomAccessIterator key0 = range.begin; 
-<a name="l00072"></a>00072         size_t m = pseudo_median_of_nine(array, range);
-<a name="l00073"></a>00073         <span class="keywordflow">if</span> (m) std::swap ( array[0], array[m] );
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075         size_t i=0;
-<a name="l00076"></a>00076         size_t j=range.size;
-<a name="l00077"></a>00077         <span class="comment">// Partition interval [i+1,j-1] with key *key0.</span>
-<a name="l00078"></a>00078         <span class="keywordflow">for</span>(;;) {
-<a name="l00079"></a>00079             __TBB_ASSERT( i<j, NULL );
-<a name="l00080"></a>00080             <span class="comment">// Loop must terminate since array[l]==*key0.</span>
-<a name="l00081"></a>00081             <span class="keywordflow">do</span> {
-<a name="l00082"></a>00082                 --j;
-<a name="l00083"></a>00083                 __TBB_ASSERT( i<=j, <span class="stringliteral">"bad ordering relation?"</span> );
-<a name="l00084"></a>00084             } <span class="keywordflow">while</span>( comp( *key0, array[j] ));
-<a name="l00085"></a>00085             <span class="keywordflow">do</span> {
-<a name="l00086"></a>00086                 __TBB_ASSERT( i<=j, NULL );
-<a name="l00087"></a>00087                 <span class="keywordflow">if</span>( i==j ) <span class="keywordflow">goto</span> partition;
-<a name="l00088"></a>00088                 ++i;
-<a name="l00089"></a>00089             } <span class="keywordflow">while</span>( comp( array[i],*key0 ));
-<a name="l00090"></a>00090             <span class="keywordflow">if</span>( i==j ) <span class="keywordflow">goto</span> partition;
-<a name="l00091"></a>00091             std::swap( array[i], array[j] );
-<a name="l00092"></a>00092         }
-<a name="l00093"></a>00093 partition:
-<a name="l00094"></a>00094         <span class="comment">// Put the partition key were it belongs</span>
-<a name="l00095"></a>00095         std::swap( array[j], *key0 );
-<a name="l00096"></a>00096         <span class="comment">// array[l..j) is less or equal to key.</span>
-<a name="l00097"></a>00097         <span class="comment">// array(j..r) is greater or equal to key.</span>
-<a name="l00098"></a>00098         <span class="comment">// array[j] is equal to key</span>
-<a name="l00099"></a>00099         i=j+1;
-<a name="l00100"></a>00100         begin = array+i;
-<a name="l00101"></a>00101         size = range.size-i;
-<a name="l00102"></a>00102         range.size = j;
-<a name="l00103"></a>00103     }
-<a name="l00104"></a>00104 };
-<a name="l00105"></a>00105 
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator, <span class="keyword">typename</span> Compare>
-<a name="l00109"></a>00109 <span class="keyword">class </span>quick_sort_pretest_body : internal::no_assign {
-<a name="l00110"></a>00110     <span class="keyword">const</span> Compare &comp;
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112 <span class="keyword">public</span>:
-<a name="l00113"></a>00113     quick_sort_pretest_body(<span class="keyword">const</span> Compare &_comp) : comp(_comp) {}
-<a name="l00114"></a>00114 
-<a name="l00115"></a>00115     <span class="keywordtype">void</span> operator()( <span class="keyword">const</span> blocked_range<RandomAccessIterator>& range )<span class="keyword"> const </span>{
-<a name="l00116"></a>00116         task &my_task = <a class="code" href="a00199.html#bd43e8d6249738efafd12d6a4c72c5e3">task::self</a>();
-<a name="l00117"></a>00117         RandomAccessIterator my_end = range.end();
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119         <span class="keywordtype">int</span> i = 0;
-<a name="l00120"></a>00120         <span class="keywordflow">for</span> (RandomAccessIterator k = range.begin(); k != my_end; ++k, ++i) {
-<a name="l00121"></a>00121             <span class="keywordflow">if</span> ( i%64 == 0 && my_task.is_cancelled() ) <span class="keywordflow">break</span>;
-<a name="l00122"></a>00122           
-<a name="l00123"></a>00123             <span class="comment">// The k-1 is never out-of-range because the first chunk starts at begin+serial_cutoff+1</span>
-<a name="l00124"></a>00124             <span class="keywordflow">if</span> ( comp( *(k), *(k-1) ) ) {
-<a name="l00125"></a>00125                 my_task.cancel_group_execution();
-<a name="l00126"></a>00126                 <span class="keywordflow">break</span>;
-<a name="l00127"></a>00127             }
-<a name="l00128"></a>00128         }
-<a name="l00129"></a>00129     }
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131 };
-<a name="l00132"></a>00132 
-<a name="l00134"></a>00134 
-<a name="l00135"></a>00135 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator, <span class="keyword">typename</span> Compare>
-<a name="l00136"></a>00136 <span class="keyword">struct </span>quick_sort_body {
-<a name="l00137"></a>00137     <span class="keywordtype">void</span> operator()( <span class="keyword">const</span> quick_sort_range<RandomAccessIterator,Compare>& range )<span class="keyword"> const </span>{
-<a name="l00138"></a>00138         <span class="comment">//SerialQuickSort( range.begin, range.size, range.comp );</span>
-<a name="l00139"></a>00139         std::sort( range.begin, range.begin + range.size, range.comp );
-<a name="l00140"></a>00140     }
-<a name="l00141"></a>00141 };
-<a name="l00142"></a>00142 
-<a name="l00144"></a>00144 
-<a name="l00145"></a>00145 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator, <span class="keyword">typename</span> Compare>
-<a name="l00146"></a>00146 <span class="keywordtype">void</span> parallel_quick_sort( RandomAccessIterator begin, RandomAccessIterator end, <span class="keyword">const</span> Compare& comp ) {
-<a name="l00147"></a>00147     task_group_context my_context;
-<a name="l00148"></a>00148     <span class="keyword">const</span> <span class="keywordtype">int</span> serial_cutoff = 9;
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150     __TBB_ASSERT( begin + serial_cutoff < end, <span class="stringliteral">"min_parallel_size is smaller than serial cutoff?"</span> );
-<a name="l00151"></a>00151     RandomAccessIterator k;
-<a name="l00152"></a>00152     <span class="keywordflow">for</span> ( k = begin ; k != begin + serial_cutoff; ++k ) {
-<a name="l00153"></a>00153         <span class="keywordflow">if</span> ( comp( *(k+1), *k ) ) {
-<a name="l00154"></a>00154             <span class="keywordflow">goto</span> do_parallel_quick_sort;
-<a name="l00155"></a>00155         }
-<a name="l00156"></a>00156     }
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158     <a class="code" href="a00275.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( blocked_range<RandomAccessIterator>(k+1, end),
-<a name="l00159"></a>00159                   quick_sort_pretest_body<RandomAccessIterator,Compare>(comp),
-<a name="l00160"></a>00160                   auto_partitioner(),
-<a name="l00161"></a>00161                   my_context);
-<a name="l00162"></a>00162 
-<a name="l00163"></a>00163     <span class="keywordflow">if</span> (my_context.is_group_execution_cancelled())
-<a name="l00164"></a>00164 do_parallel_quick_sort:
-<a name="l00165"></a>00165         <a class="code" href="a00275.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( quick_sort_range<RandomAccessIterator,Compare>(begin, end-begin, comp ), 
-<a name="l00166"></a>00166                       quick_sort_body<RandomAccessIterator,Compare>(),
-<a name="l00167"></a>00167                       auto_partitioner() );
-<a name="l00168"></a>00168 }
-<a name="l00169"></a>00169 
-<a name="l00170"></a>00170 } <span class="comment">// namespace internal</span>
-<a name="l00172"></a>00172 <span class="comment"></span>
-<a name="l00183"></a>00183 
-<a name="l00185"></a>00185 
-<a name="l00188"></a>00188 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator, <span class="keyword">typename</span> Compare>
-<a name="l00189"></a><a class="code" href="a00275.html#g49edcf9447cd91a9527a3f8e8512b7aa">00189</a> <span class="keywordtype">void</span> <a class="code" href="a00275.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( RandomAccessIterator begin, RandomAccessIterator end, <span class="keyword">const</span> Compare& comp) { 
-<a name="l00190"></a>00190     <span class="keyword">const</span> <span class="keywordtype">int</span> min_parallel_size = 500; 
-<a name="l00191"></a>00191     <span class="keywordflow">if</span>( end > begin ) {
-<a name="l00192"></a>00192         <span class="keywordflow">if</span> (end - begin < min_parallel_size) { 
-<a name="l00193"></a>00193             std::sort(begin, end, comp);
-<a name="l00194"></a>00194         } <span class="keywordflow">else</span> {
-<a name="l00195"></a>00195             internal::parallel_quick_sort(begin, end, comp);
-<a name="l00196"></a>00196         }
-<a name="l00197"></a>00197     }
-<a name="l00198"></a>00198 }
-<a name="l00199"></a>00199 
-<a name="l00201"></a>00201 
-<a name="l00202"></a>00202 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator>
-<a name="l00203"></a><a class="code" href="a00275.html#g16c3eb77d0e530834c51ce3857f01012">00203</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00275.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( RandomAccessIterator begin, RandomAccessIterator end ) { 
-<a name="l00204"></a>00204     <a class="code" href="a00275.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( begin, end, std::less< <span class="keyword">typename</span> std::iterator_traits<RandomAccessIterator>::value_type >() );
-<a name="l00205"></a>00205 }
-<a name="l00206"></a>00206 
-<a name="l00208"></a>00208 
-<a name="l00209"></a>00209 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00210"></a><a class="code" href="a00275.html#gc7576f82fdedc8a701a6c17ad9415926">00210</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00275.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( T * begin, T * end ) {
-<a name="l00211"></a>00211     <a class="code" href="a00275.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( begin, end, std::less< T >() );
-<a name="l00212"></a>00212 }   
-<a name="l00214"></a>00214 
-<a name="l00215"></a>00215 
-<a name="l00216"></a>00216 } <span class="comment">// namespace tbb</span>
-<a name="l00217"></a>00217 
-<a name="l00218"></a>00218 <span class="preprocessor">#endif</span>
-<a name="l00219"></a>00219 <span class="preprocessor"></span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00405.html b/doc/html/a00405.html
deleted file mode 100644
index 50cf87f..0000000
--- a/doc/html/a00405.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-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_parallel_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="a00179.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="a00179.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="a00179.html">00129</a> <span class="keyword">class </span><a class="code" href="a00179.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="a00179.html#36e26ba3880c7bcf804a97ba0cbe133f">00132</a>     <a class="code" href="a00179.html#36e26ba3880c7bcf804a97ba0cbe133f">parallel_while</a>() : my_body(NULL), my_barrier(NULL) {}
-<a name="l00133"></a>00133 
-<a name="l00135"></a><a class="code" href="a00179.html#6fcfc973cc56b79c6d0fbb8a31be7e84">00135</a>     <a class="code" href="a00179.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="a00199.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="a00179.html#fa297e53d3af2a101e712bc200233e9c">00143</a>     <span class="keyword">typedef</span> <span class="keyword">typename</span> Body::argument_type <a class="code" href="a00179.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="a00179.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="a00179.html#e131c560057a58229992b61eb8dba4c6">add</a>( <span class="keyword">const</span> <a class="code" href="a00179.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="a00162.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="a00179.html#b32a0a6e5e09ebb7fad3e6652c19afe5">00163</a> <span class="keywordtype">void</span> <a class="code" href="a00179.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="a00162.html">empty_task</a>& barrier = *<span class="keyword">new</span>( <a class="code" href="a00199.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>() ) <a class="code" href="a00162.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="a00199.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="a00199.html#1ff794f7053cd9148d5f280fbf07377f">allocate_child</a>() ) while_task<Stream,Body>( stream, body, barrier );
-<a name="l00170"></a>00170     my_barrier-><a class="code" href="a00199.html#3ce28ca9baa771cfc37ecd72e69c4f3c">spawn_and_wait_for_all</a>(w);
-<a name="l00171"></a>00171     my_barrier-><a class="code" href="a00199.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="a00179.html#e131c560057a58229992b61eb8dba4c6">00177</a> <span class="keywordtype">void</span> <a class="code" href="a00179.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="a00199.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-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00407.html b/doc/html/a00407.html
new file mode 100644
index 0000000..2da113e
--- /dev/null
+++ b/doc/html/a00407.html
@@ -0,0 +1,107 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>_tbb_windef.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_windef.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-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_windef_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#error Do not #include this file directly.  Use "#include tbb/tbb_stddef.h" instead.</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_windef_H */</span>
+<a name="l00024"></a>00024 
+<a name="l00025"></a>00025 <span class="comment">// Check that the target Windows version has all API calls requried for TBB.</span>
+<a name="l00026"></a>00026 <span class="comment">// Do not increase the version in condition beyond 0x0500 without prior discussion!</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#if defined(_WIN32_WINNT) && _WIN32_WINNT<0x0400</span>
+<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#error TBB is unable to run on old Windows versions; _WIN32_WINNT must be 0x0400 or greater.</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00030"></a>00030 <span class="preprocessor"></span>
+<a name="l00031"></a>00031 <span class="preprocessor">#if !defined(_MT)</span>
+<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#error TBB requires linkage with multithreaded C/C++ runtime library. \</span>
+<a name="l00033"></a>00033 <span class="preprocessor">       Choose multithreaded DLL runtime in project settings, or use /MD[d] compiler switch.</span>
+<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00035"></a>00035 <span class="preprocessor"></span>
+<a name="l00036"></a>00036 <span class="comment">// Workaround for the problem with MVSC headers failing to define namespace std</span>
+<a name="l00037"></a>00037 <span class="keyword">namespace </span>std {
+<a name="l00038"></a>00038   using ::size_t; using ::ptrdiff_t;
+<a name="l00039"></a>00039 }
+<a name="l00040"></a>00040 
+<a name="l00041"></a>00041 <span class="preprocessor">#define __TBB_STRING_AUX(x) #x</span>
+<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_STRING(x) __TBB_STRING_AUX(x)</span>
+<a name="l00043"></a>00043 <span class="preprocessor"></span>
+<a name="l00044"></a>00044 <span class="comment">// Default setting of TBB_USE_DEBUG</span>
+<a name="l00045"></a>00045 <span class="preprocessor">#ifdef TBB_USE_DEBUG</span>
+<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">#    if TBB_USE_DEBUG </span>
+<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">#        if !defined(_DEBUG)</span>
+<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="preprocessor">#            pragma message(__FILE__ "(" __TBB_STRING(__LINE__) ") : Warning: Recommend using /MDd if compiling with TBB_USE_DEBUG!=0")</span>
+<a name="l00049"></a>00049 <span class="preprocessor"></span><span class="preprocessor">#        endif</span>
+<a name="l00050"></a>00050 <span class="preprocessor"></span><span class="preprocessor">#    else</span>
+<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">#        if defined(_DEBUG)</span>
+<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="preprocessor">#            pragma message(__FILE__ "(" __TBB_STRING(__LINE__) ") : Warning: Recommend using /MD if compiling with TBB_USE_DEBUG==0")</span>
+<a name="l00053"></a>00053 <span class="preprocessor"></span><span class="preprocessor">#        endif</span>
+<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor">#    endif</span>
+<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="preprocessor">#    ifdef _DEBUG</span>
+<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">#        define TBB_USE_DEBUG 1</span>
+<a name="l00058"></a>00058 <span class="preprocessor"></span><span class="preprocessor">#    endif</span>
+<a name="l00059"></a>00059 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
+<a name="l00060"></a>00060 <span class="preprocessor"></span>
+<a name="l00061"></a>00061 <span class="preprocessor">#if __TBB_BUILD && !defined(__TBB_NO_IMPLICIT_LINKAGE)</span>
+<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_NO_IMPLICIT_LINKAGE 1</span>
+<a name="l00063"></a>00063 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00064"></a>00064 <span class="preprocessor"></span>
+<a name="l00065"></a>00065 <span class="preprocessor">#if _MSC_VER</span>
+<a name="l00066"></a>00066 <span class="preprocessor"></span><span class="preprocessor">    #if !__TBB_NO_IMPLICIT_LINKAGE</span>
+<a name="l00067"></a>00067 <span class="preprocessor"></span><span class="preprocessor">        #ifdef __TBB_LIB_NAME</span>
+<a name="l00068"></a>00068 <span class="preprocessor"></span><span class="preprocessor">                #pragma comment(lib, __TBB_STRING(__TBB_LIB_NAME))</span>
+<a name="l00069"></a>00069 <span class="preprocessor"></span><span class="preprocessor">        #else</span>
+<a name="l00070"></a>00070 <span class="preprocessor"></span><span class="preprocessor">                        #ifdef _DEBUG</span>
+<a name="l00071"></a>00071 <span class="preprocessor"></span><span class="preprocessor">                                #pragma comment(lib, "tbb_debug.lib")</span>
+<a name="l00072"></a>00072 <span class="preprocessor"></span><span class="preprocessor">                        #else</span>
+<a name="l00073"></a>00073 <span class="preprocessor"></span><span class="preprocessor">                                #pragma comment(lib, "tbb.lib")</span>
+<a name="l00074"></a>00074 <span class="preprocessor"></span><span class="preprocessor">                        #endif</span>
+<a name="l00075"></a>00075 <span class="preprocessor"></span><span class="preprocessor">        #endif</span>
+<a name="l00076"></a>00076 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
+<a name="l00077"></a>00077 <span class="preprocessor"></span><span class="preprocessor">#endif</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/a00409.html b/doc/html/a00409.html
index f1f8284..40b2529 100644
--- a/doc/html/a00409.html
+++ b/doc/html/a00409.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>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>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-2010 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-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>
@@ -39,191 +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="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_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 "task.h"</span>
-<a name="l00025"></a>00025 
-<a name="l00026"></a>00026 <span class="keyword">namespace </span>tbb {
-<a name="l00027"></a>00027 <span class="keyword">class </span>affinity_partitioner;
+<a name="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="l00030"></a>00030 <span class="keyword">namespace </span>internal {
-<a name="l00031"></a>00031 size_t __TBB_EXPORTED_FUNC get_initial_auto_partitioner_divisor();
-<a name="l00032"></a>00032 
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="keyword">class </span>affinity_partitioner_base_v3: no_copy {
-<a name="l00036"></a>00036     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00140.html">tbb::affinity_partitioner</a>;
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039     affinity_id* my_array;
-<a name="l00041"></a>00041     size_t my_size;
-<a name="l00043"></a>00043     affinity_partitioner_base_v3() : my_array(NULL), my_size(0) {}
-<a name="l00045"></a>00045     ~affinity_partitioner_base_v3() {resize(0);}
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD resize( <span class="keywordtype">unsigned</span> factor );
-<a name="l00049"></a>00049     <span class="keyword">friend</span> <span class="keyword">class </span>affinity_partition_type;
-<a name="l00050"></a>00050 };
-<a name="l00051"></a>00051 
-<a name="l00053"></a>00053 <span class="keyword">class </span>partition_type_base {
-<a name="l00054"></a>00054 <span class="keyword">public</span>:
-<a name="l00055"></a>00055     <span class="keywordtype">void</span> set_affinity( task & ) {}
-<a name="l00056"></a>00056     <span class="keywordtype">void</span> note_affinity( <a class="code" href="a00199.html#d61bb32389d3857bf7511d69beaafb76">task::affinity_id</a> ) {}
-<a name="l00057"></a>00057     task* continue_after_execute_range() {<span class="keywordflow">return</span> NULL;}
-<a name="l00058"></a>00058     <span class="keywordtype">bool</span> decide_whether_to_delay() {<span class="keywordflow">return</span> <span class="keyword">false</span>;}
-<a name="l00059"></a>00059     <span class="keywordtype">void</span> spawn_or_delay( <span class="keywordtype">bool</span>, task& b ) {
-<a name="l00060"></a>00060         task::spawn(b);
-<a name="l00061"></a>00061     }
-<a name="l00062"></a>00062 };
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064 <span class="keyword">class </span>affinity_partition_type;
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">class </span>start_for;
-<a name="l00067"></a>00067 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">class </span>start_reduce;
-<a name="l00068"></a>00068 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body> <span class="keyword">class </span>start_reduce_with_affinity;
-<a name="l00069"></a>00069 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">class </span>start_scan;
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 } <span class="comment">// namespace internal</span>
-<a name="l00073"></a>00073 <span class="comment"></span>
-<a name="l00075"></a>00075 
-<a name="l00077"></a><a class="code" href="a00193.html">00077</a> <span class="keyword">class </span><a class="code" href="a00193.html">simple_partitioner</a> {
-<a name="l00078"></a>00078 <span class="keyword">public</span>:
-<a name="l00079"></a>00079     <a class="code" href="a00193.html">simple_partitioner</a>() {}
-<a name="l00080"></a>00080 <span class="keyword">private</span>:
-<a name="l00081"></a>00081     <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">friend</span> <span class="keyword">class </span>internal::start_for;
-<a name="l00082"></a>00082     <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">friend</span> <span class="keyword">class </span>internal::start_reduce;
-<a name="l00083"></a>00083     <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">friend</span> <span class="keyword">class </span>internal::start_scan;
-<a name="l00084"></a>00084 
-<a name="l00085"></a>00085     <span class="keyword">class </span>partition_type: <span class="keyword">public</span> internal::partition_type_base {
-<a name="l00086"></a>00086     <span class="keyword">public</span>:
-<a name="l00087"></a>00087         <span class="keywordtype">bool</span> should_execute_range(<span class="keyword">const</span> <a class="code" href="a00199.html">task</a>& ) {<span class="keywordflow">return</span> <span class="keyword">false</span>;}
-<a name="l00088"></a>00088         partition_type( <span class="keyword">const</span> <a class="code" href="a00193.html">simple_partitioner</a>& ) {}
-<a name="l00089"></a>00089         partition_type( <span class="keyword">const</span> partition_type&, <a class="code" href="a00198.html">split</a> ) {}
-<a name="l00090"></a>00090     };
-<a name="l00091"></a>00091 };
-<a name="l00092"></a>00092 
-<a name="l00094"></a>00094 
-<a name="l00097"></a><a class="code" href="a00145.html">00097</a> <span class="keyword">class </span><a class="code" href="a00145.html">auto_partitioner</a> {
-<a name="l00098"></a>00098 <span class="keyword">public</span>:
-<a name="l00099"></a>00099     <a class="code" href="a00145.html">auto_partitioner</a>() {}
-<a name="l00100"></a>00100 
-<a name="l00101"></a>00101 <span class="keyword">private</span>:
-<a name="l00102"></a>00102     <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">friend</span> <span class="keyword">class </span>internal::start_for;
-<a name="l00103"></a>00103     <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">friend</span> <span class="keyword">class </span>internal::start_reduce;
-<a name="l00104"></a>00104     <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">friend</span> <span class="keyword">class </span>internal::start_scan;
-<a name="l00105"></a>00105 
-<a name="l00106"></a>00106     <span class="keyword">class </span>partition_type: <span class="keyword">public</span> internal::partition_type_base {
-<a name="l00107"></a>00107         size_t num_chunks;
-<a name="l00108"></a>00108         <span class="keyword">static</span> <span class="keyword">const</span> size_t VICTIM_CHUNKS = 4;
-<a name="l00109"></a>00109 <span class="keyword">public</span>:
-<a name="l00110"></a>00110         <span class="keywordtype">bool</span> should_execute_range(<span class="keyword">const</span> <a class="code" href="a00199.html">task</a> &t) {
-<a name="l00111"></a>00111             <span class="keywordflow">if</span>( num_chunks<VICTIM_CHUNKS && t.<a class="code" href="a00199.html#f9169402702f56bf519448aaf34450aa">is_stolen_task</a>() )
-<a name="l00112"></a>00112                 num_chunks = VICTIM_CHUNKS;
-<a name="l00113"></a>00113             <span class="keywordflow">return</span> num_chunks==1;
-<a name="l00114"></a>00114         }
-<a name="l00115"></a>00115         partition_type( <span class="keyword">const</span> <a class="code" href="a00145.html">auto_partitioner</a>& ) : num_chunks(internal::get_initial_auto_partitioner_divisor()) {}
-<a name="l00116"></a>00116         partition_type( partition_type& pt, <a class="code" href="a00198.html">split</a> ) {
-<a name="l00117"></a>00117             num_chunks = pt.num_chunks /= 2u;
-<a name="l00118"></a>00118         }
-<a name="l00119"></a>00119     };
-<a name="l00120"></a>00120 };
-<a name="l00121"></a>00121 
-<a name="l00123"></a><a class="code" href="a00140.html">00123</a> <span class="keyword">class </span><a class="code" href="a00140.html">affinity_partitioner</a>: internal::affinity_partitioner_base_v3 {
-<a name="l00124"></a>00124 <span class="keyword">public</span>:
-<a name="l00125"></a>00125     <a class="code" href="a00140.html">affinity_partitioner</a>() {}
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127 <span class="keyword">private</span>:
-<a name="l00128"></a>00128     <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">friend</span> <span class="keyword">class </span>internal::start_for;
-<a name="l00129"></a>00129     <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">friend</span> <span class="keyword">class </span>internal::start_reduce;
-<a name="l00130"></a>00130     <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body> <span class="keyword">friend</span> <span class="keyword">class </span>internal::start_reduce_with_affinity;
-<a name="l00131"></a>00131     <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">friend</span> <span class="keyword">class </span>internal::start_scan;
-<a name="l00132"></a>00132 
-<a name="l00133"></a>00133     <span class="keyword">typedef</span> internal::affinity_partition_type partition_type;
-<a name="l00134"></a>00134     <span class="keyword">friend</span> <span class="keyword">class </span>internal::affinity_partition_type;
-<a name="l00135"></a>00135 };
-<a name="l00136"></a>00136 
-<a name="l00138"></a>00138 <span class="keyword">namespace </span>internal {
-<a name="l00139"></a>00139 
-<a name="l00140"></a>00140 <span class="keyword">class </span>affinity_partition_type: <span class="keyword">public</span> no_copy {
-<a name="l00142"></a>00142     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> factor = 16;
-<a name="l00143"></a>00143     <span class="keyword">static</span> <span class="keyword">const</span> size_t VICTIM_CHUNKS = 4;
-<a name="l00144"></a>00144 
-<a name="l00145"></a>00145     internal::affinity_id* my_array;
-<a name="l00146"></a>00146     <a class="code" href="a00202.html">task_list</a> delay_list;
-<a name="l00147"></a>00147     <span class="keywordtype">unsigned</span> map_begin, map_end;
-<a name="l00148"></a>00148     size_t num_chunks;
-<a name="l00149"></a>00149 <span class="keyword">public</span>:
-<a name="l00150"></a>00150     affinity_partition_type( <a class="code" href="a00140.html">affinity_partitioner</a>& ap ) {
-<a name="l00151"></a>00151         __TBB_ASSERT( (factor&(factor-1))==0, <span class="stringliteral">"factor must be power of two"</span> ); 
-<a name="l00152"></a>00152         ap.resize(factor);
-<a name="l00153"></a>00153         my_array = ap.my_array;
-<a name="l00154"></a>00154         map_begin = 0;
-<a name="l00155"></a>00155         map_end = unsigned(ap.my_size);
-<a name="l00156"></a>00156         num_chunks = internal::get_initial_auto_partitioner_divisor();
-<a name="l00157"></a>00157     }
-<a name="l00158"></a>00158     affinity_partition_type(affinity_partition_type& p, split) : my_array(p.my_array) {
-<a name="l00159"></a>00159         __TBB_ASSERT( p.map_end-p.map_begin<factor || (p.map_end-p.map_begin)%factor==0, NULL );
-<a name="l00160"></a>00160         num_chunks = p.num_chunks /= 2;
-<a name="l00161"></a>00161         <span class="keywordtype">unsigned</span> e = p.map_end;
-<a name="l00162"></a>00162         <span class="keywordtype">unsigned</span> d = (e - p.map_begin)/2;
-<a name="l00163"></a>00163         <span class="keywordflow">if</span>( d>factor ) 
-<a name="l00164"></a>00164             d &= 0u-factor;
-<a name="l00165"></a>00165         map_end = e;
-<a name="l00166"></a>00166         map_begin = p.map_end = e-d;
-<a name="l00167"></a>00167     }
-<a name="l00168"></a>00168 
-<a name="l00169"></a>00169     <span class="keywordtype">bool</span> should_execute_range(<span class="keyword">const</span> task &t) {
-<a name="l00170"></a>00170         <span class="keywordflow">if</span>( num_chunks < VICTIM_CHUNKS && t.is_stolen_task() )
-<a name="l00171"></a>00171             num_chunks = VICTIM_CHUNKS;
-<a name="l00172"></a>00172         <span class="keywordflow">return</span> num_chunks == 1;
-<a name="l00173"></a>00173     }
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175     <span class="keywordtype">void</span> set_affinity( task &t ) {
-<a name="l00176"></a>00176         <span class="keywordflow">if</span>( map_begin<map_end )
-<a name="l00177"></a>00177             t.set_affinity( my_array[map_begin] );
-<a name="l00178"></a>00178     }
-<a name="l00179"></a>00179     <span class="keywordtype">void</span> note_affinity( <a class="code" href="a00199.html#d61bb32389d3857bf7511d69beaafb76">task::affinity_id</a> <span class="keywordtype">id</span> ) {
-<a name="l00180"></a>00180         <span class="keywordflow">if</span>( map_begin<map_end ) 
-<a name="l00181"></a>00181             my_array[map_begin] = id;
-<a name="l00182"></a>00182     }
-<a name="l00183"></a>00183     task* continue_after_execute_range() {
-<a name="l00184"></a>00184         task* first = NULL;
-<a name="l00185"></a>00185         <span class="keywordflow">if</span>( !delay_list.empty() ) {
-<a name="l00186"></a>00186             first = &delay_list.pop_front();
-<a name="l00187"></a>00187             <span class="keywordflow">while</span>( !delay_list.empty() ) {
-<a name="l00188"></a>00188                 task::spawn(*first);
-<a name="l00189"></a>00189                 first = &delay_list.pop_front();
-<a name="l00190"></a>00190             }
-<a name="l00191"></a>00191         }
-<a name="l00192"></a>00192         <span class="keywordflow">return</span> first;
-<a name="l00193"></a>00193     }
-<a name="l00194"></a>00194     <span class="keywordtype">bool</span> decide_whether_to_delay() {
-<a name="l00195"></a>00195         <span class="comment">// The possible underflow caused by "-1u" is deliberate</span>
-<a name="l00196"></a>00196         <span class="keywordflow">return</span> (map_begin&(factor-1))==0 && map_end-map_begin-1u<factor;
-<a name="l00197"></a>00197     }
-<a name="l00198"></a>00198     <span class="keywordtype">void</span> spawn_or_delay( <span class="keywordtype">bool</span> delay, task& b ) {
-<a name="l00199"></a>00199         <span class="keywordflow">if</span>( delay )  
-<a name="l00200"></a>00200             delay_list.push_back(b);
-<a name="l00201"></a>00201         <span class="keywordflow">else</span> 
-<a name="l00202"></a>00202             task::spawn(b);
-<a name="l00203"></a>00203     }
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205     ~affinity_partition_type() {
-<a name="l00206"></a>00206         <span class="comment">// The delay_list can be non-empty if an exception is thrown.</span>
-<a name="l00207"></a>00207         <span class="keywordflow">while</span>( !delay_list.empty() ) {
-<a name="l00208"></a>00208             task& t = delay_list.pop_front();
-<a name="l00209"></a>00209             t.destroy(t);
-<a name="l00210"></a>00210         } 
-<a name="l00211"></a>00211     }
-<a name="l00212"></a>00212 };
-<a name="l00213"></a>00213 
-<a name="l00214"></a>00214 } <span class="comment">// namespace internal</span>
-<a name="l00216"></a>00216 <span class="comment"></span>
-<a name="l00217"></a>00217 
-<a name="l00218"></a>00218 } <span class="comment">// namespace tbb</span>
-<a name="l00219"></a>00219 
-<a name="l00220"></a>00220 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_partitioner_H */</span>
+<a name="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="a00215.html">00033</a> <span class="keyword">class </span><a class="code" href="a00215.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="a00215.html#0d702fc6b9e9d061ace3501b3c861cdf">00039</a>     T* <a class="code" href="a00215.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="a00215.html#024be075c23c0394c9a2518d993bcd9e">00042</a>     T* <a class="code" href="a00215.html#024be075c23c0394c9a2518d993bcd9e">end</a>() {<span class="keywordflow">return</span> <a class="code" href="a00215.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-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00410.html b/doc/html/a00410.html
new file mode 100644
index 0000000..f35102f
--- /dev/null
+++ b/doc/html/a00410.html
@@ -0,0 +1,376 @@
+<!DOCTYPE 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="a00362.html#a8686246bb5d3664bd07563749970fef">00044</a> <span class="keyword">enum</span> <a class="code" href="a00362.html#a8686246bb5d3664bd07563749970fef">memory_semantics</a> {
+<a name="l00046"></a>00046     <a class="code" href="a00362.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">__TBB_full_fence</a>,
+<a name="l00048"></a>00048     <a class="code" href="a00362.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>,
+<a name="l00050"></a>00050     <a class="code" href="a00362.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>
+<a name="l00051"></a>00051 };
+<a name="l00052"></a>00052 
+<a name="l00054"></a>00054 <span class="keyword">namespace </span>internal {
+<a name="l00055"></a>00055 
+<a name="l00056"></a>00056 <span class="preprocessor">#if __GNUC__ || __SUNPRO_CC || __IBMCPP__</span>
+<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_DECL_ATOMIC_FIELD(t,f,a) t f  __attribute__ ((aligned(a)));</span>
+<a name="l00058"></a>00058 <span class="preprocessor"></span><span class="preprocessor">#elif defined(__INTEL_COMPILER)||_MSC_VER >= 1300</span>
+<a name="l00059"></a>00059 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_DECL_ATOMIC_FIELD(t,f,a) __declspec(align(a)) t f;</span>
+<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">#else </span>
+<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">#error Do not know syntax for forcing alignment.</span>
+<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __GNUC__ */</span>
+<a name="l00063"></a>00063 
+<a name="l00064"></a>00064 <span class="keyword">template</span><size_t S>
+<a name="l00065"></a>00065 <span class="keyword">struct </span>atomic_rep;           <span class="comment">// Primary template declared, but never defined.</span>
+<a name="l00066"></a>00066 
+<a name="l00067"></a>00067 <span class="keyword">template</span><>
+<a name="l00068"></a>00068 <span class="keyword">struct </span>atomic_rep<1> {       <span class="comment">// Specialization</span>
+<a name="l00069"></a>00069     <span class="keyword">typedef</span> int8_t word;
+<a name="l00070"></a>00070     int8_t value;
+<a name="l00071"></a>00071 };
+<a name="l00072"></a>00072 <span class="keyword">template</span><>
+<a name="l00073"></a>00073 <span class="keyword">struct </span>atomic_rep<2> {       <span class="comment">// Specialization</span>
+<a name="l00074"></a>00074     <span class="keyword">typedef</span> int16_t word;
+<a name="l00075"></a>00075     __TBB_DECL_ATOMIC_FIELD(int16_t,value,2)
+<a name="l00076"></a>00076 };
+<a name="l00077"></a>00077 <span class="keyword">template</span><>
+<a name="l00078"></a>00078 <span class="keyword">struct </span>atomic_rep<4> {       <span class="comment">// Specialization</span>
+<a name="l00079"></a>00079 <span class="preprocessor">#if _MSC_VER && __TBB_WORDSIZE==4</span>
+<a name="l00080"></a>00080 <span class="preprocessor"></span>    <span class="comment">// Work-around that avoids spurious /Wp64 warnings</span>
+<a name="l00081"></a>00081     <span class="keyword">typedef</span> intptr_t word;
+<a name="l00082"></a>00082 <span class="preprocessor">#else</span>
+<a name="l00083"></a>00083 <span class="preprocessor"></span>    <span class="keyword">typedef</span> int32_t word;
+<a name="l00084"></a>00084 <span class="preprocessor">#endif</span>
+<a name="l00085"></a>00085 <span class="preprocessor"></span>    __TBB_DECL_ATOMIC_FIELD(int32_t,value,4)
+<a name="l00086"></a>00086 };
+<a name="l00087"></a>00087 <span class="preprocessor">#if __TBB_64BIT_ATOMICS</span>
+<a name="l00088"></a>00088 <span class="preprocessor"></span><span class="keyword">template</span><>
+<a name="l00089"></a>00089 <span class="keyword">struct </span>atomic_rep<8> {       <span class="comment">// Specialization</span>
+<a name="l00090"></a>00090     <span class="keyword">typedef</span> int64_t word;
+<a name="l00091"></a>00091     __TBB_DECL_ATOMIC_FIELD(int64_t,value,8)
+<a name="l00092"></a>00092 };
+<a name="l00093"></a>00093 <span class="preprocessor">#endif</span>
+<a name="l00094"></a>00094 <span class="preprocessor"></span>
+<a name="l00095"></a>00095 <span class="keyword">template</span><size_t Size, memory_semantics M>
+<a name="l00096"></a>00096 <span class="keyword">struct </span>atomic_traits;        <span class="comment">// Primary template declared, but not defined.</span>
+<a name="l00097"></a>00097 
+<a name="l00098"></a>00098 <span class="preprocessor">#define __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(S,M)                         \</span>
+<a name="l00099"></a>00099 <span class="preprocessor">    template<> struct atomic_traits<S,M> {                               \</span>
+<a name="l00100"></a>00100 <span class="preprocessor">        typedef atomic_rep<S>::word word;                               \</span>
+<a name="l00101"></a>00101 <span class="preprocessor">        inline static word compare_and_swap( volatile void* location, word new_value, word comparand ) {\</span>
+<a name="l00102"></a>00102 <span class="preprocessor">            return __TBB_CompareAndSwap##S##M(location,new_value,comparand);    \</span>
+<a name="l00103"></a>00103 <span class="preprocessor">        }                                                                       \</span>
+<a name="l00104"></a>00104 <span class="preprocessor">        inline static word fetch_and_add( volatile void* location, word addend ) { \</span>
+<a name="l00105"></a>00105 <span class="preprocessor">            return __TBB_FetchAndAdd##S##M(location,addend);                    \</span>
+<a name="l00106"></a>00106 <span class="preprocessor">        }                                                                       \</span>
+<a name="l00107"></a>00107 <span class="preprocessor">        inline static word fetch_and_store( volatile void* location, word value ) {\</span>
+<a name="l00108"></a>00108 <span class="preprocessor">            return __TBB_FetchAndStore##S##M(location,value);                   \</span>
+<a name="l00109"></a>00109 <span class="preprocessor">        }                                                                       \</span>
+<a name="l00110"></a>00110 <span class="preprocessor">    };</span>
+<a name="l00111"></a>00111 <span class="preprocessor"></span>
+<a name="l00112"></a>00112 <span class="preprocessor">#define __TBB_DECL_ATOMIC_PRIMITIVES(S)                                  \</span>
+<a name="l00113"></a>00113 <span class="preprocessor">    template<memory_semantics M>                                         \</span>
+<a name="l00114"></a>00114 <span class="preprocessor">    struct atomic_traits<S,M> {                                          \</span>
+<a name="l00115"></a>00115 <span class="preprocessor">        typedef atomic_rep<S>::word word;                               \</span>
+<a name="l00116"></a>00116 <span class="preprocessor">        inline static word compare_and_swap( volatile void* location, word new_value, word comparand ) {\</span>
+<a name="l00117"></a>00117 <span class="preprocessor">            return __TBB_CompareAndSwap##S(location,new_value,comparand);       \</span>
+<a name="l00118"></a>00118 <span class="preprocessor">        }                                                                       \</span>
+<a name="l00119"></a>00119 <span class="preprocessor">        inline static word fetch_and_add( volatile void* location, word addend ) { \</span>
+<a name="l00120"></a>00120 <span class="preprocessor">            return __TBB_FetchAndAdd##S(location,addend);                       \</span>
+<a name="l00121"></a>00121 <span class="preprocessor">        }                                                                       \</span>
+<a name="l00122"></a>00122 <span class="preprocessor">        inline static word fetch_and_store( volatile void* location, word value ) {\</span>
+<a name="l00123"></a>00123 <span class="preprocessor">            return __TBB_FetchAndStore##S(location,value);                      \</span>
+<a name="l00124"></a>00124 <span class="preprocessor">        }                                                                       \</span>
+<a name="l00125"></a>00125 <span class="preprocessor">    };</span>
+<a name="l00126"></a>00126 <span class="preprocessor"></span>
+<a name="l00127"></a>00127 <span class="preprocessor">#if __TBB_DECL_FENCED_ATOMICS</span>
+<a name="l00128"></a>00128 <span class="preprocessor"></span>__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,<a class="code" href="a00362.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">__TBB_full_fence</a>)
+<a name="l00129"></a>00129 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,<a class="code" href="a00362.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">__TBB_full_fence</a>)
+<a name="l00130"></a>00130 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,<a class="code" href="a00362.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">__TBB_full_fence</a>)
+<a name="l00131"></a>00131 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,<a class="code" href="a00362.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">__TBB_full_fence</a>)
+<a name="l00132"></a>00132 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,<a class="code" href="a00362.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>)
+<a name="l00133"></a>00133 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,<a class="code" href="a00362.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>)
+<a name="l00134"></a>00134 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,<a class="code" href="a00362.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>)
+<a name="l00135"></a>00135 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,<a class="code" href="a00362.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>)
+<a name="l00136"></a>00136 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,<a class="code" href="a00362.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>)
+<a name="l00137"></a>00137 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,<a class="code" href="a00362.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>)
+<a name="l00138"></a>00138 <span class="preprocessor">#if __TBB_64BIT_ATOMICS</span>
+<a name="l00139"></a>00139 <span class="preprocessor"></span>__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,<a class="code" href="a00362.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>)
+<a name="l00140"></a>00140 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,release)
+<a name="l00141"></a>00141 <span class="preprocessor">#endif</span>
+<a name="l00142"></a>00142 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00143"></a>00143 <span class="preprocessor"></span>__TBB_DECL_ATOMIC_PRIMITIVES(1)
+<a name="l00144"></a>00144 __TBB_DECL_ATOMIC_PRIMITIVES(2)
+<a name="l00145"></a>00145 __TBB_DECL_ATOMIC_PRIMITIVES(4)
+<a name="l00146"></a>00146 <span class="preprocessor">#if __TBB_64BIT_ATOMICS</span>
+<a name="l00147"></a>00147 <span class="preprocessor"></span>__TBB_DECL_ATOMIC_PRIMITIVES(8)
+<a name="l00148"></a>00148 <span class="preprocessor">#endif</span>
+<a name="l00149"></a>00149 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00150"></a>00150 <span class="preprocessor"></span>
+<a name="l00152"></a>00152 
+<a name="l00154"></a>00154 <span class="preprocessor">#define __TBB_MINUS_ONE(T) (T(T(0)-T(1)))</span>
+<a name="l00155"></a>00155 <span class="preprocessor"></span>
+<a name="l00157"></a>00157 
+<a name="l00159"></a>00159 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00160"></a>00160 <span class="keyword">struct </span>atomic_impl {
+<a name="l00161"></a>00161 <span class="keyword">protected</span>:
+<a name="l00162"></a>00162     atomic_rep<sizeof(T)> rep;
+<a name="l00163"></a>00163 <span class="keyword">private</span>:
+<a name="l00165"></a>00165     <span class="keyword">union </span>converter {
+<a name="l00166"></a>00166         T value;
+<a name="l00167"></a>00167         <span class="keyword">typename</span> atomic_rep<sizeof(T)>::word bits;
+<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> T value_type;
+<a name="l00171"></a>00171 
+<a name="l00172"></a>00172     <span class="keyword">template</span><memory_semantics M>
+<a name="l00173"></a>00173     value_type fetch_and_store( value_type value ) {
+<a name="l00174"></a>00174         converter u, w;
+<a name="l00175"></a>00175         u.value = value;
+<a name="l00176"></a>00176         w.bits = internal::atomic_traits<sizeof(value_type),M>::fetch_and_store(&rep.value,u.bits);
+<a name="l00177"></a>00177         <span class="keywordflow">return</span> w.value;
+<a name="l00178"></a>00178     }
+<a name="l00179"></a>00179 
+<a name="l00180"></a>00180     value_type fetch_and_store( value_type value ) {
+<a name="l00181"></a>00181         <span class="keywordflow">return</span> fetch_and_store<__TBB_full_fence>(value);
+<a name="l00182"></a>00182     }
+<a name="l00183"></a>00183 
+<a name="l00184"></a>00184     <span class="keyword">template</span><memory_semantics M>
+<a name="l00185"></a>00185     value_type compare_and_swap( value_type value, value_type comparand ) {
+<a name="l00186"></a>00186         converter u, v, w;
+<a name="l00187"></a>00187         u.value = value;
+<a name="l00188"></a>00188         v.value = comparand;
+<a name="l00189"></a>00189         w.bits = internal::atomic_traits<sizeof(value_type),M>::compare_and_swap(&rep.value,u.bits,v.bits);
+<a name="l00190"></a>00190         <span class="keywordflow">return</span> w.value;
+<a name="l00191"></a>00191     }
+<a name="l00192"></a>00192 
+<a name="l00193"></a>00193     value_type compare_and_swap( value_type value, value_type comparand ) {
+<a name="l00194"></a>00194         <span class="keywordflow">return</span> compare_and_swap<__TBB_full_fence>(value,comparand);
+<a name="l00195"></a>00195     }
+<a name="l00196"></a>00196 
+<a name="l00197"></a>00197     operator value_type()<span class="keyword"> const volatile </span>{                <span class="comment">// volatile qualifier here for backwards compatibility </span>
+<a name="l00198"></a>00198         converter w;
+<a name="l00199"></a>00199         w.bits = __TBB_load_with_acquire( rep.value );
+<a name="l00200"></a>00200         <span class="keywordflow">return</span> w.value;
+<a name="l00201"></a>00201     }
+<a name="l00202"></a>00202 
+<a name="l00203"></a>00203 <span class="keyword">protected</span>:
+<a name="l00204"></a>00204     value_type store_with_release( value_type rhs ) {
+<a name="l00205"></a>00205         converter u;
+<a name="l00206"></a>00206         u.value = rhs;
+<a name="l00207"></a>00207         __TBB_store_with_release(rep.value,u.bits);
+<a name="l00208"></a>00208         <span class="keywordflow">return</span> rhs;
+<a name="l00209"></a>00209     }
+<a name="l00210"></a>00210 };
+<a name="l00211"></a>00211 
+<a name="l00213"></a>00213 
+<a name="l00216"></a>00216 <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="l00217"></a>00217 <span class="keyword">struct </span>atomic_impl_with_arithmetic: atomic_impl<I> {
+<a name="l00218"></a>00218 <span class="keyword">public</span>:
+<a name="l00219"></a>00219     <span class="keyword">typedef</span> I value_type;
+<a name="l00220"></a>00220 
+<a name="l00221"></a>00221     <span class="keyword">template</span><memory_semantics M>
+<a name="l00222"></a>00222     value_type fetch_and_add( D addend ) {
+<a name="l00223"></a>00223         <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="l00224"></a>00224     }
+<a name="l00225"></a>00225 
+<a name="l00226"></a>00226     value_type fetch_and_add( D addend ) {
+<a name="l00227"></a>00227         <span class="keywordflow">return</span> fetch_and_add<__TBB_full_fence>(addend);
+<a name="l00228"></a>00228     }
+<a name="l00229"></a>00229 
+<a name="l00230"></a>00230     <span class="keyword">template</span><memory_semantics M>
+<a name="l00231"></a>00231     value_type fetch_and_increment() {
+<a name="l00232"></a>00232         <span class="keywordflow">return</span> fetch_and_add<M>(1);
+<a name="l00233"></a>00233     }
+<a name="l00234"></a>00234 
+<a name="l00235"></a>00235     value_type fetch_and_increment() {
+<a name="l00236"></a>00236         <span class="keywordflow">return</span> fetch_and_add(1);
+<a name="l00237"></a>00237     }
+<a name="l00238"></a>00238 
+<a name="l00239"></a>00239     <span class="keyword">template</span><memory_semantics M>
+<a name="l00240"></a>00240     value_type fetch_and_decrement() {
+<a name="l00241"></a>00241         <span class="keywordflow">return</span> fetch_and_add<M>(__TBB_MINUS_ONE(D));
+<a name="l00242"></a>00242     }
+<a name="l00243"></a>00243 
+<a name="l00244"></a>00244     value_type fetch_and_decrement() {
+<a name="l00245"></a>00245         <span class="keywordflow">return</span> fetch_and_add(__TBB_MINUS_ONE(D));
+<a name="l00246"></a>00246     }
+<a name="l00247"></a>00247 
+<a name="l00248"></a>00248 <span class="keyword">public</span>:
+<a name="l00249"></a>00249     value_type operator+=( D addend ) {
+<a name="l00250"></a>00250         <span class="keywordflow">return</span> fetch_and_add(addend)+addend;
+<a name="l00251"></a>00251     }
+<a name="l00252"></a>00252 
+<a name="l00253"></a>00253     value_type operator-=( D addend ) {
+<a name="l00254"></a>00254         <span class="comment">// Additive inverse of addend computed using binary minus,</span>
+<a name="l00255"></a>00255         <span class="comment">// instead of unary minus, for sake of avoiding compiler warnings.</span>
+<a name="l00256"></a>00256         <span class="keywordflow">return</span> operator+=(D(0)-addend);    
+<a name="l00257"></a>00257     }
+<a name="l00258"></a>00258 
+<a name="l00259"></a>00259     value_type operator++() {
+<a name="l00260"></a>00260         <span class="keywordflow">return</span> fetch_and_add(1)+1;
+<a name="l00261"></a>00261     }
+<a name="l00262"></a>00262 
+<a name="l00263"></a>00263     value_type operator--() {
+<a name="l00264"></a>00264         <span class="keywordflow">return</span> fetch_and_add(__TBB_MINUS_ONE(D))-1;
+<a name="l00265"></a>00265     }
+<a name="l00266"></a>00266 
+<a name="l00267"></a>00267     value_type operator++(<span class="keywordtype">int</span>) {
+<a name="l00268"></a>00268         <span class="keywordflow">return</span> fetch_and_add(1);
+<a name="l00269"></a>00269     }
+<a name="l00270"></a>00270 
+<a name="l00271"></a>00271     value_type operator--(<span class="keywordtype">int</span>) {
+<a name="l00272"></a>00272         <span class="keywordflow">return</span> fetch_and_add(__TBB_MINUS_ONE(D));
+<a name="l00273"></a>00273     }
+<a name="l00274"></a>00274 };
+<a name="l00275"></a>00275 
+<a name="l00276"></a>00276 } <span class="comment">/* Internal */</span>
+<a name="l00278"></a>00278 
+<a name="l00280"></a>00280 
+<a name="l00282"></a>00282 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00283"></a><a class="code" href="a00216.html">00283</a> <span class="keyword">struct </span><a class="code" href="a00216.html">atomic</a>: internal::atomic_impl<T> {
+<a name="l00284"></a>00284     T operator=( T rhs ) {
+<a name="l00285"></a>00285         <span class="comment">// "this" required here in strict ISO C++ because store_with_release is a dependent name</span>
+<a name="l00286"></a>00286         <span class="keywordflow">return</span> this->store_with_release(rhs);
+<a name="l00287"></a>00287     }
+<a name="l00288"></a>00288     <a class="code" href="a00216.html">atomic<T></a>& operator=( <span class="keyword">const</span> <a class="code" href="a00216.html">atomic<T></a>& rhs ) {this->store_with_release(rhs); <span class="keywordflow">return</span> *<span class="keyword">this</span>;}
+<a name="l00289"></a>00289 };
+<a name="l00290"></a>00290 
+<a name="l00291"></a>00291 <span class="preprocessor">#define __TBB_DECL_ATOMIC(T) \</span>
+<a name="l00292"></a>00292 <span class="preprocessor">    template<> struct atomic<T>: internal::atomic_impl_with_arithmetic<T,T,char> {  \</span>
+<a name="l00293"></a>00293 <span class="preprocessor">        T operator=( T rhs ) {return store_with_release(rhs);}  \</span>
+<a name="l00294"></a>00294 <span class="preprocessor">        atomic<T>& operator=( const atomic<T>& rhs ) {store_with_release(rhs); return *this;}  \</span>
+<a name="l00295"></a>00295 <span class="preprocessor">    };</span>
+<a name="l00296"></a>00296 <span class="preprocessor"></span>
+<a name="l00297"></a>00297 <span class="preprocessor">#if __TBB_64BIT_ATOMICS</span>
+<a name="l00298"></a>00298 <span class="preprocessor"></span><span class="comment">// otherwise size is verified by test_atomic</span>
+<a name="l00299"></a>00299 __TBB_DECL_ATOMIC(__TBB_LONG_LONG)
+<a name="l00300"></a>00300 __TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span> __TBB_LONG_LONG)
+<a name="l00301"></a>00301 <span class="preprocessor">#endif</span>
+<a name="l00302"></a>00302 <span class="preprocessor"></span>__TBB_DECL_ATOMIC(<span class="keywordtype">long</span>)
+<a name="l00303"></a>00303 __TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)
+<a name="l00304"></a>00304 
+<a name="l00305"></a>00305 <span class="preprocessor">#if defined(_MSC_VER) && __TBB_WORDSIZE==4</span>
+<a name="l00306"></a>00306 <span class="preprocessor"></span><span class="comment">/* Special version of __TBB_DECL_ATOMIC that avoids gratuitous warnings from cl /Wp64 option. </span>
+<a name="l00307"></a>00307 <span class="comment">   It is identical to __TBB_DECL_ATOMIC(unsigned) except that it replaces operator=(T) </span>
+<a name="l00308"></a>00308 <span class="comment">   with an operator=(U) that explicitly converts the U to a T.  Types T and U should be</span>
+<a name="l00309"></a>00309 <span class="comment">   type synonyms on the platform.  Type U should be the wider variant of T from the</span>
+<a name="l00310"></a>00310 <span class="comment">   perspective of /Wp64. */</span>
+<a name="l00311"></a>00311 <span class="preprocessor">#define __TBB_DECL_ATOMIC_ALT(T,U) \</span>
+<a name="l00312"></a>00312 <span class="preprocessor">    template<> struct atomic<T>: internal::atomic_impl_with_arithmetic<T,T,char> {  \</span>
+<a name="l00313"></a>00313 <span class="preprocessor">        T operator=( U rhs ) {return store_with_release(T(rhs));}  \</span>
+<a name="l00314"></a>00314 <span class="preprocessor">        atomic<T>& operator=( const atomic<T>& rhs ) {store_with_release(rhs); return *this;}  \</span>
+<a name="l00315"></a>00315 <span class="preprocessor">    };</span>
+<a name="l00316"></a>00316 <span class="preprocessor"></span><a class="code" href="a00362.html#ad165cf61abbe349d413df2589679add">__TBB_DECL_ATOMIC_ALT</a>(<span class="keywordtype">unsigned</span>,size_t)
+<a name="l00317"></a><a class="code" href="a00362.html#ad165cf61abbe349d413df2589679add">00317</a> <a class="code" href="a00362.html#ad165cf61abbe349d413df2589679add">__TBB_DECL_ATOMIC_ALT</a>(<span class="keywordtype">int</span>,ptrdiff_t)
+<a name="l00318"></a>00318 <span class="preprocessor">#else</span>
+<a name="l00319"></a>00319 <span class="preprocessor"></span>__TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span>)
+<a name="l00320"></a>00320 __TBB_DECL_ATOMIC(<span class="keywordtype">int</span>)
+<a name="l00321"></a>00321 <span class="preprocessor">#endif </span><span class="comment">/* defined(_MSC_VER) && __TBB_WORDSIZE==4 */</span>
+<a name="l00322"></a>00322 
+<a name="l00323"></a>00323 __TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>)
+<a name="l00324"></a>00324 __TBB_DECL_ATOMIC(<span class="keywordtype">short</span>)
+<a name="l00325"></a>00325 __TBB_DECL_ATOMIC(<span class="keywordtype">char</span>)
+<a name="l00326"></a>00326 __TBB_DECL_ATOMIC(<span class="keywordtype">signed</span> <span class="keywordtype">char</span>)
+<a name="l00327"></a>00327 __TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>)
+<a name="l00328"></a>00328 
+<a name="l00329"></a>00329 <span class="preprocessor">#if !defined(_MSC_VER)||defined(_NATIVE_WCHAR_T_DEFINED) </span>
+<a name="l00330"></a>00330 <span class="preprocessor"></span>__TBB_DECL_ATOMIC(<span class="keywordtype">wchar_t</span>)
+<a name="l00331"></a>00331 <span class="preprocessor">#endif </span><span class="comment">/* _MSC_VER||!defined(_NATIVE_WCHAR_T_DEFINED) */</span>
+<a name="l00332"></a>00332 
+<a name="l00334"></a>00334 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span><a class="code" href="a00216.html">atomic</a><T*>: internal::atomic_impl_with_arithmetic<T*,ptrdiff_t,T> {
+<a name="l00335"></a>00335     T* operator=( T* rhs ) {
+<a name="l00336"></a>00336         <span class="comment">// "this" required here in strict ISO C++ because store_with_release is a dependent name</span>
+<a name="l00337"></a>00337         <span class="keywordflow">return</span> this->store_with_release(rhs);
+<a name="l00338"></a>00338     }
+<a name="l00339"></a>00339     <a class="code" href="a00216.html">atomic<T*></a>& operator=( <span class="keyword">const</span> <a class="code" href="a00216.html">atomic<T*></a>& rhs ) {
+<a name="l00340"></a>00340         this->store_with_release(rhs); <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00341"></a>00341     }
+<a name="l00342"></a>00342     T* operator->()<span class="keyword"> const </span>{
+<a name="l00343"></a>00343         <span class="keywordflow">return</span> (*<span class="keyword">this</span>);
+<a name="l00344"></a>00344     }
+<a name="l00345"></a>00345 };
+<a name="l00346"></a>00346 
+<a name="l00348"></a><a class="code" href="a00217.html">00348</a> <span class="keyword">template</span><> <span class="keyword">struct </span><a class="code" href="a00216.html">atomic</a><void*>: internal::atomic_impl<void*> {
+<a name="l00349"></a>00349     <span class="keywordtype">void</span>* operator=( <span class="keywordtype">void</span>* rhs ) {
+<a name="l00350"></a>00350         <span class="comment">// "this" required here in strict ISO C++ because store_with_release is a dependent name</span>
+<a name="l00351"></a>00351         <span class="keywordflow">return</span> this->store_with_release(rhs);
+<a name="l00352"></a>00352     }
+<a name="l00353"></a>00353     <a class="code" href="a00216.html">atomic<void*></a>& operator=( <span class="keyword">const</span> <a class="code" href="a00216.html">atomic<void*></a>& rhs ) {
+<a name="l00354"></a>00354         this->store_with_release(rhs); <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00355"></a>00355     }
+<a name="l00356"></a>00356 };
+<a name="l00357"></a>00357 
+<a name="l00358"></a>00358 } <span class="comment">// namespace tbb</span>
+<a name="l00359"></a>00359 
+<a name="l00360"></a>00360 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)</span>
+<a name="l00361"></a>00361 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
+<a name="l00362"></a>00362 <span class="preprocessor"></span><span class="preprocessor">#endif // warnings 4244, 4267 are back</span>
+<a name="l00363"></a>00363 <span class="preprocessor"></span>
+<a name="l00364"></a>00364 <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/a00414.html b/doc/html/a00414.html
deleted file mode 100644
index d25676a..0000000
--- a/doc/html/a00414.html
+++ /dev/null
@@ -1,507 +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-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_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>interface5 {
-<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="a00164.html">00061</a> <span class="keyword">class </span><a class="code" href="a00164.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="a00164.html">filter</a>* not_in_pipeline() {<span class="keywordflow">return</span> reinterpret_cast<filter*>(intptr_t(-1));}
-<a name="l00065"></a>00065     
-<a name="l00067"></a>00067     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> filter_is_serial = 0x1; 
-<a name="l00068"></a>00068 
-<a name="l00070"></a>00070 
-<a name="l00072"></a>00072     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> filter_is_out_of_order = 0x1<<4;  
-<a name="l00073"></a>00073 
-<a name="l00075"></a>00075     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> filter_is_bound = 0x1<<5;  
-<a name="l00076"></a>00076 
-<a name="l00078"></a>00078     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> exact_exception_propagation =
-<a name="l00079"></a>00079 <span class="preprocessor">#if TBB_USE_CAPTURED_EXCEPTION</span>
-<a name="l00080"></a>00080 <span class="preprocessor"></span>            0x0;
-<a name="l00081"></a>00081 <span class="preprocessor">#else</span>
-<a name="l00082"></a>00082 <span class="preprocessor"></span>            0x1<<7;
-<a name="l00083"></a>00083 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_CAPTURED_EXCEPTION */</span>
-<a name="l00084"></a>00084 
-<a name="l00085"></a>00085     <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="l00086"></a>00086     <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="l00087"></a>00087 <span class="keyword">public</span>:
-<a name="l00088"></a>00088     <span class="keyword">enum</span> mode {
-<a name="l00090"></a>00090         parallel = current_version | filter_is_out_of_order, 
-<a name="l00092"></a>00092         serial_in_order = current_version | filter_is_serial,
-<a name="l00094"></a>00094         serial_out_of_order = current_version | filter_is_serial | filter_is_out_of_order,
-<a name="l00096"></a>00096         serial = serial_in_order
-<a name="l00097"></a>00097     };
-<a name="l00098"></a>00098 <span class="keyword">protected</span>:
-<a name="l00099"></a>00099     <a class="code" href="a00164.html">filter</a>( <span class="keywordtype">bool</span> is_serial_ ) : 
-<a name="l00100"></a>00100         next_filter_in_pipeline(not_in_pipeline()),
-<a name="l00101"></a>00101         my_input_buffer(NULL),
-<a name="l00102"></a>00102         my_filter_mode(static_cast<unsigned char>((is_serial_ ? serial : parallel) | exact_exception_propagation)),
-<a name="l00103"></a>00103         prev_filter_in_pipeline(not_in_pipeline()),
-<a name="l00104"></a>00104         my_pipeline(NULL),
-<a name="l00105"></a>00105         next_segment(NULL)
-<a name="l00106"></a>00106     {}
-<a name="l00107"></a>00107     
-<a name="l00108"></a>00108     <a class="code" href="a00164.html">filter</a>( mode filter_mode ) :
-<a name="l00109"></a>00109         next_filter_in_pipeline(not_in_pipeline()),
-<a name="l00110"></a>00110         my_input_buffer(NULL),
-<a name="l00111"></a>00111         my_filter_mode(static_cast<unsigned char>(filter_mode | exact_exception_propagation)),
-<a name="l00112"></a>00112         prev_filter_in_pipeline(not_in_pipeline()),
-<a name="l00113"></a>00113         my_pipeline(NULL),
-<a name="l00114"></a>00114         next_segment(NULL)
-<a name="l00115"></a>00115     {}
-<a name="l00116"></a>00116 
-<a name="l00117"></a>00117 <span class="keyword">public</span>:
-<a name="l00119"></a><a class="code" href="a00164.html#fcfec27656a69ff2072802ac001e936f">00119</a>     <span class="keywordtype">bool</span> <a class="code" href="a00164.html#fcfec27656a69ff2072802ac001e936f">is_serial</a>()<span class="keyword"> const </span>{
-<a name="l00120"></a>00120         <span class="keywordflow">return</span> bool( my_filter_mode & filter_is_serial );
-<a name="l00121"></a>00121     }  
-<a name="l00122"></a>00122     
-<a name="l00124"></a><a class="code" href="a00164.html#cd53206c4795ef2df5df26b795caf692">00124</a>     <span class="keywordtype">bool</span> <a class="code" href="a00164.html#cd53206c4795ef2df5df26b795caf692">is_ordered</a>()<span class="keyword"> const </span>{
-<a name="l00125"></a>00125         <span class="keywordflow">return</span> (my_filter_mode & (filter_is_out_of_order|filter_is_serial))==filter_is_serial;
-<a name="l00126"></a>00126     }
-<a name="l00127"></a>00127 
-<a name="l00129"></a><a class="code" href="a00164.html#15c29cae5d237e6d63dbfe5c94af89d5">00129</a>     <span class="keywordtype">bool</span> <a class="code" href="a00164.html#15c29cae5d237e6d63dbfe5c94af89d5">is_bound</a>()<span class="keyword"> const </span>{
-<a name="l00130"></a>00130         <span class="keywordflow">return</span> ( my_filter_mode & filter_is_bound )==filter_is_bound;
-<a name="l00131"></a>00131     }
-<a name="l00132"></a>00132 
-<a name="l00134"></a>00134 
-<a name="l00135"></a>00135     <span class="keyword">virtual</span> <span class="keywordtype">void</span>* <a class="code" href="a00164.html#fa1b3dc1f4f47563ccab7f4d92f5b543">operator()</a>( <span class="keywordtype">void</span>* item ) = 0;
-<a name="l00136"></a>00136 
-<a name="l00138"></a>00138 
-<a name="l00139"></a>00139     <span class="keyword">virtual</span> __TBB_EXPORTED_METHOD <a class="code" href="a00164.html#66d159f362293e3964ba3da8bc1d2604">~filter</a>();
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00143"></a>00143 <span class="preprocessor"></span>
-<a name="l00145"></a><a class="code" href="a00164.html#56275eb889c77c4807967133e21401bd">00145</a> <span class="preprocessor">    virtual void finalize( void* </span><span class="comment">/*item*/</span> ) {};
-<a name="l00146"></a>00146 <span class="preprocessor">#endif</span>
-<a name="l00147"></a>00147 <span class="preprocessor"></span>
-<a name="l00148"></a>00148 <span class="keyword">private</span>:
-<a name="l00150"></a>00150     <a class="code" href="a00164.html">filter</a>* next_filter_in_pipeline;
-<a name="l00151"></a>00151 
-<a name="l00153"></a>00153 
-<a name="l00154"></a>00154     internal::input_buffer* my_input_buffer;
-<a name="l00155"></a>00155 
-<a name="l00156"></a>00156     <span class="keyword">friend</span> <span class="keyword">class </span>internal::stage_task;
-<a name="l00157"></a>00157     <span class="keyword">friend</span> <span class="keyword">class </span>internal::pipeline_root_task;
-<a name="l00158"></a>00158     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00180.html">pipeline</a>;
-<a name="l00159"></a>00159     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00209.html">thread_bound_filter</a>;
-<a name="l00160"></a>00160 
-<a name="l00162"></a>00162     <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> my_filter_mode;
-<a name="l00163"></a>00163 
-<a name="l00165"></a>00165     <a class="code" href="a00164.html">filter</a>* prev_filter_in_pipeline;
-<a name="l00166"></a>00166 
-<a name="l00168"></a>00168     <a class="code" href="a00180.html">pipeline</a>* my_pipeline;
-<a name="l00169"></a>00169 
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172     <a class="code" href="a00164.html">filter</a>* next_segment;
-<a name="l00173"></a>00173 };
-<a name="l00174"></a>00174 
-<a name="l00176"></a>00176 
-<a name="l00177"></a><a class="code" href="a00209.html">00177</a> <span class="keyword">class </span><a class="code" href="a00209.html">thread_bound_filter</a>: <span class="keyword">public</span> <a class="code" href="a00164.html">filter</a> {
-<a name="l00178"></a>00178 <span class="keyword">public</span>:
-<a name="l00179"></a>00179     <span class="keyword">enum</span> result_type {
-<a name="l00180"></a>00180         <span class="comment">// item was processed</span>
-<a name="l00181"></a>00181         success,
-<a name="l00182"></a>00182         <span class="comment">// item is currently not available</span>
-<a name="l00183"></a>00183         item_not_available,
-<a name="l00184"></a>00184         <span class="comment">// there are no more items to process</span>
-<a name="l00185"></a>00185         end_of_stream
-<a name="l00186"></a>00186     };
-<a name="l00187"></a>00187 <span class="keyword">protected</span>:
-<a name="l00188"></a>00188     <a class="code" href="a00209.html">thread_bound_filter</a>(mode filter_mode): 
-<a name="l00189"></a>00189          <a class="code" href="a00164.html">filter</a>(static_cast<mode>(filter_mode | filter::filter_is_bound | filter::exact_exception_propagation))
-<a name="l00190"></a>00190     {}
-<a name="l00191"></a>00191 <span class="keyword">public</span>:
-<a name="l00193"></a>00193 
-<a name="l00198"></a>00198     result_type __TBB_EXPORTED_METHOD <a class="code" href="a00209.html#c4f90f2c771bce748beb9be734fa286c">try_process_item</a>(); 
-<a name="l00199"></a>00199 
-<a name="l00201"></a>00201 
-<a name="l00205"></a>00205     result_type __TBB_EXPORTED_METHOD <a class="code" href="a00209.html#5e726bdc7fbd924c0b07bd558b1d4d5d">process_item</a>();
-<a name="l00206"></a>00206 
-<a name="l00207"></a>00207 <span class="keyword">private</span>:
-<a name="l00209"></a>00209     result_type internal_process_item(<span class="keywordtype">bool</span> is_blocking);
-<a name="l00210"></a>00210 };
-<a name="l00211"></a>00211 
-<a name="l00213"></a>00213 
-<a name="l00214"></a><a class="code" href="a00180.html">00214</a> <span class="keyword">class </span><a class="code" href="a00180.html">pipeline</a> {
-<a name="l00215"></a>00215 <span class="keyword">public</span>:
-<a name="l00217"></a>00217     __TBB_EXPORTED_METHOD <a class="code" href="a00180.html#596dc3beba27099c4c8581cb419e1a59">pipeline</a>();
-<a name="l00218"></a>00218 
-<a name="l00221"></a>00221     <span class="keyword">virtual</span> __TBB_EXPORTED_METHOD <a class="code" href="a00180.html#49513c6c24f9d5bbbb27edca5efe01c9">~pipeline</a>();
-<a name="l00222"></a>00222 
-<a name="l00224"></a>00224     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00180.html#38fb5c9c8395dd6f89a4ae2011a83e0d">add_filter</a>( <a class="code" href="a00164.html">filter</a>& filter_ );
-<a name="l00225"></a>00225 
-<a name="l00227"></a>00227     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00180.html#f627616049b3fe36801f37ee40403ef8">run</a>( size_t max_number_of_live_tokens );
-<a name="l00228"></a>00228 
-<a name="l00229"></a>00229 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00231"></a>00231 <span class="preprocessor">    void __TBB_EXPORTED_METHOD run( size_t max_number_of_live_tokens, tbb::task_group_context& context );</span>
-<a name="l00232"></a>00232 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00233"></a>00233 <span class="preprocessor"></span>
-<a name="l00235"></a>00235     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00180.html#2c84aef5b834b555ee220b176e25931e">clear</a>();
-<a name="l00236"></a>00236 
-<a name="l00237"></a>00237 <span class="keyword">private</span>:
-<a name="l00238"></a>00238     <span class="keyword">friend</span> <span class="keyword">class </span>internal::stage_task;
-<a name="l00239"></a>00239     <span class="keyword">friend</span> <span class="keyword">class </span>internal::pipeline_root_task;
-<a name="l00240"></a>00240     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00164.html">filter</a>;
-<a name="l00241"></a>00241     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00209.html">thread_bound_filter</a>;
-<a name="l00242"></a>00242     <span class="keyword">friend</span> <span class="keyword">class </span>internal::pipeline_cleaner;
-<a name="l00243"></a>00243     <span class="keyword">friend</span> <span class="keyword">class </span>tbb::interface5::internal::pipeline_proxy;
-<a name="l00244"></a>00244 
-<a name="l00246"></a>00246     <a class="code" href="a00164.html">filter</a>* filter_list;
-<a name="l00247"></a>00247 
-<a name="l00249"></a>00249     <a class="code" href="a00164.html">filter</a>* filter_end;
-<a name="l00250"></a>00250 
-<a name="l00252"></a>00252     <a class="code" href="a00199.html">task</a>* end_counter;
-<a name="l00253"></a>00253 
-<a name="l00255"></a>00255     <a class="code" href="a00142.html">atomic<internal::Token></a> input_tokens;
-<a name="l00256"></a>00256 
-<a name="l00258"></a>00258     <a class="code" href="a00142.html">atomic<internal::Token></a> token_counter;
-<a name="l00259"></a>00259 
-<a name="l00261"></a>00261     <span class="keywordtype">bool</span> end_of_input;
-<a name="l00262"></a>00262 
-<a name="l00264"></a>00264     <span class="keywordtype">bool</span> has_thread_bound_filters;
-<a name="l00265"></a>00265 
-<a name="l00267"></a>00267     <span class="keywordtype">void</span> remove_filter( <a class="code" href="a00164.html">filter</a>& filter_ );
-<a name="l00268"></a>00268 
-<a name="l00270"></a>00270     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD inject_token( <a class="code" href="a00199.html">task</a>& <span class="keyword">self</span> );
-<a name="l00271"></a>00271 
-<a name="l00272"></a>00272 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00274"></a>00274 <span class="preprocessor">    void clear_filters();</span>
-<a name="l00275"></a>00275 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00276"></a>00276 <span class="preprocessor"></span>};
-<a name="l00277"></a>00277 
-<a name="l00278"></a>00278 <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00279"></a>00279 <span class="comment">// Support for lambda-friendly parallel_pipeline interface</span>
-<a name="l00280"></a>00280 <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00281"></a>00281 
-<a name="l00282"></a>00282 <span class="keyword">namespace </span>interface5 {
-<a name="l00283"></a>00283 
-<a name="l00284"></a>00284 <span class="keyword">namespace </span>internal {
-<a name="l00285"></a>00285     <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="l00286"></a>00286 }
-<a name="l00287"></a>00287 
-<a name="l00289"></a><a class="code" href="a00167.html">00289</a> <span class="keyword">class </span><a class="code" href="a00167.html">flow_control</a> {
-<a name="l00290"></a>00290     <span class="keywordtype">bool</span> is_pipeline_stopped;
-<a name="l00291"></a>00291     <a class="code" href="a00167.html">flow_control</a>() { is_pipeline_stopped = <span class="keyword">false</span>; }
-<a name="l00292"></a>00292     <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="l00293"></a>00293 <span class="keyword">public</span>:
-<a name="l00294"></a>00294     <span class="keywordtype">void</span> stop() { is_pipeline_stopped = <span class="keyword">true</span>; }
-<a name="l00295"></a>00295 };
-<a name="l00296"></a>00296 
-<a name="l00298"></a>00298 <span class="keyword">namespace </span>internal {
-<a name="l00299"></a>00299 
-<a name="l00300"></a>00300 <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="l00301"></a>00301 <span class="keyword">class </span>concrete_filter: <span class="keyword">public</span> tbb::<a class="code" href="a00164.html">filter</a> {
-<a name="l00302"></a>00302     <span class="keyword">const</span> Body& my_body;
-<a name="l00303"></a>00303 
-<a name="l00304"></a>00304     <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00204.html">tbb::tbb_allocator<U></a> u_allocator;
-<a name="l00305"></a>00305     <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00204.html">tbb::tbb_allocator<T></a> t_allocator;
-<a name="l00306"></a>00306 
-<a name="l00307"></a>00307     <span class="comment">/*override*/</span> <span class="keywordtype">void</span>* operator()(<span class="keywordtype">void</span>* input) {
-<a name="l00308"></a>00308         T* temp_input = (T*)input;
-<a name="l00309"></a>00309         <span class="comment">// Call user's operator()() here</span>
-<a name="l00310"></a>00310         U* output_u = u_allocator().allocate(1);
-<a name="l00311"></a>00311         <span class="keywordtype">void</span>* output = (<span class="keywordtype">void</span>*) <span class="keyword">new</span> (output_u) U(my_body(*temp_input)); 
-<a name="l00312"></a>00312         t_allocator().destroy(temp_input);
-<a name="l00313"></a>00313         t_allocator().deallocate(temp_input,1);
-<a name="l00314"></a>00314         <span class="keywordflow">return</span> output;
-<a name="l00315"></a>00315     }
-<a name="l00316"></a>00316 
-<a name="l00317"></a>00317 <span class="keyword">public</span>:
-<a name="l00318"></a>00318     concrete_filter(tbb::filter::mode filter_mode, <span class="keyword">const</span> Body& body) : <a class="code" href="a00164.html">filter</a>(filter_mode), my_body(body) {}
-<a name="l00319"></a>00319 };
-<a name="l00320"></a>00320 
-<a name="l00321"></a>00321 <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> Body>
-<a name="l00322"></a>00322 <span class="keyword">class </span>concrete_filter<void,U,Body>: <span class="keyword">public</span> filter {
-<a name="l00323"></a>00323     <span class="keyword">const</span> Body& my_body;
-<a name="l00324"></a>00324 
-<a name="l00325"></a>00325     <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00204.html">tbb::tbb_allocator<U></a> u_allocator;
-<a name="l00326"></a>00326 
-<a name="l00327"></a>00327     <span class="comment">/*override*/</span><span class="keywordtype">void</span>* operator()(<span class="keywordtype">void</span>*) {
-<a name="l00328"></a>00328         flow_control control;
-<a name="l00329"></a>00329         U* output_u = u_allocator().allocate(1);
-<a name="l00330"></a>00330         (void) <span class="keyword">new</span> (output_u) U(my_body(control));
-<a name="l00331"></a>00331         <span class="keywordflow">if</span>(control.is_pipeline_stopped) {
-<a name="l00332"></a>00332             u_allocator().destroy(output_u);
-<a name="l00333"></a>00333             u_allocator().deallocate(output_u,1);
-<a name="l00334"></a>00334             output_u = NULL;
-<a name="l00335"></a>00335         }
-<a name="l00336"></a>00336         <span class="keywordflow">return</span> (<span class="keywordtype">void</span>*)output_u;
-<a name="l00337"></a>00337     }
-<a name="l00338"></a>00338 <span class="keyword">public</span>:
-<a name="l00339"></a>00339     concrete_filter(tbb::filter::mode filter_mode, <span class="keyword">const</span> Body& body) : filter(filter_mode), my_body(body) {}
-<a name="l00340"></a>00340 };
-<a name="l00341"></a>00341 
-<a name="l00342"></a>00342 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> Body>
-<a name="l00343"></a>00343 <span class="keyword">class </span>concrete_filter<T,void,Body>: <span class="keyword">public</span> filter {
-<a name="l00344"></a>00344     <span class="keyword">const</span> Body& my_body;
-<a name="l00345"></a>00345    
-<a name="l00346"></a>00346     <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00204.html">tbb::tbb_allocator<T></a> t_allocator;
-<a name="l00347"></a>00347 
-<a name="l00348"></a>00348     <span class="comment">/*override*/</span> <span class="keywordtype">void</span>* operator()(<span class="keywordtype">void</span>* input) {
-<a name="l00349"></a>00349         T* temp_input = (T*)input;
-<a name="l00350"></a>00350         my_body(*temp_input);
-<a name="l00351"></a>00351         t_allocator().destroy(temp_input);
-<a name="l00352"></a>00352         t_allocator().deallocate(temp_input,1);
-<a name="l00353"></a>00353         <span class="keywordflow">return</span> NULL;
-<a name="l00354"></a>00354     }
-<a name="l00355"></a>00355 <span class="keyword">public</span>:
-<a name="l00356"></a>00356     concrete_filter(tbb::filter::mode filter_mode, <span class="keyword">const</span> Body& body) : filter(filter_mode), my_body(body) {}
-<a name="l00357"></a>00357 };
-<a name="l00358"></a>00358 
-<a name="l00359"></a>00359 <span class="keyword">template</span><<span class="keyword">typename</span> Body>
-<a name="l00360"></a>00360 <span class="keyword">class </span>concrete_filter<void,void,Body>: <span class="keyword">public</span> filter {
-<a name="l00361"></a>00361     <span class="keyword">const</span> Body& my_body;
-<a name="l00362"></a>00362     
-<a name="l00364"></a>00364     <span class="comment">/*override*/</span> <span class="keywordtype">void</span>* operator()(<span class="keywordtype">void</span>*) {
-<a name="l00365"></a>00365         flow_control control;
-<a name="l00366"></a>00366         my_body(control);
-<a name="l00367"></a>00367         <span class="keywordtype">void</span>* output = control.is_pipeline_stopped ? NULL : (<span class="keywordtype">void</span>*)(intptr_t)-1; 
-<a name="l00368"></a>00368         <span class="keywordflow">return</span> output;
-<a name="l00369"></a>00369     }
-<a name="l00370"></a>00370 <span class="keyword">public</span>:
-<a name="l00371"></a>00371     concrete_filter(filter::mode filter_mode, <span class="keyword">const</span> Body& body) : filter(filter_mode), my_body(body) {}
-<a name="l00372"></a>00372 };
-<a name="l00373"></a>00373 
-<a name="l00375"></a>00375 
-<a name="l00376"></a>00376 <span class="keyword">class </span>pipeline_proxy {
-<a name="l00377"></a>00377     <a class="code" href="a00180.html">tbb::pipeline</a> my_pipe;
-<a name="l00378"></a>00378 <span class="keyword">public</span>:
-<a name="l00379"></a>00379     pipeline_proxy( <span class="keyword">const</span> filter_t<void,void>& filter_chain );
-<a name="l00380"></a>00380     ~pipeline_proxy() {
-<a name="l00381"></a>00381         <span class="keywordflow">while</span>( filter* f = my_pipe.filter_list ) 
-<a name="l00382"></a>00382             <span class="keyword">delete</span> f; <span class="comment">// filter destructor removes it from the pipeline</span>
-<a name="l00383"></a>00383     }
-<a name="l00384"></a>00384     <a class="code" href="a00180.html">tbb::pipeline</a>* operator->() { <span class="keywordflow">return</span> &my_pipe; }
-<a name="l00385"></a>00385 };
-<a name="l00386"></a>00386 
-<a name="l00388"></a>00388 
-<a name="l00389"></a>00389 <span class="keyword">class </span>filter_node: tbb::internal::no_copy {
-<a name="l00391"></a>00391     <a class="code" href="a00142.html">tbb::atomic<intptr_t></a> ref_count;
-<a name="l00392"></a>00392 <span class="keyword">protected</span>:
-<a name="l00393"></a>00393     filter_node() {
-<a name="l00394"></a>00394         ref_count = 0;
-<a name="l00395"></a>00395 <span class="preprocessor">#ifdef __TBB_TEST_FILTER_NODE_COUNT</span>
-<a name="l00396"></a>00396 <span class="preprocessor"></span>        ++(__TBB_TEST_FILTER_NODE_COUNT);
-<a name="l00397"></a>00397 <span class="preprocessor">#endif</span>
-<a name="l00398"></a>00398 <span class="preprocessor"></span>    }
-<a name="l00399"></a>00399 <span class="keyword">public</span>:
-<a name="l00401"></a>00401     <span class="keyword">virtual</span> <span class="keywordtype">void</span> add_to( pipeline& ) = 0;
-<a name="l00403"></a>00403     <span class="keywordtype">void</span> add_ref() {++ref_count;}
-<a name="l00405"></a>00405     <span class="keywordtype">void</span> remove_ref() {
-<a name="l00406"></a>00406         __TBB_ASSERT(ref_count>0,<span class="stringliteral">"ref_count underflow"</span>);
-<a name="l00407"></a>00407         <span class="keywordflow">if</span>( --ref_count==0 ) 
-<a name="l00408"></a>00408             <span class="keyword">delete</span> <span class="keyword">this</span>;
-<a name="l00409"></a>00409     }
-<a name="l00410"></a>00410     <span class="keyword">virtual</span> ~filter_node() {
-<a name="l00411"></a>00411 <span class="preprocessor">#ifdef __TBB_TEST_FILTER_NODE_COUNT</span>
-<a name="l00412"></a>00412 <span class="preprocessor"></span>        --(__TBB_TEST_FILTER_NODE_COUNT);
-<a name="l00413"></a>00413 <span class="preprocessor">#endif</span>
-<a name="l00414"></a>00414 <span class="preprocessor"></span>    }
-<a name="l00415"></a>00415 };
-<a name="l00416"></a>00416 
-<a name="l00418"></a>00418 <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="l00419"></a>00419 <span class="keyword">class </span>filter_node_leaf: <span class="keyword">public</span> filter_node  {
-<a name="l00420"></a>00420     <span class="keyword">const</span> tbb::filter::mode mode;
-<a name="l00421"></a>00421     <span class="keyword">const</span> Body body;
-<a name="l00422"></a>00422     <span class="comment">/*override*/</span><span class="keywordtype">void</span> add_to( pipeline& p ) {
-<a name="l00423"></a>00423         concrete_filter<T,U,Body>* f = <span class="keyword">new</span> concrete_filter<T,U,Body>(mode,body);
-<a name="l00424"></a>00424         p.add_filter( *f );
-<a name="l00425"></a>00425     }
-<a name="l00426"></a>00426 <span class="keyword">public</span>:
-<a name="l00427"></a>00427     filter_node_leaf( tbb::filter::mode m, <span class="keyword">const</span> Body& b ) : mode(m), body(b) {}
-<a name="l00428"></a>00428 };
-<a name="l00429"></a>00429 
-<a name="l00431"></a>00431 <span class="keyword">class </span>filter_node_join: <span class="keyword">public</span> filter_node {
-<a name="l00432"></a>00432     <span class="keyword">friend</span> <span class="keyword">class </span>filter_node; <span class="comment">// to suppress GCC 3.2 warnings</span>
-<a name="l00433"></a>00433     filter_node& left;
-<a name="l00434"></a>00434     filter_node& right;
-<a name="l00435"></a>00435     <span class="comment">/*override*/</span>~filter_node_join() {
-<a name="l00436"></a>00436        left.remove_ref();
-<a name="l00437"></a>00437        right.remove_ref();
-<a name="l00438"></a>00438     }
-<a name="l00439"></a>00439     <span class="comment">/*override*/</span><span class="keywordtype">void</span> add_to( pipeline& p ) {
-<a name="l00440"></a>00440         left.add_to(p);
-<a name="l00441"></a>00441         right.add_to(p);
-<a name="l00442"></a>00442     }
-<a name="l00443"></a>00443 <span class="keyword">public</span>:
-<a name="l00444"></a>00444     filter_node_join( filter_node& x, filter_node& y ) : left(x), right(y) {
-<a name="l00445"></a>00445        left.add_ref();
-<a name="l00446"></a>00446        right.add_ref();
-<a name="l00447"></a>00447     }
-<a name="l00448"></a>00448 };
-<a name="l00449"></a>00449 
-<a name="l00450"></a>00450 } <span class="comment">// namespace internal</span>
-<a name="l00452"></a>00452 <span class="comment"></span>
-<a name="l00454"></a>00454 <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="l00455"></a><a class="code" href="a00165.html#85c2892eff1fddcd06e28911e75838bd">00455</a> <a class="code" href="a00165.html">filter_t<T,U></a> make_filter(tbb::filter::mode mode, <span class="keyword">const</span> Body& body) {
-<a name="l00456"></a>00456     <span class="keywordflow">return</span> <span class="keyword">new</span> internal::filter_node_leaf<T,U,Body>(mode, body);
-<a name="l00457"></a>00457 }
-<a name="l00458"></a>00458 
-<a name="l00459"></a>00459 <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="l00460"></a>00460 <a class="code" href="a00165.html">filter_t<T,U></a> operator& (<span class="keyword">const</span> <a class="code" href="a00165.html">filter_t<T,V></a>& left, <span class="keyword">const</span> <a class="code" href="a00165.html">filter_t<V,U></a>& right) {
-<a name="l00461"></a>00461     __TBB_ASSERT(left.<a class="code" href="a00165.html#a44d0f06c15bc89c324c5581956799fd">root</a>,<span class="stringliteral">"cannot use default-constructed filter_t as left argument of '&'"</span>);
-<a name="l00462"></a>00462     __TBB_ASSERT(right.<a class="code" href="a00165.html#a44d0f06c15bc89c324c5581956799fd">root</a>,<span class="stringliteral">"cannot use default-constructed filter_t as right argument of '&'"</span>);
-<a name="l00463"></a>00463     <span class="keywordflow">return</span> <span class="keyword">new</span> internal::filter_node_join(*left.<a class="code" href="a00165.html#a44d0f06c15bc89c324c5581956799fd">root</a>,*right.<a class="code" href="a00165.html#a44d0f06c15bc89c324c5581956799fd">root</a>);
-<a name="l00464"></a>00464 }
-<a name="l00465"></a>00465 
-<a name="l00467"></a>00467 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00468"></a><a class="code" href="a00165.html">00468</a> <span class="keyword">class </span><a class="code" href="a00165.html">filter_t</a> {
-<a name="l00469"></a>00469     <span class="keyword">typedef</span> internal::filter_node filter_node;
-<a name="l00470"></a>00470     filter_node* root;
-<a name="l00471"></a>00471     <a class="code" href="a00165.html">filter_t</a>( filter_node* root_ ) : root(root_) {
-<a name="l00472"></a>00472         root->add_ref();
-<a name="l00473"></a>00473     }
-<a name="l00474"></a>00474     <span class="keyword">friend</span> <span class="keyword">class </span>internal::pipeline_proxy;
-<a name="l00475"></a>00475     <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="l00476"></a>00476     <span class="keyword">friend</span> <a class="code" href="a00165.html">filter_t<T_,U_></a> <a class="code" href="a00165.html#85c2892eff1fddcd06e28911e75838bd">make_filter</a>(tbb::filter::mode, <span class="keyword">const</span> Body& );
-<a name="l00477"></a>00477     <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="l00478"></a>00478     <span class="keyword">friend</span> <a class="code" href="a00165.html">filter_t<T_,U_></a> operator& (<span class="keyword">const</span> <a class="code" href="a00165.html">filter_t<T_,V_></a>& , <span class="keyword">const</span> <a class="code" href="a00165.html">filter_t<V_,U_></a>& );
-<a name="l00479"></a>00479 <span class="keyword">public</span>:
-<a name="l00480"></a>00480     <a class="code" href="a00165.html">filter_t</a>() : root(NULL) {}
-<a name="l00481"></a>00481     <a class="code" href="a00165.html">filter_t</a>( <span class="keyword">const</span> <a class="code" href="a00165.html">filter_t<T,U></a>& rhs ) : root(rhs.<a class="code" href="a00165.html#a44d0f06c15bc89c324c5581956799fd">root</a>) {
-<a name="l00482"></a>00482         <span class="keywordflow">if</span>( root ) root->add_ref();
-<a name="l00483"></a>00483     }
-<a name="l00484"></a>00484     <span class="keyword">template</span><<span class="keyword">typename</span> Body>
-<a name="l00485"></a>00485     <a class="code" href="a00165.html">filter_t</a>( tbb::filter::mode mode, <span class="keyword">const</span> Body& body ) :
-<a name="l00486"></a>00486         root( <span class="keyword">new</span> internal::filter_node_leaf<T,U,Body>(mode, body) ) {
-<a name="l00487"></a>00487         root->add_ref();
-<a name="l00488"></a>00488     }
-<a name="l00489"></a>00489 
-<a name="l00490"></a>00490     <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> <a class="code" href="a00165.html">filter_t<T,U></a>& rhs ) {
-<a name="l00491"></a>00491         <span class="comment">// Order of operations below carefully chosen so that reference counts remain correct</span>
-<a name="l00492"></a>00492         <span class="comment">// in unlikely event that remove_ref throws exception.</span>
-<a name="l00493"></a>00493         filter_node* old = root;
-<a name="l00494"></a>00494         root = rhs.<a class="code" href="a00165.html#a44d0f06c15bc89c324c5581956799fd">root</a>; 
-<a name="l00495"></a>00495         <span class="keywordflow">if</span>( root ) root->add_ref();
-<a name="l00496"></a>00496         <span class="keywordflow">if</span>( old ) old->remove_ref();
-<a name="l00497"></a>00497     }
-<a name="l00498"></a>00498     ~<a class="code" href="a00165.html">filter_t</a>() {
-<a name="l00499"></a>00499         <span class="keywordflow">if</span>( root ) root->remove_ref();
-<a name="l00500"></a>00500     }
-<a name="l00501"></a>00501     <span class="keywordtype">void</span> clear() {
-<a name="l00502"></a>00502         <span class="comment">// Like operator= with filter_t() on right side.</span>
-<a name="l00503"></a>00503         <span class="keywordflow">if</span>( root ) {
-<a name="l00504"></a>00504             filter_node* old = root;
-<a name="l00505"></a>00505             root = NULL;
-<a name="l00506"></a>00506             old->remove_ref();
-<a name="l00507"></a>00507         }
-<a name="l00508"></a>00508     }
-<a name="l00509"></a>00509 };
-<a name="l00510"></a>00510 
-<a name="l00511"></a>00511 <span class="keyword">inline</span> internal::pipeline_proxy::pipeline_proxy( <span class="keyword">const</span> <a class="code" href="a00165.html">filter_t<void,void></a>& filter_chain ) : my_pipe() {
-<a name="l00512"></a>00512     __TBB_ASSERT( filter_chain.<a class="code" href="a00165.html#a44d0f06c15bc89c324c5581956799fd">root</a>, <span class="stringliteral">"cannot apply parallel_pipeline to default-constructed filter_t"</span>  );
-<a name="l00513"></a>00513     filter_chain.<a class="code" href="a00165.html#a44d0f06c15bc89c324c5581956799fd">root</a>->add_to(my_pipe);
-<a name="l00514"></a>00514 }
-<a name="l00515"></a>00515 
-<a name="l00516"></a>00516 <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="a00165.html">filter_t<void,void></a>& filter_chain
-<a name="l00517"></a>00517 #<span class="keywordflow">if</span> __TBB_TASK_GROUP_CONTEXT
-<a name="l00518"></a>00518     , <a class="code" href="a00201.html">tbb::task_group_context</a>& context
-<a name="l00519"></a>00519 #endif
-<a name="l00520"></a>00520     ) {
-<a name="l00521"></a>00521     internal::pipeline_proxy pipe(filter_chain);
-<a name="l00522"></a>00522     <span class="comment">// tbb::pipeline::run() is called via the proxy</span>
-<a name="l00523"></a>00523     pipe->run(max_number_of_live_tokens
-<a name="l00524"></a>00524 #<span class="keywordflow">if</span> __TBB_TASK_GROUP_CONTEXT
-<a name="l00525"></a>00525               , context
-<a name="l00526"></a>00526 #endif
-<a name="l00527"></a>00527     );
-<a name="l00528"></a>00528 }
-<a name="l00529"></a>00529 
-<a name="l00530"></a>00530 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00531"></a>00531 <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="l00532"></a>00532     <a class="code" href="a00201.html">tbb::task_group_context</a> context;
-<a name="l00533"></a>00533     parallel_pipeline(max_number_of_live_tokens, filter_chain, context);
-<a name="l00534"></a>00534 }
-<a name="l00535"></a>00535 <span class="preprocessor">#endif // __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00536"></a>00536 <span class="preprocessor"></span>
-<a name="l00537"></a>00537 } <span class="comment">// interface5</span>
-<a name="l00538"></a>00538 
-<a name="l00539"></a>00539 <span class="keyword">using</span> interface5::flow_control;
-<a name="l00540"></a>00540 <span class="keyword">using</span> interface5::filter_t;
-<a name="l00541"></a>00541 <span class="keyword">using</span> interface5::make_filter;
-<a name="l00542"></a>00542 <span class="keyword">using</span> interface5::parallel_pipeline;
-<a name="l00543"></a>00543 
-<a name="l00544"></a>00544 } <span class="comment">// tbb</span>
-<a name="l00545"></a>00545 
-<a name="l00546"></a>00546 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_pipeline_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the 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
new file mode 100644
index 0000000..8d93ac8
--- /dev/null
+++ b/doc/html/a00418.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-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="a00221.html">00040</a> <span class="keyword">class </span><a class="code" href="a00221.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="a00221.html#1a8d05842c2b3dfc177bc4d347e4cef7">00045</a>     <span class="keyword">typedef</span> Value <a class="code" href="a00221.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a>;
+<a name="l00046"></a>00046 
+<a name="l00048"></a><a class="code" href="a00221.html#f5707bffea38eee5c9680f37358afb8e">00048</a>     <span class="keyword">typedef</span> std::size_t <a class="code" href="a00221.html#f5707bffea38eee5c9680f37358afb8e">size_type</a>;
+<a name="l00049"></a>00049 
+<a name="l00051"></a>00051 
+<a name="l00052"></a><a class="code" href="a00221.html#94607755c5110d199202234d58d022ac">00052</a>     <a class="code" href="a00221.html#94607755c5110d199202234d58d022ac">blocked_range</a>() : my_end(), my_begin() {}
+<a name="l00053"></a>00053 
+<a name="l00055"></a><a class="code" href="a00221.html#14795a36ead1414b4371dbe1a4656359">00055</a>     <a class="code" href="a00221.html#94607755c5110d199202234d58d022ac">blocked_range</a>( Value begin_, Value end_, <a class="code" href="a00221.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="a00221.html#18d2258400756ac1446dac7676b18df3">00062</a>     <a class="code" href="a00221.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> <a class="code" href="a00221.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="a00221.html#8b929d93ddc13f148b11bceef3a3bdf8">00065</a>     <a class="code" href="a00221.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> <a class="code" href="a00221.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="a00221.html#9eaa0b6beff1420f688570bbf6b8c462">00069</a>     <a class="code" href="a00221.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> <a class="code" href="a00221.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()<span class="keyword"> const </span>{
+<a name="l00070"></a>00070         __TBB_ASSERT( !(<a class="code" href="a00221.html#8b929d93ddc13f148b11bceef3a3bdf8">end</a>()<<a class="code" href="a00221.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="a00221.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="a00221.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">00075</a>     <a class="code" href="a00221.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> <a class="code" href="a00221.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="a00221.html#8f4f02f530eb3f2e7ea26e06f76aef9d">00082</a>     <span class="keywordtype">bool</span> <a class="code" href="a00221.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="a00221.html#41a58b703d574b6e1ca155df3576f578">00086</a>     <span class="keywordtype">bool</span> <a class="code" href="a00221.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_grainsize<<a class="code" href="a00221.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>();}
+<a name="l00087"></a>00087 
+<a name="l00089"></a>00089 
+<a name="l00091"></a><a class="code" href="a00221.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">00091</a>     <a class="code" href="a00221.html#94607755c5110d199202234d58d022ac">blocked_range</a>( <a class="code" href="a00221.html">blocked_range</a>& r, <a class="code" href="a00290.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="a00221.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="a00221.html">blocked_range</a>& r ) {
+<a name="l00106"></a>00106         __TBB_ASSERT( r.<a class="code" href="a00221.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="a00221.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> + (r.<a class="code" href="a00221.html#1ec95c8988b50064dd603998b16f3930">my_end</a>-r.<a class="code" href="a00221.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a>)/2u;
+<a name="l00108"></a>00108         r.<a class="code" href="a00221.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/a00419.html b/doc/html/a00419.html
new file mode 100644
index 0000000..92ed076
--- /dev/null
+++ b/doc/html/a00419.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-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="a00222.html">00032</a> <span class="keyword">class </span><a class="code" href="a00222.html">blocked_range2d</a> {
+<a name="l00033"></a>00033 <span class="keyword">public</span>:
+<a name="l00035"></a><a class="code" href="a00222.html#a807a22fe658ec38b8edfd69521d0383">00035</a>     <span class="keyword">typedef</span> <a class="code" href="a00221.html">blocked_range<RowValue></a> <a class="code" href="a00221.html">row_range_type</a>;
+<a name="l00036"></a>00036     <span class="keyword">typedef</span> <a class="code" href="a00221.html">blocked_range<ColValue></a> <a class="code" href="a00221.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="a00221.html">row_range_type</a> my_rows;
+<a name="l00040"></a>00040     <a class="code" href="a00221.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="a00222.html">blocked_range2d</a>( RowValue row_begin, RowValue row_end, <span class="keyword">typename</span> <a class="code" href="a00221.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="a00221.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="a00222.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="a00222.html#d144cb2d88cef553420311aca8667a44">00059</a>     <span class="keywordtype">bool</span> <a class="code" href="a00222.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="a00221.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>() || my_cols.<a class="code" href="a00221.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>();
+<a name="l00062"></a>00062     }
+<a name="l00063"></a>00063 
+<a name="l00065"></a><a class="code" href="a00222.html#ad36a9b38e4fef26d376f99552ce2d92">00065</a>     <span class="keywordtype">bool</span> <a class="code" href="a00222.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="a00221.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>() || my_cols.<a class="code" href="a00221.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>();
+<a name="l00067"></a>00067     }
+<a name="l00068"></a>00068 
+<a name="l00069"></a>00069     <a class="code" href="a00222.html">blocked_range2d</a>( <a class="code" href="a00222.html">blocked_range2d</a>& r, <a class="code" href="a00290.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="a00221.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_cols.<a class="code" href="a00221.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) < my_cols.<a class="code" href="a00221.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_rows.<a class="code" href="a00221.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) ) {
+<a name="l00074"></a>00074             my_cols.<a class="code" href="a00221.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = col_range_type::do_split(r.<a class="code" href="a00222.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="a00221.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = row_range_type::do_split(r.<a class="code" href="a00222.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="a00222.html#f496e7348a82652fba581203477cc07c">00081</a>     <span class="keyword">const</span> <a class="code" href="a00221.html">row_range_type</a>& <a class="code" href="a00222.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="a00222.html#392a46759af2c884957115771affa7f4">00084</a>     <span class="keyword">const</span> <a class="code" href="a00221.html">col_range_type</a>& <a class="code" href="a00222.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/a00420.html b/doc/html/a00420.html
new file mode 100644
index 0000000..19b0f7b
--- /dev/null
+++ b/doc/html/a00420.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-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="a00223.html">00032</a> <span class="keyword">class </span><a class="code" href="a00223.html">blocked_range3d</a> {
+<a name="l00033"></a>00033 <span class="keyword">public</span>:
+<a name="l00035"></a><a class="code" href="a00223.html#b8ebf17a552ba47825e9b3887855b719">00035</a>     <span class="keyword">typedef</span> <a class="code" href="a00221.html">blocked_range<PageValue></a> <a class="code" href="a00221.html">page_range_type</a>;
+<a name="l00036"></a>00036     <span class="keyword">typedef</span> <a class="code" href="a00221.html">blocked_range<RowValue></a>  <a class="code" href="a00221.html">row_range_type</a>;
+<a name="l00037"></a>00037     <span class="keyword">typedef</span> <a class="code" href="a00221.html">blocked_range<ColValue></a>  <a class="code" href="a00221.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="a00221.html">page_range_type</a> my_pages;
+<a name="l00041"></a>00041     <a class="code" href="a00221.html">row_range_type</a>  my_rows;
+<a name="l00042"></a>00042     <a class="code" href="a00221.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="a00223.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="a00223.html">blocked_range3d</a>( PageValue page_begin, PageValue page_end, <span class="keyword">typename</span> <a class="code" href="a00221.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="a00221.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="a00221.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="a00223.html#356860e1c977d91711e8216bd55c0b25">00065</a>     <span class="keywordtype">bool</span> <a class="code" href="a00223.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="a00221.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>() || my_rows.<a class="code" href="a00221.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>() || my_cols.<a class="code" href="a00221.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>();
+<a name="l00068"></a>00068     }
+<a name="l00069"></a>00069 
+<a name="l00071"></a><a class="code" href="a00223.html#39d69191721c488e737ae5d9c5336b9c">00071</a>     <span class="keywordtype">bool</span> <a class="code" href="a00223.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="a00221.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>() || my_rows.<a class="code" href="a00221.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>() || my_cols.<a class="code" href="a00221.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>();
+<a name="l00073"></a>00073     }
+<a name="l00074"></a>00074 
+<a name="l00075"></a>00075     <a class="code" href="a00223.html">blocked_range3d</a>( <a class="code" href="a00223.html">blocked_range3d</a>& r, <a class="code" href="a00290.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="a00221.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_rows.<a class="code" href="a00221.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) < my_rows.<a class="code" href="a00221.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_pages.<a class="code" href="a00221.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) ) {
+<a name="l00081"></a>00081             <span class="keywordflow">if</span> ( my_rows.<a class="code" href="a00221.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_cols.<a class="code" href="a00221.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) < my_cols.<a class="code" href="a00221.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_rows.<a class="code" href="a00221.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) ) {
+<a name="l00082"></a>00082                 my_cols.<a class="code" href="a00221.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = col_range_type::do_split(r.<a class="code" href="a00223.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="a00221.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = row_range_type::do_split(r.<a class="code" href="a00223.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="a00221.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_cols.<a class="code" href="a00221.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) < my_cols.<a class="code" href="a00221.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_pages.<a class="code" href="a00221.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) ) {
+<a name="l00088"></a>00088                 my_cols.<a class="code" href="a00221.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = col_range_type::do_split(r.<a class="code" href="a00223.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="a00221.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = page_range_type::do_split(r.<a class="code" href="a00223.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="a00223.html#cf971430aa12361d3ed245344b7c6764">00096</a>     <span class="keyword">const</span> <a class="code" href="a00221.html">page_range_type</a>& <a class="code" href="a00223.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="a00223.html#1584623e59ff32a8aa82006827508be4">00099</a>     <span class="keyword">const</span> <a class="code" href="a00221.html">row_range_type</a>& <a class="code" href="a00223.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="a00223.html#3336ba9480fd6c43e158f9beb024c050">00102</a>     <span class="keyword">const</span> <a class="code" href="a00221.html">col_range_type</a>& <a class="code" href="a00223.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-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/a00421.html b/doc/html/a00421.html
new file mode 100644
index 0000000..ed92d3f
--- /dev/null
+++ b/doc/html/a00421.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>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="a00226.html">00057</a> <span class="keyword">class </span><a class="code" href="a00226.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="a00226.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="a00226.html">cache_aligned_allocator</a>() <span class="keywordflow">throw</span>() {}
+<a name="l00071"></a>00071     <a class="code" href="a00226.html">cache_aligned_allocator</a>( <span class="keyword">const</span> <a class="code" href="a00226.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="a00226.html">cache_aligned_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00226.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="a00226.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">00078</a>     pointer <a class="code" href="a00226.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="a00226.html#3d4eadf188f7d85d3805ae534e0b8e1c">00084</a>     <span class="keywordtype">void</span> <a class="code" href="a00226.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="a00226.html#fb23b687b4c0429dab4c7f8017266cf0">00089</a>     size_type <a class="code" href="a00226.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="a00226.html#958ee8745c86c275bfc9533af565e017">00094</a>     <span class="keywordtype">void</span> <a class="code" href="a00226.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="a00226.html#cd298895a4f1654b5149ec84b591ecb5">00097</a>     <span class="keywordtype">void</span> <a class="code" href="a00226.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="a00227.html">00107</a> <span class="keyword">class </span><a class="code" href="a00226.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="a00226.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="a00226.html">cache_aligned_allocator<T></a>&, <span class="keyword">const</span> <a class="code" href="a00226.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/a00423.html b/doc/html/a00423.html
new file mode 100644
index 0000000..a836bb6
--- /dev/null
+++ b/doc/html/a00423.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-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="a00229.html">00034</a>         <span class="keyword">class </span><a class="code" href="a00229.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="a00226.html">tbb::cache_aligned_allocator<T></a> <a class="code" href="a00226.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="a00229.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="a00229.html">combinable</a>( finit _finit) : my_ets(_finit) { }
+<a name="l00047"></a>00047 
+<a name="l00049"></a><a class="code" href="a00229.html#2c87e79ae98588a5780f708773388843">00049</a>         <a class="code" href="a00229.html#2c87e79ae98588a5780f708773388843">~combinable</a>() { 
+<a name="l00050"></a>00050         }
+<a name="l00051"></a>00051 
+<a name="l00052"></a>00052         <a class="code" href="a00229.html">combinable</a>(<span class="keyword">const</span> <a class="code" href="a00229.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/a00424.html b/doc/html/a00424.html
new file mode 100644
index 0000000..211159c
--- /dev/null
+++ b/doc/html/a00424.html
@@ -0,0 +1,1219 @@
+<!DOCTYPE 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 "_concurrent_unordered_internal.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="a00300.html">00059</a> <span class="keyword">struct </span><a class="code" href="a00300.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="a00231.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="a00288.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="a00258.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="a00231.html">00549</a> <span class="keyword">class </span><a class="code" href="a00231.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="a00234.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="a00233.html">00608</a>     <span class="keyword">class </span><a class="code" href="a00233.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="a00233.html">bucket_accessor</a>( <a class="code" href="a00231.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="a00362.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>( base, h, writer ); }
+<a name="l00613"></a><a class="code" href="a00233.html#d11c77f4d70a94d4fb344492bbf18007">00613</a>         <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00362.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>( <a class="code" href="a00231.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="a00231.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="a00233.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="a00233.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="a00234.html">00667</a>     <span class="keyword">class </span><a class="code" href="a00234.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="a00231.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="a00232.html">accessor</a>;
+<a name="l00670"></a>00670     <span class="keyword">public</span>:
+<a name="l00672"></a><a class="code" href="a00234.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="a00234.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="a00234.html#7db006d41b49dc5f1716a913769d4698">00678</a>         <span class="keywordtype">void</span> <a class="code" href="a00362.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="a00234.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="a00234.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="a00234.html#27399c613eb1aecd4660803955dda09d">00697</a>         <a class="code" href="a00234.html">const_accessor</a>() : my_node(NULL) {}
+<a name="l00698"></a>00698 
+<a name="l00700"></a><a class="code" href="a00234.html#928769b139d53427e7075c1f86148e4c">00700</a>         ~<a class="code" href="a00234.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="a00232.html">00710</a>     <span class="keyword">class </span><a class="code" href="a00232.html">accessor</a>: <span class="keyword">public</span> <a class="code" href="a00234.html">const_accessor</a> {
+<a name="l00711"></a>00711     <span class="keyword">public</span>:
+<a name="l00713"></a><a class="code" href="a00232.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="a00232.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="a00232.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="a00231.html#1ad413f5b666176e7669bf4c87d1ff3f">00728</a>     <a class="code" href="a00231.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="a00231.html#46b9896317662c3cfa3c876ad7592a7c">00733</a>     <a class="code" href="a00231.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="a00231.html#6fb14710893308fb47aaeee55ee30dc3">00740</a>     <a class="code" href="a00231.html">concurrent_hash_map</a>( <span class="keyword">const</span> <a class="code" href="a00231.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="a00231.html#83c40f2053f208861b90390e12a36436">00748</a>     <a class="code" href="a00231.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="a00231.html#088d1aaccc816884a49e38f7065622c8">00756</a>     <a class="code" href="a00231.html">concurrent_hash_map</a>& operator=( <span class="keyword">const</span> <a class="code" href="a00231.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="a00231.html#2aa8e2d28d5af1284cf78d20a9c22731">00774</a>     ~<a class="code" href="a00231.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="a00231.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="a00231.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="a00231.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="a00231.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="a00231.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="a00231.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="a00231.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="a00231.html#2afcc33dade7bb24e008d60c0df38230">00825</a>     <span class="keywordtype">bool</span> find( <a class="code" href="a00234.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="a00234.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="a00231.html#7bc475d1968f7f0af3d736d7e8a0d7df">00832</a>     <span class="keywordtype">bool</span> find( <a class="code" href="a00232.html">accessor</a> &result, <span class="keyword">const</span> Key &key ) {
+<a name="l00833"></a>00833         result.<a class="code" href="a00234.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="a00231.html#47fe0e60151a9bd7a444db827772a4e6">00839</a>     <span class="keywordtype">bool</span> insert( <a class="code" href="a00234.html">const_accessor</a> &result, <span class="keyword">const</span> Key &key ) {
+<a name="l00840"></a>00840         result.<a class="code" href="a00234.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="a00231.html#54e0955ecd11575b4c07166838a72893">00846</a>     <span class="keywordtype">bool</span> insert( <a class="code" href="a00232.html">accessor</a> &result, <span class="keyword">const</span> Key &key ) {
+<a name="l00847"></a>00847         result.<a class="code" href="a00234.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="a00231.html#091efd2d12fdad4fe9e54d9629a9dfc3">00853</a>     <span class="keywordtype">bool</span> insert( <a class="code" href="a00234.html">const_accessor</a> &result, <span class="keyword">const</span> value_type &value ) {
+<a name="l00854"></a>00854         result.<a class="code" href="a00234.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="a00231.html#39183d78d6e8425917555ab542ab92de">00860</a>     <span class="keywordtype">bool</span> insert( <a class="code" href="a00232.html">accessor</a> &result, <span class="keyword">const</span> value_type &value ) {
+<a name="l00861"></a>00861         result.<a class="code" href="a00234.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="a00231.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="a00231.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="a00231.html#e698ef3d70b2d1a29a7a5551784d3653">00884</a>     <span class="keywordtype">bool</span> erase( <a class="code" href="a00234.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="a00231.html#5f12d150d421420965db07368666a84f">00890</a>     <span class="keywordtype">bool</span> erase( <a class="code" href="a00232.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="a00231.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="a00231.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="a00231.html#3f3413264a99174a224ef96f6c4ea769">00948</a> <span class="keywordtype">bool</span> <a class="code" href="a00231.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="a00234.html">const_accessor</a> *result, <span class="keywordtype">bool</span> write ) {
+<a name="l00949"></a>00949     __TBB_ASSERT( !result || !result-><a class="code" href="a00234.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="a00233.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="a00233.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="a00218.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="a00234.html#21856da696b0765cc3db90663160d95e">my_node</a> = n;
+<a name="l01014"></a>01014     result-><a class="code" href="a00234.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="a00231.html#8f5373b8e1864619d1ffcf3bf3f1f13d">01030</a> std::pair<I, I> <a class="code" href="a00231.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="a00231.html#0c964214eb38f54603aa75fdff6d2709">01048</a> <span class="keywordtype">bool</span> <a class="code" href="a00231.html">concurrent_hash_map<Key,T,HashCompare,A>::exclude</a>( <a class="code" href="a00234.html">const_accessor</a> &item_accessor ) {
+<a name="l01049"></a>01049     __TBB_ASSERT( item_accessor.<a class="code" href="a00234.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="a00234.html#21856da696b0765cc3db90663160d95e">my_node</a>;
+<a name="l01051"></a>01051     hashcode_t <span class="keyword">const</span> h = item_accessor.<a class="code" href="a00234.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="a00233.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="a00234.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="a00234.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="a00234.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="a00231.html#f27802b3a8d1863c29e743e9c6b4e870">01078</a> <span class="keywordtype">bool</span> <a class="code" href="a00231.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="a00233.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="a00233.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="a00231.html">concurrent_hash_map<Key,T,HashCompare,A>::swap</a>(<a class="code" href="a00231.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="a00231.html#a72cb6e9873e5541295682179e5a7f74">my_allocator</a>);
+<a name="l01117"></a>01117     std::swap(this->my_hash_compare, table.<a class="code" href="a00231.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="a00231.html#94758113d8993cfe5afdf2d63a728869">01122</a> <span class="keywordtype">void</span> <a class="code" href="a00231.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="a00231.html#220686fe17b197eedf19dd856cd02e36">01188</a> <span class="keywordtype">void</span> <a class="code" href="a00231.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="a00226.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="a00226.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="a00226.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="a00231.html#72c9c9e9655fcf096f5f0ed9c8ba6669">01260</a> <span class="keywordtype">void</span> <a class="code" href="a00231.html">concurrent_hash_map<Key,T,HashCompare,A>::internal_copy</a>( <span class="keyword">const</span> <a class="code" href="a00231.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="a00231.html#94758113d8993cfe5afdf2d63a728869">rehash</a>();
+<a name="l01280"></a>01280     } <span class="keywordflow">else</span> <a class="code" href="a00231.html#72c9c9e9655fcf096f5f0ed9c8ba6669">internal_copy</a>( source.<a class="code" href="a00231.html#35a8c373fc3d52099ae18f0553162491">begin</a>(), source.<a class="code" href="a00231.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="a00231.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
deleted file mode 100644
index 8e0c3f1..0000000
--- a/doc/html/a00426.html
+++ /dev/null
@@ -1,136 +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-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_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="a00182.html">00045</a> <span class="keyword">class </span><a class="code" href="a00182.html">queuing_mutex</a> {
-<a name="l00046"></a>00046 <span class="keyword">public</span>:
-<a name="l00048"></a><a class="code" href="a00182.html#b389ad9c4db7293e4bdb5b8cda69ec04">00048</a>     <a class="code" href="a00182.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="a00183.html">00058</a>     <span class="keyword">class </span><a class="code" href="a00183.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="a00172.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="a00183.html#db0fa3967491014572e24d6607bdc971">00069</a>         <a class="code" href="a00183.html#db0fa3967491014572e24d6607bdc971">scoped_lock</a>() {initialize();}
-<a name="l00070"></a>00070 
-<a name="l00072"></a><a class="code" href="a00183.html#9b51ef972f5618ac17caadb58841ab6d">00072</a>         <a class="code" href="a00183.html#db0fa3967491014572e24d6607bdc971">scoped_lock</a>( <a class="code" href="a00182.html">queuing_mutex</a>& m ) {
-<a name="l00073"></a>00073             initialize();
-<a name="l00074"></a>00074             <a class="code" href="a00183.html#533e4fc8355ee321206a0609c42d909d">acquire</a>(m);
-<a name="l00075"></a>00075         }
-<a name="l00076"></a>00076 
-<a name="l00078"></a><a class="code" href="a00183.html#ac2c576a93570957d694192a5f491443">00078</a>         <a class="code" href="a00183.html#ac2c576a93570957d694192a5f491443">~scoped_lock</a>() {
-<a name="l00079"></a>00079             <span class="keywordflow">if</span>( <a class="code" href="a00172.html">mutex</a> ) <a class="code" href="a00183.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="a00183.html#533e4fc8355ee321206a0609c42d909d">acquire</a>( <a class="code" href="a00182.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="a00183.html#e5a014fb817599386a87170cf2cf51a9">try_acquire</a>( <a class="code" href="a00182.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="a00183.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="a00182.html">queuing_mutex</a>* <a class="code" href="a00172.html">mutex</a>;
-<a name="l00094"></a>00094 
-<a name="l00096"></a>00096         <a class="code" href="a00183.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 
-<a name="l00112"></a>00112     <span class="keyword">friend</span> <span class="keyword">class </span>scoped_lock;
-<a name="l00113"></a>00113 <span class="keyword">private</span>:
-<a name="l00115"></a>00115     <a class="code" href="a00142.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-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the 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
deleted file mode 100644
index bb67d91..0000000
--- a/doc/html/a00427.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-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_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="a00184.html">00047</a> <span class="keyword">class </span><a class="code" href="a00184.html">queuing_rw_mutex</a> {
-<a name="l00048"></a>00048 <span class="keyword">public</span>:
-<a name="l00050"></a><a class="code" href="a00184.html#85c90877c3447690ac4e2ac4ff8dea5e">00050</a>     <a class="code" href="a00184.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="a00184.html#1ba73e3d95cfdf8323880bc623af9099">00058</a>     <a class="code" href="a00184.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="a00185.html">00070</a>     <span class="keyword">class </span><a class="code" href="a00185.html">scoped_lock</a>: internal::no_copy {
-<a name="l00072"></a>00072         <span class="keywordtype">void</span> initialize() {
-<a name="l00073"></a>00073             <a class="code" href="a00172.html">mutex</a> = NULL;
-<a name="l00074"></a>00074 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00075"></a>00075 <span class="preprocessor"></span>            state = 0xFF; <span class="comment">// Set to invalid state</span>
-<a name="l00076"></a>00076             internal::poison_pointer(next);
-<a name="l00077"></a>00077             internal::poison_pointer(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="a00185.html#c62e365be7bcbba091c9ea7454a4d22c">00083</a>         <a class="code" href="a00185.html#c62e365be7bcbba091c9ea7454a4d22c">scoped_lock</a>() {initialize();}
-<a name="l00084"></a>00084 
-<a name="l00086"></a><a class="code" href="a00185.html#fbb8798792d3aebb136c46fc63d2529e">00086</a>         <a class="code" href="a00185.html#c62e365be7bcbba091c9ea7454a4d22c">scoped_lock</a>( <a class="code" href="a00184.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="a00185.html#a8dd5ab8686e76de21587544dbb681e0">acquire</a>(m,write);
-<a name="l00089"></a>00089         }
-<a name="l00090"></a>00090 
-<a name="l00092"></a><a class="code" href="a00185.html#32c7d67a660d23ebbaab1a1d2826d31a">00092</a>         <a class="code" href="a00185.html#32c7d67a660d23ebbaab1a1d2826d31a">~scoped_lock</a>() {
-<a name="l00093"></a>00093             <span class="keywordflow">if</span>( <a class="code" href="a00172.html">mutex</a> ) <a class="code" href="a00185.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="a00185.html#a8dd5ab8686e76de21587544dbb681e0">acquire</a>( <a class="code" href="a00184.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="a00185.html#2e4ff6c9ec2fee6682f95290d1f42baa">try_acquire</a>( <a class="code" href="a00184.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="a00185.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="a00185.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="a00185.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="a00184.html">queuing_rw_mutex</a>* <a class="code" href="a00172.html">mutex</a>;
-<a name="l00115"></a>00115 
-<a name="l00117"></a>00117         <a class="code" href="a00185.html">scoped_lock</a> * prev, * 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="a00142.html">atomic<state_t></a> 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> going;
-<a name="l00127"></a>00127 
-<a name="l00129"></a>00129         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> 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="a00142.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-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the 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
deleted file mode 100644
index ff58bd8..0000000
--- a/doc/html/a00428.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-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_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="a00186.html">00034</a>     <span class="keyword">class </span><a class="code" href="a00186.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="a00187.html">scoped_lock</a>;
-<a name="l00037"></a>00037     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00188.html">scoped_lock_read</a>;
-<a name="l00039"></a>00039 
-<a name="l00074"></a><a class="code" href="a00186.html#6f921f0d7c1812ceb5674418c8b6ccaf">00074</a>     <span class="keyword">enum</span> <a class="code" href="a00186.html#6f921f0d7c1812ceb5674418c8b6ccaf">status_t</a> { waiting_nonblocking, waiting, active, invalid };
-<a name="l00075"></a>00075 
-<a name="l00077"></a><a class="code" href="a00186.html#c1431c4293e777efd9aab9a95c2a46e1">00077</a>     <a class="code" href="a00186.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="a00186.html#5135f64f7b7339017f33d956445edbee">00082</a>     <a class="code" href="a00186.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="a00187.html">00089</a>     <span class="keyword">class </span><a class="code" href="a00187.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="a00186.html">reader_writer_lock</a>;
-<a name="l00092"></a>00092  
-<a name="l00094"></a><a class="code" href="a00187.html#cf19f20e082887c1bb0ba6b0911c3583">00094</a>         <a class="code" href="a00187.html">scoped_lock</a>(<a class="code" href="a00186.html">reader_writer_lock</a>& <a class="code" href="a00186.html#2653d1a2d560059a51219a8ceab3ade9">lock</a>) {
-<a name="l00095"></a>00095             internal_construct(<a class="code" href="a00186.html#2653d1a2d560059a51219a8ceab3ade9">lock</a>);
-<a name="l00096"></a>00096         }
-<a name="l00097"></a>00097         
-<a name="l00099"></a><a class="code" href="a00187.html#70246e0260493625ff956fa5926fc71f">00099</a>         <a class="code" href="a00187.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="a00186.html">reader_writer_lock</a> *<a class="code" href="a00172.html">mutex</a>;
-<a name="l00114"></a>00114         scoped_lock* next;
-<a name="l00116"></a>00116         <a class="code" href="a00142.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="a00186.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="a00188.html">00126</a>     <span class="keyword">class </span><a class="code" href="a00188.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="a00186.html">reader_writer_lock</a>;
-<a name="l00129"></a>00129 
-<a name="l00131"></a><a class="code" href="a00188.html#87ab0dc8f7216e6ba0f7acd6aec33064">00131</a>         <a class="code" href="a00188.html">scoped_lock_read</a>(<a class="code" href="a00186.html">reader_writer_lock</a>& <a class="code" href="a00186.html#2653d1a2d560059a51219a8ceab3ade9">lock</a>) {
-<a name="l00132"></a>00132             internal_construct(<a class="code" href="a00186.html#2653d1a2d560059a51219a8ceab3ade9">lock</a>);
-<a name="l00133"></a>00133         }
-<a name="l00134"></a>00134 
-<a name="l00136"></a><a class="code" href="a00188.html#bd21c5f3d555d64d1de8658e15bf4966">00136</a>         <a class="code" href="a00188.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="a00186.html">reader_writer_lock</a> *<a class="code" href="a00172.html">mutex</a>;
-<a name="l00151"></a>00151         scoped_lock_read *next;
-<a name="l00153"></a>00153         <a class="code" href="a00142.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="a00186.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="a00186.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="a00186.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="a00186.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="a00186.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="a00186.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-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the 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
deleted file mode 100644
index 838fb13..0000000
--- a/doc/html/a00429.html
+++ /dev/null
@@ -1,246 +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-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_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 <windows.h></span>
-<a name="l00026"></a>00026 <span class="preprocessor">    #if !defined(_WIN32_WINNT)</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span>    <span class="comment">// The following Windows API function is declared explicitly;</span>
-<a name="l00028"></a>00028     <span class="comment">// otherwise any user would have to specify /D_WIN32_WINNT=0x0400</span>
-<a name="l00029"></a>00029     <span class="keyword">extern</span> <span class="stringliteral">"C"</span> BOOL WINAPI TryEnterCriticalSection( LPCRITICAL_SECTION );
-<a name="l00030"></a>00030 <span class="preprocessor">    #endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* if not _WIN32||_WIN64 */</span>
-<a name="l00032"></a>00032 <span class="preprocessor">    #include <pthread.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#include <new></span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include "aligned_space.h"</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "tbb_stddef.h"</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "tbb_profiling.h"</span>
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 <span class="keyword">namespace </span>tbb {
-<a name="l00042"></a>00042 
-<a name="l00044"></a><a class="code" href="a00189.html">00044</a> <span class="keyword">class </span><a class="code" href="a00189.html">recursive_mutex</a> {
-<a name="l00045"></a>00045 <span class="keyword">public</span>:
-<a name="l00047"></a><a class="code" href="a00189.html#d2fceb7f95c24a8cd1457d4527e4b8c6">00047</a>     <a class="code" href="a00189.html#d2fceb7f95c24a8cd1457d4527e4b8c6">recursive_mutex</a>() {
-<a name="l00048"></a>00048 <span class="preprocessor">#if TBB_USE_ASSERT || TBB_USE_THREADING_TOOLS</span>
-<a name="l00049"></a>00049 <span class="preprocessor"></span>        internal_construct();
-<a name="l00050"></a>00050 <span class="preprocessor">#else</span>
-<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
-<a name="l00052"></a>00052 <span class="preprocessor"></span>        InitializeCriticalSection(&impl);
-<a name="l00053"></a>00053 <span class="preprocessor">  #else</span>
-<a name="l00054"></a>00054 <span class="preprocessor"></span>        pthread_mutexattr_t mtx_attr;
-<a name="l00055"></a>00055         <span class="keywordtype">int</span> error_code = pthread_mutexattr_init( &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_mutexattr_init failed"</span>);
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059         pthread_mutexattr_settype( &mtx_attr, PTHREAD_MUTEX_RECURSIVE );
-<a name="l00060"></a>00060         error_code = pthread_mutex_init( &impl, &mtx_attr );
-<a name="l00061"></a>00061         <span class="keywordflow">if</span>( error_code )
-<a name="l00062"></a>00062             tbb::internal::handle_perror(error_code,<span class="stringliteral">"recursive_mutex: pthread_mutex_init failed"</span>);
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064         pthread_mutexattr_destroy( &mtx_attr );
-<a name="l00065"></a>00065 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64*/</span>
-<a name="l00066"></a>00066 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00067"></a>00067     };
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069     ~<a class="code" href="a00189.html">recursive_mutex</a>() {
-<a name="l00070"></a>00070 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00071"></a>00071 <span class="preprocessor"></span>        internal_destroy();
-<a name="l00072"></a>00072 <span class="preprocessor">#else</span>
-<a name="l00073"></a>00073 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
-<a name="l00074"></a>00074 <span class="preprocessor"></span>        DeleteCriticalSection(&impl);
-<a name="l00075"></a>00075 <span class="preprocessor">  #else</span>
-<a name="l00076"></a>00076 <span class="preprocessor"></span>        pthread_mutex_destroy(&impl); 
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00079"></a>00079 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00080"></a>00080     };
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082     <span class="keyword">class </span>scoped_lock;
-<a name="l00083"></a>00083     <span class="keyword">friend</span> <span class="keyword">class </span>scoped_lock;
-<a name="l00084"></a>00084 
-<a name="l00086"></a>00086 
-<a name="l00088"></a><a class="code" href="a00190.html">00088</a>     <span class="keyword">class </span><a class="code" href="a00190.html">scoped_lock</a>: internal::no_copy {
-<a name="l00089"></a>00089     <span class="keyword">public</span>:
-<a name="l00091"></a><a class="code" href="a00190.html#d82d4d36fbf9727a493d26ae50855fe7">00091</a>         <a class="code" href="a00190.html#d82d4d36fbf9727a493d26ae50855fe7">scoped_lock</a>() : my_mutex(NULL) {};
-<a name="l00092"></a>00092 
-<a name="l00094"></a><a class="code" href="a00190.html#dec17713c4c1321ac8fec66816d0c602">00094</a>         <a class="code" href="a00190.html#d82d4d36fbf9727a493d26ae50855fe7">scoped_lock</a>( <a class="code" href="a00189.html">recursive_mutex</a>& <a class="code" href="a00172.html">mutex</a> ) {
-<a name="l00095"></a>00095 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00096"></a>00096 <span class="preprocessor"></span>            my_mutex = &mutex; 
-<a name="l00097"></a>00097 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00098"></a>00098             <a class="code" href="a00190.html#7fb04da37cccf8c99b1f9102d9074f9a">acquire</a>( mutex );
-<a name="l00099"></a>00099         }
-<a name="l00100"></a>00100 
-<a name="l00102"></a><a class="code" href="a00190.html#c1197ffb8f3cd9d4fed71d7e06265b7c">00102</a>         <a class="code" href="a00190.html#c1197ffb8f3cd9d4fed71d7e06265b7c">~scoped_lock</a>() {
-<a name="l00103"></a>00103             <span class="keywordflow">if</span>( my_mutex ) 
-<a name="l00104"></a>00104                 <a class="code" href="a00190.html#ac480ea0e9d5ea0345a67d57008b6263">release</a>();
-<a name="l00105"></a>00105         }
-<a name="l00106"></a>00106 
-<a name="l00108"></a><a class="code" href="a00190.html#7fb04da37cccf8c99b1f9102d9074f9a">00108</a>         <span class="keywordtype">void</span> <a class="code" href="a00190.html#7fb04da37cccf8c99b1f9102d9074f9a">acquire</a>( <a class="code" href="a00189.html">recursive_mutex</a>& <a class="code" href="a00172.html">mutex</a> ) {
-<a name="l00109"></a>00109 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00110"></a>00110 <span class="preprocessor"></span>            internal_acquire( mutex );
-<a name="l00111"></a>00111 <span class="preprocessor">#else</span>
-<a name="l00112"></a>00112 <span class="preprocessor"></span>            my_mutex = &mutex;
-<a name="l00113"></a>00113             mutex.<a class="code" href="a00189.html#4c342c69d47f4bb0b393535dee4015d6">lock</a>();
-<a name="l00114"></a>00114 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00115"></a>00115         }
-<a name="l00116"></a>00116 
-<a name="l00118"></a><a class="code" href="a00190.html#36bfc3e93e3ef6340abef4901444d340">00118</a>         <span class="keywordtype">bool</span> <a class="code" href="a00190.html#36bfc3e93e3ef6340abef4901444d340">try_acquire</a>( <a class="code" href="a00189.html">recursive_mutex</a>& <a class="code" href="a00172.html">mutex</a> ) {
-<a name="l00119"></a>00119 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00120"></a>00120 <span class="preprocessor"></span>            <span class="keywordflow">return</span> internal_try_acquire( mutex );
-<a name="l00121"></a>00121 <span class="preprocessor">#else</span>
-<a name="l00122"></a>00122 <span class="preprocessor"></span>            <span class="keywordtype">bool</span> result = mutex.<a class="code" href="a00189.html#86e719b0afee25704af11ab97694d240">try_lock</a>();
-<a name="l00123"></a>00123             <span class="keywordflow">if</span>( result )
-<a name="l00124"></a>00124                 my_mutex = &mutex;
-<a name="l00125"></a>00125             <span class="keywordflow">return</span> result;
-<a name="l00126"></a>00126 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00127"></a>00127         }
-<a name="l00128"></a>00128 
-<a name="l00130"></a><a class="code" href="a00190.html#ac480ea0e9d5ea0345a67d57008b6263">00130</a>         <span class="keywordtype">void</span> <a class="code" href="a00190.html#ac480ea0e9d5ea0345a67d57008b6263">release</a>() {
-<a name="l00131"></a>00131 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00132"></a>00132 <span class="preprocessor"></span>            internal_release();
-<a name="l00133"></a>00133 <span class="preprocessor">#else</span>
-<a name="l00134"></a>00134 <span class="preprocessor"></span>            my_mutex-><a class="code" href="a00189.html#f0a96e26b7f074588dc31e32524856ae">unlock</a>();
-<a name="l00135"></a>00135             my_mutex = NULL;
-<a name="l00136"></a>00136 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00137"></a>00137         }
-<a name="l00138"></a>00138 
-<a name="l00139"></a>00139     <span class="keyword">private</span>:
-<a name="l00141"></a>00141         <a class="code" href="a00189.html">recursive_mutex</a>* my_mutex;
-<a name="l00142"></a>00142 
-<a name="l00144"></a>00144         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_acquire( <a class="code" href="a00189.html">recursive_mutex</a>& m );
-<a name="l00145"></a>00145 
-<a name="l00147"></a>00147         <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_try_acquire( <a class="code" href="a00189.html">recursive_mutex</a>& m );
-<a name="l00148"></a>00148 
-<a name="l00150"></a>00150         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_release();
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00189.html">recursive_mutex</a>;
-<a name="l00153"></a>00153     };
-<a name="l00154"></a>00154 
-<a name="l00155"></a>00155     <span class="comment">// Mutex traits</span>
-<a name="l00156"></a>00156     <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="l00157"></a>00157     <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="l00158"></a>00158     <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="l00159"></a>00159 
-<a name="l00160"></a>00160     <span class="comment">// C++0x compatibility interface</span>
-<a name="l00161"></a>00161     
-<a name="l00163"></a><a class="code" href="a00189.html#4c342c69d47f4bb0b393535dee4015d6">00163</a>     <span class="keywordtype">void</span> <a class="code" href="a00189.html#4c342c69d47f4bb0b393535dee4015d6">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="a00141.html">aligned_space<scoped_lock,1></a> tmp;
-<a name="l00166"></a>00166         <span class="keyword">new</span>(tmp.<a class="code" href="a00141.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00190.html">scoped_lock</a>(*<span class="keyword">this</span>);
-<a name="l00167"></a>00167 <span class="preprocessor">#else</span>
-<a name="l00168"></a>00168 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
-<a name="l00169"></a>00169 <span class="preprocessor"></span>        EnterCriticalSection(&impl);
-<a name="l00170"></a>00170 <span class="preprocessor">  #else</span>
-<a name="l00171"></a>00171 <span class="preprocessor"></span>        pthread_mutex_lock(&impl);
-<a name="l00172"></a>00172 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00173"></a>00173 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00174"></a>00174     }
-<a name="l00175"></a>00175 
-<a name="l00177"></a>00177 
-<a name="l00178"></a><a class="code" href="a00189.html#86e719b0afee25704af11ab97694d240">00178</a>     <span class="keywordtype">bool</span> <a class="code" href="a00189.html#86e719b0afee25704af11ab97694d240">try_lock</a>() {
-<a name="l00179"></a>00179 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00180"></a>00180 <span class="preprocessor"></span>        <a class="code" href="a00141.html">aligned_space<scoped_lock,1></a> tmp;
-<a name="l00181"></a>00181         <span class="keywordflow">return</span> (<span class="keyword">new</span>(tmp.<a class="code" href="a00141.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00190.html">scoped_lock</a>)->internal_try_acquire(*<span class="keyword">this</span>);
-<a name="l00182"></a>00182 <span class="preprocessor">#else        </span>
-<a name="l00183"></a>00183 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
-<a name="l00184"></a>00184 <span class="preprocessor"></span>        <span class="keywordflow">return</span> TryEnterCriticalSection(&impl)!=0;
-<a name="l00185"></a>00185 <span class="preprocessor">  #else</span>
-<a name="l00186"></a>00186 <span class="preprocessor"></span>        <span class="keywordflow">return</span> pthread_mutex_trylock(&impl)==0;
-<a name="l00187"></a>00187 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00188"></a>00188 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00189"></a>00189     }
-<a name="l00190"></a>00190 
-<a name="l00192"></a><a class="code" href="a00189.html#f0a96e26b7f074588dc31e32524856ae">00192</a>     <span class="keywordtype">void</span> <a class="code" href="a00189.html#f0a96e26b7f074588dc31e32524856ae">unlock</a>() {
-<a name="l00193"></a>00193 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00194"></a>00194 <span class="preprocessor"></span>        <a class="code" href="a00141.html">aligned_space<scoped_lock,1></a> tmp;
-<a name="l00195"></a>00195         <a class="code" href="a00190.html">scoped_lock</a>& s = *tmp.<a class="code" href="a00141.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>();
-<a name="l00196"></a>00196         s.<a class="code" href="a00190.html#3efd10a49e2435ea5215b49907f93ba2">my_mutex</a> = <span class="keyword">this</span>;
-<a name="l00197"></a>00197         s.<a class="code" href="a00190.html#43ed37cec508072e53a52113c8040137">internal_release</a>();
-<a name="l00198"></a>00198 <span class="preprocessor">#else</span>
-<a name="l00199"></a>00199 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
-<a name="l00200"></a>00200 <span class="preprocessor"></span>        LeaveCriticalSection(&impl);
-<a name="l00201"></a>00201 <span class="preprocessor">  #else</span>
-<a name="l00202"></a>00202 <span class="preprocessor"></span>        pthread_mutex_unlock(&impl);
-<a name="l00203"></a>00203 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00204"></a>00204 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00205"></a>00205     }
-<a name="l00206"></a>00206 
-<a name="l00208"></a>00208 <span class="preprocessor">  #if _WIN32||_WIN64</span>
-<a name="l00209"></a><a class="code" href="a00189.html#889fa8cc32dd707eef7c0f52dda09c0d">00209</a> <span class="preprocessor"></span>    <span class="keyword">typedef</span> LPCRITICAL_SECTION <a class="code" href="a00189.html#889fa8cc32dd707eef7c0f52dda09c0d">native_handle_type</a>;
-<a name="l00210"></a>00210 <span class="preprocessor">  #else</span>
-<a name="l00211"></a>00211 <span class="preprocessor"></span>    <span class="keyword">typedef</span> pthread_mutex_t* <a class="code" href="a00189.html#889fa8cc32dd707eef7c0f52dda09c0d">native_handle_type</a>;
-<a name="l00212"></a>00212 <span class="preprocessor">  #endif</span>
-<a name="l00213"></a>00213 <span class="preprocessor"></span>    <a class="code" href="a00189.html#889fa8cc32dd707eef7c0f52dda09c0d">native_handle_type</a> native_handle() { <span class="keywordflow">return</span> (<a class="code" href="a00189.html#889fa8cc32dd707eef7c0f52dda09c0d">native_handle_type</a>) &impl; }
-<a name="l00214"></a>00214 
-<a name="l00215"></a>00215 <span class="keyword">private</span>:
-<a name="l00216"></a>00216 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00217"></a>00217 <span class="preprocessor"></span>    CRITICAL_SECTION impl;
-<a name="l00218"></a>00218     <span class="keyword">enum</span> state_t {
-<a name="l00219"></a>00219         INITIALIZED=0x1234,
-<a name="l00220"></a>00220         DESTROYED=0x789A,
-<a name="l00221"></a>00221     } state;
-<a name="l00222"></a>00222 <span class="preprocessor">#else</span>
-<a name="l00223"></a>00223 <span class="preprocessor"></span>    pthread_mutex_t impl;
-<a name="l00224"></a>00224 <span class="preprocessor">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00225"></a>00225 
-<a name="l00227"></a>00227     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct();
-<a name="l00228"></a>00228 
-<a name="l00230"></a>00230     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_destroy();
-<a name="l00231"></a>00231 };
-<a name="l00232"></a>00232 
-<a name="l00233"></a>00233 __TBB_DEFINE_PROFILING_SET_NAME(recursive_mutex)
-<a name="l00234"></a>00234 
-<a name="l00235"></a>00235 } <span class="comment">// namespace tbb </span>
-<a name="l00236"></a>00236 
-<a name="l00237"></a>00237 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_recursive_mutex_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00430.html b/doc/html/a00430.html
deleted file mode 100644
index 2ac2592..0000000
--- a/doc/html/a00430.html
+++ /dev/null
@@ -1,199 +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 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>scalable_allocator.h</h1><a href="a00248.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<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_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="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 
-<a name="l00027"></a>00027 <span class="preprocessor">#if !defined(__cplusplus) && __ICC==1100</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (push)</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 991)</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#ifdef __cplusplus</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {
-<a name="l00034"></a>00034 <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#if _MSC_VER >= 1400</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXPORTED_FUNC   __cdecl</span>
-<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXPORTED_FUNC</span>
-<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00041"></a>00041 <span class="preprocessor"></span>
-<a name="l00044"></a>00044 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00277.html#gc25b8e6c76db0b346a8249796a7a2475">scalable_malloc</a> (size_t size);
-<a name="l00045"></a>00045 
-<a name="l00048"></a>00048 <span class="keywordtype">void</span>   __TBB_EXPORTED_FUNC <a class="code" href="a00277.html#gca3579c21244dba9f0c351e5984d4565">scalable_free</a> (<span class="keywordtype">void</span>* ptr);
-<a name="l00049"></a>00049 
-<a name="l00052"></a>00052 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00277.html#g951bbbbd2d041acb59ba5fa910b52543">scalable_realloc</a> (<span class="keywordtype">void</span>* ptr, size_t size);
-<a name="l00053"></a>00053 
-<a name="l00056"></a>00056 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00277.html#g3f5a2fde0bcaa3eda35be32c8658f444">scalable_calloc</a> (size_t nobj, size_t size);
-<a name="l00057"></a>00057 
-<a name="l00060"></a>00060 <span class="keywordtype">int</span> __TBB_EXPORTED_FUNC <a class="code" href="a00277.html#g05dcec987480bb2c82ecdead6a085899">scalable_posix_memalign</a> (<span class="keywordtype">void</span>** memptr, size_t alignment, size_t size);
-<a name="l00061"></a>00061 
-<a name="l00064"></a>00064 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00277.html#gc1c7aaa1fe85c17ba5a3a96f7e8d89e7">scalable_aligned_malloc</a> (size_t size, size_t alignment);
-<a name="l00065"></a>00065 
-<a name="l00068"></a>00068 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00277.html#gbaea91376be80dfabd7c93eaffd9abaa">scalable_aligned_realloc</a> (<span class="keywordtype">void</span>* ptr, size_t size, size_t alignment);
-<a name="l00069"></a>00069 
-<a name="l00072"></a>00072 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC <a class="code" href="a00277.html#g65a20e812012f15ec7442d5b45d0cba5">scalable_aligned_free</a> (<span class="keywordtype">void</span>* ptr);
-<a name="l00073"></a>00073 
-<a name="l00078"></a>00078 size_t __TBB_EXPORTED_FUNC <a class="code" href="a00277.html#g0965ce1b4b7835f92869c7fd867265f7">scalable_msize</a> (<span class="keywordtype">void</span>* ptr);
-<a name="l00079"></a>00079 
-<a name="l00080"></a>00080 <span class="preprocessor">#ifdef __cplusplus</span>
-<a name="l00081"></a>00081 <span class="preprocessor"></span>} <span class="comment">/* extern "C" */</span>
-<a name="l00082"></a>00082 <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span>
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084 <span class="preprocessor">#ifdef __cplusplus</span>
-<a name="l00085"></a>00085 <span class="preprocessor"></span>
-<a name="l00086"></a>00086 <span class="preprocessor">#include <new></span>      <span class="comment">/* To use new with the placement argument */</span>
-<a name="l00087"></a>00087 
-<a name="l00088"></a>00088 <span class="comment">/* Ensure that including this header does not cause implicit linkage with TBB */</span>
-<a name="l00089"></a>00089 <span class="preprocessor">#ifndef __TBB_NO_IMPLICIT_LINKAGE</span>
-<a name="l00090"></a>00090 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_NO_IMPLICIT_LINKAGE 1</span>
-<a name="l00091"></a>00091 <span class="preprocessor"></span><span class="preprocessor">    #include "tbb_stddef.h"</span>
-<a name="l00092"></a>00092 <span class="preprocessor">    #undef  __TBB_NO_IMPLICIT_LINKAGE</span>
-<a name="l00093"></a>00093 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00094"></a>00094 <span class="preprocessor"></span><span class="preprocessor">    #include "tbb_stddef.h"</span>
-<a name="l00095"></a>00095 <span class="preprocessor">#endif</span>
-<a name="l00096"></a>00096 <span class="preprocessor"></span>
-<a name="l00097"></a>00097 
-<a name="l00098"></a>00098 <span class="keyword">namespace </span>tbb {
-<a name="l00099"></a>00099 
-<a name="l00100"></a>00100 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
-<a name="l00101"></a>00101 <span class="preprocessor"></span>    <span class="comment">// Workaround for erroneous "unreferenced parameter" warning in method destroy.</span>
-<a name="l00102"></a>00102 <span class="preprocessor">    #pragma warning (push)</span>
-<a name="l00103"></a>00103 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4100)</span>
-<a name="l00104"></a>00104 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00105"></a>00105 <span class="preprocessor"></span>
-<a name="l00107"></a>00107 
-<a name="l00110"></a>00110 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00111"></a><a class="code" href="a00191.html">00111</a> <span class="keyword">class </span><a class="code" href="a00191.html">scalable_allocator</a> {
-<a name="l00112"></a>00112 <span class="keyword">public</span>:
-<a name="l00113"></a>00113     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::allocator_type<T>::value_type value_type;
-<a name="l00114"></a>00114     <span class="keyword">typedef</span> value_type* pointer;
-<a name="l00115"></a>00115     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type* const_pointer;
-<a name="l00116"></a>00116     <span class="keyword">typedef</span> value_type& reference;
-<a name="l00117"></a>00117     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type& const_reference;
-<a name="l00118"></a>00118     <span class="keyword">typedef</span> size_t size_type;
-<a name="l00119"></a>00119     <span class="keyword">typedef</span> ptrdiff_t difference_type;
-<a name="l00120"></a>00120     <span class="keyword">template</span><<span class="keyword">class</span> U> <span class="keyword">struct </span>rebind {
-<a name="l00121"></a>00121         <span class="keyword">typedef</span> <a class="code" href="a00191.html">scalable_allocator<U></a> other;
-<a name="l00122"></a>00122     };
-<a name="l00123"></a>00123 
-<a name="l00124"></a>00124     <a class="code" href="a00191.html">scalable_allocator</a>() <span class="keywordflow">throw</span>() {}
-<a name="l00125"></a>00125     <a class="code" href="a00191.html">scalable_allocator</a>( <span class="keyword">const</span> <a class="code" href="a00191.html">scalable_allocator</a>& ) <span class="keywordflow">throw</span>() {}
-<a name="l00126"></a>00126     <span class="keyword">template</span><<span class="keyword">typename</span> U> <a class="code" href="a00191.html">scalable_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00191.html">scalable_allocator<U></a>&) <span class="keywordflow">throw</span>() {}
-<a name="l00127"></a>00127 
-<a name="l00128"></a>00128     pointer address(reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &x;}
-<a name="l00129"></a>00129     const_pointer address(const_reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &x;}
-<a name="l00130"></a>00130 
-<a name="l00132"></a><a class="code" href="a00191.html#726b1586d05d44665a36e1c7b2699bfd">00132</a>     pointer <a class="code" href="a00191.html#726b1586d05d44665a36e1c7b2699bfd">allocate</a>( size_type n, <span class="keyword">const</span> <span class="keywordtype">void</span>* <span class="comment">/*hint*/</span> =0 ) {
-<a name="l00133"></a>00133         <span class="keywordflow">return</span> static_cast<pointer>( <a class="code" href="a00277.html#gc25b8e6c76db0b346a8249796a7a2475">scalable_malloc</a>( n * <span class="keyword">sizeof</span>(value_type) ) );
-<a name="l00134"></a>00134     }
-<a name="l00135"></a>00135 
-<a name="l00137"></a><a class="code" href="a00191.html#f806a238c18cbcfb531e1e0a0d2ec59d">00137</a>     <span class="keywordtype">void</span> <a class="code" href="a00191.html#f806a238c18cbcfb531e1e0a0d2ec59d">deallocate</a>( pointer p, size_type ) {
-<a name="l00138"></a>00138         <a class="code" href="a00277.html#gca3579c21244dba9f0c351e5984d4565">scalable_free</a>( p );
-<a name="l00139"></a>00139     }
-<a name="l00140"></a>00140 
-<a name="l00142"></a><a class="code" href="a00191.html#880e766f1d913988c21973dbdd874fd5">00142</a>     size_type <a class="code" href="a00191.html#880e766f1d913988c21973dbdd874fd5">max_size</a>() const throw() {
-<a name="l00143"></a>00143         size_type absolutemax = static_cast<size_type>(-1) / <span class="keyword">sizeof</span> (value_type);
-<a name="l00144"></a>00144         <span class="keywordflow">return</span> (absolutemax > 0 ? absolutemax : 1);
-<a name="l00145"></a>00145     }
-<a name="l00146"></a>00146     <span class="keywordtype">void</span> construct( pointer p, <span class="keyword">const</span> value_type& value ) {::new((<span class="keywordtype">void</span>*)(p)) value_type(value);}
-<a name="l00147"></a>00147     <span class="keywordtype">void</span> destroy( pointer p ) {p->~value_type();}
-<a name="l00148"></a>00148 };
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
-<a name="l00151"></a>00151 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
-<a name="l00152"></a>00152 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4100 is back</span>
-<a name="l00153"></a>00153 <span class="preprocessor"></span>
-<a name="l00155"></a>00155 
-<a name="l00156"></a>00156 <span class="keyword">template</span><>
-<a name="l00157"></a><a class="code" href="a00192.html">00157</a> <span class="keyword">class </span><a class="code" href="a00191.html">scalable_allocator</a><void> {
-<a name="l00158"></a>00158 <span class="keyword">public</span>:
-<a name="l00159"></a>00159     <span class="keyword">typedef</span> <span class="keywordtype">void</span>* pointer;
-<a name="l00160"></a>00160     <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keywordtype">void</span>* const_pointer;
-<a name="l00161"></a>00161     <span class="keyword">typedef</span> <span class="keywordtype">void</span> value_type;
-<a name="l00162"></a>00162     <span class="keyword">template</span><<span class="keyword">class</span> U> <span class="keyword">struct </span>rebind {
-<a name="l00163"></a>00163         <span class="keyword">typedef</span> <a class="code" href="a00191.html">scalable_allocator<U></a> other;
-<a name="l00164"></a>00164     };
-<a name="l00165"></a>00165 };
-<a name="l00166"></a>00166 
-<a name="l00167"></a>00167 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00168"></a>00168 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00191.html">scalable_allocator<T></a>&, <span class="keyword">const</span> <a class="code" href="a00191.html">scalable_allocator<U></a>& ) {<span class="keywordflow">return</span> <span class="keyword">true</span>;}
-<a name="l00169"></a>00169 
-<a name="l00170"></a>00170 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00171"></a>00171 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> scalable_allocator<T>&, <span class="keyword">const</span> scalable_allocator<U>& ) {<span class="keywordflow">return</span> <span class="keyword">false</span>;}
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173 } <span class="comment">// namespace tbb</span>
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175 <span class="preprocessor">#if _MSC_VER</span>
-<a name="l00176"></a>00176 <span class="preprocessor"></span><span class="preprocessor">    #if __TBB_BUILD && !defined(__TBBMALLOC_NO_IMPLICIT_LINKAGE)</span>
-<a name="l00177"></a>00177 <span class="preprocessor"></span><span class="preprocessor">        #define __TBBMALLOC_NO_IMPLICIT_LINKAGE 1</span>
-<a name="l00178"></a>00178 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
-<a name="l00179"></a>00179 <span class="preprocessor"></span>
-<a name="l00180"></a>00180 <span class="preprocessor">    #if !__TBBMALLOC_NO_IMPLICIT_LINKAGE</span>
-<a name="l00181"></a>00181 <span class="preprocessor"></span><span class="preprocessor">        #ifdef _DEBUG</span>
-<a name="l00182"></a>00182 <span class="preprocessor"></span><span class="preprocessor">            #pragma comment(lib, "tbbmalloc_debug.lib")</span>
-<a name="l00183"></a>00183 <span class="preprocessor"></span><span class="preprocessor">        #else</span>
-<a name="l00184"></a>00184 <span class="preprocessor"></span><span class="preprocessor">            #pragma comment(lib, "tbbmalloc.lib")</span>
-<a name="l00185"></a>00185 <span class="preprocessor"></span><span class="preprocessor">        #endif</span>
-<a name="l00186"></a>00186 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
-<a name="l00187"></a>00187 <span class="preprocessor"></span>
-<a name="l00188"></a>00188 
-<a name="l00189"></a>00189 <span class="preprocessor">#endif</span>
-<a name="l00190"></a>00190 <span class="preprocessor"></span>
-<a name="l00191"></a>00191 <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span>
-<a name="l00192"></a>00192 
-<a name="l00193"></a>00193 <span class="preprocessor">#if !defined(__cplusplus) && __ICC==1100</span>
-<a name="l00194"></a>00194 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
-<a name="l00195"></a>00195 <span class="preprocessor"></span><span class="preprocessor">#endif // ICC 11.0 warning 991 is back</span>
-<a name="l00196"></a>00196 <span class="preprocessor"></span>
-<a name="l00197"></a>00197 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_scalable_allocator_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the 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
deleted file mode 100644
index 3687329..0000000
--- a/doc/html/a00431.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-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_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="a00194.html">00039</a> <span class="keyword">class </span><a class="code" href="a00194.html">spin_mutex</a> {
-<a name="l00041"></a>00041     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> flag;
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="keyword">public</span>:
-<a name="l00045"></a>00045 
-<a name="l00046"></a><a class="code" href="a00194.html#3d8fb44644fd8d41ada1fbeba7409be3">00046</a>     <a class="code" href="a00194.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="a00195.html">00053</a>     <span class="keyword">class </span><a class="code" href="a00195.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="a00194.html">spin_mutex</a>* my_mutex; 
-<a name="l00057"></a>00057 
-<a name="l00059"></a>00059         uintptr_t 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="a00194.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="a00194.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="a00194.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="a00195.html#29ae680ae7f5e685c2e15535b9c855b3">00074</a>         <a class="code" href="a00195.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="a00195.html#5ce6807050a9e8f87bcb4a65dccb12ef">00077</a>         <a class="code" href="a00195.html#29ae680ae7f5e685c2e15535b9c855b3">scoped_lock</a>( <a class="code" href="a00194.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="a00194.html#81b0b05fb71280ce0c79708e82569d86">flag</a>);
-<a name="l00083"></a>00083             my_mutex=&m;
-<a name="l00084"></a>00084 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT*/</span>
-<a name="l00085"></a>00085         }
-<a name="l00086"></a>00086 
-<a name="l00088"></a><a class="code" href="a00195.html#3ee3c338732b1f64b0b32a757807a30d">00088</a>         <span class="keywordtype">void</span> <a class="code" href="a00195.html#3ee3c338732b1f64b0b32a757807a30d">acquire</a>( <a class="code" href="a00194.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="a00194.html#81b0b05fb71280ce0c79708e82569d86">flag</a>);
-<a name="l00093"></a>00093             my_mutex = &m;
-<a name="l00094"></a>00094 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT*/</span>
-<a name="l00095"></a>00095         }
-<a name="l00096"></a>00096 
-<a name="l00098"></a>00098 
-<a name="l00099"></a><a class="code" href="a00195.html#9297ec188534b45dc0ca48f2f39a0501">00099</a>         <span class="keywordtype">bool</span> <a class="code" href="a00195.html#9297ec188534b45dc0ca48f2f39a0501">try_acquire</a>( <a class="code" href="a00194.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="a00194.html#81b0b05fb71280ce0c79708e82569d86">flag</a>);
-<a name="l00104"></a>00104             <span class="keywordflow">if</span>( result ) {
-<a name="l00105"></a>00105                 my_unlock_value = 0;
-<a name="l00106"></a>00106                 my_mutex = &m;
-<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="a00195.html#eeb615e68e963e6bf8d9c11402d0ce8e">00113</a>         <span class="keywordtype">void</span> <a class="code" href="a00195.html#eeb615e68e963e6bf8d9c11402d0ce8e">release</a>() {
-<a name="l00114"></a>00114 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
-<a name="l00115"></a>00115 <span class="preprocessor"></span>            internal_release();
-<a name="l00116"></a>00116 <span class="preprocessor">#else</span>
-<a name="l00117"></a>00117 <span class="preprocessor"></span>            __TBB_store_with_release(my_mutex-><a class="code" href="a00194.html#81b0b05fb71280ce0c79708e82569d86">flag</a>, static_cast<unsigned char>(my_unlock_value));
-<a name="l00118"></a>00118             my_mutex = NULL;
-<a name="l00119"></a>00119 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */</span>
-<a name="l00120"></a>00120         }
-<a name="l00121"></a>00121 
-<a name="l00123"></a><a class="code" href="a00195.html#ac6fa425d1f06c56d8b70abc51aac844">00123</a>         <a class="code" href="a00195.html#ac6fa425d1f06c56d8b70abc51aac844">~scoped_lock</a>() {
-<a name="l00124"></a>00124             <span class="keywordflow">if</span>( my_mutex ) {
-<a name="l00125"></a>00125 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
-<a name="l00126"></a>00126 <span class="preprocessor"></span>                internal_release();
-<a name="l00127"></a>00127 <span class="preprocessor">#else</span>
-<a name="l00128"></a>00128 <span class="preprocessor"></span>                __TBB_store_with_release(my_mutex-><a class="code" href="a00194.html#81b0b05fb71280ce0c79708e82569d86">flag</a>, static_cast<unsigned char>(my_unlock_value));
-<a name="l00129"></a>00129 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */</span>
-<a name="l00130"></a>00130             }
-<a name="l00131"></a>00131         }
-<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="a00194.html#4f748989e19b6045e3a2d2ee73626a28">00144</a>     <span class="keywordtype">void</span> <a class="code" href="a00194.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="a00141.html">aligned_space<scoped_lock,1></a> tmp;
-<a name="l00147"></a>00147         <span class="keyword">new</span>(tmp.<a class="code" href="a00141.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00195.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="a00194.html#8f9a58fb56a2b4c5efe1a7f7c1ae2074">00155</a>     <span class="keywordtype">bool</span> <a class="code" href="a00194.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="a00141.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="a00141.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00195.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="a00194.html#0e843ee6265f57f27d228ba91e7308ef">00165</a>     <span class="keywordtype">void</span> <a class="code" href="a00194.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="a00141.html">aligned_space<scoped_lock,1></a> tmp;
-<a name="l00168"></a>00168         <a class="code" href="a00195.html">scoped_lock</a>& s = *tmp.<a class="code" href="a00141.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>();
-<a name="l00169"></a>00169         s.<a class="code" href="a00195.html#d968921bed018503214f36e09007ee7b">my_mutex</a> = <span class="keyword">this</span>;
-<a name="l00170"></a>00170         s.<a class="code" href="a00195.html#43a6f8977cd1ed2752f417f3ad9fc4af">my_unlock_value</a> = 0;
-<a name="l00171"></a>00171         s.<a class="code" href="a00195.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-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the 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
deleted file mode 100644
index a3161d8..0000000
--- a/doc/html/a00432.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-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_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="a00196.html">00035</a> <span class="keyword">class </span><a class="code" href="a00196.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="a00196.html#61332b2756de89f3f5f69310cbb6e70c">00067</a>     <a class="code" href="a00196.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="a00196.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="a00197.html">00083</a>     <span class="keyword">class </span><a class="code" href="a00197.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="a00197.html#d6ea60dee5563f702379bf5e51aa8806">00087</a>         <a class="code" href="a00197.html">scoped_lock</a>() : <a class="code" href="a00172.html">mutex</a>(NULL), is_writer(false) {}
-<a name="l00088"></a>00088 
-<a name="l00090"></a><a class="code" href="a00197.html#42a92d4f8fdde425b111cfa8a9228071">00090</a>         <a class="code" href="a00197.html">scoped_lock</a>( <a class="code" href="a00196.html">spin_rw_mutex</a>& m, <span class="keywordtype">bool</span> write = <span class="keyword">true</span> ) : <a class="code" href="a00172.html">mutex</a>(NULL) {
-<a name="l00091"></a>00091             <a class="code" href="a00267.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>(m, write);
-<a name="l00092"></a>00092         }
-<a name="l00093"></a>00093 
-<a name="l00095"></a><a class="code" href="a00197.html#d7eaaa3f2e2c5dc11e7005811b1bdd04">00095</a>         <a class="code" href="a00187.html#70246e0260493625ff956fa5926fc71f">~scoped_lock</a>() {
-<a name="l00096"></a>00096             <span class="keywordflow">if</span>( <a class="code" href="a00172.html">mutex</a> ) <a class="code" href="a00267.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>();
-<a name="l00097"></a>00097         }
-<a name="l00098"></a>00098 
-<a name="l00100"></a><a class="code" href="a00197.html#b0b646ec5be02a127d159bbb7ca65353">00100</a>         <span class="keywordtype">void</span> <a class="code" href="a00267.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>( <a class="code" href="a00196.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="a00172.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="a00172.html">mutex</a> = &m;
-<a name="l00104"></a>00104             <span class="keywordflow">if</span>( write ) <a class="code" href="a00172.html">mutex</a>->internal_acquire_writer();
-<a name="l00105"></a>00105             <span class="keywordflow">else</span>        <a class="code" href="a00172.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="a00197.html#3f0b1e3f2efab63336400348bd070226">00110</a>         <span class="keywordtype">bool</span> upgrade_to_writer() {
-<a name="l00111"></a>00111             __TBB_ASSERT( <a class="code" href="a00172.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="a00172.html">mutex</a>->internal_upgrade();
-<a name="l00115"></a>00115         }
-<a name="l00116"></a>00116 
-<a name="l00118"></a><a class="code" href="a00197.html#61b14d00a78185c9b2d206ebfc379124">00118</a>         <span class="keywordtype">void</span> <a class="code" href="a00267.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>() {
-<a name="l00119"></a>00119             __TBB_ASSERT( <a class="code" href="a00172.html">mutex</a>, <span class="stringliteral">"lock is not acquired"</span> );
-<a name="l00120"></a>00120             <a class="code" href="a00196.html">spin_rw_mutex</a> *m = <a class="code" href="a00172.html">mutex</a>; 
-<a name="l00121"></a>00121             <a class="code" href="a00172.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="a00196.html#621b900d5fef23d2e401aabcbb777c76">state</a>, READERS ); 
-<a name="l00127"></a>00127             <span class="keywordflow">else</span>            __TBB_FetchAndAddWrelease( &m-><a class="code" href="a00196.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="a00197.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="a00172.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="a00172.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="a00172.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="a00197.html#9879626968d9b9a04cd2ec0fb2e84ae1">00146</a>         <span class="keywordtype">bool</span> try_acquire( <a class="code" href="a00196.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="a00172.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="a00172.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">private</span>:
-<a name="l00159"></a>00159         <a class="code" href="a00196.html">spin_rw_mutex</a>* <a class="code" href="a00172.html">mutex</a>;
-<a name="l00160"></a>00160 
-<a name="l00162"></a>00162 
-<a name="l00163"></a>00163         <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="a00196.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="a00196.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="a00196.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="a00196.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="a00196.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-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00433.html b/doc/html/a00433.html
index 58eccd3..fb6f085 100644
--- a/doc/html/a00433.html
+++ b/doc/html/a00433.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>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>
@@ -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-2010 Intel Corporation.  All Rights Reserved.</span>
+<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>
@@ -39,615 +39,296 @@
 <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_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 "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">typedef</span> <span class="keyword">struct </span>___itt_caller *__itt_caller;
-<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>task;
-<a name="l00032"></a>00032 <span class="keyword">class </span>task_list;
-<a name="l00033"></a>00033 
-<a name="l00034"></a>00034 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="keyword">class </span>task_group_context;
-<a name="l00036"></a>00036 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00024"></a>00024 <span class="preprocessor">#if !TBB_PREVIEW_CONCURRENT_PRIORITY_QUEUE</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#error Set TBB_PREVIEW_CONCURRENT_PRIORITY_QUEUE to include concurrent_priority_queue.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 "cache_aligned_allocator.h"</span>
+<a name="l00030"></a>00030 <span class="preprocessor">#include "tbb_exception.h"</span>
+<a name="l00031"></a>00031 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00032"></a>00032 <span class="preprocessor">#include "tbb_profiling.h"</span>
+<a name="l00033"></a>00033 <span class="preprocessor">#include "_aggregator_internal.h"</span>
+<a name="l00034"></a>00034 <span class="preprocessor">#include <vector></span>
+<a name="l00035"></a>00035 <span class="preprocessor">#include <iterator></span>
+<a name="l00036"></a>00036 <span class="preprocessor">#include <functional></span>
 <a name="l00037"></a>00037 
-<a name="l00038"></a>00038 <span class="comment">// MSVC does not allow taking the address of a member that was defined </span>
-<a name="l00039"></a>00039 <span class="comment">// privately in task_base and made public in class task via a using declaration.</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#if _MSC_VER || (__GNUC__==3 && __GNUC_MINOR__<3)</span>
-<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_TASK_BASE_ACCESS public</span>
-<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_TASK_BASE_ACCESS private</span>
-<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00045"></a>00045 <span class="preprocessor"></span>
-<a name="l00046"></a>00046 <span class="keyword">namespace </span>internal {
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048     <span class="keyword">class </span>allocate_additional_child_of_proxy: no_assign {
-<a name="l00050"></a>00050         task* <span class="keyword">self</span>;
-<a name="l00051"></a>00051         task& parent;
-<a name="l00052"></a>00052     <span class="keyword">public</span>:
-<a name="l00053"></a>00053         <span class="keyword">explicit</span> allocate_additional_child_of_proxy( task& parent_ ) : self(NULL), parent(parent_) {}
-<a name="l00054"></a>00054         task& __TBB_EXPORTED_METHOD allocate( size_t size ) <span class="keyword">const</span>;
-<a name="l00055"></a>00055         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD free( task& ) <span class="keyword">const</span>;
-<a name="l00056"></a>00056     };
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 }
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060 <span class="keyword">namespace </span>interface5 {
-<a name="l00061"></a>00061     <span class="keyword">namespace </span>internal {
-<a name="l00063"></a>00063 
-<a name="l00068"></a><a class="code" href="a00200.html">00068</a>         <span class="keyword">class </span><a class="code" href="a00200.html">task_base</a>: tbb::internal::no_copy {
-<a name="l00069"></a>00069         __TBB_TASK_BASE_ACCESS:
-<a name="l00070"></a>00070             <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00199.html">tbb::task</a>;
-<a name="l00071"></a>00071 
-<a name="l00073"></a>00073             <span class="keyword">static</span> <span class="keywordtype">void</span> spawn( <a class="code" href="a00199.html">task</a>& t );
-<a name="l00074"></a>00074  
-<a name="l00076"></a>00076             <span class="keyword">static</span> <span class="keywordtype">void</span> spawn( <a class="code" href="a00202.html">task_list</a>& list );
-<a name="l00077"></a>00077 
-<a name="l00079"></a>00079 
-<a name="l00081"></a>00081             <span class="keyword">static</span> tbb::internal::allocate_additional_child_of_proxy allocate_additional_child_of( <a class="code" href="a00199.html">task</a>& t ) {
-<a name="l00082"></a>00082                 <span class="keywordflow">return</span> tbb::internal::allocate_additional_child_of_proxy(t);
-<a name="l00083"></a>00083             }
+<a name="l00038"></a>00038 <span class="keyword">namespace </span>tbb {
+<a name="l00039"></a>00039 <span class="keyword">namespace </span>interface5 {
+<a name="l00040"></a>00040 
+<a name="l00041"></a>00041 <span class="keyword">using namespace </span>tbb::internal;
+<a name="l00042"></a>00042 
+<a name="l00044"></a>00044 <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="l00045"></a><a class="code" href="a00235.html">00045</a> <span class="keyword">class </span><a class="code" href="a00235.html">concurrent_priority_queue</a> {
+<a name="l00046"></a>00046  <span class="keyword">public</span>:
+<a name="l00048"></a><a class="code" href="a00235.html#7c611a6b5b8f94b0e7f2afc97e31efb1">00048</a>     <span class="keyword">typedef</span> T <a class="code" href="a00235.html#7c611a6b5b8f94b0e7f2afc97e31efb1">value_type</a>;
+<a name="l00049"></a>00049 
+<a name="l00051"></a><a class="code" href="a00235.html#5804b3c708ef4e50d603f918ef2b9e58">00051</a>     <span class="keyword">typedef</span> T& <a class="code" href="a00235.html#5804b3c708ef4e50d603f918ef2b9e58">reference</a>;
+<a name="l00052"></a>00052 
+<a name="l00054"></a><a class="code" href="a00235.html#a4ded8601a434098605be0dcc4febc60">00054</a>     <span class="keyword">typedef</span> <span class="keyword">const</span> T& <a class="code" href="a00235.html#a4ded8601a434098605be0dcc4febc60">const_reference</a>;
+<a name="l00055"></a>00055 
+<a name="l00057"></a><a class="code" href="a00235.html#b679eea8d01d041625a39f719ca2b7ed">00057</a>     <span class="keyword">typedef</span> size_t <a class="code" href="a00235.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a>;
+<a name="l00058"></a>00058 
+<a name="l00060"></a><a class="code" href="a00235.html#77399bc76b3ecd60e33f7e35a5becd87">00060</a>     <span class="keyword">typedef</span> ptrdiff_t <a class="code" href="a00235.html#77399bc76b3ecd60e33f7e35a5becd87">difference_type</a>;
+<a name="l00061"></a>00061 
+<a name="l00063"></a><a class="code" href="a00235.html#1712cb3a46bc1821fccc5e2cd83d5cd7">00063</a>     <span class="keyword">typedef</span> A <a class="code" href="a00235.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a>;
+<a name="l00064"></a>00064 
+<a name="l00066"></a><a class="code" href="a00235.html#eefa40599afe00ea393897d8f5662e65">00066</a>     <span class="keyword">explicit</span> <a class="code" href="a00235.html#eefa40599afe00ea393897d8f5662e65">concurrent_priority_queue</a>(<span class="keyword">const</span> <a class="code" href="a00235.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a>& a = <a class="code" href="a00235.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a>()) : mark(0), data(a) {
+<a name="l00067"></a>00067         my_aggregator.initialize_handler(my_functor_t(<span class="keyword">this</span>));
+<a name="l00068"></a>00068     }
+<a name="l00069"></a>00069 
+<a name="l00071"></a><a class="code" href="a00235.html#4555b4a55415a70024c4004b51e9f385">00071</a>     <span class="keyword">explicit</span> <a class="code" href="a00235.html#eefa40599afe00ea393897d8f5662e65">concurrent_priority_queue</a>(<a class="code" href="a00235.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> init_capacity, <span class="keyword">const</span> <a class="code" href="a00235.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a>& a = <a class="code" href="a00 [...]
+<a name="l00072"></a>00072         data.reserve(init_capacity);
+<a name="l00073"></a>00073         my_aggregator.initialize_handler(my_functor_t(<span class="keyword">this</span>));
+<a name="l00074"></a>00074     }
+<a name="l00075"></a>00075 
+<a name="l00077"></a>00077     <span class="keyword">template</span><<span class="keyword">typename</span> InputIterator>
+<a name="l00078"></a><a class="code" href="a00235.html#9147cb4207017c260a0c3929c12cd40f">00078</a>     <a class="code" href="a00235.html#eefa40599afe00ea393897d8f5662e65">concurrent_priority_queue</a>(InputIterator begin, InputIterator end, <span class="keyword">const</span> <a class="code" href="a00235.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a>& a = <a class="code" href="a00235.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a>()) : data(begin, end, a)
+<a name="l00079"></a>00079     {
+<a name="l00080"></a>00080         mark = data.size();
+<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     }
 <a name="l00084"></a>00084 
 <a name="l00086"></a>00086 
-<a name="l00090"></a>00090             <span class="keyword">static</span> <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC <a class="code" href="a00199.html#dfaacf92685e5f86393bf657b2853bf8">destroy</a>( <a class="code" href="a00199.html">task</a>& victim );
-<a name="l00091"></a>00091         }; 
-<a name="l00092"></a>00092     } <span class="comment">// internal</span>
-<a name="l00093"></a>00093 } <span class="comment">// interface5</span>
-<a name="l00094"></a>00094 
-<a name="l00096"></a>00096 <span class="keyword">namespace </span>internal {
-<a name="l00097"></a>00097 
-<a name="l00098"></a>00098     <span class="keyword">class </span>scheduler: no_copy {
-<a name="l00099"></a>00099     <span class="keyword">public</span>:
-<a name="l00101"></a>00101         <span class="keyword">virtual</span> <span class="keywordtype">void</span> spawn( <a class="code" href="a00199.html">task</a>& first, <a class="code" href="a00199.html">task</a>*& next ) = 0;
-<a name="l00102"></a>00102 
-<a name="l00104"></a>00104         <span class="keyword">virtual</span> <span class="keywordtype">void</span> wait_for_all( <a class="code" href="a00199.html">task</a>& parent, <a class="code" href="a00199.html">task</a>* child ) = 0;
-<a name="l00105"></a>00105 
-<a name="l00107"></a>00107         <span class="keyword">virtual</span> <span class="keywordtype">void</span> spawn_root_and_wait( <a class="code" href="a00199.html">task</a>& first, <a class="code" href="a00199.html">task</a>*& next ) = 0;
-<a name="l00108"></a>00108 
-<a name="l00110"></a>00110         <span class="comment">//  Have to have it just to shut up overzealous compilation warnings</span>
-<a name="l00111"></a>00111         <span class="keyword">virtual</span> ~scheduler() = 0;
-<a name="l00112"></a>00112 <span class="preprocessor">#if __TBB_ARENA_PER_MASTER</span>
-<a name="l00113"></a>00113 <span class="preprocessor"></span>
-<a name="l00115"></a>00115         <span class="keyword">virtual</span> <span class="keywordtype">void</span> enqueue( <a class="code" href="a00199.html">task</a>& t, <span class="keywordtype">void</span>* reserved ) = 0;
-<a name="l00116"></a>00116 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_ARENA_PER_MASTER */</span>
-<a name="l00117"></a>00117     };
+<a name="l00088"></a><a class="code" href="a00235.html#509419e320f200456d89dc54a65140b3">00088</a>     <span class="keyword">explicit</span> <a class="code" href="a00235.html#eefa40599afe00ea393897d8f5662e65">concurrent_priority_queue</a>(<span class="keyword">const</span> <a class="code" href="a00235.html">concurrent_priority_queue</a>& src) : mark(src.mark), data(src.data.begin(), src.data.end(), src.data.<a class="code" href="a00235.html#d545d444fb0d16148f9b61fd89f9a337">get_alloc [...]
+<a name="l00089"></a>00089     {
+<a name="l00090"></a>00090         my_aggregator.initialize_handler(my_functor_t(<span class="keyword">this</span>));
+<a name="l00091"></a>00091         heapify();
+<a name="l00092"></a>00092     }
+<a name="l00093"></a>00093 
+<a name="l00094"></a>00094     <a class="code" href="a00235.html#eefa40599afe00ea393897d8f5662e65">concurrent_priority_queue</a>(<span class="keyword">const</span> <a class="code" href="a00235.html">concurrent_priority_queue</a>& src, <span class="keyword">const</span> <a class="code" href="a00235.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a>& a) : mark(src.mark), data(src.data.begin(), src.data.end(), a)
+<a name="l00095"></a>00095     {
+<a name="l00096"></a>00096         my_aggregator.initialize_handler(my_functor_t(<span class="keyword">this</span>));
+<a name="l00097"></a>00097         heapify();
+<a name="l00098"></a>00098     }
+<a name="l00099"></a>00099 
+<a name="l00101"></a>00101 
+<a name="l00103"></a><a class="code" href="a00235.html#2ab7f7808891027ac0f0f5b3a4be51e9">00103</a>     <a class="code" href="a00235.html">concurrent_priority_queue</a>& <a class="code" href="a00235.html#2ab7f7808891027ac0f0f5b3a4be51e9">operator=</a>(<span class="keyword">const</span> <a class="code" href="a00235.html">concurrent_priority_queue</a>& src) {
+<a name="l00104"></a>00104         <span class="keywordflow">if</span> (<span class="keyword">this</span> != &src) {
+<a name="l00105"></a>00105             std::vector<value_type, allocator_type>(src.<a class="code" href="a00235.html#384fd94d6b4d4dfce7aa64b531be7545">data</a>.begin(), src.<a class="code" href="a00235.html#384fd94d6b4d4dfce7aa64b531be7545">data</a>.end(), src.<a class="code" href="a00235.html#384fd94d6b4d4dfce7aa64b531be7545">data</a>.get_allocator()).<a class="code" href="a00235.html#0ecdc6a04aa259374425d424ca2a6082">swap</a>(data);
+<a name="l00106"></a>00106             mark = src.<a class="code" href="a00235.html#7fcd8d21ea4228b6079a2f2723550af0">mark</a>;
+<a name="l00107"></a>00107         }
+<a name="l00108"></a>00108         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00109"></a>00109     }
+<a name="l00110"></a>00110 
+<a name="l00112"></a>00112 
+<a name="l00113"></a><a class="code" href="a00235.html#317c508fa92df218be5d014c26c09bb7">00113</a>     <span class="keywordtype">bool</span> <a class="code" href="a00235.html#317c508fa92df218be5d014c26c09bb7">empty</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> data.empty(); }
+<a name="l00114"></a>00114 
+<a name="l00116"></a>00116 
+<a name="l00117"></a><a class="code" href="a00235.html#8b2ae25c61338c6fd59e94fe09822ba5">00117</a>     <a class="code" href="a00235.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> <a class="code" href="a00235.html#8b2ae25c61338c6fd59e94fe09822ba5">size</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> data.size(); }
 <a name="l00118"></a>00118 
 <a name="l00120"></a>00120 
-<a name="l00121"></a>00121     <span class="keyword">typedef</span> intptr_t reference_count;
+<a name="l00121"></a><a class="code" href="a00235.html#e5d6a0aca1579ecebb716bbe53514963">00121</a>     <a class="code" href="a00235.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> <a class="code" href="a00235.html#e5d6a0aca1579ecebb716bbe53514963">capacity</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> data.capacity(); }
 <a name="l00122"></a>00122 
-<a name="l00124"></a>00124     <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> affinity_id;
-<a name="l00125"></a>00125 
-<a name="l00126"></a>00126 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00127"></a>00127 <span class="preprocessor"></span>    <span class="keyword">struct </span>context_list_node_t {
-<a name="l00128"></a>00128         context_list_node_t *my_prev,
-<a name="l00129"></a>00129                             *my_next;
-<a name="l00130"></a>00130     };
-<a name="l00131"></a>00131 
-<a name="l00132"></a>00132     <span class="keyword">class </span>allocate_root_with_context_proxy: no_assign {
-<a name="l00133"></a>00133         task_group_context& my_context;
-<a name="l00134"></a>00134     <span class="keyword">public</span>:
-<a name="l00135"></a>00135         allocate_root_with_context_proxy ( task_group_context& ctx ) : my_context(ctx) {}
-<a name="l00136"></a>00136         task& __TBB_EXPORTED_METHOD allocate( size_t size ) <span class="keyword">const</span>;
-<a name="l00137"></a>00137         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD free( task& ) <span class="keyword">const</span>;
-<a name="l00138"></a>00138     };
-<a name="l00139"></a>00139 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00124"></a><a class="code" href="a00235.html#d905af7b8f6defff562f5ae9c3275763">00124</a>     <span class="keywordtype">void</span> <a class="code" href="a00235.html#d905af7b8f6defff562f5ae9c3275763">push</a>(<a class="code" href="a00235.html#a4ded8601a434098605be0dcc4febc60">const_reference</a> elem) {
+<a name="l00125"></a>00125         cpq_operation op_data(elem, PUSH_OP);
+<a name="l00126"></a>00126         my_aggregator.execute(&op_data);
+<a name="l00127"></a>00127         <span class="keywordflow">if</span> (op_data.status == FAILED) <span class="comment">// exception thrown</span>
+<a name="l00128"></a>00128             throw_exception(eid_bad_alloc);
+<a name="l00129"></a>00129     }
+<a name="l00130"></a>00130 
+<a name="l00132"></a>00132 
+<a name="l00134"></a><a class="code" href="a00235.html#e036461a29cc40902a2bb79abf9f5146">00134</a>     <span class="keywordtype">bool</span> <a class="code" href="a00235.html#e036461a29cc40902a2bb79abf9f5146">try_pop</a>(<a class="code" href="a00235.html#5804b3c708ef4e50d603f918ef2b9e58">reference</a> elem) {
+<a name="l00135"></a>00135         cpq_operation op_data(POP_OP);
+<a name="l00136"></a>00136         op_data.elem = &elem;
+<a name="l00137"></a>00137         my_aggregator.execute(&op_data);
+<a name="l00138"></a>00138         <span class="keywordflow">return</span> op_data.status==SUCCEEDED;
+<a name="l00139"></a>00139     }
 <a name="l00140"></a>00140 
-<a name="l00141"></a>00141     <span class="keyword">class </span>allocate_root_proxy: no_assign {
-<a name="l00142"></a>00142     <span class="keyword">public</span>:
-<a name="l00143"></a>00143         <span class="keyword">static</span> task& __TBB_EXPORTED_FUNC allocate( size_t size );
-<a name="l00144"></a>00144         <span class="keyword">static</span> <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC free( task& );
-<a name="l00145"></a>00145     };
-<a name="l00146"></a>00146 
-<a name="l00147"></a>00147     <span class="keyword">class </span>allocate_continuation_proxy: no_assign {
-<a name="l00148"></a>00148     <span class="keyword">public</span>:
-<a name="l00149"></a>00149         task& __TBB_EXPORTED_METHOD allocate( size_t size ) <span class="keyword">const</span>;
-<a name="l00150"></a>00150         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD free( task& ) <span class="keyword">const</span>;
-<a name="l00151"></a>00151     };
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153     <span class="keyword">class </span>allocate_child_proxy: no_assign {
-<a name="l00154"></a>00154     <span class="keyword">public</span>:
-<a name="l00155"></a>00155         task& __TBB_EXPORTED_METHOD allocate( size_t size ) <span class="keyword">const</span>;
-<a name="l00156"></a>00156         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD free( task& ) <span class="keyword">const</span>;
-<a name="l00157"></a>00157     };
-<a name="l00158"></a>00158 
-<a name="l00160"></a>00160 
-<a name="l00165"></a>00165     <span class="keyword">class </span>task_prefix {
-<a name="l00166"></a>00166     <span class="keyword">private</span>:
-<a name="l00167"></a>00167         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00199.html">tbb::task</a>;
-<a name="l00168"></a>00168         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00200.html">tbb::interface5::internal::task_base</a>;
-<a name="l00169"></a>00169         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00202.html">tbb::task_list</a>;
-<a name="l00170"></a>00170         <span class="keyword">friend</span> <span class="keyword">class </span>internal::scheduler;
-<a name="l00171"></a>00171         <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_root_proxy;
-<a name="l00172"></a>00172         <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_child_proxy;
-<a name="l00173"></a>00173         <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_continuation_proxy;
-<a name="l00174"></a>00174         <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_additional_child_of_proxy;
+<a name="l00142"></a><a class="code" href="a00235.html#e7c59f011c4cca83ff210aefe7c9d868">00142</a>     <span class="keywordtype">void</span> <a class="code" href="a00235.html#e7c59f011c4cca83ff210aefe7c9d868">reserve</a>(<a class="code" href="a00235.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> new_cap) {
+<a name="l00143"></a>00143         cpq_operation op_data(RESERVE_OP);
+<a name="l00144"></a>00144         op_data.sz = new_cap;
+<a name="l00145"></a>00145         my_aggregator.execute(&op_data);
+<a name="l00146"></a>00146         <span class="keywordflow">if</span> (op_data.status == FAILED) <span class="comment">// exception thrown</span>
+<a name="l00147"></a>00147             throw_exception(eid_bad_alloc);
+<a name="l00148"></a>00148     }
+<a name="l00149"></a>00149 
+<a name="l00151"></a>00151 
+<a name="l00153"></a><a class="code" href="a00235.html#0bdcdf7cde9fd369edca845bec34ca94">00153</a>     <span class="keywordtype">void</span> <a class="code" href="a00235.html#0bdcdf7cde9fd369edca845bec34ca94">clear</a>() {
+<a name="l00154"></a>00154         data.clear();
+<a name="l00155"></a>00155         mark = 0;
+<a name="l00156"></a>00156     }
+<a name="l00157"></a>00157 
+<a name="l00159"></a><a class="code" href="a00235.html#28d113288fc7e0c04c9053ec7de61368">00159</a>     <span class="keywordtype">void</span> <a class="code" href="a00235.html#28d113288fc7e0c04c9053ec7de61368">shrink_to_fit</a>() {
+<a name="l00160"></a>00160         std::vector<value_type, allocator_type>(data.begin(), data.end(), data.get_allocator()).<a class="code" href="a00235.html#0ecdc6a04aa259374425d424ca2a6082">swap</a>(data);
+<a name="l00161"></a>00161     }
+<a name="l00162"></a>00162 
+<a name="l00164"></a><a class="code" href="a00235.html#0ecdc6a04aa259374425d424ca2a6082">00164</a>     <span class="keywordtype">void</span> <a class="code" href="a00235.html#0ecdc6a04aa259374425d424ca2a6082">swap</a>(<a class="code" href="a00235.html">concurrent_priority_queue</a>& q) {
+<a name="l00165"></a>00165         data.swap(q.<a class="code" href="a00235.html#384fd94d6b4d4dfce7aa64b531be7545">data</a>);
+<a name="l00166"></a>00166         std::swap(mark, q.<a class="code" href="a00235.html#7fcd8d21ea4228b6079a2f2723550af0">mark</a>);
+<a name="l00167"></a>00167     }
+<a name="l00168"></a>00168 
+<a name="l00170"></a><a class="code" href="a00235.html#d545d444fb0d16148f9b61fd89f9a337">00170</a>     <a class="code" href="a00235.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a> <a class="code" href="a00235.html#d545d444fb0d16148f9b61fd89f9a337">get_allocator</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> data.get_allocator(); }
+<a name="l00171"></a>00171 
+<a name="l00172"></a>00172  <span class="keyword">private</span>:
+<a name="l00173"></a>00173     <span class="keyword">enum</span> operation_type {INVALID_OP, PUSH_OP, POP_OP, RESERVE_OP};
+<a name="l00174"></a>00174     <span class="keyword">enum</span> operation_status { WAIT=0, SUCCEEDED, FAILED };
 <a name="l00175"></a>00175 
-<a name="l00176"></a>00176 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00178"></a>00178 <span class="preprocessor"></span>
-<a name="l00181"></a>00181 <span class="preprocessor">        task_group_context  *context;</span>
-<a name="l00182"></a>00182 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00183"></a>00183         
-<a name="l00185"></a>00185 
-<a name="l00190"></a>00190         scheduler* origin;
-<a name="l00191"></a>00191 
-<a name="l00193"></a>00193         scheduler* owner;
-<a name="l00194"></a>00194 
-<a name="l00196"></a>00196 
-<a name="l00199"></a>00199         <a class="code" href="a00199.html">tbb::task</a>* parent;
-<a name="l00200"></a>00200 
-<a name="l00202"></a>00202 
-<a name="l00206"></a>00206         reference_count ref_count;
+<a name="l00176"></a>00176     <span class="keyword">class </span>cpq_operation : <span class="keyword">public</span> aggregated_operation<cpq_operation> {
+<a name="l00177"></a>00177      <span class="keyword">public</span>:
+<a name="l00178"></a>00178         operation_type type;
+<a name="l00179"></a>00179         <span class="keyword">union </span>{
+<a name="l00180"></a>00180             <a class="code" href="a00235.html#7c611a6b5b8f94b0e7f2afc97e31efb1">value_type</a> *elem;
+<a name="l00181"></a>00181             <a class="code" href="a00235.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> sz;
+<a name="l00182"></a>00182         };
+<a name="l00183"></a>00183         cpq_operation(<a class="code" href="a00235.html#a4ded8601a434098605be0dcc4febc60">const_reference</a> e, operation_type t) :
+<a name="l00184"></a>00184             type(t), elem(const_cast<<a class="code" href="a00235.html#7c611a6b5b8f94b0e7f2afc97e31efb1">value_type</a>*>(&e)) {}
+<a name="l00185"></a>00185         cpq_operation(operation_type t) : type(t) {}
+<a name="l00186"></a>00186     };
+<a name="l00187"></a>00187 
+<a name="l00188"></a>00188     <span class="keyword">class </span>my_functor_t {
+<a name="l00189"></a>00189         concurrent_priority_queue<T, Compare, A> *cpq;
+<a name="l00190"></a>00190      <span class="keyword">public</span>:
+<a name="l00191"></a>00191         my_functor_t() {}
+<a name="l00192"></a>00192         my_functor_t(concurrent_priority_queue<T, Compare, A> *cpq_) : cpq(cpq_) {}
+<a name="l00193"></a>00193         <span class="keywordtype">void</span> operator()(cpq_operation* op_list) {
+<a name="l00194"></a>00194             cpq->handle_operations(op_list);
+<a name="l00195"></a>00195         }
+<a name="l00196"></a>00196     };
+<a name="l00197"></a>00197 
+<a name="l00198"></a>00198     aggregator< my_functor_t, cpq_operation> my_aggregator;
+<a name="l00200"></a>00200     <span class="keywordtype">char</span> padding1[NFS_MaxLineSize - <span class="keyword">sizeof</span>(aggregator< my_functor_t, cpq_operation >)];
+<a name="l00202"></a>00202     <a class="code" href="a00235.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> mark;
+<a name="l00203"></a>00203     Compare compare;
+<a name="l00205"></a>00205     <span class="keywordtype">char</span> padding2[NFS_MaxLineSize - <span class="keyword">sizeof</span>(<a class="code" href="a00235.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a>) - <span class="keyword">sizeof</span>(Compare)];
 <a name="l00207"></a>00207 
-<a name="l00209"></a>00209 
-<a name="l00210"></a>00210         <span class="keywordtype">int</span> depth;
-<a name="l00211"></a>00211 
-<a name="l00213"></a>00213 
-<a name="l00214"></a>00214         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> state;
-<a name="l00215"></a>00215 
-<a name="l00217"></a>00217 
-<a name="l00222"></a>00222         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> extra_state;
-<a name="l00223"></a>00223 
-<a name="l00224"></a>00224         affinity_id affinity;
-<a name="l00225"></a>00225 
-<a name="l00227"></a>00227         <a class="code" href="a00199.html">tbb::task</a>* next;
-<a name="l00228"></a>00228 
-<a name="l00230"></a>00230         <a class="code" href="a00199.html">tbb::task</a>& task() {<span class="keywordflow">return</span> *reinterpret_cast<tbb::task*>(<span class="keyword">this</span>+1);}
-<a name="l00231"></a>00231     };
-<a name="l00232"></a>00232 
-<a name="l00233"></a>00233 } <span class="comment">// namespace internal</span>
-<a name="l00235"></a>00235 <span class="comment"></span>
-<a name="l00236"></a>00236 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00237"></a>00237 <span class="preprocessor"></span>
-<a name="l00238"></a>00238 <span class="preprocessor">#if TBB_USE_CAPTURED_EXCEPTION</span>
-<a name="l00239"></a>00239 <span class="preprocessor"></span>    <span class="keyword">class </span>tbb_exception;
-<a name="l00240"></a>00240 <span class="preprocessor">#else</span>
-<a name="l00241"></a>00241 <span class="preprocessor"></span>    <span class="keyword">namespace </span>internal {
-<a name="l00242"></a>00242         <span class="keyword">class </span>tbb_exception_ptr;
-<a name="l00243"></a>00243     }
-<a name="l00244"></a>00244 <span class="preprocessor">#endif </span><span class="comment">/* !TBB_USE_CAPTURED_EXCEPTION */</span>
-<a name="l00245"></a>00245 
-<a name="l00247"></a>00247 
-<a name="l00267"></a><a class="code" href="a00201.html">00267</a> <span class="keyword">class </span><a class="code" href="a00201.html">task_group_context</a> : internal::no_copy {
-<a name="l00268"></a>00268 <span class="keyword">private</span>:
-<a name="l00269"></a>00269 <span class="preprocessor">#if TBB_USE_CAPTURED_EXCEPTION</span>
-<a name="l00270"></a>00270 <span class="preprocessor"></span>    <span class="keyword">typedef</span> <a class="code" href="a00206.html">tbb_exception</a> <a class="code" href="a00206.html">exception_container_type</a>;
-<a name="l00271"></a>00271 <span class="preprocessor">#else</span>
-<a name="l00272"></a>00272 <span class="preprocessor"></span>    <span class="keyword">typedef</span> <a class="code" href="a00207.html">internal::tbb_exception_ptr</a> <a class="code" href="a00206.html">exception_container_type</a>;
-<a name="l00273"></a>00273 <span class="preprocessor">#endif</span>
-<a name="l00274"></a>00274 <span class="preprocessor"></span>
-<a name="l00275"></a>00275     <span class="keyword">enum</span> version_traits_word_layout {
-<a name="l00276"></a>00276         traits_offset = 16,
-<a name="l00277"></a>00277         version_mask = 0xFFFF,
-<a name="l00278"></a>00278         traits_mask = 0xFFFFul << traits_offset
-<a name="l00279"></a>00279     };
-<a name="l00280"></a>00280 
-<a name="l00281"></a>00281 <span class="keyword">public</span>:
-<a name="l00282"></a>00282     <span class="keyword">enum</span> kind_type {
-<a name="l00283"></a>00283         isolated,
-<a name="l00284"></a>00284         bound
-<a name="l00285"></a>00285     };
-<a name="l00286"></a>00286 
-<a name="l00287"></a>00287     <span class="keyword">enum</span> traits_type {
-<a name="l00288"></a>00288         exact_exception = 0x0001ul << traits_offset,
-<a name="l00289"></a>00289         concurrent_wait = 0x0004ul << traits_offset,
-<a name="l00290"></a>00290 <span class="preprocessor">#if TBB_USE_CAPTURED_EXCEPTION</span>
-<a name="l00291"></a>00291 <span class="preprocessor"></span>        default_traits = 0
-<a name="l00292"></a>00292 <span class="preprocessor">#else</span>
-<a name="l00293"></a>00293 <span class="preprocessor"></span>        default_traits = exact_exception
-<a name="l00294"></a>00294 <span class="preprocessor">#endif </span><span class="comment">/* !TBB_USE_CAPTURED_EXCEPTION */</span>
-<a name="l00295"></a>00295     };
-<a name="l00296"></a>00296 
-<a name="l00297"></a>00297 <span class="keyword">private</span>:
-<a name="l00298"></a>00298     <span class="keyword">union </span>{
-<a name="l00300"></a>00300         kind_type my_kind;
-<a name="l00301"></a>00301         uintptr_t _my_kind_aligner;
-<a name="l00302"></a>00302     };
-<a name="l00303"></a>00303 
-<a name="l00305"></a>00305     <a class="code" href="a00201.html">task_group_context</a> *my_parent;
-<a name="l00306"></a>00306 
-<a name="l00308"></a>00308 
-<a name="l00310"></a>00310     internal::context_list_node_t my_node;
+<a name="l00225"></a>00225     std::vector<value_type, allocator_type> data;
+<a name="l00226"></a>00226 
+<a name="l00227"></a>00227     <span class="keywordtype">void</span> handle_operations(cpq_operation *op_list) {
+<a name="l00228"></a>00228         cpq_operation *tmp, *pop_list=NULL;
+<a name="l00229"></a>00229 
+<a name="l00230"></a>00230         __TBB_ASSERT(mark == data.size(), NULL);
+<a name="l00231"></a>00231 
+<a name="l00232"></a>00232         <span class="comment">// first pass processes all constant time operations: pushes,</span>
+<a name="l00233"></a>00233         <span class="comment">// tops, some pops. Also reserve.</span>
+<a name="l00234"></a>00234         <span class="keywordflow">while</span> (op_list) {
+<a name="l00235"></a>00235             <span class="comment">// ITT note: &(op_list->status) tag is used to cover accesses to op_list</span>
+<a name="l00236"></a>00236             <span class="comment">// node. This thread is going to handle the operation, and so will acquire it</span>
+<a name="l00237"></a>00237             <span class="comment">// and perform the associated operation w/o triggering a race condition; the</span>
+<a name="l00238"></a>00238             <span class="comment">// thread that created the operation is waiting on the status field, so when</span>
+<a name="l00239"></a>00239             <span class="comment">// this thread is done with the operation, it will perform a</span>
+<a name="l00240"></a>00240             <span class="comment">// store_with_release to give control back to the waiting thread in</span>
+<a name="l00241"></a>00241             <span class="comment">// aggregator::insert_operation.</span>
+<a name="l00242"></a>00242             call_itt_notify(acquired, &(op_list->status));
+<a name="l00243"></a>00243             __TBB_ASSERT(op_list->type != INVALID_OP, NULL);
+<a name="l00244"></a>00244             tmp = op_list;
+<a name="l00245"></a>00245             op_list = itt_hide_load_word(op_list->next);
+<a name="l00246"></a>00246             <span class="keywordflow">if</span> (tmp->type == PUSH_OP) {
+<a name="l00247"></a>00247                 __TBB_TRY {
+<a name="l00248"></a>00248                     data.push_back(*(tmp->elem));
+<a name="l00249"></a>00249                     itt_store_word_with_release(tmp->status, uintptr_t(SUCCEEDED));
+<a name="l00250"></a>00250                 } __TBB_CATCH(...) {
+<a name="l00251"></a>00251                     itt_store_word_with_release(tmp->status, uintptr_t(FAILED));
+<a name="l00252"></a>00252                 }
+<a name="l00253"></a>00253             }
+<a name="l00254"></a>00254             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (tmp->type == POP_OP) {
+<a name="l00255"></a>00255                 <span class="keywordflow">if</span> (mark < data.size() &&
+<a name="l00256"></a>00256                     compare(data[0], data[data.size()-1])) {
+<a name="l00257"></a>00257                     <span class="comment">// there are newly pushed elems and the last one</span>
+<a name="l00258"></a>00258                     <span class="comment">// is higher than top</span>
+<a name="l00259"></a>00259                     *(tmp->elem) = data[data.size()-1]; <span class="comment">// copy the data</span>
+<a name="l00260"></a>00260                     itt_store_word_with_release(tmp->status, uintptr_t(SUCCEEDED));
+<a name="l00261"></a>00261                     data.pop_back();
+<a name="l00262"></a>00262                     __TBB_ASSERT(mark<=data.size(), NULL);
+<a name="l00263"></a>00263                 }
+<a name="l00264"></a>00264                 <span class="keywordflow">else</span> { <span class="comment">// no convenient item to pop; postpone</span>
+<a name="l00265"></a>00265                     itt_hide_store_word(tmp->next, pop_list);
+<a name="l00266"></a>00266                     pop_list = tmp;
+<a name="l00267"></a>00267                 }
+<a name="l00268"></a>00268             }
+<a name="l00269"></a>00269             <span class="keywordflow">else</span> {
+<a name="l00270"></a>00270                 __TBB_ASSERT(tmp->type == RESERVE_OP, NULL);
+<a name="l00271"></a>00271                 __TBB_TRY {
+<a name="l00272"></a>00272                     data.reserve(tmp->sz);
+<a name="l00273"></a>00273                     itt_store_word_with_release(tmp->status, uintptr_t(SUCCEEDED));
+<a name="l00274"></a>00274                 } __TBB_CATCH(...) {
+<a name="l00275"></a>00275                     itt_store_word_with_release(tmp->status, uintptr_t(FAILED));
+<a name="l00276"></a>00276                 }
+<a name="l00277"></a>00277             }
+<a name="l00278"></a>00278         }
+<a name="l00279"></a>00279 
+<a name="l00280"></a>00280         <span class="comment">// second pass processes pop operations</span>
+<a name="l00281"></a>00281         <span class="keywordflow">while</span> (pop_list) {
+<a name="l00282"></a>00282             tmp = pop_list;
+<a name="l00283"></a>00283             pop_list = itt_hide_load_word(pop_list->next);
+<a name="l00284"></a>00284             __TBB_ASSERT(tmp->type == POP_OP, NULL);
+<a name="l00285"></a>00285             <span class="keywordflow">if</span> (data.empty()) {
+<a name="l00286"></a>00286                 itt_store_word_with_release(tmp->status, uintptr_t(FAILED));
+<a name="l00287"></a>00287             }
+<a name="l00288"></a>00288             <span class="keywordflow">else</span> {
+<a name="l00289"></a>00289                 __TBB_ASSERT(mark<=data.size(), NULL);
+<a name="l00290"></a>00290                 <span class="keywordflow">if</span> (mark < data.size() &&
+<a name="l00291"></a>00291                     compare(data[0], data[data.size()-1])) {
+<a name="l00292"></a>00292                     <span class="comment">// there are newly pushed elems and the last one is</span>
+<a name="l00293"></a>00293                     <span class="comment">// higher than top</span>
+<a name="l00294"></a>00294                     *(tmp->elem) = data[data.size()-1]; <span class="comment">// copy the data</span>
+<a name="l00295"></a>00295                     itt_store_word_with_release(tmp->status, uintptr_t(SUCCEEDED));
+<a name="l00296"></a>00296                     data.pop_back();
+<a name="l00297"></a>00297                 }
+<a name="l00298"></a>00298                 <span class="keywordflow">else</span> { <span class="comment">// extract top and push last element down heap</span>
+<a name="l00299"></a>00299                     *(tmp->elem) = data[0]; <span class="comment">// copy the data</span>
+<a name="l00300"></a>00300                     itt_store_word_with_release(tmp->status, uintptr_t(SUCCEEDED));
+<a name="l00301"></a>00301                     reheap();
+<a name="l00302"></a>00302                 }
+<a name="l00303"></a>00303             }
+<a name="l00304"></a>00304         }
+<a name="l00305"></a>00305 
+<a name="l00306"></a>00306         <span class="comment">// heapify any leftover pushed elements before doing the next</span>
+<a name="l00307"></a>00307         <span class="comment">// batch of operations</span>
+<a name="l00308"></a>00308         <span class="keywordflow">if</span> (mark<data.size()) heapify();
+<a name="l00309"></a>00309         __TBB_ASSERT(mark == data.size(), NULL);
+<a name="l00310"></a>00310     }
 <a name="l00311"></a>00311 
-<a name="l00313"></a>00313     __itt_caller itt_caller;
-<a name="l00314"></a>00314 
-<a name="l00316"></a>00316 
-<a name="l00319"></a>00319     <span class="keywordtype">char</span> _leading_padding[internal::NFS_MaxLineSize - 
-<a name="l00320"></a>00320                     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="l00321"></a>00321                           - <span class="keyword">sizeof</span>(__itt_caller)];
-<a name="l00322"></a>00322     
-<a name="l00324"></a>00324     uintptr_t my_cancellation_requested;
-<a name="l00325"></a>00325     
-<a name="l00327"></a>00327 
-<a name="l00330"></a>00330     uintptr_t  my_version_and_traits;
-<a name="l00331"></a>00331 
-<a name="l00333"></a>00333     <a class="code" href="a00206.html">exception_container_type</a> *my_exception;
-<a name="l00334"></a>00334 
-<a name="l00336"></a>00336 
-<a name="l00339"></a>00339     <span class="keywordtype">void</span> *my_owner;
-<a name="l00340"></a>00340 
-<a name="l00342"></a>00342 
-<a name="l00343"></a>00343     <span class="keywordtype">char</span> _trailing_padding[internal::NFS_MaxLineSize - <span class="keyword">sizeof</span>(intptr_t) - 2 * <span class="keyword">sizeof</span>(<span class="keywordtype">void</span>*)];
-<a name="l00344"></a>00344 
-<a name="l00345"></a>00345 <span class="keyword">public</span>:
-<a name="l00347"></a>00347 
-<a name="l00374"></a><a class="code" href="a00201.html#19fee08fb8ac98adccfe69c1aa63c491">00374</a>     <a class="code" href="a00201.html#19fee08fb8ac98adccfe69c1aa63c491">task_group_context</a> ( kind_type relation_with_parent = bound,
-<a name="l00375"></a>00375                          uintptr_t traits = default_traits )
-<a name="l00376"></a>00376         : my_kind(relation_with_parent)
-<a name="l00377"></a>00377         , my_version_and_traits(1 | traits)
-<a name="l00378"></a>00378     {
-<a name="l00379"></a>00379         <a class="code" href="a00201.html#49a55352084fd44b8863d182e839e6dc">init</a>();
-<a name="l00380"></a>00380     }
-<a name="l00381"></a>00381 
-<a name="l00382"></a>00382     __TBB_EXPORTED_METHOD ~<a class="code" href="a00201.html">task_group_context</a> ();
-<a name="l00383"></a>00383 
-<a name="l00385"></a>00385 
-<a name="l00392"></a>00392     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00201.html#6d30d16bf1cd22f86c6afaf29c2b430c">reset</a> ();
-<a name="l00393"></a>00393 
-<a name="l00395"></a>00395 
-<a name="l00402"></a>00402     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD <a class="code" href="a00201.html#8bcdfdf4e6bfb76125b6de15c00b571d">cancel_group_execution</a> ();
-<a name="l00403"></a>00403 
-<a name="l00405"></a>00405     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD <a class="code" href="a00201.html#4db72f16210b0a991b2c134d6763a4cc">is_group_execution_cancelled</a> () <span class="keyword">const</span>;
-<a name="l00406"></a>00406 
-<a name="l00408"></a>00408 
-<a name="l00414"></a>00414     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00201.html#d97c8a03615594b71b4ef06ff75cf561">register_pending_exception</a> ();
-<a name="l00415"></a>00415 
-<a name="l00416"></a>00416 <span class="keyword">protected</span>:
-<a name="l00418"></a>00418 
-<a name="l00419"></a>00419     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00201.html#49a55352084fd44b8863d182e839e6dc">init</a> ();
-<a name="l00420"></a>00420 
-<a name="l00421"></a>00421 <span class="keyword">private</span>:
-<a name="l00422"></a>00422     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00199.html">task</a>;
-<a name="l00423"></a>00423     <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_root_with_context_proxy;
-<a name="l00424"></a>00424 
-<a name="l00425"></a>00425     <span class="keyword">static</span> <span class="keyword">const</span> kind_type binding_required = bound;
-<a name="l00426"></a>00426     <span class="keyword">static</span> <span class="keyword">const</span> kind_type binding_completed = kind_type(bound+1);
-<a name="l00427"></a>00427     <span class="keyword">static</span> <span class="keyword">const</span> kind_type detached = kind_type(binding_completed+1);
-<a name="l00428"></a>00428     <span class="keyword">static</span> <span class="keyword">const</span> kind_type dying = kind_type(detached+1);
-<a name="l00429"></a>00429 
-<a name="l00432"></a>00432     <span class="keywordtype">void</span> propagate_cancellation_from_ancestors ();
-<a name="l00433"></a>00433 
-<a name="l00435"></a>00435     <span class="keywordtype">bool</span> is_alive () { 
-<a name="l00436"></a>00436 <span class="preprocessor">#if TBB_USE_DEBUG</span>
-<a name="l00437"></a>00437 <span class="preprocessor"></span>        <span class="keywordflow">return</span> my_version_and_traits != 0xDeadBeef;
-<a name="l00438"></a>00438 <span class="preprocessor">#else</span>
-<a name="l00439"></a>00439 <span class="preprocessor"></span>        <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00440"></a>00440 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_DEBUG */</span>
-<a name="l00441"></a>00441     }
-<a name="l00442"></a>00442 }; <span class="comment">// class task_group_context</span>
-<a name="l00443"></a>00443 
-<a name="l00444"></a>00444 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00445"></a>00445 
-<a name="l00447"></a>00447 
-<a name="l00448"></a><a class="code" href="a00199.html">00448</a> <span class="keyword">class </span><a class="code" href="a00199.html">task</a>: __TBB_TASK_BASE_ACCESS interface5::internal::task_base {
-<a name="l00449"></a>00449 
-<a name="l00451"></a>00451     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_set_ref_count( <span class="keywordtype">int</span> count );
-<a name="l00452"></a>00452 
-<a name="l00454"></a>00454     internal::reference_count __TBB_EXPORTED_METHOD internal_decrement_ref_count();
-<a name="l00455"></a>00455 
-<a name="l00456"></a>00456 <span class="keyword">protected</span>:
-<a name="l00458"></a><a class="code" href="a00199.html#2bce8ec6e44706e70128f5cf91b76e67">00458</a>     <a class="code" href="a00199.html#2bce8ec6e44706e70128f5cf91b76e67">task</a>() {prefix().extra_state=1;}
-<a name="l00459"></a>00459 
-<a name="l00460"></a>00460 <span class="keyword">public</span>:
-<a name="l00462"></a><a class="code" href="a00199.html#98245ee0473f84cb19dbbf8c81134908">00462</a>     <span class="keyword">virtual</span> <a class="code" href="a00199.html#98245ee0473f84cb19dbbf8c81134908">~task</a>() {}
-<a name="l00463"></a>00463 
-<a name="l00465"></a>00465     <span class="keyword">virtual</span> <a class="code" href="a00199.html">task</a>* <a class="code" href="a00199.html#22c298cd40937a431a06777423f002f6">execute</a>() = 0;
-<a name="l00466"></a>00466 
-<a name="l00468"></a><a class="code" href="a00199.html#4a3c415562d17905390ea5b49d12293e">00468</a>     <span class="keyword">enum</span> <a class="code" href="a00199.html#4a3c415562d17905390ea5b49d12293e">state_type</a> {
-<a name="l00470"></a>00470         <a class="code" href="a00199.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">executing</a>,
-<a name="l00472"></a>00472         <a class="code" href="a00199.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">reexecute</a>,
-<a name="l00474"></a>00474         <a class="code" href="a00199.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">ready</a>,
-<a name="l00476"></a>00476         <a class="code" href="a00199.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">allocated</a>,
-<a name="l00478"></a>00478         <a class="code" href="a00199.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">freed</a>,
-<a name="l00480"></a>00480         <a class="code" href="a00199.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">recycle</a> 
-<a name="l00481"></a>00481     };
-<a name="l00482"></a>00482 
-<a name="l00483"></a>00483     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00484"></a>00484     <span class="comment">// Allocating tasks</span>
-<a name="l00485"></a>00485     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00486"></a>00486 
-<a name="l00488"></a><a class="code" href="a00199.html#23acb0da0afd690da797f9f882027d34">00488</a>     <span class="keyword">static</span> internal::allocate_root_proxy <a class="code" href="a00199.html#23acb0da0afd690da797f9f882027d34">allocate_root</a>() {
-<a name="l00489"></a>00489         <span class="keywordflow">return</span> internal::allocate_root_proxy();
-<a name="l00490"></a>00490     }
-<a name="l00491"></a>00491 
-<a name="l00492"></a>00492 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00494"></a><a class="code" href="a00199.html#8ccc518caf31075a3e073996d2d240a4">00494</a> <span class="preprocessor">    static internal::allocate_root_with_context_proxy allocate_root( task_group_context& ctx ) {</span>
-<a name="l00495"></a>00495 <span class="preprocessor"></span>        <span class="keywordflow">return</span> internal::allocate_root_with_context_proxy(ctx);
-<a name="l00496"></a>00496     }
-<a name="l00497"></a>00497 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00498"></a>00498 
-<a name="l00500"></a>00500 
-<a name="l00501"></a><a class="code" href="a00199.html#1434c79a5138993269d034008bff7329">00501</a>     internal::allocate_continuation_proxy& allocate_continuation() {
-<a name="l00502"></a>00502         <span class="keywordflow">return</span> *reinterpret_cast<internal::allocate_continuation_proxy*>(<span class="keyword">this</span>);
-<a name="l00503"></a>00503     }
-<a name="l00504"></a>00504 
-<a name="l00506"></a><a class="code" href="a00199.html#1ff794f7053cd9148d5f280fbf07377f">00506</a>     internal::allocate_child_proxy& allocate_child() {
-<a name="l00507"></a>00507         <span class="keywordflow">return</span> *reinterpret_cast<internal::allocate_child_proxy*>(<span class="keyword">this</span>);
-<a name="l00508"></a>00508     }
-<a name="l00509"></a>00509 
-<a name="l00511"></a>00511     <span class="keyword">using</span> task_base::allocate_additional_child_of;
-<a name="l00512"></a>00512 
-<a name="l00513"></a>00513 <span class="preprocessor">#if __TBB_DEPRECATED_TASK_INTERFACE</span>
-<a name="l00515"></a>00515 <span class="preprocessor"></span>
-<a name="l00519"></a>00519 <span class="preprocessor">    void __TBB_EXPORTED_METHOD destroy( task& t );</span>
-<a name="l00520"></a>00520 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* !__TBB_DEPRECATED_TASK_INTERFACE */</span>
-<a name="l00522"></a>00522     using task_base::destroy;
-<a name="l00523"></a>00523 <span class="preprocessor">#endif </span><span class="comment">/* !__TBB_DEPRECATED_TASK_INTERFACE */</span>
-<a name="l00524"></a>00524 
-<a name="l00525"></a>00525     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00526"></a>00526     <span class="comment">// Recycling of tasks</span>
-<a name="l00527"></a>00527     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00528"></a>00528 
-<a name="l00530"></a>00530 
-<a name="l00536"></a><a class="code" href="a00199.html#a67a79e18f62b43a623a00cfbd76db4c">00536</a>     <span class="keywordtype">void</span> recycle_as_continuation() {
-<a name="l00537"></a>00537         __TBB_ASSERT( prefix().state==executing, <span class="stringliteral">"execute not running?"</span> );
-<a name="l00538"></a>00538         prefix().state = allocated;
-<a name="l00539"></a>00539     }
-<a name="l00540"></a>00540 
-<a name="l00542"></a>00542 
-<a name="l00544"></a><a class="code" href="a00199.html#3b290d14109704e2b69dc1ac980a7a76">00544</a>     <span class="keywordtype">void</span> recycle_as_safe_continuation() {
-<a name="l00545"></a>00545         __TBB_ASSERT( prefix().state==executing, <span class="stringliteral">"execute not running?"</span> );
-<a name="l00546"></a>00546         prefix().state = recycle;
-<a name="l00547"></a>00547     }
-<a name="l00548"></a>00548 
-<a name="l00550"></a><a class="code" href="a00199.html#db399855177438bbc9cc61d508dae8d2">00550</a>     <span class="keywordtype">void</span> recycle_as_child_of( <a class="code" href="a00199.html">task</a>& new_parent ) {
-<a name="l00551"></a>00551         internal::task_prefix& p = prefix();
-<a name="l00552"></a>00552         __TBB_ASSERT( prefix().state==executing||prefix().state==allocated, <span class="stringliteral">"execute not running, or already recycled"</span> );
-<a name="l00553"></a>00553         __TBB_ASSERT( prefix().ref_count==0, <span class="stringliteral">"no child tasks allowed when recycled as a child"</span> );
-<a name="l00554"></a>00554         __TBB_ASSERT( p.parent==NULL, <span class="stringliteral">"parent must be null"</span> );
-<a name="l00555"></a>00555         __TBB_ASSERT( new_parent.<a class="code" href="a00199.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().state<=recycle, <span class="stringliteral">"corrupt parent's state"</span> );
-<a name="l00556"></a>00556         __TBB_ASSERT( new_parent.<a class="code" href="a00199.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().state!=freed, <span class="stringliteral">"parent already freed"</span> );
-<a name="l00557"></a>00557         p.state = allocated;
-<a name="l00558"></a>00558         p.parent = &new_parent;
-<a name="l00559"></a>00559 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00560"></a>00560 <span class="preprocessor"></span>        p.<a class="code" href="a00199.html#d8c36a93f3972590fbb65ff1cef3173b">context</a> = new_parent.<a class="code" href="a00199.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().context;
-<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="l00563"></a>00563 
-<a name="l00565"></a>00565 
-<a name="l00566"></a><a class="code" href="a00199.html#4f1be9bbcdb487830dbe298b68d85144">00566</a>     <span class="keywordtype">void</span> recycle_to_reexecute() {
-<a name="l00567"></a>00567         __TBB_ASSERT( prefix().state==executing, <span class="stringliteral">"execute not running, or already recycled"</span> );
-<a name="l00568"></a>00568         __TBB_ASSERT( prefix().ref_count==0, <span class="stringliteral">"no child tasks allowed when recycled for reexecution"</span> );
-<a name="l00569"></a>00569         prefix().state = reexecute;
-<a name="l00570"></a>00570     }
-<a name="l00571"></a>00571 
-<a name="l00572"></a>00572     <span class="comment">// All depth-related methods are obsolete, and are retained for the sake </span>
-<a name="l00573"></a>00573     <span class="comment">// of backward source compatibility only</span>
-<a name="l00574"></a>00574     intptr_t depth()<span class="keyword"> const </span>{<span class="keywordflow">return</span> 0;}
-<a name="l00575"></a>00575     <span class="keywordtype">void</span> set_depth( intptr_t ) {}
-<a name="l00576"></a>00576     <span class="keywordtype">void</span> add_to_depth( <span class="keywordtype">int</span> ) {}
-<a name="l00577"></a>00577 
-<a name="l00578"></a>00578 
-<a name="l00579"></a>00579     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00580"></a>00580     <span class="comment">// Spawning and blocking</span>
-<a name="l00581"></a>00581     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00582"></a>00582 
-<a name="l00584"></a><a class="code" href="a00199.html#06a4206a57e8e12a439b14d6d41cfd92">00584</a>     <span class="keywordtype">void</span> set_ref_count( <span class="keywordtype">int</span> count ) {
-<a name="l00585"></a>00585 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
-<a name="l00586"></a>00586 <span class="preprocessor"></span>        internal_set_ref_count(count);
-<a name="l00587"></a>00587 <span class="preprocessor">#else</span>
-<a name="l00588"></a>00588 <span class="preprocessor"></span>        prefix().ref_count = count;
-<a name="l00589"></a>00589 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */</span>
-<a name="l00590"></a>00590     }
-<a name="l00591"></a>00591 
-<a name="l00593"></a>00593 
-<a name="l00594"></a><a class="code" href="a00199.html#f5fb43c7ad0de5a4b95703cebc39e345">00594</a>     <span class="keywordtype">void</span> increment_ref_count() {
-<a name="l00595"></a>00595         __TBB_FetchAndIncrementWacquire( &prefix().ref_count );
-<a name="l00596"></a>00596     }
-<a name="l00597"></a>00597 
-<a name="l00599"></a>00599 
-<a name="l00600"></a><a class="code" href="a00199.html#ef4680f5c148020c5e7e43ddef44cd5d">00600</a>     <span class="keywordtype">int</span> decrement_ref_count() {
-<a name="l00601"></a>00601 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
-<a name="l00602"></a>00602 <span class="preprocessor"></span>        <span class="keywordflow">return</span> int(internal_decrement_ref_count());
-<a name="l00603"></a>00603 <span class="preprocessor">#else</span>
-<a name="l00604"></a>00604 <span class="preprocessor"></span>        <span class="keywordflow">return</span> int(__TBB_FetchAndDecrementWrelease( &prefix().ref_count ))-1;
-<a name="l00605"></a>00605 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */</span>
-<a name="l00606"></a>00606     }
-<a name="l00607"></a>00607 
-<a name="l00609"></a>00609     <span class="keyword">using</span> task_base::spawn;
-<a name="l00610"></a>00610 
-<a name="l00612"></a><a class="code" href="a00199.html#3ce28ca9baa771cfc37ecd72e69c4f3c">00612</a>     <span class="keywordtype">void</span> spawn_and_wait_for_all( <a class="code" href="a00199.html">task</a>& child ) {
-<a name="l00613"></a>00613         prefix().owner->wait_for_all( *<span class="keyword">this</span>, &child );
-<a name="l00614"></a>00614     }
-<a name="l00615"></a>00615 
-<a name="l00617"></a>00617     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD spawn_and_wait_for_all( <a class="code" href="a00202.html">task_list</a>& list );
-<a name="l00618"></a>00618 
-<a name="l00620"></a><a class="code" href="a00199.html#ce8ce689c26a4ddf343829bc3c73290a">00620</a>     <span class="keyword">static</span> <span class="keywordtype">void</span> spawn_root_and_wait( <a class="code" href="a00199.html">task</a>& root ) {
-<a name="l00621"></a>00621         root.<a class="code" href="a00199.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().owner->spawn_root_and_wait( root, root.<a class="code" href="a00199.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().next );
-<a name="l00622"></a>00622     }
-<a name="l00623"></a>00623 
-<a name="l00625"></a>00625 
-<a name="l00627"></a>00627     <span class="keyword">static</span> <span class="keywordtype">void</span> spawn_root_and_wait( <a class="code" href="a00202.html">task_list</a>& root_list );
-<a name="l00628"></a>00628 
-<a name="l00630"></a>00630 
-<a name="l00631"></a><a class="code" href="a00199.html#53d2615ad9c38859b4c8080936600283">00631</a>     <span class="keywordtype">void</span> wait_for_all() {
-<a name="l00632"></a>00632         prefix().owner->wait_for_all( *<span class="keyword">this</span>, NULL );
-<a name="l00633"></a>00633     }
-<a name="l00634"></a>00634 
-<a name="l00635"></a>00635 <span class="preprocessor">#if __TBB_ARENA_PER_MASTER</span>
-<a name="l00637"></a><a class="code" href="a00199.html#8365d063c0cc9d7bd616bca47256b93c">00637</a> <span class="preprocessor">    static void enqueue( task& t ) {</span>
-<a name="l00638"></a>00638 <span class="preprocessor"></span>        t.prefix().owner->enqueue( t, NULL );
-<a name="l00639"></a>00639     }
-<a name="l00640"></a>00640 
-<a name="l00641"></a>00641 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_ARENA_PER_MASTER */</span>
-<a name="l00643"></a>00643     static task& __TBB_EXPORTED_FUNC self();
-<a name="l00644"></a>00644 
-<a name="l00646"></a><a class="code" href="a00199.html#314e98ee4347ccec83efcb9ee22e8596">00646</a>     <a class="code" href="a00199.html">task</a>* parent()<span class="keyword"> const </span>{<span class="keywordflow">return</span> prefix().parent;}
-<a name="l00647"></a>00647 
-<a name="l00648"></a>00648 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00650"></a><a class="code" href="a00199.html#d8c36a93f3972590fbb65ff1cef3173b">00650</a> <span class="preprocessor">    task_group_context* context() {return prefix().context;}</span>
-<a name="l00651"></a>00651 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>   
-<a name="l00652"></a>00652 
-<a name="l00654"></a><a class="code" href="a00199.html#f9169402702f56bf519448aaf34450aa">00654</a>     <span class="keywordtype">bool</span> is_stolen_task()<span class="keyword"> const </span>{
-<a name="l00655"></a>00655         <span class="keywordflow">return</span> (prefix().extra_state & 0x80)!=0;
-<a name="l00656"></a>00656     }
-<a name="l00657"></a>00657 
-<a name="l00658"></a>00658     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00659"></a>00659     <span class="comment">// Debugging</span>
-<a name="l00660"></a>00660     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00661"></a>00661 
-<a name="l00663"></a><a class="code" href="a00199.html#0af7b2d7e6e8b4333b2accfce3dfb374">00663</a>     <a class="code" href="a00199.html#4a3c415562d17905390ea5b49d12293e">state_type</a> state()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <a class="code" href="a00199.html#4a3c415562d17905390ea5b49d12293e">state_type</a>(prefix().state);}
-<a name="l00664"></a>00664 
-<a name="l00666"></a><a class="code" href="a00199.html#ad774f55eaec008ae02b236423209ced">00666</a>     <span class="keywordtype">int</span> ref_count()<span class="keyword"> const </span>{
-<a name="l00667"></a>00667 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00668"></a>00668 <span class="preprocessor"></span>        internal::reference_count ref_count_ = prefix().ref_count;
-<a name="l00669"></a>00669         __TBB_ASSERT( ref_count_==<span class="keywordtype">int</span>(ref_count_), <span class="stringliteral">"integer overflow error"</span>);
-<a name="l00670"></a>00670 <span class="preprocessor">#endif</span>
-<a name="l00671"></a>00671 <span class="preprocessor"></span>        <span class="keywordflow">return</span> int(prefix().ref_count);
-<a name="l00672"></a>00672     }
-<a name="l00673"></a>00673 
-<a name="l00675"></a>00675     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD is_owned_by_current_thread() <span class="keyword">const</span>;
-<a name="l00676"></a>00676 
-<a name="l00677"></a>00677     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00678"></a>00678     <span class="comment">// Affinity</span>
-<a name="l00679"></a>00679     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00680"></a>00680  
-<a name="l00682"></a>00682 
-<a name="l00683"></a><a class="code" href="a00199.html#d61bb32389d3857bf7511d69beaafb76">00683</a>     <span class="keyword">typedef</span> internal::affinity_id affinity_id;
-<a name="l00684"></a>00684 
-<a name="l00686"></a><a class="code" href="a00199.html#dca19d7a45487a7d67a0db517e2b57c9">00686</a>     <span class="keywordtype">void</span> set_affinity( affinity_id <span class="keywordtype">id</span> ) {prefix().affinity = id;}
-<a name="l00687"></a>00687 
-<a name="l00689"></a><a class="code" href="a00199.html#3a920a56b0bcf2801518fb45b2c9d2be">00689</a>     affinity_id affinity()<span class="keyword"> const </span>{<span class="keywordflow">return</span> prefix().affinity;}
-<a name="l00690"></a>00690 
-<a name="l00692"></a>00692 
-<a name="l00696"></a>00696     <span class="keyword">virtual</span> <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD note_affinity( affinity_id <span class="keywordtype">id</span> );
-<a name="l00697"></a>00697 
-<a name="l00698"></a>00698 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00700"></a>00700 <span class="preprocessor"></span>
-<a name="l00701"></a><a class="code" href="a00199.html#0f3fb4aac549ab642022450a4bd13326">00701</a> <span class="preprocessor">    bool cancel_group_execution () { return prefix().context->cancel_group_execution(); }</span>
-<a name="l00702"></a>00702 <span class="preprocessor"></span>
-<a name="l00704"></a><a class="code" href="a00199.html#025f18118c057c4c8db87ff2ce8df975">00704</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="l00705"></a>00705 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00706"></a>00706 
-<a name="l00707"></a>00707 <span class="keyword">private</span>:
-<a name="l00708"></a>00708     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00200.html">interface5::internal::task_base</a>;
-<a name="l00709"></a>00709     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00202.html">task_list</a>;
-<a name="l00710"></a>00710     <span class="keyword">friend</span> <span class="keyword">class </span>internal::scheduler;
-<a name="l00711"></a>00711     <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_root_proxy;
-<a name="l00712"></a>00712 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00713"></a>00713 <span class="preprocessor"></span>    <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_root_with_context_proxy;
-<a name="l00714"></a>00714 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00715"></a>00715     <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_continuation_proxy;
-<a name="l00716"></a>00716     <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_child_proxy;
-<a name="l00717"></a>00717     <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_additional_child_of_proxy;
-<a name="l00718"></a>00718     
-<a name="l00720"></a>00720 
-<a name="l00721"></a>00721     internal::task_prefix& prefix( internal::version_tag* = NULL )<span class="keyword"> const </span>{
-<a name="l00722"></a>00722         <span class="keywordflow">return</span> reinterpret_cast<internal::task_prefix*>(const_cast<task*>(<span class="keyword">this</span>))[-1];
-<a name="l00723"></a>00723     }
-<a name="l00724"></a>00724 }; <span class="comment">// class task</span>
-<a name="l00725"></a>00725 
-<a name="l00727"></a>00727 
-<a name="l00728"></a><a class="code" href="a00162.html">00728</a> <span class="keyword">class </span><a class="code" href="a00162.html">empty_task</a>: <span class="keyword">public</span> <a class="code" href="a00199.html">task</a> {
-<a name="l00729"></a>00729     <span class="comment">/*override*/</span> <a class="code" href="a00199.html">task</a>* execute() {
-<a name="l00730"></a>00730         <span class="keywordflow">return</span> NULL;
-<a name="l00731"></a>00731     }
-<a name="l00732"></a>00732 };
-<a name="l00733"></a>00733 
-<a name="l00735"></a>00735 
-<a name="l00737"></a><a class="code" href="a00202.html">00737</a> <span class="keyword">class </span><a class="code" href="a00202.html">task_list</a>: internal::no_copy {
-<a name="l00738"></a>00738 <span class="keyword">private</span>:
-<a name="l00739"></a>00739     <a class="code" href="a00199.html">task</a>* first;
-<a name="l00740"></a>00740     <a class="code" href="a00199.html">task</a>** next_ptr;
-<a name="l00741"></a>00741     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00199.html">task</a>;
-<a name="l00742"></a>00742     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00200.html">interface5::internal::task_base</a>;
-<a name="l00743"></a>00743 <span class="keyword">public</span>:
-<a name="l00745"></a><a class="code" href="a00202.html#416341c2047eaef50417b41eaf7e9de6">00745</a>     <a class="code" href="a00202.html">task_list</a>() : first(NULL), next_ptr(&first) {}
-<a name="l00746"></a>00746 
-<a name="l00748"></a><a class="code" href="a00202.html#6d438f1499a02db1e59c24ab6043e5ba">00748</a>     ~<a class="code" href="a00202.html">task_list</a>() {}
-<a name="l00749"></a>00749 
-<a name="l00751"></a><a class="code" href="a00202.html#f3ac31e092814b90929f81bb30441959">00751</a>     <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !first;}
-<a name="l00752"></a>00752 
-<a name="l00754"></a><a class="code" href="a00202.html#4cd34756bc4763dafb8c84838a0124ff">00754</a>     <span class="keywordtype">void</span> push_back( <a class="code" href="a00199.html">task</a>& <a class="code" href="a00199.html">task</a> ) {
-<a name="l00755"></a>00755         task.<a class="code" href="a00199.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().next = NULL;
-<a name="l00756"></a>00756         *next_ptr = &task;
-<a name="l00757"></a>00757         next_ptr = &task.<a class="code" href="a00199.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().next;
-<a name="l00758"></a>00758     }
-<a name="l00759"></a>00759 
-<a name="l00761"></a><a class="code" href="a00202.html#5fe85df5ed524418389d34051750347d">00761</a>     <a class="code" href="a00199.html">task</a>& pop_front() {
-<a name="l00762"></a>00762         __TBB_ASSERT( !empty(), <span class="stringliteral">"attempt to pop item from empty task_list"</span> );
-<a name="l00763"></a>00763         <a class="code" href="a00199.html">task</a>* result = first;
-<a name="l00764"></a>00764         first = result-><a class="code" href="a00199.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().next;
-<a name="l00765"></a>00765         <span class="keywordflow">if</span>( !first ) next_ptr = &first;
-<a name="l00766"></a>00766         <span class="keywordflow">return</span> *result;
-<a name="l00767"></a>00767     }
-<a name="l00768"></a>00768 
-<a name="l00770"></a><a class="code" href="a00202.html#fce446ee13e025969945328f3ff59b95">00770</a>     <span class="keywordtype">void</span> clear() {
-<a name="l00771"></a>00771         first=NULL;
-<a name="l00772"></a>00772         next_ptr=&first;
-<a name="l00773"></a>00773     }
-<a name="l00774"></a>00774 };
-<a name="l00775"></a>00775 
-<a name="l00776"></a>00776 <span class="keyword">inline</span> <span class="keywordtype">void</span> interface5::internal::task_base::spawn( task& t ) {
-<a name="l00777"></a>00777     t.<a class="code" href="a00199.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().owner->spawn( t, t.prefix().next );
-<a name="l00778"></a>00778 }
-<a name="l00779"></a>00779 
-<a name="l00780"></a>00780 <span class="keyword">inline</span> <span class="keywordtype">void</span> interface5::internal::task_base::spawn( task_list& list ) {
-<a name="l00781"></a>00781     <span class="keywordflow">if</span>( task* t = list.first ) {
-<a name="l00782"></a>00782         t->prefix().owner->spawn( *t, *list.next_ptr );
-<a name="l00783"></a>00783         list.clear();
-<a name="l00784"></a>00784     }
-<a name="l00785"></a>00785 }
-<a name="l00786"></a>00786 
-<a name="l00787"></a><a class="code" href="a00199.html#c33c7edbaec67aa8a56f48986a9dc69f">00787</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00199.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>( <a class="code" href="a00202.html">task_list</a>& root_list ) {
-<a name="l00788"></a>00788     <span class="keywordflow">if</span>( <a class="code" href="a00199.html">task</a>* t = root_list.<a class="code" href="a00202.html#78fcc389819ee34427d510f7d8cb8b1e">first</a> ) {
-<a name="l00789"></a>00789         t->prefix().owner->spawn_root_and_wait( *t, *root_list.<a class="code" href="a00202.html#21553a32bcd08f980aa28f61254307da">next_ptr</a> );
-<a name="l00790"></a>00790         root_list.<a class="code" href="a00202.html#fce446ee13e025969945328f3ff59b95">clear</a>();
-<a name="l00791"></a>00791     }
-<a name="l00792"></a>00792 }
-<a name="l00793"></a>00793 
-<a name="l00794"></a>00794 } <span class="comment">// namespace tbb</span>
-<a name="l00795"></a>00795 
-<a name="l00796"></a>00796 <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="l00797"></a>00797     <span class="keywordflow">return</span> &tbb::internal::allocate_root_proxy::allocate(bytes);
-<a name="l00798"></a>00798 }
-<a name="l00799"></a>00799 
-<a name="l00800"></a>00800 <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="l00801"></a>00801     tbb::internal::allocate_root_proxy::free( *static_cast<tbb::task*>(task) );
-<a name="l00802"></a>00802 }
-<a name="l00803"></a>00803 
-<a name="l00804"></a>00804 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00805"></a>00805 <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="l00806"></a>00806     <span class="keywordflow">return</span> &p.allocate(bytes);
-<a name="l00807"></a>00807 }
-<a name="l00808"></a>00808 
-<a name="l00809"></a>00809 <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="l00810"></a>00810     p.free( *static_cast<tbb::task*>(task) );
-<a name="l00811"></a>00811 }
-<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="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="l00815"></a>00815     <span class="keywordflow">return</span> &p.allocate(bytes);
-<a name="l00816"></a>00816 }
-<a name="l00817"></a>00817 
-<a name="l00818"></a>00818 <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="l00819"></a>00819     p.free( *static_cast<tbb::task*>(task) );
-<a name="l00820"></a>00820 }
-<a name="l00821"></a>00821 
-<a name="l00822"></a>00822 <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="l00823"></a>00823     <span class="keywordflow">return</span> &p.allocate(bytes);
-<a name="l00824"></a>00824 }
-<a name="l00825"></a>00825 
-<a name="l00826"></a>00826 <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="l00827"></a>00827     p.free( *static_cast<tbb::task*>(task) );
-<a name="l00828"></a>00828 }
-<a name="l00829"></a>00829 
-<a name="l00830"></a>00830 <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="l00831"></a>00831     <span class="keywordflow">return</span> &p.allocate(bytes);
-<a name="l00832"></a>00832 }
-<a name="l00833"></a>00833 
-<a name="l00834"></a>00834 <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="l00835"></a>00835     p.free( *static_cast<tbb::task*>(task) );
-<a name="l00836"></a>00836 }
-<a name="l00837"></a>00837 
-<a name="l00838"></a>00838 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_task_H */</span>
+<a name="l00313"></a>00313     <span class="keywordtype">void</span> heapify() {
+<a name="l00314"></a>00314         <span class="keywordflow">if</span> (!mark) mark = 1;
+<a name="l00315"></a>00315         <span class="keywordflow">for</span> (; mark<data.size(); ++mark) {
+<a name="l00316"></a>00316             <span class="comment">// for each unheapified element under size</span>
+<a name="l00317"></a>00317             <a class="code" href="a00235.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> cur_pos = mark;
+<a name="l00318"></a>00318             <a class="code" href="a00235.html#7c611a6b5b8f94b0e7f2afc97e31efb1">value_type</a> to_place = data[mark];
+<a name="l00319"></a>00319             <span class="keywordflow">do</span> { <span class="comment">// push to_place up the heap</span>
+<a name="l00320"></a>00320                 <a class="code" href="a00235.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> parent = (cur_pos-1)>>1;
+<a name="l00321"></a>00321                 <span class="keywordflow">if</span> (!compare(data[parent], to_place)) <span class="keywordflow">break</span>;
+<a name="l00322"></a>00322                 data[cur_pos] = data[parent];
+<a name="l00323"></a>00323                 cur_pos = parent;
+<a name="l00324"></a>00324             } <span class="keywordflow">while</span>( cur_pos );
+<a name="l00325"></a>00325             data[cur_pos] = to_place;
+<a name="l00326"></a>00326         }
+<a name="l00327"></a>00327     }
+<a name="l00328"></a>00328 
+<a name="l00330"></a>00330 
+<a name="l00331"></a>00331     <span class="keywordtype">void</span> reheap() {
+<a name="l00332"></a>00332         <a class="code" href="a00235.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> cur_pos=0, child=1;
+<a name="l00333"></a>00333 
+<a name="l00334"></a>00334         <span class="keywordflow">while</span> (child < mark) {
+<a name="l00335"></a>00335             <a class="code" href="a00235.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> target = child;
+<a name="l00336"></a>00336             <span class="keywordflow">if</span> (child+1 < mark && compare(data[child], data[child+1]))
+<a name="l00337"></a>00337                 ++target;
+<a name="l00338"></a>00338             <span class="comment">// target now has the higher priority child</span>
+<a name="l00339"></a>00339             <span class="keywordflow">if</span> (compare(data[target], data[data.size()-1])) <span class="keywordflow">break</span>;
+<a name="l00340"></a>00340             data[cur_pos] = data[target];
+<a name="l00341"></a>00341             cur_pos = target;
+<a name="l00342"></a>00342             child = (cur_pos<<1)+1;
+<a name="l00343"></a>00343         }
+<a name="l00344"></a>00344         data[cur_pos] = data[data.size()-1];
+<a name="l00345"></a>00345         data.pop_back();
+<a name="l00346"></a>00346         <span class="keywordflow">if</span> (mark > data.size()) mark = data.size();
+<a name="l00347"></a>00347     }
+<a name="l00348"></a>00348 };
+<a name="l00349"></a>00349 
+<a name="l00350"></a>00350 } <span class="comment">// namespace interface5</span>
+<a name="l00351"></a>00351 
+<a name="l00352"></a>00352 <span class="keyword">using</span> interface5::concurrent_priority_queue;
+<a name="l00353"></a>00353 
+<a name="l00354"></a>00354 } <span class="comment">// namespace tbb</span>
+<a name="l00355"></a>00355 
+<a name="l00356"></a>00356 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_concurrent_priority_queue_H */</span>
 </pre></div><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00436.html b/doc/html/a00436.html
new file mode 100644
index 0000000..1c366bc
--- /dev/null
+++ b/doc/html/a00436.html
@@ -0,0 +1,365 @@
+<!DOCTYPE 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-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_queue_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_concurrent_queue_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "_concurrent_queue_internal.h"</span>
+<a name="l00025"></a>00025 
+<a name="l00026"></a>00026 <span class="keyword">namespace </span>tbb {
+<a name="l00027"></a>00027 
+<a name="l00028"></a>00028 <span class="keyword">namespace </span>strict_ppl {
+<a name="l00029"></a>00029 
+<a name="l00031"></a>00031 
+<a name="l00034"></a>00034 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> A = cache_aligned_allocator<T> > 
+<a name="l00035"></a><a class="code" href="a00236.html">00035</a> <span class="keyword">class </span><a class="code" href="a00236.html">concurrent_queue</a>: <span class="keyword">public</span> internal::concurrent_queue_base_v3<T> {
+<a name="l00036"></a>00036     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value> <span class="keyword">friend</span> <span class="keyword">class </span>internal::concurrent_queue_iterator;
+<a name="l00037"></a>00037 
+<a name="l00039"></a>00039     <span class="keyword">typedef</span> <span class="keyword">typename</span> A::template rebind<char>::other page_allocator_type;
+<a name="l00040"></a>00040     page_allocator_type my_allocator;
+<a name="l00041"></a>00041 
+<a name="l00043"></a>00043     <span class="comment">/*overide*/</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> *allocate_block( size_t n ) {
+<a name="l00044"></a>00044         <span class="keywordtype">void</span> *b = reinterpret_cast<void*>(my_allocator.allocate( n ));
+<a name="l00045"></a>00045         <span class="keywordflow">if</span>( !b )
+<a name="l00046"></a>00046             internal::throw_exception(internal::eid_bad_alloc); 
+<a name="l00047"></a>00047         <span class="keywordflow">return</span> b;
+<a name="l00048"></a>00048     }
+<a name="l00049"></a>00049 
+<a name="l00051"></a>00051     <span class="comment">/*override*/</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate_block( <span class="keywordtype">void</span> *b, size_t n ) {
+<a name="l00052"></a>00052         my_allocator.deallocate( reinterpret_cast<char*>(b), n );
+<a name="l00053"></a>00053     }
+<a name="l00054"></a>00054 
+<a name="l00055"></a>00055 <span class="keyword">public</span>:
+<a name="l00057"></a><a class="code" href="a00236.html#682c3978d5cb0620000994f11c44a476">00057</a>     <span class="keyword">typedef</span> T <a class="code" href="a00236.html#682c3978d5cb0620000994f11c44a476">value_type</a>;
+<a name="l00058"></a>00058 
+<a name="l00060"></a><a class="code" href="a00236.html#a8d725c50a9834bb7af5b67c0aff92b8">00060</a>     <span class="keyword">typedef</span> T& <a class="code" href="a00236.html#a8d725c50a9834bb7af5b67c0aff92b8">reference</a>;
+<a name="l00061"></a>00061 
+<a name="l00063"></a><a class="code" href="a00236.html#4d48e7ff93f81636bca2c74f7da34750">00063</a>     <span class="keyword">typedef</span> <span class="keyword">const</span> T& <a class="code" href="a00236.html#4d48e7ff93f81636bca2c74f7da34750">const_reference</a>;
+<a name="l00064"></a>00064 
+<a name="l00066"></a><a class="code" href="a00236.html#8fc30e93f8342a1960357f71e4fe8a2b">00066</a>     <span class="keyword">typedef</span> size_t <a class="code" href="a00236.html#8fc30e93f8342a1960357f71e4fe8a2b">size_type</a>;
+<a name="l00067"></a>00067 
+<a name="l00069"></a><a class="code" href="a00236.html#068576d16c7e4e05d52f9db7a45b5b65">00069</a>     <span class="keyword">typedef</span> ptrdiff_t <a class="code" href="a00236.html#068576d16c7e4e05d52f9db7a45b5b65">difference_type</a>;
+<a name="l00070"></a>00070 
+<a name="l00072"></a><a class="code" href="a00236.html#5a3956341728eaa558d8827063718cac">00072</a>     <span class="keyword">typedef</span> A <a class="code" href="a00236.html#5a3956341728eaa558d8827063718cac">allocator_type</a>;
+<a name="l00073"></a>00073 
+<a name="l00075"></a><a class="code" href="a00236.html#7c48a05a94a1f4f98fdfadfbef98ecf6">00075</a>     <span class="keyword">explicit</span> <a class="code" href="a00236.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a>(<span class="keyword">const</span> <a class="code" href="a00236.html#5a3956341728eaa558d8827063718cac">allocator_type</a>& a = <a class="code" href="a00236.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="a00236.html#25209656c84f2f9b030e2f9162713341">00082</a>     <a class="code" href="a00236.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a>( InputIterator begin, InputIterator end, <span class="keyword">const</span> <a class="code" href="a00236.html#5a3956341728eaa558d8827063718cac">allocator_type</a>& a = <a class="code" href="a00236.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="a00236.html#8a6b98ea11a867db8ac868f0113ca429">00090</a>     <a class="code" href="a00236.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a>( <span class="keyword">const</span> <a class="code" href="a00236.html">concurrent_queue</a>& src, <span class="keyword">const</span> <a class="code" href="a00236.html#5a3956341728eaa558d8827063718cac">allocator_type</a>& a = <a class="code" href="a00236.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="a00236.html#830b33753d6b149c366344e29b2edd8c">~concurrent_queue</a>();
+<a name="l00098"></a>00098 
+<a name="l00100"></a><a class="code" href="a00236.html#73c47563ffcc4c2f6452f25a04ebe2e2">00100</a>     <span class="keywordtype">void</span> <a class="code" href="a00236.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="a00236.html#ae31ca0db34ef96ef1e74aa0d28c95f8">00107</a>     <span class="keywordtype">bool</span> <a class="code" href="a00236.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="a00236.html#eaa35a5274606779802e9a669a706260">00112</a>     <a class="code" href="a00236.html#8fc30e93f8342a1960357f71e4fe8a2b">size_type</a> <a class="code" href="a00236.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="a00236.html#f3f6fce0cfa2d581d6f3b47e0613ad64">00115</a>     <span class="keywordtype">bool</span> <a class="code" href="a00236.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="a00236.html#c32e8e84c0524155133b4aae32d2a827">clear</a>() ;
+<a name="l00119"></a>00119 
+<a name="l00121"></a><a class="code" href="a00236.html#f034f70caef445fe8abc9113ec926a8d">00121</a>     <a class="code" href="a00236.html#5a3956341728eaa558d8827063718cac">allocator_type</a> <a class="code" href="a00236.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="a00236.html#830b33753d6b149c366344e29b2edd8c">00136</a> <a class="code" href="a00236.html">concurrent_queue<T,A>::~concurrent_queue</a>() {
+<a name="l00137"></a>00137     <a class="code" href="a00236.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="a00236.html#c32e8e84c0524155133b4aae32d2a827">00142</a> <span class="keywordtype">void</span> <a class="code" href="a00236.html">concurrent_queue<T,A>::clear</a>() {
+<a name="l00143"></a>00143     <span class="keywordflow">while</span>( !<a class="code" href="a00236.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="a00230.html">00158</a> <span class="keyword">class </span><a class="code" href="a00230.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">/*overide*/</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*<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="a00230.html#98245517a931e5893f6601e66c51fc75">00209</a>     <span class="keyword">typedef</span> T <a class="code" href="a00230.html#98245517a931e5893f6601e66c51fc75">value_type</a>;
+<a name="l00210"></a>00210 
+<a name="l00212"></a><a class="code" href="a00230.html#2e2726fccf6d975dc1071608cc0bbf90">00212</a>     <span class="keyword">typedef</span> A <a class="code" href="a00230.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>;
+<a name="l00213"></a>00213 
+<a name="l00215"></a><a class="code" href="a00230.html#dcd44ca6a88c0dc7a847a47a10811f0c">00215</a>     <span class="keyword">typedef</span> T& <a class="code" href="a00230.html#dcd44ca6a88c0dc7a847a47a10811f0c">reference</a>;
+<a name="l00216"></a>00216 
+<a name="l00218"></a><a class="code" href="a00230.html#796713d0b9ba93a4721cbe13e4474068">00218</a>     <span class="keyword">typedef</span> <span class="keyword">const</span> T& <a class="code" href="a00230.html#796713d0b9ba93a4721cbe13e4474068">const_reference</a>;
+<a name="l00219"></a>00219 
+<a name="l00221"></a>00221 
+<a name="l00223"></a><a class="code" href="a00230.html#a80e4c11dbb324e4b92a24a77bbcde68">00223</a>     <span class="keyword">typedef</span> std::ptrdiff_t <a class="code" href="a00230.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a>;
+<a name="l00224"></a>00224 
+<a name="l00226"></a><a class="code" href="a00230.html#4b45c91297e69515d83d5eef85ae1f49">00226</a>     <span class="keyword">typedef</span> std::ptrdiff_t <a class="code" href="a00230.html#4b45c91297e69515d83d5eef85ae1f49">difference_type</a>;
+<a name="l00227"></a>00227 
+<a name="l00229"></a><a class="code" href="a00230.html#e3525226732963ff0f13e89d8e6dab5b">00229</a>     <span class="keyword">explicit</span> <a class="code" href="a00230.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>(<span class="keyword">const</span> <a class="code" href="a00230.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>& a = <a class="code" href="a00230.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="a00230.html#7b7fb414d2eaa8a7f5d68fc4cd63ac50">00235</a>     <a class="code" href="a00230.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>( <span class="keyword">const</span> <a class="code" href="a00230.html">concurrent_bounded_queue</a>& src, <span class="keyword">const</span> <a class="code" href="a00230.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>& a = <a class="code" href="a00230.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="a00230.html#a5e04dcd7db9fd9b583b4e7df832246a">00243</a>     <a class="code" href="a00230.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>( InputIterator begin, InputIterator end, <span class="keyword">const</span> <a class="code" href="a00230.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>& a = <a class="code" href="a00230.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="a00230.html#acaf5b510dc0dfc7780b8c956cf773cf">~concurrent_bounded_queue</a>();
+<a name="l00252"></a>00252 
+<a name="l00254"></a><a class="code" href="a00230.html#ceb08c743b11ba88c878e73fff8af20b">00254</a>     <span class="keywordtype">void</span> <a class="code" href="a00230.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="a00230.html#41f4c6bd7a82ab070e840bbf81b0b123">00260</a>     <span class="keywordtype">void</span> <a class="code" href="a00230.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="a00230.html#2bd6232531279fb3ccbd296bea23066b">00267</a>     <span class="keywordtype">bool</span> <a class="code" href="a00230.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="a00230.html#0ca487019bbb00a196442aff78a1e4f7">00274</a>     <span class="keywordtype">bool</span> <a class="code" href="a00230.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="a00230.html#7dc14d1a579a4cccda9f857585e1768d">00282</a>     <a class="code" href="a00230.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> <a class="code" href="a00230.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="a00230.html#f64924f2ee9225c368a270fc3c394db9">00285</a>     <span class="keywordtype">bool</span> <a class="code" href="a00230.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="a00230.html#b2888b3e4e837d7e03f2c731963a402b">00288</a>     <a class="code" href="a00230.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> <a class="code" href="a00230.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="a00230.html#f3c6c934f85fd02aedbc83a16943193b">00295</a>     <span class="keywordtype">void</span> <a class="code" href="a00230.html#f3c6c934f85fd02aedbc83a16943193b">set_capacity</a>( <a class="code" href="a00230.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="a00230.html#415eb87e53b1c6a266de06ecbc490d16">00300</a>     <a class="code" href="a00230.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> <a class="code" href="a00230.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="a00230.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="a00230.html#acaf5b510dc0dfc7780b8c956cf773cf">00319</a> <a class="code" href="a00230.html">concurrent_bounded_queue<T,A>::~concurrent_bounded_queue</a>() {
+<a name="l00320"></a>00320     <a class="code" href="a00230.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="a00230.html#90b31e2954c6e4596c7900435a5f4bc1">00325</a> <span class="keywordtype">void</span> <a class="code" href="a00230.html">concurrent_bounded_queue<T,A>::clear</a>() {
+<a name="l00326"></a>00326     <span class="keywordflow">while</span>( !<a class="code" href="a00230.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="a00237.html">00341</a> <span class="keyword">class </span><a class="code" href="a00237.html">concurrent_queue</a>: <span class="keyword">public</span> <a class="code" href="a00230.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="a00237.html#aaf19bd7337b72f3131ece60f7315ef7">00348</a>     <span class="keyword">explicit</span> <a class="code" href="a00237.html#aaf19bd7337b72f3131ece60f7315ef7">concurrent_queue</a>(<span class="keyword">const</span> A& a = A()) : 
+<a name="l00349"></a>00349         <a class="code" href="a00230.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="a00237.html#fc092b9082f233482f3513fc3bb670f7">00354</a>     <a class="code" href="a00237.html#aaf19bd7337b72f3131ece60f7315ef7">concurrent_queue</a>( <span class="keyword">const</span> <a class="code" href="a00237.html">concurrent_queue</a>& src, <span class="keyword">const</span> A& a = A()) : 
+<a name="l00355"></a>00355         <a class="code" href="a00230.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="a00237.html#9102b897776bd2d9e908e6604ff16b5f">00361</a>     <a class="code" href="a00237.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="a00230.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="a00237.html#7c45561bafe71107d09b2bc1b8f4e681">00369</a>     <span class="keywordtype">bool</span> <a class="code" href="a00237.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="a00230.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="a00237.html#48da3536245318af6cb5fd58bac78039">00378</a>     <span class="keywordtype">bool</span> <a class="code" href="a00237.html#48da3536245318af6cb5fd58bac78039">pop_if_present</a>( T& destination ) {
+<a name="l00379"></a>00379         <span class="keywordflow">return</span> this-><a class="code" href="a00230.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="a00230.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="a00230.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>
+</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/a00437.html b/doc/html/a00437.html
new file mode 100644
index 0000000..d686a92
--- /dev/null
+++ b/doc/html/a00437.html
@@ -0,0 +1,263 @@
+<!DOCTYPE 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 "_concurrent_unordered_internal.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="comment">// Template class for hash compare</span>
+<a name="l00033"></a>00033 <span class="keyword">template</span><<span class="keyword">typename</span> Key>
+<a name="l00034"></a>00034 <span class="keyword">class </span>tbb_hash
+<a name="l00035"></a>00035 {
+<a name="l00036"></a>00036 <span class="keyword">public</span>:
+<a name="l00037"></a>00037     tbb_hash() {}
+<a name="l00038"></a>00038 
+<a name="l00039"></a>00039     size_t operator()(<span class="keyword">const</span> Key& key)<span class="keyword"> const</span>
+<a name="l00040"></a>00040 <span class="keyword">    </span>{
+<a name="l00041"></a>00041         <span class="keywordflow">return</span> tbb_hasher(key);
+<a name="l00042"></a>00042     }
+<a name="l00043"></a>00043 };
+<a name="l00044"></a>00044 
+<a name="l00045"></a>00045 <span class="keyword">namespace </span>interface5 {
+<a name="l00046"></a>00046 
+<a name="l00047"></a>00047 <span class="comment">// Template class for hash map traits</span>
+<a name="l00048"></a>00048 <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="l00049"></a>00049 <span class="keyword">class </span>concurrent_unordered_map_traits
+<a name="l00050"></a>00050 {
+<a name="l00051"></a>00051 <span class="keyword">protected</span>:
+<a name="l00052"></a>00052     <span class="keyword">typedef</span> std::pair<const Key, T> value_type;
+<a name="l00053"></a>00053     <span class="keyword">typedef</span> Key key_type;
+<a name="l00054"></a>00054     <span class="keyword">typedef</span> Hash_compare hash_compare;
+<a name="l00055"></a>00055     <span class="keyword">typedef</span> <span class="keyword">typename</span> Allocator::template rebind<value_type>::other allocator_type;
+<a name="l00056"></a>00056     <span class="keyword">enum</span> { allow_multimapping = Allow_multimapping };
+<a name="l00057"></a>00057 
+<a name="l00058"></a>00058     concurrent_unordered_map_traits() : my_hash_compare() {}
+<a name="l00059"></a>00059     concurrent_unordered_map_traits(<span class="keyword">const</span> hash_compare& hc) : my_hash_compare(hc) {}
+<a name="l00060"></a>00060 
+<a name="l00061"></a>00061     <span class="keyword">class </span>value_compare : <span class="keyword">public</span> std::binary_function<value_type, value_type, bool>
+<a name="l00062"></a>00062     {
+<a name="l00063"></a>00063         <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_unordered_map_traits<Key, T, Hash_compare, Allocator, Allow_multimapping>;
+<a name="l00064"></a>00064 
+<a name="l00065"></a>00065     <span class="keyword">public</span>:
+<a name="l00066"></a>00066         <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="l00067"></a>00067 <span class="keyword">        </span>{
+<a name="l00068"></a>00068             <span class="keywordflow">return</span> (my_hash_compare(left.first, right.first));
+<a name="l00069"></a>00069         }
+<a name="l00070"></a>00070 
+<a name="l00071"></a>00071         value_compare(<span class="keyword">const</span> hash_compare& comparator) : my_hash_compare(comparator) {}
+<a name="l00072"></a>00072 
+<a name="l00073"></a>00073     <span class="keyword">protected</span>:
+<a name="l00074"></a>00074         hash_compare my_hash_compare;    <span class="comment">// the comparator predicate for keys</span>
+<a name="l00075"></a>00075     };
+<a name="l00076"></a>00076 
+<a name="l00077"></a>00077     <span class="keyword">template</span><<span class="keyword">class</span> Type1, <span class="keyword">class</span> Type2>
+<a name="l00078"></a>00078     <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="l00079"></a>00079         <span class="keywordflow">return</span> (value.first);
+<a name="l00080"></a>00080     }
+<a name="l00081"></a>00081 
+<a name="l00082"></a>00082     hash_compare my_hash_compare; <span class="comment">// the comparator predicate for keys</span>
+<a name="l00083"></a>00083 };
+<a name="l00084"></a>00084 
+<a name="l00085"></a>00085 <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> Hasher = 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="l00086"></a>00086 <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="l00087"></a>00087 {
+<a name="l00088"></a>00088     <span class="comment">// Base type definitions</span>
+<a name="l00089"></a>00089     <span class="keyword">typedef</span> internal::hash_compare<Key, Hasher, Key_equality> hash_compare;
+<a name="l00090"></a>00090     <span class="keyword">typedef</span> internal::concurrent_unordered_base< concurrent_unordered_map_traits<Key, T, hash_compare, Allocator, false> > base_type;
+<a name="l00091"></a>00091     <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="l00092"></a>00092     <span class="keyword">using</span> traits_type::my_hash_compare;
+<a name="l00093"></a>00093 <span class="preprocessor">#if __TBB_EXTRA_DEBUG</span>
+<a name="l00094"></a>00094 <span class="preprocessor"></span><span class="keyword">public</span>:
+<a name="l00095"></a>00095 <span class="preprocessor">#endif</span>
+<a name="l00096"></a>00096 <span class="preprocessor"></span>    <span class="keyword">using</span> traits_type::allow_multimapping;
+<a name="l00097"></a>00097 <span class="keyword">public</span>:
+<a name="l00098"></a>00098     <span class="keyword">using</span> base_type::end;
+<a name="l00099"></a>00099     <span class="keyword">using</span> base_type::find;
+<a name="l00100"></a>00100     <span class="keyword">using</span> base_type::insert;
+<a name="l00101"></a>00101 
+<a name="l00102"></a>00102     <span class="comment">// Type definitions</span>
+<a name="l00103"></a>00103     <span class="keyword">typedef</span> Key key_type;
+<a name="l00104"></a>00104     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::value_type value_type;
+<a name="l00105"></a>00105     <span class="keyword">typedef</span> T mapped_type;
+<a name="l00106"></a>00106     <span class="keyword">typedef</span> Hasher hasher;
+<a name="l00107"></a>00107     <span class="keyword">typedef</span> Key_equality key_equal;
+<a name="l00108"></a>00108     <span class="keyword">typedef</span> hash_compare key_compare;
+<a name="l00109"></a>00109 
+<a name="l00110"></a>00110     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::allocator_type allocator_type;
+<a name="l00111"></a>00111     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::pointer pointer;
+<a name="l00112"></a>00112     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::const_pointer const_pointer;
+<a name="l00113"></a>00113     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::reference reference;
+<a name="l00114"></a>00114     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::const_reference const_reference;
+<a name="l00115"></a>00115 
+<a name="l00116"></a>00116     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::size_type size_type;
+<a name="l00117"></a>00117     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::difference_type difference_type;
+<a name="l00118"></a>00118 
+<a name="l00119"></a>00119     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::iterator iterator;
+<a name="l00120"></a>00120     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::const_iterator const_iterator;
+<a name="l00121"></a>00121     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::iterator local_iterator;
+<a name="l00122"></a>00122     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::const_iterator const_local_iterator;
+<a name="l00123"></a>00123 
+<a name="l00124"></a>00124     <span class="comment">// Construction/destruction/copying</span>
+<a name="l00125"></a>00125     <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="l00126"></a>00126         <span class="keyword">const</span> key_equal& a_keyeq = key_equal(), <span class="keyword">const</span> allocator_type& a = allocator_type())
+<a name="l00127"></a>00127         : base_type(n_of_buckets, key_compare(a_hasher, a_keyeq), a)
+<a name="l00128"></a>00128     {
+<a name="l00129"></a>00129     }
+<a name="l00130"></a>00130 
+<a name="l00131"></a>00131     concurrent_unordered_map(<span class="keyword">const</span> Allocator& a) : base_type(8, key_compare(), a)
+<a name="l00132"></a>00132     {
+<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> Iterator>
+<a name="l00136"></a>00136     concurrent_unordered_map(Iterator first, Iterator last, size_type n_of_buckets = 8, <span class="keyword">const</span> hasher& a_hasher = hasher(),
+<a name="l00137"></a>00137         <span class="keyword">const</span> key_equal& a_keyeq = key_equal(), <span class="keyword">const</span> allocator_type& a = allocator_type())
+<a name="l00138"></a>00138         : base_type(n_of_buckets, key_compare(a_hasher, a_keyeq), a)
+<a name="l00139"></a>00139     {
+<a name="l00140"></a>00140         <span class="keywordflow">for</span> (; first != last; ++first)
+<a name="l00141"></a>00141             base_type::insert(*first);
+<a name="l00142"></a>00142     }
+<a name="l00143"></a>00143 
+<a name="l00144"></a>00144     concurrent_unordered_map(<span class="keyword">const</span> concurrent_unordered_map& table) : base_type(table)
+<a name="l00145"></a>00145     {
+<a name="l00146"></a>00146     }
+<a name="l00147"></a>00147 
+<a name="l00148"></a>00148     concurrent_unordered_map(<span class="keyword">const</span> concurrent_unordered_map& table, <span class="keyword">const</span> Allocator& a)
+<a name="l00149"></a>00149         : base_type(table, a)
+<a name="l00150"></a>00150     {
+<a name="l00151"></a>00151     }
+<a name="l00152"></a>00152 
+<a name="l00153"></a>00153     concurrent_unordered_map& operator=(<span class="keyword">const</span> concurrent_unordered_map& table)
+<a name="l00154"></a>00154     {
+<a name="l00155"></a>00155         base_type::operator=(table);
+<a name="l00156"></a>00156         <span class="keywordflow">return</span> (*<span class="keyword">this</span>);
+<a name="l00157"></a>00157     }
+<a name="l00158"></a>00158 
+<a name="l00159"></a>00159     iterator unsafe_erase(const_iterator where)
+<a name="l00160"></a>00160     {
+<a name="l00161"></a>00161         <span class="keywordflow">return</span> base_type::unsafe_erase(where);
+<a name="l00162"></a>00162     }
+<a name="l00163"></a>00163 
+<a name="l00164"></a>00164     size_type unsafe_erase(<span class="keyword">const</span> key_type& key)
+<a name="l00165"></a>00165     {
+<a name="l00166"></a>00166         <span class="keywordflow">return</span> base_type::unsafe_erase(key);
+<a name="l00167"></a>00167     }
+<a name="l00168"></a>00168 
+<a name="l00169"></a>00169     iterator unsafe_erase(const_iterator first, const_iterator last)
+<a name="l00170"></a>00170     {
+<a name="l00171"></a>00171         <span class="keywordflow">return</span> base_type::unsafe_erase(first, last);
+<a name="l00172"></a>00172     }
+<a name="l00173"></a>00173 
+<a name="l00174"></a>00174     <span class="keywordtype">void</span> swap(concurrent_unordered_map& table)
+<a name="l00175"></a>00175     {
+<a name="l00176"></a>00176         base_type::swap(table);
+<a name="l00177"></a>00177     }
+<a name="l00178"></a>00178 
+<a name="l00179"></a>00179     <span class="comment">// Observers</span>
+<a name="l00180"></a>00180     hasher hash_function()<span class="keyword"> const</span>
+<a name="l00181"></a>00181 <span class="keyword">    </span>{
+<a name="l00182"></a>00182         <span class="keywordflow">return</span> my_hash_compare.my_hash_object;
+<a name="l00183"></a>00183     }
+<a name="l00184"></a>00184 
+<a name="l00185"></a>00185     key_equal key_eq()<span class="keyword"> const</span>
+<a name="l00186"></a>00186 <span class="keyword">    </span>{
+<a name="l00187"></a>00187         <span class="keywordflow">return</span> my_hash_compare.my_key_compare_object;
+<a name="l00188"></a>00188     }
+<a name="l00189"></a>00189 
+<a name="l00190"></a>00190     mapped_type& operator[](<span class="keyword">const</span> key_type& key)
+<a name="l00191"></a>00191     {
+<a name="l00192"></a>00192         iterator where = find(key);
+<a name="l00193"></a>00193 
+<a name="l00194"></a>00194         <span class="keywordflow">if</span> (where == end())
+<a name="l00195"></a>00195         {
+<a name="l00196"></a>00196             where = insert(std::pair<key_type, mapped_type>(key, mapped_type())).first;
+<a name="l00197"></a>00197         }
+<a name="l00198"></a>00198 
+<a name="l00199"></a>00199         <span class="keywordflow">return</span> ((*where).second);
+<a name="l00200"></a>00200     }
+<a name="l00201"></a>00201 
+<a name="l00202"></a>00202     mapped_type& at(<span class="keyword">const</span> key_type& key)
+<a name="l00203"></a>00203     {
+<a name="l00204"></a>00204         iterator where = find(key);
+<a name="l00205"></a>00205 
+<a name="l00206"></a>00206         <span class="keywordflow">if</span> (where == end())
+<a name="l00207"></a>00207         {
+<a name="l00208"></a>00208             tbb::internal::throw_exception(tbb::internal::eid_invalid_key);
+<a name="l00209"></a>00209         }
+<a name="l00210"></a>00210 
+<a name="l00211"></a>00211         <span class="keywordflow">return</span> ((*where).second);
+<a name="l00212"></a>00212     }
+<a name="l00213"></a>00213 
+<a name="l00214"></a>00214     <span class="keyword">const</span> mapped_type& at(<span class="keyword">const</span> key_type& key)<span class="keyword"> const</span>
+<a name="l00215"></a>00215 <span class="keyword">    </span>{
+<a name="l00216"></a>00216         const_iterator where = find(key);
+<a name="l00217"></a>00217 
+<a name="l00218"></a>00218         <span class="keywordflow">if</span> (where == end())
+<a name="l00219"></a>00219         {
+<a name="l00220"></a>00220             tbb::internal::throw_exception(tbb::internal::eid_invalid_key);
+<a name="l00221"></a>00221         }
+<a name="l00222"></a>00222 
+<a name="l00223"></a>00223         <span class="keywordflow">return</span> ((*where).second);
+<a name="l00224"></a>00224     }
+<a name="l00225"></a>00225 };
+<a name="l00226"></a>00226 
+<a name="l00227"></a>00227 } <span class="comment">// namespace interface5</span>
+<a name="l00228"></a>00228 
+<a name="l00229"></a>00229 <span class="keyword">using</span> interface5::concurrent_unordered_map;
+<a name="l00230"></a>00230 
+<a name="l00231"></a>00231 } <span class="comment">// namespace tbb</span>
+<a name="l00232"></a>00232 
+<a name="l00233"></a>00233 <span class="preprocessor">#endif// __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/a00442.html b/doc/html/a00442.html
index 3795625..976fb09 100644
--- a/doc/html/a00442.html
+++ b/doc/html/a00442.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>task_group.h Source File</title>
+<title>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>task_group.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
+<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>
@@ -39,224 +39,885 @@
 <a name="l00018"></a>00018 <span class="comment">    writing.</span>
 <a name="l00019"></a>00019 <span class="comment">*/</span>
 <a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_task_group_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_task_group_H</span>
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_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 "task.h"</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 
-<a name="l00027"></a>00027 <span class="keyword">namespace </span>tbb {
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="keyword">namespace </span>internal {
-<a name="l00030"></a>00030     <span class="keyword">template</span><<span class="keyword">typename</span> F> <span class="keyword">class </span>task_handle_task;
-<a name="l00031"></a>00031 }
+<a name="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 
-<a name="l00033"></a>00033 <span class="keyword">template</span><<span class="keyword">typename</span> F>
-<a name="l00034"></a>00034 <span class="keyword">class </span>task_handle : internal::no_assign {
-<a name="l00035"></a>00035     <span class="keyword">template</span><<span class="keyword">typename</span> _F> <span class="keyword">friend</span> <span class="keyword">class </span>internal::task_handle_task;
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037     <span class="keyword">static</span> <span class="keyword">const</span> intptr_t scheduled = 0x1;
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039     F my_func;
-<a name="l00040"></a>00040     intptr_t my_state;
+<a name="l00033"></a>00033 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
+<a name="l00034"></a>00034 <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="l00035"></a>00035 <span class="preprocessor">    #pragma warning (push)</span>
+<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4530)</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="preprocessor">#include <algorithm></span>
+<a name="l00040"></a>00040 <span class="preprocessor">#include <iterator></span>
 <a name="l00041"></a>00041 
-<a name="l00042"></a>00042     <span class="keywordtype">void</span> mark_scheduled () {
-<a name="l00043"></a>00043         <span class="comment">// The check here is intentionally lax to avoid the impact of interlocked operation</span>
-<a name="l00044"></a>00044         <span class="keywordflow">if</span> ( my_state & scheduled )
-<a name="l00045"></a>00045             internal::throw_exception( internal::eid_invalid_multiple_scheduling );
-<a name="l00046"></a>00046         my_state |= scheduled;
-<a name="l00047"></a>00047     }
-<a name="l00048"></a>00048 <span class="keyword">public</span>:
-<a name="l00049"></a>00049     task_handle( <span class="keyword">const</span> F& f ) : my_func(f), my_state(0) {}
-<a name="l00050"></a>00050 
-<a name="l00051"></a>00051     <span class="keywordtype">void</span> operator() ()<span class="keyword"> const </span>{ my_func(); }
-<a name="l00052"></a>00052 };
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054 <span class="keyword">enum</span> task_group_status {
-<a name="l00055"></a>00055     not_complete,
-<a name="l00056"></a>00056     complete,
-<a name="l00057"></a>00057     canceled
-<a name="l00058"></a>00058 };
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060 <span class="keyword">namespace </span>internal {
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062 <span class="comment">// Suppress gratuitous warnings from icc 11.0 when lambda expressions are used in instances of function_task.</span>
-<a name="l00063"></a>00063 <span class="comment">//#pragma warning(disable: 588)</span>
-<a name="l00064"></a>00064 
-<a name="l00065"></a>00065 <span class="keyword">template</span><<span class="keyword">typename</span> F>
-<a name="l00066"></a>00066 <span class="keyword">class </span>function_task : <span class="keyword">public</span> task {
-<a name="l00067"></a>00067     F my_func;
-<a name="l00068"></a>00068     <span class="comment">/*override*/</span> <a class="code" href="a00199.html#2bce8ec6e44706e70128f5cf91b76e67">task</a>* execute() {
-<a name="l00069"></a>00069         my_func();
-<a name="l00070"></a>00070         <span class="keywordflow">return</span> NULL;
-<a name="l00071"></a>00071     }
-<a name="l00072"></a>00072 <span class="keyword">public</span>:
-<a name="l00073"></a>00073     function_task( <span class="keyword">const</span> F& f ) : my_func(f) {}
-<a name="l00074"></a>00074 };
-<a name="l00075"></a>00075 
-<a name="l00076"></a>00076 <span class="keyword">template</span><<span class="keyword">typename</span> F>
-<a name="l00077"></a>00077 <span class="keyword">class </span>task_handle_task : <span class="keyword">public</span> task {
-<a name="l00078"></a>00078     task_handle<F>& my_handle;
-<a name="l00079"></a>00079     <span class="comment">/*override*/</span> <a class="code" href="a00199.html#2bce8ec6e44706e70128f5cf91b76e67">task</a>* execute() {
-<a name="l00080"></a>00080         my_handle();
-<a name="l00081"></a>00081         <span class="keywordflow">return</span> NULL;
-<a name="l00082"></a>00082     }
-<a name="l00083"></a>00083 <span class="keyword">public</span>:
-<a name="l00084"></a>00084     task_handle_task( task_handle<F>& h ) : my_handle(h) { h.mark_scheduled(); }
-<a name="l00085"></a>00085 };
-<a name="l00086"></a>00086 
-<a name="l00087"></a>00087 <span class="keyword">class </span>task_group_base : internal::no_copy {
-<a name="l00088"></a>00088 <span class="keyword">protected</span>:
-<a name="l00089"></a>00089     empty_task* my_root;
-<a name="l00090"></a>00090     task_group_context my_context;
-<a name="l00091"></a>00091 
-<a name="l00092"></a>00092     task& owner () { <span class="keywordflow">return</span> *my_root; }
-<a name="l00093"></a>00093 
-<a name="l00094"></a>00094     <span class="keyword">template</span><<span class="keyword">typename</span> F>
-<a name="l00095"></a>00095     task_group_status internal_run_and_wait( F& f ) {
-<a name="l00096"></a>00096         __TBB_TRY {
-<a name="l00097"></a>00097             <span class="keywordflow">if</span> ( !my_context.is_group_execution_cancelled() )
-<a name="l00098"></a>00098                 f();
-<a name="l00099"></a>00099         } __TBB_CATCH( ... ) {
-<a name="l00100"></a>00100             my_context.register_pending_exception();
-<a name="l00101"></a>00101         }
-<a name="l00102"></a>00102         <span class="keywordflow">return</span> wait();
-<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> F, <span class="keyword">typename</span> Task>
-<a name="l00106"></a>00106     <span class="keywordtype">void</span> internal_run( F& f ) {
-<a name="l00107"></a>00107         owner().spawn( *<span class="keyword">new</span>( owner().allocate_additional_child_of(*my_root) ) Task(f) );
-<a name="l00108"></a>00108     }
-<a name="l00109"></a>00109 
-<a name="l00110"></a>00110 <span class="keyword">public</span>:
-<a name="l00111"></a>00111     task_group_base( uintptr_t traits = 0 )
-<a name="l00112"></a>00112         : my_context(task_group_context::bound, task_group_context::default_traits | traits)
-<a name="l00113"></a>00113     {
-<a name="l00114"></a>00114         my_root = <span class="keyword">new</span>( <a class="code" href="a00199.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>(my_context) ) empty_task;
-<a name="l00115"></a>00115         my_root->set_ref_count(1);
-<a name="l00116"></a>00116     }
+<a name="l00042"></a>00042 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
+<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
+<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00045"></a>00045 <span class="preprocessor"></span>
+<a name="l00046"></a>00046 <span class="preprocessor">#if _MSC_VER==1500 && !__INTEL_COMPILER</span>
+<a name="l00047"></a>00047 <span class="preprocessor"></span>    <span class="comment">// VS2008/VC9 seems to have an issue; limits pull in math.h</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: 4985 )</span>
+<a name="l00050"></a>00050 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">#include <limits></span> <span class="comment">/* std::numeric_limits */</span>
+<a name="l00052"></a>00052 <span class="preprocessor">#if _MSC_VER==1500 && !__INTEL_COMPILER</span>
+<a name="l00053"></a>00053 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning( pop )</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">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && defined(_Wp64)</span>
+<a name="l00057"></a>00057 <span class="preprocessor"></span>    <span class="comment">// Workaround for overzealous compiler warnings in /Wp64 mode</span>
+<a name="l00058"></a>00058 <span class="preprocessor">    #pragma warning (push)</span>
+<a name="l00059"></a>00059 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4267)</span>
+<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00061"></a>00061 <span class="preprocessor"></span>
+<a name="l00062"></a>00062 <span class="keyword">namespace </span>tbb {
+<a name="l00063"></a>00063 
+<a name="l00064"></a>00064 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A = cache_aligned_allocator<T> >
+<a name="l00065"></a>00065 <span class="keyword">class </span>concurrent_vector;
+<a name="l00066"></a>00066 
+<a name="l00068"></a>00068 <span class="keyword">namespace </span>internal {
+<a name="l00069"></a>00069 
+<a name="l00071"></a>00071     <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="l00072"></a>00072 
+<a name="l00074"></a>00074 
+<a name="l00075"></a>00075     <span class="keyword">class </span>concurrent_vector_base_v3 {
+<a name="l00076"></a>00076     <span class="keyword">protected</span>:
+<a name="l00077"></a>00077 
+<a name="l00078"></a>00078         <span class="comment">// Basic types declarations</span>
+<a name="l00079"></a>00079         <span class="keyword">typedef</span> size_t segment_index_t;
+<a name="l00080"></a>00080         <span class="keyword">typedef</span> size_t size_type;
+<a name="l00081"></a>00081 
+<a name="l00082"></a>00082         <span class="comment">// Using enumerations due to Mac linking problems of static const variables</span>
+<a name="l00083"></a>00083         <span class="keyword">enum</span> {
+<a name="l00084"></a>00084             <span class="comment">// Size constants</span>
+<a name="l00085"></a>00085             default_initial_segments = 1, <span class="comment">// 2 initial items</span>
+<a name="l00087"></a>00087 <span class="comment"></span>            pointers_per_short_table = 3, <span class="comment">// to fit into 8 words of entire structure</span>
+<a name="l00088"></a>00088             pointers_per_long_table = <span class="keyword">sizeof</span>(segment_index_t) * 8 <span class="comment">// one segment per bit</span>
+<a name="l00089"></a>00089         };
+<a name="l00090"></a>00090 
+<a name="l00091"></a>00091         <span class="comment">// Segment pointer. Can be zero-initialized</span>
+<a name="l00092"></a>00092         <span class="keyword">struct </span>segment_t {
+<a name="l00093"></a>00093             <span class="keywordtype">void</span>* array;
+<a name="l00094"></a>00094 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00095"></a>00095 <span class="preprocessor"></span>            ~segment_t() {
+<a name="l00096"></a>00096                 __TBB_ASSERT( array <= internal::vector_allocation_error_flag, <span class="stringliteral">"should have been freed by clear"</span> );
+<a name="l00097"></a>00097             }
+<a name="l00098"></a>00098 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00099"></a>00099         };
+<a name="l00100"></a>00100  
+<a name="l00101"></a>00101         <span class="comment">// Data fields</span>
+<a name="l00102"></a>00102 
+<a name="l00104"></a>00104         <span class="keywordtype">void</span>* (*vector_allocator_ptr)(concurrent_vector_base_v3 &, size_t);
+<a name="l00105"></a>00105 
+<a name="l00107"></a>00107         atomic<size_type> my_first_block;
+<a name="l00108"></a>00108 
+<a name="l00110"></a>00110         atomic<size_type> my_early_size;
+<a name="l00111"></a>00111 
+<a name="l00113"></a>00113         atomic<segment_t*> my_segment;
+<a name="l00114"></a>00114 
+<a name="l00116"></a>00116         segment_t my_storage[pointers_per_short_table];
 <a name="l00117"></a>00117 
-<a name="l00118"></a>00118     <span class="keyword">template</span><<span class="keyword">typename</span> F>
-<a name="l00119"></a>00119     <span class="keywordtype">void</span> run( task_handle<F>& h ) {
-<a name="l00120"></a>00120         internal_run< task_handle<F>, internal::task_handle_task<F> >( h );
-<a name="l00121"></a>00121     }
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123     task_group_status wait() {
-<a name="l00124"></a>00124         __TBB_TRY {
-<a name="l00125"></a>00125             my_root->wait_for_all();
-<a name="l00126"></a>00126         } __TBB_CATCH( ... ) {
-<a name="l00127"></a>00127             my_context.reset();
-<a name="l00128"></a>00128             __TBB_RETHROW();
-<a name="l00129"></a>00129         }
-<a name="l00130"></a>00130         <span class="keywordflow">if</span> ( my_context.is_group_execution_cancelled() ) {
-<a name="l00131"></a>00131             my_context.reset();
-<a name="l00132"></a>00132             <span class="keywordflow">return</span> canceled;
-<a name="l00133"></a>00133         }
-<a name="l00134"></a>00134         <span class="keywordflow">return</span> complete;
-<a name="l00135"></a>00135     }
+<a name="l00118"></a>00118         <span class="comment">// Methods</span>
+<a name="l00119"></a>00119 
+<a name="l00120"></a>00120         concurrent_vector_base_v3() {
+<a name="l00121"></a>00121             my_early_size = 0;
+<a name="l00122"></a>00122             my_first_block = 0; <span class="comment">// here is not default_initial_segments</span>
+<a name="l00123"></a>00123             <span class="keywordflow">for</span>( segment_index_t i = 0; i < pointers_per_short_table; i++)
+<a name="l00124"></a>00124                 my_storage[i].array = NULL;
+<a name="l00125"></a>00125             my_segment = my_storage;
+<a name="l00126"></a>00126         }
+<a name="l00127"></a>00127         __TBB_EXPORTED_METHOD ~concurrent_vector_base_v3();
+<a name="l00128"></a>00128 
+<a name="l00129"></a>00129         <span class="keyword">static</span> segment_index_t segment_index_of( size_type index ) {
+<a name="l00130"></a>00130             <span class="keywordflow">return</span> segment_index_t( __TBB_Log2( index|1 ) );
+<a name="l00131"></a>00131         }
+<a name="l00132"></a>00132 
+<a name="l00133"></a>00133         <span class="keyword">static</span> segment_index_t segment_base( segment_index_t k ) {
+<a name="l00134"></a>00134             <span class="keywordflow">return</span> (segment_index_t(1)<<k & ~segment_index_t(1));
+<a name="l00135"></a>00135         }
 <a name="l00136"></a>00136 
-<a name="l00137"></a>00137     <span class="keywordtype">bool</span> is_canceling() {
-<a name="l00138"></a>00138         <span class="keywordflow">return</span> my_context.is_group_execution_cancelled();
-<a name="l00139"></a>00139     }
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141     <span class="keywordtype">void</span> cancel() {
-<a name="l00142"></a>00142         my_context.cancel_group_execution();
-<a name="l00143"></a>00143     }
-<a name="l00144"></a>00144 }; <span class="comment">// class task_group_base</span>
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146 } <span class="comment">// namespace internal</span>
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148 <span class="keyword">class </span>task_group : <span class="keyword">public</span> internal::task_group_base {
-<a name="l00149"></a>00149 <span class="keyword">public</span>:
-<a name="l00150"></a>00150     task_group () : task_group_base( task_group_context::concurrent_wait ) {}
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152     ~task_group() __TBB_TRY {
-<a name="l00153"></a>00153         __TBB_ASSERT( my_root->ref_count() != 0, NULL );
-<a name="l00154"></a>00154         <span class="keywordflow">if</span>( my_root->ref_count() > 1 )
-<a name="l00155"></a>00155             my_root->wait_for_all();
-<a name="l00156"></a>00156         owner().destroy(*my_root);
-<a name="l00157"></a>00157     }
-<a name="l00158"></a>00158 <span class="preprocessor">#if TBB_USE_EXCEPTIONS</span>
-<a name="l00159"></a>00159 <span class="preprocessor"></span>    <span class="keywordflow">catch</span> (...) {
-<a name="l00160"></a>00160         owner().destroy(*my_root);
-<a name="l00161"></a>00161         <span class="keywordflow">throw</span>;
-<a name="l00162"></a>00162     }
-<a name="l00163"></a>00163 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_EXCEPTIONS */</span>
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165 <span class="preprocessor">#if __SUNPRO_CC</span>
-<a name="l00166"></a>00166 <span class="preprocessor"></span>    <span class="keyword">template</span><<span class="keyword">typename</span> F>
-<a name="l00167"></a>00167     <span class="keywordtype">void</span> run( task_handle<F>& h ) {
-<a name="l00168"></a>00168         internal_run< task_handle<F>, internal::task_handle_task<F> >( h );
-<a name="l00169"></a>00169     }
-<a name="l00170"></a>00170 <span class="preprocessor">#else</span>
-<a name="l00171"></a>00171 <span class="preprocessor"></span>    <span class="keyword">using</span> task_group_base::run;
-<a name="l00172"></a>00172 <span class="preprocessor">#endif</span>
-<a name="l00173"></a>00173 <span class="preprocessor"></span>
-<a name="l00174"></a>00174     <span class="keyword">template</span><<span class="keyword">typename</span> F>
-<a name="l00175"></a>00175     <span class="keywordtype">void</span> run( <span class="keyword">const</span> F& f ) {
-<a name="l00176"></a>00176         internal_run< const F, internal::function_task<F> >( f );
-<a name="l00177"></a>00177     }
-<a name="l00178"></a>00178 
-<a name="l00179"></a>00179     <span class="keyword">template</span><<span class="keyword">typename</span> F>
-<a name="l00180"></a>00180     task_group_status run_and_wait( <span class="keyword">const</span> F& f ) {
-<a name="l00181"></a>00181         <span class="keywordflow">return</span> internal_run_and_wait<const F>( f );
-<a name="l00182"></a>00182     }
-<a name="l00183"></a>00183 
-<a name="l00184"></a>00184     <span class="keyword">template</span><<span class="keyword">typename</span> F>
-<a name="l00185"></a>00185     task_group_status run_and_wait( task_handle<F>& h ) {
-<a name="l00186"></a>00186       <span class="keywordflow">return</span> internal_run_and_wait< task_handle<F> >( h );
-<a name="l00187"></a>00187     }
-<a name="l00188"></a>00188 }; <span class="comment">// class task_group</span>
-<a name="l00189"></a>00189 
-<a name="l00190"></a>00190 <span class="keyword">class </span>structured_task_group : <span class="keyword">public</span> internal::task_group_base {
-<a name="l00191"></a>00191 <span class="keyword">public</span>:
-<a name="l00192"></a>00192     ~structured_task_group() {
-<a name="l00193"></a>00193         <span class="keywordflow">if</span>( my_root->ref_count() > 1 ) {
-<a name="l00194"></a>00194             <span class="keywordtype">bool</span> stack_unwinding_in_progress = std::uncaught_exception();
-<a name="l00195"></a>00195             <span class="comment">// Always attempt to do proper cleanup to avoid inevitable memory corruption </span>
-<a name="l00196"></a>00196             <span class="comment">// in case of missing wait (for the sake of better testability & debuggability)</span>
-<a name="l00197"></a>00197             <span class="keywordflow">if</span> ( !is_canceling() )
-<a name="l00198"></a>00198                 cancel();
-<a name="l00199"></a>00199             my_root->wait_for_all();
-<a name="l00200"></a>00200             owner().destroy(*my_root);
-<a name="l00201"></a>00201             <span class="keywordflow">if</span> ( !stack_unwinding_in_progress )
-<a name="l00202"></a>00202                 internal::throw_exception( internal::eid_missing_wait );
-<a name="l00203"></a>00203         }
-<a name="l00204"></a>00204         <span class="keywordflow">else</span> {
-<a name="l00205"></a>00205             <span class="keywordflow">if</span>( my_root->ref_count() == 1 )
-<a name="l00206"></a>00206                 my_root->set_ref_count(0);
-<a name="l00207"></a>00207             owner().destroy(*my_root);
-<a name="l00208"></a>00208         }
-<a name="l00209"></a>00209     }
-<a name="l00210"></a>00210 
-<a name="l00211"></a>00211     <span class="keyword">template</span><<span class="keyword">typename</span> F>
-<a name="l00212"></a>00212     task_group_status run_and_wait ( task_handle<F>& h ) {
-<a name="l00213"></a>00213         <span class="keywordflow">return</span> internal_run_and_wait< task_handle<F> >( h );
-<a name="l00214"></a>00214     }
-<a name="l00215"></a>00215 
-<a name="l00216"></a>00216     task_group_status wait() {
-<a name="l00217"></a>00217         task_group_status res = task_group_base::wait();
-<a name="l00218"></a>00218         my_root->set_ref_count(1);
-<a name="l00219"></a>00219         <span class="keywordflow">return</span> res;
-<a name="l00220"></a>00220     }
-<a name="l00221"></a>00221 }; <span class="comment">// class structured_task_group</span>
-<a name="l00222"></a>00222 
-<a name="l00223"></a>00223 <span class="keyword">inline</span> 
-<a name="l00224"></a>00224 <span class="keywordtype">bool</span> is_current_task_group_canceling() {
-<a name="l00225"></a>00225     <span class="keywordflow">return</span> <a class="code" href="a00199.html#bd43e8d6249738efafd12d6a4c72c5e3">task::self</a>().<a class="code" href="a00199.html#025f18118c057c4c8db87ff2ce8df975">is_cancelled</a>();
-<a name="l00226"></a>00226 }
-<a name="l00227"></a>00227 
-<a name="l00228"></a>00228 <span class="keyword">template</span><<span class="keyword">class</span> F>
-<a name="l00229"></a>00229 task_handle<F> make_task( <span class="keyword">const</span> F& f ) {
-<a name="l00230"></a>00230     <span class="keywordflow">return</span> task_handle<F>( f );
-<a name="l00231"></a>00231 }
-<a name="l00232"></a>00232 
-<a name="l00233"></a>00233 } <span class="comment">// namespace tbb</span>
+<a name="l00137"></a>00137         <span class="keyword">static</span> <span class="keyword">inline</span> segment_index_t segment_base_index_of( segment_index_t &index ) {
+<a name="l00138"></a>00138             segment_index_t k = segment_index_of( index );
+<a name="l00139"></a>00139             index -= segment_base(k);
+<a name="l00140"></a>00140             <span class="keywordflow">return</span> k;
+<a name="l00141"></a>00141         }
+<a name="l00142"></a>00142 
+<a name="l00143"></a>00143         <span class="keyword">static</span> size_type segment_size( segment_index_t k ) {
+<a name="l00144"></a>00144             <span class="keywordflow">return</span> segment_index_t(1)<<k; <span class="comment">// fake value for k==0</span>
+<a name="l00145"></a>00145         }
+<a name="l00146"></a>00146 
+<a name="l00148"></a>00148         <span class="keyword">typedef</span> void (__TBB_EXPORTED_FUNC *internal_array_op1)(<span class="keywordtype">void</span>* begin, size_type n );
+<a name="l00149"></a>00149 
+<a name="l00151"></a>00151         <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="l00152"></a>00152 
+<a name="l00154"></a>00154         <span class="keyword">struct </span>internal_segments_table {
+<a name="l00155"></a>00155             segment_index_t first_block;
+<a name="l00156"></a>00156             <span class="keywordtype">void</span>* table[pointers_per_long_table];
+<a name="l00157"></a>00157         };
+<a name="l00158"></a>00158 
+<a name="l00159"></a>00159         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_reserve( size_type n, size_type element_size, size_type max_size );
+<a name="l00160"></a>00160         size_type __TBB_EXPORTED_METHOD internal_capacity() <span class="keyword">const</span>;
+<a name="l00161"></a>00161         <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="l00162"></a>00162         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="l00163"></a>00163         <span class="keywordtype">void</span>* __TBB_EXPORTED_METHOD internal_push_back( size_type element_size, size_type& index );
+<a name="l00164"></a>00164         segment_index_t __TBB_EXPORTED_METHOD internal_clear( internal_array_op1 destroy );
+<a name="l00165"></a>00165         <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="l00166"></a>00166         <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="l00167"></a>00167         <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="l00168"></a>00168                               internal_array_op1 destroy, internal_array_op2 assign, internal_array_op2 copy );
+<a name="l00170"></a>00170         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_throw_exception(size_type) <span class="keyword">const</span>;
+<a name="l00171"></a>00171         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_swap(concurrent_vector_base_v3& v);
+<a name="l00172"></a>00172 
+<a name="l00173"></a>00173         <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="l00174"></a>00174                                                     internal_array_op1 destroy, internal_array_op2 init );
+<a name="l00175"></a>00175         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="l00176"></a>00176 
+<a name="l00178"></a>00178         <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="l00179"></a>00179 <span class="keyword">private</span>:
+<a name="l00181"></a>00181         <span class="keyword">class </span>helper;
+<a name="l00182"></a>00182         <span class="keyword">friend</span> <span class="keyword">class </span>helper;
+<a name="l00183"></a>00183     };
+<a name="l00184"></a>00184     
+<a name="l00185"></a>00185     <span class="keyword">typedef</span> concurrent_vector_base_v3 concurrent_vector_base;
+<a name="l00186"></a>00186 
+<a name="l00188"></a>00188 
+<a name="l00190"></a>00190     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
+<a name="l00191"></a>00191     <span class="keyword">class </span>vector_iterator 
+<a name="l00192"></a>00192     {
+<a name="l00194"></a>00194         Container* my_vector;
+<a name="l00195"></a>00195 
+<a name="l00197"></a>00197         size_t my_index;
+<a name="l00198"></a>00198 
+<a name="l00200"></a>00200 
+<a name="l00201"></a>00201         <span class="keyword">mutable</span> Value* my_item;
+<a name="l00202"></a>00202 
+<a name="l00203"></a>00203         <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T>
+<a name="l00204"></a>00204         <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="l00205"></a>00205 
+<a name="l00206"></a>00206         <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="l00207"></a>00207         <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="l00208"></a>00208 
+<a name="l00209"></a>00209         <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="l00210"></a>00210         <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="l00211"></a>00211 
+<a name="l00212"></a>00212         <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="l00213"></a>00213         <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="l00214"></a>00214     
+<a name="l00215"></a>00215         <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> U>
+<a name="l00216"></a>00216         <span class="keyword">friend</span> <span class="keyword">class </span>internal::vector_iterator;
+<a name="l00217"></a>00217 
+<a name="l00218"></a>00218 <span class="preprocessor">#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)</span>
+<a name="l00219"></a>00219 <span class="preprocessor"></span>        <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00220"></a>00220         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00238.html">tbb::concurrent_vector</a>;
+<a name="l00221"></a>00221 <span class="preprocessor">#else</span>
+<a name="l00222"></a>00222 <span class="preprocessor"></span><span class="keyword">public</span>: <span class="comment">// workaround for MSVC</span>
+<a name="l00223"></a>00223 <span class="preprocessor">#endif </span>
+<a name="l00224"></a>00224 <span class="preprocessor"></span>
+<a name="l00225"></a>00225         vector_iterator( <span class="keyword">const</span> Container& vector, size_t index, <span class="keywordtype">void</span> *ptr = 0 ) : 
+<a name="l00226"></a>00226             my_vector(const_cast<Container*>(&vector)), 
+<a name="l00227"></a>00227             my_index(index), 
+<a name="l00228"></a>00228             my_item(static_cast<Value*>(ptr))
+<a name="l00229"></a>00229         {}
+<a name="l00230"></a>00230 
+<a name="l00231"></a>00231     <span class="keyword">public</span>:
+<a name="l00233"></a>00233         vector_iterator() : my_vector(NULL), my_index(~size_t(0)), my_item(NULL) {}
 <a name="l00234"></a>00234 
-<a name="l00235"></a>00235 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_task_group_H */</span>
+<a name="l00235"></a>00235         vector_iterator( <span class="keyword">const</span> vector_iterator<Container,typename Container::value_type>& other ) :
+<a name="l00236"></a>00236             my_vector(other.my_vector),
+<a name="l00237"></a>00237             my_index(other.my_index),
+<a name="l00238"></a>00238             my_item(other.my_item)
+<a name="l00239"></a>00239         {}
+<a name="l00240"></a>00240 
+<a name="l00241"></a>00241         vector_iterator operator+( ptrdiff_t offset )<span class="keyword"> const </span>{
+<a name="l00242"></a>00242             <span class="keywordflow">return</span> vector_iterator( *my_vector, my_index+offset );
+<a name="l00243"></a>00243         }
+<a name="l00244"></a>00244         vector_iterator &operator+=( ptrdiff_t offset ) {
+<a name="l00245"></a>00245             my_index+=offset;
+<a name="l00246"></a>00246             my_item = NULL;
+<a name="l00247"></a>00247             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00248"></a>00248         }
+<a name="l00249"></a>00249         vector_iterator operator-( ptrdiff_t offset )<span class="keyword"> const </span>{
+<a name="l00250"></a>00250             <span class="keywordflow">return</span> vector_iterator( *my_vector, my_index-offset );
+<a name="l00251"></a>00251         }
+<a name="l00252"></a>00252         vector_iterator &operator-=( ptrdiff_t offset ) {
+<a name="l00253"></a>00253             my_index-=offset;
+<a name="l00254"></a>00254             my_item = NULL;
+<a name="l00255"></a>00255             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00256"></a>00256         }
+<a name="l00257"></a>00257         Value& operator*()<span class="keyword"> const </span>{
+<a name="l00258"></a>00258             Value* item = my_item;
+<a name="l00259"></a>00259             <span class="keywordflow">if</span>( !item ) {
+<a name="l00260"></a>00260                 item = my_item = &my_vector->internal_subscript(my_index);
+<a name="l00261"></a>00261             }
+<a name="l00262"></a>00262             __TBB_ASSERT( item==&my_vector->internal_subscript(my_index), <span class="stringliteral">"corrupt cache"</span> );
+<a name="l00263"></a>00263             <span class="keywordflow">return</span> *item;
+<a name="l00264"></a>00264         }
+<a name="l00265"></a>00265         Value& <a class="code" href="a00238.html#4c52f2950bb1832886bd4458eb09d7eb">operator[]</a>( ptrdiff_t k )<span class="keyword"> const </span>{
+<a name="l00266"></a>00266             <span class="keywordflow">return</span> my_vector->internal_subscript(my_index+k);
+<a name="l00267"></a>00267         }
+<a name="l00268"></a>00268         Value* operator->()<span class="keyword"> const </span>{<span class="keywordflow">return</span> &operator*();}
+<a name="l00269"></a>00269 
+<a name="l00271"></a>00271         vector_iterator& operator++() {
+<a name="l00272"></a>00272             size_t k = ++my_index;
+<a name="l00273"></a>00273             <span class="keywordflow">if</span>( my_item ) {
+<a name="l00274"></a>00274                 <span class="comment">// Following test uses 2's-complement wizardry</span>
+<a name="l00275"></a>00275                 <span class="keywordflow">if</span>( (k& (k-2))==0 ) {
+<a name="l00276"></a>00276                     <span class="comment">// k is a power of two that is at least k-2</span>
+<a name="l00277"></a>00277                     my_item= NULL;
+<a name="l00278"></a>00278                 } <span class="keywordflow">else</span> {
+<a name="l00279"></a>00279                     ++my_item;
+<a name="l00280"></a>00280                 }
+<a name="l00281"></a>00281             }
+<a name="l00282"></a>00282             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00283"></a>00283         }
+<a name="l00284"></a>00284 
+<a name="l00286"></a>00286         vector_iterator& operator--() {
+<a name="l00287"></a>00287             __TBB_ASSERT( my_index>0, <span class="stringliteral">"operator--() applied to iterator already at beginning of concurrent_vector"</span> ); 
+<a name="l00288"></a>00288             size_t k = my_index--;
+<a name="l00289"></a>00289             <span class="keywordflow">if</span>( my_item ) {
+<a name="l00290"></a>00290                 <span class="comment">// Following test uses 2's-complement wizardry</span>
+<a name="l00291"></a>00291                 <span class="keywordflow">if</span>( (k& (k-2))==0 ) {
+<a name="l00292"></a>00292                     <span class="comment">// k is a power of two that is at least k-2  </span>
+<a name="l00293"></a>00293                     my_item= NULL;
+<a name="l00294"></a>00294                 } <span class="keywordflow">else</span> {
+<a name="l00295"></a>00295                     --my_item;
+<a name="l00296"></a>00296                 }
+<a name="l00297"></a>00297             }
+<a name="l00298"></a>00298             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00299"></a>00299         }
+<a name="l00300"></a>00300 
+<a name="l00302"></a>00302         vector_iterator operator++(<span class="keywordtype">int</span>) {
+<a name="l00303"></a>00303             vector_iterator result = *<span class="keyword">this</span>;
+<a name="l00304"></a>00304             operator++();
+<a name="l00305"></a>00305             <span class="keywordflow">return</span> result;
+<a name="l00306"></a>00306         }
+<a name="l00307"></a>00307 
+<a name="l00309"></a>00309         vector_iterator operator--(<span class="keywordtype">int</span>) {
+<a name="l00310"></a>00310             vector_iterator result = *<span class="keyword">this</span>;
+<a name="l00311"></a>00311             operator--();
+<a name="l00312"></a>00312             <span class="keywordflow">return</span> result;
+<a name="l00313"></a>00313         }
+<a name="l00314"></a>00314 
+<a name="l00315"></a>00315         <span class="comment">// STL support</span>
+<a name="l00316"></a>00316 
+<a name="l00317"></a>00317         <span class="keyword">typedef</span> ptrdiff_t difference_type;
+<a name="l00318"></a>00318         <span class="keyword">typedef</span> Value value_type;
+<a name="l00319"></a>00319         <span class="keyword">typedef</span> Value* pointer;
+<a name="l00320"></a>00320         <span class="keyword">typedef</span> Value& reference;
+<a name="l00321"></a>00321         <span class="keyword">typedef</span> std::random_access_iterator_tag iterator_category;
+<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> Container, <span class="keyword">typename</span> T>
+<a name="l00325"></a>00325     vector_iterator<Container,T> operator+( ptrdiff_t offset, <span class="keyword">const</span> vector_iterator<Container,T>& v ) {
+<a name="l00326"></a>00326         <span class="keywordflow">return</span> vector_iterator<Container,T>( *v.my_vector, v.my_index+offset );
+<a name="l00327"></a>00327     }
+<a name="l00328"></a>00328 
+<a name="l00329"></a>00329     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00330"></a>00330     <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> vector_iterator<Container,T>& i, <span class="keyword">const</span> vector_iterator<Container,U>& j ) {
+<a name="l00331"></a>00331         <span class="keywordflow">return</span> i.my_index==j.my_index && i.my_vector == j.my_vector;
+<a name="l00332"></a>00332     }
+<a name="l00333"></a>00333 
+<a name="l00334"></a>00334     <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="l00335"></a>00335     <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="l00336"></a>00336         <span class="keywordflow">return</span> !(i==j);
+<a name="l00337"></a>00337     }
+<a name="l00338"></a>00338 
+<a name="l00339"></a>00339     <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="l00340"></a>00340     <span class="keywordtype">bool</span> operator<( const vector_iterator<Container,T>& i, <span class="keyword">const</span> vector_iterator<Container,U>& j ) {
+<a name="l00341"></a>00341         <span class="keywordflow">return</span> i.my_index<j.my_index;
+<a name="l00342"></a>00342     }
+<a name="l00343"></a>00343 
+<a name="l00344"></a>00344     <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="l00345"></a>00345     <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="l00346"></a>00346         <span class="keywordflow">return</span> j<i;
+<a name="l00347"></a>00347     }
+<a name="l00348"></a>00348 
+<a name="l00349"></a>00349     <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="l00350"></a>00350     <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="l00351"></a>00351         <span class="keywordflow">return</span> !(i<j);
+<a name="l00352"></a>00352     }
+<a name="l00353"></a>00353 
+<a name="l00354"></a>00354     <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="l00355"></a>00355     <span class="keywordtype">bool</span> operator<=( const vector_iterator<Container,T>& i, <span class="keyword">const</span> vector_iterator<Container,U>& j ) {
+<a name="l00356"></a>00356         <span class="keywordflow">return</span> !(j<i);
+<a name="l00357"></a>00357     }
+<a name="l00358"></a>00358 
+<a name="l00359"></a>00359     <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="l00360"></a>00360     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="l00361"></a>00361         <span class="keywordflow">return</span> ptrdiff_t(i.my_index)-ptrdiff_t(j.my_index);
+<a name="l00362"></a>00362     }
+<a name="l00363"></a>00363 
+<a name="l00364"></a>00364     <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00365"></a>00365     <span class="keyword">class </span>allocator_base {
+<a name="l00366"></a>00366     <span class="keyword">public</span>:
+<a name="l00367"></a>00367         <span class="keyword">typedef</span> <span class="keyword">typename</span> A::template
+<a name="l00368"></a>00368             rebind<T>::other allocator_type;
+<a name="l00369"></a>00369         allocator_type my_allocator;
+<a name="l00370"></a>00370 
+<a name="l00371"></a>00371         allocator_base(<span class="keyword">const</span> allocator_type &a = allocator_type() ) : my_allocator(a) {}
+<a name="l00372"></a>00372     };
+<a name="l00373"></a>00373 
+<a name="l00374"></a>00374 } <span class="comment">// namespace internal</span>
+<a name="l00376"></a>00376 <span class="comment"></span>
+<a name="l00378"></a>00378 
+<a name="l00439"></a>00439 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00440"></a><a class="code" href="a00238.html">00440</a> <span class="keyword">class </span><a class="code" href="a00238.html">concurrent_vector</a>: <span class="keyword">protected</span> internal::allocator_base<T, A>,
+<a name="l00441"></a>00441                          <span class="keyword">private</span> internal::concurrent_vector_base {
+<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> I>
+<a name="l00444"></a>00444     <span class="keyword">class </span>generic_range_type: <span class="keyword">public</span> <a class="code" href="a00221.html">blocked_range</a><I> {
+<a name="l00445"></a>00445     <span class="keyword">public</span>:
+<a name="l00446"></a>00446         <span class="keyword">typedef</span> T value_type;
+<a name="l00447"></a>00447         <span class="keyword">typedef</span> T& reference;
+<a name="l00448"></a>00448         <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
+<a name="l00449"></a>00449         <span class="keyword">typedef</span> I iterator;
+<a name="l00450"></a>00450         <span class="keyword">typedef</span> ptrdiff_t difference_type;
+<a name="l00451"></a>00451         generic_range_type( I begin_, I end_, size_t grainsize_ = 1) : <a class="code" href="a00221.html">blocked_range<I></a>(begin_,end_,grainsize_) {} 
+<a name="l00452"></a>00452         template<typename U>
+<a name="l00453"></a>00453         generic_range_type( <span class="keyword">const</span> generic_range_type<U>& r) : <a class="code" href="a00221.html">blocked_range<I></a>(r.begin(),r.end(),r.grainsize()) {} 
+<a name="l00454"></a>00454         generic_range_type( generic_range_type& r, <a class="code" href="a00290.html">split</a> ) : <a class="code" href="a00221.html">blocked_range<I></a>(r,<a class="code" href="a00290.html">split</a>()) {}
+<a name="l00455"></a>00455     };
+<a name="l00456"></a>00456 
+<a name="l00457"></a>00457     <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> U>
+<a name="l00458"></a>00458     <span class="keyword">friend</span> <span class="keyword">class </span>internal::vector_iterator;
+<a name="l00459"></a>00459 <span class="keyword">public</span>:
+<a name="l00460"></a>00460     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00461"></a>00461     <span class="comment">// STL compatible types</span>
+<a name="l00462"></a>00462     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00463"></a>00463     <span class="keyword">typedef</span> internal::concurrent_vector_base_v3::size_type size_type;
+<a name="l00464"></a>00464     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::allocator_base<T, A>::allocator_type allocator_type;
+<a name="l00465"></a>00465 
+<a name="l00466"></a>00466     <span class="keyword">typedef</span> T value_type;
+<a name="l00467"></a>00467     <span class="keyword">typedef</span> ptrdiff_t difference_type;
+<a name="l00468"></a>00468     <span class="keyword">typedef</span> T& reference;
+<a name="l00469"></a>00469     <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
+<a name="l00470"></a>00470     <span class="keyword">typedef</span> T *pointer;
+<a name="l00471"></a>00471     <span class="keyword">typedef</span> <span class="keyword">const</span> T *const_pointer;
+<a name="l00472"></a>00472 
+<a name="l00473"></a>00473     <span class="keyword">typedef</span> internal::vector_iterator<concurrent_vector,T> iterator;
+<a name="l00474"></a>00474     <span class="keyword">typedef</span> internal::vector_iterator<concurrent_vector,const T> const_iterator;
+<a name="l00475"></a>00475 
+<a name="l00476"></a>00476 <span class="preprocessor">#if !defined(_MSC_VER) || _CPPLIB_VER>=300 </span>
+<a name="l00477"></a>00477 <span class="preprocessor"></span>    <span class="comment">// Assume ISO standard definition of std::reverse_iterator</span>
+<a name="l00478"></a>00478     <span class="keyword">typedef</span> std::reverse_iterator<iterator> reverse_iterator;
+<a name="l00479"></a>00479     <span class="keyword">typedef</span> std::reverse_iterator<const_iterator> const_reverse_iterator;
+<a name="l00480"></a>00480 <span class="preprocessor">#else</span>
+<a name="l00481"></a>00481 <span class="preprocessor"></span>    <span class="comment">// Use non-standard std::reverse_iterator</span>
+<a name="l00482"></a>00482     <span class="keyword">typedef</span> std::reverse_iterator<iterator,T,T&,T*> reverse_iterator;
+<a name="l00483"></a>00483     <span class="keyword">typedef</span> std::reverse_iterator<const_iterator,T,const T&,const T*> const_reverse_iterator;
+<a name="l00484"></a>00484 <span class="preprocessor">#endif </span><span class="comment">/* defined(_MSC_VER) && (_MSC_VER<1300) */</span>
+<a name="l00485"></a>00485 
+<a name="l00486"></a>00486     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00487"></a>00487     <span class="comment">// Parallel algorithm support</span>
+<a name="l00488"></a>00488     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00489"></a>00489     <span class="keyword">typedef</span> generic_range_type<iterator> range_type;
+<a name="l00490"></a>00490     <span class="keyword">typedef</span> generic_range_type<const_iterator> const_range_type;
+<a name="l00491"></a>00491 
+<a name="l00492"></a>00492     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00493"></a>00493     <span class="comment">// STL compatible constructors & destructors</span>
+<a name="l00494"></a>00494     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00495"></a>00495 
+<a name="l00497"></a><a class="code" href="a00238.html#2c8ca9cabfcd30ad5943324c853664b5">00497</a>     <span class="keyword">explicit</span> <a class="code" href="a00238.html">concurrent_vector</a>(<span class="keyword">const</span> allocator_type &a = allocator_type())
+<a name="l00498"></a>00498         : internal::allocator_base<T, A>(a), internal::concurrent_vector_base()
+<a name="l00499"></a>00499     {
+<a name="l00500"></a>00500         vector_allocator_ptr = &internal_allocator;
+<a name="l00501"></a>00501     }
+<a name="l00502"></a>00502 
+<a name="l00504"></a><a class="code" href="a00238.html#dd8a200b99a8088435a37934b58fe335">00504</a>     <a class="code" href="a00238.html">concurrent_vector</a>( <span class="keyword">const</span> <a class="code" href="a00238.html">concurrent_vector</a>& vector, <span class="keyword">const</span> allocator_type& a = allocator_type() )
+<a name="l00505"></a>00505         : internal::allocator_base<T, A>(a), internal::concurrent_vector_base()
+<a name="l00506"></a>00506     {
+<a name="l00507"></a>00507         vector_allocator_ptr = &internal_allocator;
+<a name="l00508"></a>00508         __TBB_TRY {
+<a name="l00509"></a>00509             internal_copy(vector, <span class="keyword">sizeof</span>(T), &copy_array);
+<a name="l00510"></a>00510         } __TBB_CATCH(...) {
+<a name="l00511"></a>00511             segment_t *table = my_segment;
+<a name="l00512"></a>00512             internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
+<a name="l00513"></a>00513             __TBB_RETHROW();
+<a name="l00514"></a>00514         }
+<a name="l00515"></a>00515     }
+<a name="l00516"></a>00516 
+<a name="l00518"></a>00518     <span class="keyword">template</span><<span class="keyword">class</span> M>
+<a name="l00519"></a><a class="code" href="a00238.html#64432f13f7b29bfe4acfb5568f34f3a8">00519</a>     <a class="code" href="a00238.html">concurrent_vector</a>( <span class="keyword">const</span> <a class="code" href="a00238.html">concurrent_vector<T, M></a>& vector, <span class="keyword">const</span> allocator_type& a = allocator_type() )
+<a name="l00520"></a>00520         : internal::allocator_base<T, A>(a), internal::concurrent_vector_base()
+<a name="l00521"></a>00521     {
+<a name="l00522"></a>00522         vector_allocator_ptr = &internal_allocator;
+<a name="l00523"></a>00523         __TBB_TRY {
+<a name="l00524"></a>00524             internal_copy(vector.<a class="code" href="a00238.html#bb5ae659871478f1f5c68039e1273e12">internal_vector_base</a>(), <span class="keyword">sizeof</span>(T), &copy_array);
+<a name="l00525"></a>00525         } __TBB_CATCH(...) {
+<a name="l00526"></a>00526             segment_t *table = my_segment;
+<a name="l00527"></a>00527             internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
+<a name="l00528"></a>00528             __TBB_RETHROW();
+<a name="l00529"></a>00529         }
+<a name="l00530"></a>00530     }
+<a name="l00531"></a>00531 
+<a name="l00533"></a><a class="code" href="a00238.html#2a2e261dfe1cab3f73f7b1a94137cfca">00533</a>     <span class="keyword">explicit</span> <a class="code" href="a00238.html">concurrent_vector</a>(size_type n)
+<a name="l00534"></a>00534     {
+<a name="l00535"></a>00535         vector_allocator_ptr = &internal_allocator;
+<a name="l00536"></a>00536         __TBB_TRY {
+<a name="l00537"></a>00537             internal_resize( n, <span class="keyword">sizeof</span>(T), max_size(), NULL, &destroy_array, &initialize_array );
+<a name="l00538"></a>00538         } __TBB_CATCH(...) {
+<a name="l00539"></a>00539             segment_t *table = my_segment;
+<a name="l00540"></a>00540             internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
+<a name="l00541"></a>00541             __TBB_RETHROW();
+<a name="l00542"></a>00542         }
+<a name="l00543"></a>00543     }
+<a name="l00544"></a>00544 
+<a name="l00546"></a><a class="code" href="a00238.html#3883a8a908b44e249a57f454de3f55d8">00546</a>     <a class="code" href="a00238.html">concurrent_vector</a>(size_type n, const_reference t, <span class="keyword">const</span> allocator_type& a = allocator_type())
+<a name="l00547"></a>00547         : internal::allocator_base<T, A>(a)
+<a name="l00548"></a>00548     {
+<a name="l00549"></a>00549         vector_allocator_ptr = &internal_allocator;
+<a name="l00550"></a>00550         __TBB_TRY {
+<a name="l00551"></a>00551             internal_resize( n, <span class="keyword">sizeof</span>(T), max_size(), static_cast<const void*>(&t), &destroy_array, &initialize_array_by );
+<a name="l00552"></a>00552         } __TBB_CATCH(...) {
+<a name="l00553"></a>00553             segment_t *table = my_segment;
+<a name="l00554"></a>00554             internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
+<a name="l00555"></a>00555             __TBB_RETHROW();
+<a name="l00556"></a>00556         }
+<a name="l00557"></a>00557     }
+<a name="l00558"></a>00558 
+<a name="l00560"></a>00560     <span class="keyword">template</span><<span class="keyword">class</span> I>
+<a name="l00561"></a><a class="code" href="a00238.html#4450de83c5862ea4bcd9443fd7e67419">00561</a>     <a class="code" href="a00238.html">concurrent_vector</a>(I first, I last, <span class="keyword">const</span> allocator_type &a = allocator_type())
+<a name="l00562"></a>00562         : internal::allocator_base<T, A>(a)
+<a name="l00563"></a>00563     {
+<a name="l00564"></a>00564         vector_allocator_ptr = &internal_allocator;
+<a name="l00565"></a>00565         __TBB_TRY {
+<a name="l00566"></a>00566             internal_assign_range(first, last, <span class="keyword">static_cast</span><is_integer_tag<std::numeric_limits<I>::is_integer> *>(0) );
+<a name="l00567"></a>00567         } __TBB_CATCH(...) {
+<a name="l00568"></a>00568             segment_t *table = my_segment;
+<a name="l00569"></a>00569             internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
+<a name="l00570"></a>00570             __TBB_RETHROW();
+<a name="l00571"></a>00571         }
+<a name="l00572"></a>00572     }
+<a name="l00573"></a>00573 
+<a name="l00575"></a><a class="code" href="a00238.html#691f0f3cda3e489c37a657016e375eaf">00575</a>     <a class="code" href="a00238.html">concurrent_vector</a>& operator=( <span class="keyword">const</span> <a class="code" href="a00238.html">concurrent_vector</a>& vector ) {
+<a name="l00576"></a>00576         <span class="keywordflow">if</span>( <span class="keyword">this</span> != &vector )
+<a name="l00577"></a>00577             internal_assign(vector, <span class="keyword">sizeof</span>(T), &destroy_array, &assign_array, &copy_array);
+<a name="l00578"></a>00578         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00579"></a>00579     }
+<a name="l00580"></a>00580 
+<a name="l00582"></a>00582     <span class="keyword">template</span><<span class="keyword">class</span> M>
+<a name="l00583"></a><a class="code" href="a00238.html#19f4ab88a01b0fd056af3bba463e7bd6">00583</a>     <a class="code" href="a00238.html">concurrent_vector</a>& operator=( <span class="keyword">const</span> <a class="code" href="a00238.html">concurrent_vector<T, M></a>& vector ) {
+<a name="l00584"></a>00584         <span class="keywordflow">if</span>( static_cast<void*>( <span class="keyword">this</span> ) != static_cast<const void*>( &vector ) )
+<a name="l00585"></a>00585             internal_assign(vector.internal_vector_base(),
+<a name="l00586"></a>00586                 <span class="keyword">sizeof</span>(T), &destroy_array, &assign_array, &copy_array);
+<a name="l00587"></a>00587         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00588"></a>00588     }
+<a name="l00589"></a>00589 
+<a name="l00590"></a>00590     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00591"></a>00591     <span class="comment">// Concurrent operations</span>
+<a name="l00592"></a>00592     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00594"></a>00594 <span class="comment"></span><span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00595"></a>00595 <span class="preprocessor"></span>
+<a name="l00596"></a><a class="code" href="a00238.html#30484e3959892fd5392fa93c873c31f0">00596</a>     size_type grow_by( size_type delta ) {
+<a name="l00597"></a>00597         <span class="keywordflow">return</span> delta ? internal_grow_by( delta, <span class="keyword">sizeof</span>(T), &initialize_array, NULL ) : my_early_size;
+<a name="l00598"></a>00598     }
+<a name="l00599"></a>00599 <span class="preprocessor">#else</span>
+<a name="l00600"></a>00600 <span class="preprocessor"></span>
+<a name="l00601"></a><a class="code" href="a00238.html#c8177b1865270ea68aa1ab9148e5e35e">00601</a>     iterator grow_by( size_type delta ) {
+<a name="l00602"></a>00602         <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="l00603"></a>00603     }
+<a name="l00604"></a>00604 <span class="preprocessor">#endif</span>
+<a name="l00605"></a>00605 <span class="preprocessor"></span>
+<a name="l00607"></a>00607 <span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00608"></a>00608 <span class="preprocessor"></span>
+<a name="l00609"></a><a class="code" href="a00238.html#38274ab3f772ecba600c7daca7690102">00609</a>     size_type grow_by( size_type delta, const_reference t ) {
+<a name="l00610"></a>00610         <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="l00611"></a>00611     }
+<a name="l00612"></a>00612 <span class="preprocessor">#else</span>
+<a name="l00613"></a>00613 <span class="preprocessor"></span>
+<a name="l00614"></a><a class="code" href="a00238.html#473a59a4c9308b93411b898b3110d26c">00614</a>     iterator grow_by( size_type delta, const_reference t ) {
+<a name="l00615"></a>00615         <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="l00616"></a>00616     }
+<a name="l00617"></a>00617 <span class="preprocessor">#endif</span>
+<a name="l00618"></a>00618 <span class="preprocessor"></span>
+<a name="l00620"></a>00620 <span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00621"></a>00621 <span class="preprocessor"></span>
+<a name="l00623"></a><a class="code" href="a00238.html#47fe588214dd5fa06ab6e8ab78d83874">00623</a>     <span class="keywordtype">void</span> grow_to_at_least( size_type n ) {
+<a name="l00624"></a>00624         <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="l00625"></a>00625     };
+<a name="l00626"></a>00626 <span class="preprocessor">#else</span>
+<a name="l00627"></a>00627 <span class="preprocessor"></span>
+<a name="l00631"></a><a class="code" href="a00238.html#a7e3b67c8ccab16d0aecc80899ae799d">00631</a>     iterator grow_to_at_least( size_type n ) {
+<a name="l00632"></a>00632         size_type m=0;
+<a name="l00633"></a>00633         <span class="keywordflow">if</span>( n ) {
+<a name="l00634"></a>00634             m = internal_grow_to_at_least_with_result( n, <span class="keyword">sizeof</span>(T), &initialize_array, NULL );
+<a name="l00635"></a>00635             <span class="keywordflow">if</span>( m>n ) m=n;
+<a name="l00636"></a>00636         }
+<a name="l00637"></a>00637         <span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>, m);
+<a name="l00638"></a>00638     };
+<a name="l00639"></a>00639 <span class="preprocessor">#endif</span>
+<a name="l00640"></a>00640 <span class="preprocessor"></span>
+<a name="l00642"></a>00642 <span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00643"></a><a class="code" href="a00238.html#e94e038f915c0268fdf2d3d7f87d81b8">00643</a> <span class="preprocessor"></span>    size_type push_back( const_reference item )
+<a name="l00644"></a>00644 <span class="preprocessor">#else</span>
+<a name="l00645"></a>00645 <span class="preprocessor"></span>
+<a name="l00646"></a>00646     iterator push_back( const_reference item )
+<a name="l00647"></a>00647 <span class="preprocessor">#endif</span>
+<a name="l00648"></a>00648 <span class="preprocessor"></span>    {
+<a name="l00649"></a>00649         size_type k;
+<a name="l00650"></a>00650         <span class="keywordtype">void</span> *ptr = internal_push_back(<span class="keyword">sizeof</span>(T),k);
+<a name="l00651"></a>00651         internal_loop_guide loop(1, ptr);
+<a name="l00652"></a>00652         loop.init(&item);
+<a name="l00653"></a>00653 <span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00654"></a>00654 <span class="preprocessor"></span>        <span class="keywordflow">return</span> k;
+<a name="l00655"></a>00655 <span class="preprocessor">#else</span>
+<a name="l00656"></a>00656 <span class="preprocessor"></span>        <span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>, k, ptr);
+<a name="l00657"></a>00657 <span class="preprocessor">#endif</span>
+<a name="l00658"></a>00658 <span class="preprocessor"></span>    }
+<a name="l00659"></a>00659 
+<a name="l00661"></a>00661 
+<a name="l00663"></a><a class="code" href="a00238.html#4c52f2950bb1832886bd4458eb09d7eb">00663</a>     reference operator[]( size_type index ) {
+<a name="l00664"></a>00664         <span class="keywordflow">return</span> internal_subscript(index);
+<a name="l00665"></a>00665     }
+<a name="l00666"></a>00666 
+<a name="l00668"></a><a class="code" href="a00238.html#c6fade5c732cc95274d1d8277ea619d1">00668</a>     const_reference operator[]( size_type index )<span class="keyword"> const </span>{
+<a name="l00669"></a>00669         <span class="keywordflow">return</span> internal_subscript(index);
+<a name="l00670"></a>00670     }
+<a name="l00671"></a>00671 
+<a name="l00673"></a><a class="code" href="a00238.html#0c073ca43e787c7cbf7b0e26d2221748">00673</a>     reference at( size_type index ) {
+<a name="l00674"></a>00674         <span class="keywordflow">return</span> internal_subscript_with_exceptions(index);
+<a name="l00675"></a>00675     }
+<a name="l00676"></a>00676 
+<a name="l00678"></a><a class="code" href="a00238.html#23e14a38af748edff96a7adc3a0f1c58">00678</a>     const_reference at( size_type index )<span class="keyword"> const </span>{
+<a name="l00679"></a>00679         <span class="keywordflow">return</span> internal_subscript_with_exceptions(index);
+<a name="l00680"></a>00680     }
+<a name="l00681"></a>00681 
+<a name="l00683"></a><a class="code" href="a00238.html#a4c6ffff3bf08b92939aa2fc516edfba">00683</a>     range_type range( size_t grainsize = 1) {
+<a name="l00684"></a>00684         <span class="keywordflow">return</span> range_type( begin(), end(), grainsize );
+<a name="l00685"></a>00685     }
+<a name="l00686"></a>00686 
+<a name="l00688"></a><a class="code" href="a00238.html#3d09ccfb581b879ae64203741035e193">00688</a>     const_range_type range( size_t grainsize = 1 )<span class="keyword"> const </span>{
+<a name="l00689"></a>00689         <span class="keywordflow">return</span> const_range_type( begin(), end(), grainsize );
+<a name="l00690"></a>00690     }
+<a name="l00691"></a>00691     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00692"></a>00692     <span class="comment">// Capacity</span>
+<a name="l00693"></a>00693     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00695"></a><a class="code" href="a00238.html#715fe313c4a9c22731cc404dd80c9ec9">00695</a> <span class="comment"></span>    size_type size()<span class="keyword"> const </span>{
+<a name="l00696"></a>00696         size_type sz = my_early_size, cp = internal_capacity();
+<a name="l00697"></a>00697         <span class="keywordflow">return</span> cp < sz ? cp : sz;
+<a name="l00698"></a>00698     }
+<a name="l00699"></a>00699 
+<a name="l00701"></a><a class="code" href="a00238.html#c6426cb93cf20d3af40f3c90f1f0481a">00701</a>     <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !my_early_size;}
+<a name="l00702"></a>00702 
+<a name="l00704"></a><a class="code" href="a00238.html#3ed6b9ae7217af5103d974045b6f5cd5">00704</a>     size_type capacity()<span class="keyword"> const </span>{<span class="keywordflow">return</span> internal_capacity();}
+<a name="l00705"></a>00705 
+<a name="l00707"></a>00707 
+<a name="l00709"></a><a class="code" href="a00238.html#5a0ce05026994b010018f72cfdeb72c1">00709</a>     <span class="keywordtype">void</span> reserve( size_type n ) {
+<a name="l00710"></a>00710         <span class="keywordflow">if</span>( n )
+<a name="l00711"></a>00711             internal_reserve(n, <span class="keyword">sizeof</span>(T), max_size());
+<a name="l00712"></a>00712     }
+<a name="l00713"></a>00713 
+<a name="l00715"></a><a class="code" href="a00238.html#8dfb0cb0eef96d440b4dcf801807a718">00715</a>     <span class="keywordtype">void</span> resize( size_type n ) {
+<a name="l00716"></a>00716         internal_resize( n, <span class="keyword">sizeof</span>(T), max_size(), NULL, &destroy_array, &initialize_array );
+<a name="l00717"></a>00717     }
+<a name="l00718"></a>00718     
+<a name="l00720"></a><a class="code" href="a00238.html#98ce6b2c6d2622f0c030b46dfac3880c">00720</a>     <span class="keywordtype">void</span> resize( size_type n, const_reference t ) {
+<a name="l00721"></a>00721         internal_resize( n, <span class="keyword">sizeof</span>(T), max_size(), static_cast<const void*>(&t), &destroy_array, &initialize_array_by );
+<a name="l00722"></a>00722     }
+<a name="l00723"></a>00723    
+<a name="l00724"></a>00724 <span class="preprocessor">#if TBB_DEPRECATED </span>
+<a name="l00726"></a><a class="code" href="a00238.html#1693d1da41b1a8235871be9c6633be35">00726</a> <span class="preprocessor">    void compact() {shrink_to_fit();}</span>
+<a name="l00727"></a>00727 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_DEPRECATED */</span>
+<a name="l00728"></a>00728 
+<a name="l00730"></a>00730     <span class="keywordtype">void</span> shrink_to_fit();
+<a name="l00731"></a>00731 
+<a name="l00733"></a><a class="code" href="a00238.html#2c248a017f0576df3e7cd99627836fd6">00733</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="l00734"></a>00734 
+<a name="l00735"></a>00735     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00736"></a>00736     <span class="comment">// STL support</span>
+<a name="l00737"></a>00737     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00738"></a>00738 
+<a name="l00740"></a><a class="code" href="a00238.html#730b23a251ecb6d37f692fb22f38e029">00740</a>     iterator begin() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>,0);}
+<a name="l00742"></a><a class="code" href="a00238.html#c0b51160e5a764982ec97a455f94f2c6">00742</a>     iterator end() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>,size());}
+<a name="l00744"></a><a class="code" href="a00238.html#78a06182276ff758788d4c0623ae0d71">00744</a>     const_iterator begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>,0);}
+<a name="l00746"></a><a class="code" href="a00238.html#1e6aa764ce5a1cbd24526f68bc0a2f6b">00746</a>     const_iterator end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>,size());}
+<a name="l00748"></a><a class="code" href="a00238.html#f88fcf1c920693c39bd9709db33c199f">00748</a>     const_iterator cbegin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>,0);}
+<a name="l00750"></a><a class="code" href="a00238.html#0c15a5d0f1cf75d687dabba07da1d46b">00750</a>     const_iterator cend()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>,size());}
+<a name="l00752"></a><a class="code" href="a00238.html#5e220926d09236d98f04fe0721e5f9a1">00752</a>     reverse_iterator rbegin() {<span class="keywordflow">return</span> reverse_iterator(end());}
+<a name="l00754"></a><a class="code" href="a00238.html#290119a4eb43cd6a9e98fa17016ba3c2">00754</a>     reverse_iterator rend() {<span class="keywordflow">return</span> reverse_iterator(begin());}
+<a name="l00756"></a><a class="code" href="a00238.html#9f9c103e18d5f212703805354074ad44">00756</a>     const_reverse_iterator rbegin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_reverse_iterator(end());}
+<a name="l00758"></a><a class="code" href="a00238.html#d438b9b32ea3a8ffb703015b6dce055b">00758</a>     const_reverse_iterator rend()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_reverse_iterator(begin());}
+<a name="l00760"></a><a class="code" href="a00238.html#db78a1d28c9c966050e8a2926d834a33">00760</a>     const_reverse_iterator crbegin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_reverse_iterator(end());}
+<a name="l00762"></a><a class="code" href="a00238.html#fff9cece89438587997ebedf93c5e962">00762</a>     const_reverse_iterator crend()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_reverse_iterator(begin());}
+<a name="l00764"></a><a class="code" href="a00238.html#15181759c0bfa2ddce5d10c7550e0002">00764</a>     reference front() {
+<a name="l00765"></a>00765         __TBB_ASSERT( size()>0, NULL);
+<a name="l00766"></a>00766         <span class="keywordflow">return</span> static_cast<T*>(my_segment[0].array)[0];
+<a name="l00767"></a>00767     }
+<a name="l00769"></a><a class="code" href="a00238.html#502615a858eb9fa0390ee59169065e90">00769</a>     const_reference front()<span class="keyword"> const </span>{
+<a name="l00770"></a>00770         __TBB_ASSERT( size()>0, NULL);
+<a name="l00771"></a>00771         <span class="keywordflow">return</span> static_cast<const T*>(my_segment[0].array)[0];
+<a name="l00772"></a>00772     }
+<a name="l00774"></a><a class="code" href="a00238.html#41ce48d6015a1a2812d41cf620ec3476">00774</a>     reference back() {
+<a name="l00775"></a>00775         __TBB_ASSERT( size()>0, NULL);
+<a name="l00776"></a>00776         <span class="keywordflow">return</span> internal_subscript( size()-1 );
+<a name="l00777"></a>00777     }
+<a name="l00779"></a><a class="code" href="a00238.html#bd518e204107d07fd08d0ec5bdfd383d">00779</a>     const_reference back()<span class="keyword"> const </span>{
+<a name="l00780"></a>00780         __TBB_ASSERT( size()>0, NULL);
+<a name="l00781"></a>00781         <span class="keywordflow">return</span> internal_subscript( size()-1 );
+<a name="l00782"></a>00782     }
+<a name="l00784"></a><a class="code" href="a00238.html#2fdba8e90de6a4d2300222236d46758e">00784</a>     allocator_type get_allocator()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> this->my_allocator; }
+<a name="l00785"></a>00785 
+<a name="l00787"></a><a class="code" href="a00238.html#423e5aa15e0e3309ad86d026fd85f6f6">00787</a>     <span class="keywordtype">void</span> assign(size_type n, const_reference t) {
+<a name="l00788"></a>00788         clear();
+<a name="l00789"></a>00789         internal_resize( n, <span class="keyword">sizeof</span>(T), max_size(), static_cast<const void*>(&t), &destroy_array, &initialize_array_by );
+<a name="l00790"></a>00790     }
+<a name="l00791"></a>00791 
+<a name="l00793"></a>00793     <span class="keyword">template</span><<span class="keyword">class</span> I>
+<a name="l00794"></a><a class="code" href="a00238.html#93a06b3112cb804f42f40efb5e7387b4">00794</a>     <span class="keywordtype">void</span> assign(I first, I last) {
+<a name="l00795"></a>00795         clear(); internal_assign_range( first, last, <span class="keyword">static_cast</span><is_integer_tag<std::numeric_limits<I>::is_integer> *>(0) );
+<a name="l00796"></a>00796     }
+<a name="l00797"></a>00797 
+<a name="l00799"></a><a class="code" href="a00238.html#96c9c4bd968ed3edb8dd276854d2dae0">00799</a>     <span class="keywordtype">void</span> swap(<a class="code" href="a00238.html">concurrent_vector</a> &vector) {
+<a name="l00800"></a>00800         <span class="keywordflow">if</span>( <span class="keyword">this</span> != &vector ) {
+<a name="l00801"></a>00801             concurrent_vector_base_v3::internal_swap(static_cast<concurrent_vector_base_v3&>(vector));
+<a name="l00802"></a>00802             std::swap(this->my_allocator, vector.my_allocator);
+<a name="l00803"></a>00803         }
+<a name="l00804"></a>00804     }
+<a name="l00805"></a>00805 
+<a name="l00807"></a>00807 
+<a name="l00808"></a><a class="code" href="a00238.html#26f937a359a66b6aae904c3cd9a3c444">00808</a>     <span class="keywordtype">void</span> clear() {
+<a name="l00809"></a>00809         internal_clear(&destroy_array);
+<a name="l00810"></a>00810     }
+<a name="l00811"></a>00811 
+<a name="l00813"></a><a class="code" href="a00238.html#da2444b28bb840d38f60d0030333a5fc">00813</a>     ~<a class="code" href="a00238.html">concurrent_vector</a>() {
+<a name="l00814"></a>00814         segment_t *table = my_segment;
+<a name="l00815"></a>00815         internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
+<a name="l00816"></a>00816         <span class="comment">// base class destructor call should be then</span>
+<a name="l00817"></a>00817     }
+<a name="l00818"></a>00818 
+<a name="l00819"></a>00819     <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="l00820"></a>00820 <span class="keyword">private</span>:
+<a name="l00822"></a>00822     <span class="keyword">static</span> <span class="keywordtype">void</span> *internal_allocator(internal::concurrent_vector_base_v3 &vb, size_t k) {
+<a name="l00823"></a>00823         <span class="keywordflow">return</span> static_cast<concurrent_vector<T, A>&>(vb).my_allocator.allocate(k);
+<a name="l00824"></a>00824     }
+<a name="l00826"></a>00826     <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="l00827"></a>00827 
+<a name="l00829"></a>00829     T& internal_subscript( size_type index ) <span class="keyword">const</span>;
+<a name="l00830"></a>00830 
+<a name="l00832"></a>00832     T& internal_subscript_with_exceptions( size_type index ) <span class="keyword">const</span>;
+<a name="l00833"></a>00833 
+<a name="l00835"></a>00835     <span class="keywordtype">void</span> internal_assign_n(size_type n, const_pointer p) {
+<a name="l00836"></a>00836         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="l00837"></a>00837     }
+<a name="l00838"></a>00838 
+<a name="l00840"></a>00840     <span class="keyword">template</span><<span class="keywordtype">bool</span> B> <span class="keyword">class </span>is_integer_tag;
+<a name="l00841"></a>00841 
+<a name="l00843"></a>00843     <span class="keyword">template</span><<span class="keyword">class</span> I>
+<a name="l00844"></a>00844     <span class="keywordtype">void</span> internal_assign_range(I first, I last, is_integer_tag<true> *) {
+<a name="l00845"></a>00845         internal_assign_n(static_cast<size_type>(first), &static_cast<T&>(last));
+<a name="l00846"></a>00846     }
+<a name="l00848"></a>00848     <span class="keyword">template</span><<span class="keyword">class</span> I>
+<a name="l00849"></a>00849     <span class="keywordtype">void</span> internal_assign_range(I first, I last, is_integer_tag<false> *) {
+<a name="l00850"></a>00850         internal_assign_iterators(first, last);
+<a name="l00851"></a>00851     }
+<a name="l00853"></a>00853     <span class="keyword">template</span><<span class="keyword">class</span> I>
+<a name="l00854"></a>00854     <span class="keywordtype">void</span> internal_assign_iterators(I first, I last);
+<a name="l00855"></a>00855 
+<a name="l00857"></a>00857     <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="l00858"></a>00858 
+<a name="l00860"></a>00860     <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="l00861"></a>00861 
+<a name="l00863"></a>00863     <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="l00864"></a>00864 
+<a name="l00866"></a>00866     <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="l00867"></a>00867 
+<a name="l00869"></a>00869     <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="l00870"></a>00870 
+<a name="l00872"></a>00872     <span class="keyword">class </span>internal_loop_guide : internal::no_copy {
+<a name="l00873"></a>00873     <span class="keyword">public</span>:
+<a name="l00874"></a>00874         <span class="keyword">const</span> pointer array;
+<a name="l00875"></a>00875         <span class="keyword">const</span> size_type n;
+<a name="l00876"></a>00876         size_type i;
+<a name="l00877"></a>00877         internal_loop_guide(size_type ntrials, <span class="keywordtype">void</span> *ptr)
+<a name="l00878"></a>00878             : array(static_cast<pointer>(ptr)), n(ntrials), i(0) {}
+<a name="l00879"></a>00879         <span class="keywordtype">void</span> init() {   <span class="keywordflow">for</span>(; i < n; ++i) <span class="keyword">new</span>( &array[i] ) T(); }
+<a name="l00880"></a>00880         <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="l00881"></a>00881         <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="l00882"></a>00882         <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="l00883"></a>00883         <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="l00884"></a>00884         ~internal_loop_guide() {
+<a name="l00885"></a>00885             <span class="keywordflow">if</span>(i < n) <span class="comment">// if exception raised, do zerroing on the rest of items</span>
+<a name="l00886"></a>00886                 std::memset(array+i, 0, (n-i)*<span class="keyword">sizeof</span>(value_type));
+<a name="l00887"></a>00887         }
+<a name="l00888"></a>00888     };
+<a name="l00889"></a>00889 };
+<a name="l00890"></a>00890 
+<a name="l00891"></a>00891 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) </span>
+<a name="l00892"></a>00892 <span class="preprocessor"></span><span class="preprocessor">#pragma warning (push)</span>
+<a name="l00893"></a>00893 <span class="preprocessor"></span><span class="preprocessor">#pragma warning (disable: 4701) // potentially uninitialized local variable "old"</span>
+<a name="l00894"></a>00894 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00895"></a>00895 <span class="preprocessor"></span><span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00896"></a><a class="code" href="a00238.html#03c6f4cf66532bf4cc907ee738a9a186">00896</a> <span class="keywordtype">void</span> <a class="code" href="a00238.html">concurrent_vector<T, A>::shrink_to_fit</a>() {
+<a name="l00897"></a>00897     internal_segments_table old;
+<a name="l00898"></a>00898     __TBB_TRY {
+<a name="l00899"></a>00899         <span class="keywordflow">if</span>( internal_compact( <span class="keyword">sizeof</span>(T), &old, &destroy_array, &copy_array ) )
+<a name="l00900"></a>00900             internal_free_segments( old.table, pointers_per_long_table, old.first_block ); <span class="comment">// free joined and unnecessary segments</span>
+<a name="l00901"></a>00901     } __TBB_CATCH(...) {
+<a name="l00902"></a>00902         <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="l00903"></a>00903             internal_free_segments( old.table, 1, old.first_block );
+<a name="l00904"></a>00904         __TBB_RETHROW();
+<a name="l00905"></a>00905     }
+<a name="l00906"></a>00906 }
+<a name="l00907"></a>00907 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) </span>
+<a name="l00908"></a>00908 <span class="preprocessor"></span><span class="preprocessor">#pragma warning (pop)</span>
+<a name="l00909"></a>00909 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4701 is back </span>
+<a name="l00910"></a>00910 <span class="preprocessor"></span>
+<a name="l00911"></a>00911 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00912"></a>00912 <span class="keywordtype">void</span> <a class="code" href="a00238.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="l00913"></a>00913     <span class="comment">// Free the arrays</span>
+<a name="l00914"></a>00914     <span class="keywordflow">while</span>( k > first_block ) {
+<a name="l00915"></a>00915         --k;
+<a name="l00916"></a>00916         T* array = static_cast<T*>(table[k]);
+<a name="l00917"></a>00917         table[k] = NULL;
+<a name="l00918"></a>00918         <span class="keywordflow">if</span>( array > internal::vector_allocation_error_flag ) <span class="comment">// check for correct segment pointer</span>
+<a name="l00919"></a>00919             this->my_allocator.deallocate( array, segment_size(k) );
+<a name="l00920"></a>00920     }
+<a name="l00921"></a>00921     T* array = static_cast<T*>(table[0]);
+<a name="l00922"></a>00922     <span class="keywordflow">if</span>( array > internal::vector_allocation_error_flag ) {
+<a name="l00923"></a>00923         __TBB_ASSERT( first_block > 0, NULL );
+<a name="l00924"></a>00924         <span class="keywordflow">while</span>(k > 0) table[--k] = NULL;
+<a name="l00925"></a>00925         this->my_allocator.deallocate( array, segment_size(first_block) );
+<a name="l00926"></a>00926     }
+<a name="l00927"></a>00927 }
+<a name="l00928"></a>00928 
+<a name="l00929"></a>00929 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00930"></a>00930 T& concurrent_vector<T, A>::internal_subscript( size_type index )<span class="keyword"> const </span>{
+<a name="l00931"></a>00931     __TBB_ASSERT( index < my_early_size, <span class="stringliteral">"index out of bounds"</span> );
+<a name="l00932"></a>00932     size_type j = index;
+<a name="l00933"></a>00933     segment_index_t k = segment_base_index_of( j );
+<a name="l00934"></a>00934     __TBB_ASSERT( (segment_t*)my_segment != my_storage || k < pointers_per_short_table, <span class="stringliteral">"index is being allocated"</span> );
+<a name="l00935"></a>00935     <span class="comment">// no need in __TBB_load_with_acquire since thread works in own space or gets </span>
+<a name="l00936"></a>00936     T* array = static_cast<T*>( tbb::internal::itt_hide_load_word(my_segment[k].array));
+<a name="l00937"></a>00937     __TBB_ASSERT( array != internal::vector_allocation_error_flag, <span class="stringliteral">"the instance is broken by bad allocation. Use at() instead"</span> );
+<a name="l00938"></a>00938     __TBB_ASSERT( array, <span class="stringliteral">"index is being allocated"</span> );
+<a name="l00939"></a>00939     <span class="keywordflow">return</span> array[j];
+<a name="l00940"></a>00940 }
+<a name="l00941"></a>00941 
+<a name="l00942"></a>00942 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00943"></a>00943 T& concurrent_vector<T, A>::internal_subscript_with_exceptions( size_type index )<span class="keyword"> const </span>{
+<a name="l00944"></a>00944     <span class="keywordflow">if</span>( index >= my_early_size )
+<a name="l00945"></a>00945         internal::throw_exception(internal::eid_out_of_range); <span class="comment">// throw std::out_of_range</span>
+<a name="l00946"></a>00946     size_type j = index;
+<a name="l00947"></a>00947     segment_index_t k = segment_base_index_of( j );
+<a name="l00948"></a>00948     <span class="keywordflow">if</span>( (segment_t*)my_segment == my_storage && k >= pointers_per_short_table )
+<a name="l00949"></a>00949         internal::throw_exception(internal::eid_segment_range_error); <span class="comment">// throw std::range_error</span>
+<a name="l00950"></a>00950     <span class="keywordtype">void</span> *array = my_segment[k].array; <span class="comment">// no need in __TBB_load_with_acquire</span>
+<a name="l00951"></a>00951     <span class="keywordflow">if</span>( array <= internal::vector_allocation_error_flag ) <span class="comment">// check for correct segment pointer</span>
+<a name="l00952"></a>00952         internal::throw_exception(internal::eid_index_range_error); <span class="comment">// throw std::range_error</span>
+<a name="l00953"></a>00953     <span class="keywordflow">return</span> static_cast<T*>(array)[j];
+<a name="l00954"></a>00954 }
+<a name="l00955"></a>00955 
+<a name="l00956"></a>00956 <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="l00957"></a>00957 <span class="keywordtype">void</span> concurrent_vector<T, A>::internal_assign_iterators(I first, I last) {
+<a name="l00958"></a>00958     __TBB_ASSERT(my_early_size == 0, NULL);
+<a name="l00959"></a>00959     size_type n = std::distance(first, last);
+<a name="l00960"></a>00960     <span class="keywordflow">if</span>( !n ) <span class="keywordflow">return</span>;
+<a name="l00961"></a>00961     internal_reserve(n, <span class="keyword">sizeof</span>(T), <a class="code" href="a00238.html#2c248a017f0576df3e7cd99627836fd6">max_size</a>());
+<a name="l00962"></a>00962     my_early_size = n;
+<a name="l00963"></a>00963     segment_index_t k = 0;
+<a name="l00964"></a>00964     size_type sz = segment_size( my_first_block );
+<a name="l00965"></a>00965     <span class="keywordflow">while</span>( sz < n ) {
+<a name="l00966"></a>00966         internal_loop_guide loop(sz, my_segment[k].array);
+<a name="l00967"></a>00967         loop.iterate(first);
+<a name="l00968"></a>00968         n -= sz;
+<a name="l00969"></a>00969         <span class="keywordflow">if</span>( !k ) k = my_first_block;
+<a name="l00970"></a>00970         <span class="keywordflow">else</span> { ++k; sz <<= 1; }
+<a name="l00971"></a>00971     }
+<a name="l00972"></a>00972     internal_loop_guide loop(n, my_segment[k].array);
+<a name="l00973"></a>00973     loop.iterate(first);
+<a name="l00974"></a>00974 }
+<a name="l00975"></a>00975 
+<a name="l00976"></a>00976 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00977"></a>00977 <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="l00978"></a>00978     internal_loop_guide loop(n, begin); loop.init();
+<a name="l00979"></a>00979 }
+<a name="l00980"></a>00980 
+<a name="l00981"></a>00981 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00982"></a>00982 <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="l00983"></a>00983     internal_loop_guide loop(n, begin); loop.init(src);
+<a name="l00984"></a>00984 }
+<a name="l00985"></a>00985 
+<a name="l00986"></a>00986 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00987"></a>00987 <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="l00988"></a>00988     internal_loop_guide loop(n, dst); loop.copy(src);
+<a name="l00989"></a>00989 }
+<a name="l00990"></a>00990 
+<a name="l00991"></a>00991 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00992"></a>00992 <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="l00993"></a>00993     internal_loop_guide loop(n, dst); loop.assign(src);
+<a name="l00994"></a>00994 }
+<a name="l00995"></a>00995 
+<a name="l00996"></a>00996 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) </span>
+<a name="l00997"></a>00997 <span class="preprocessor"></span>    <span class="comment">// Workaround for overzealous compiler warning</span>
+<a name="l00998"></a>00998 <span class="preprocessor">    #pragma warning (push)</span>
+<a name="l00999"></a>00999 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4189)</span>
+<a name="l01000"></a>01000 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l01001"></a>01001 <span class="preprocessor"></span><span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l01002"></a>01002 <span class="keywordtype">void</span> concurrent_vector<T, A>::destroy_array( <span class="keywordtype">void</span>* begin, size_type n ) {
+<a name="l01003"></a>01003     T* array = static_cast<T*>(begin);
+<a name="l01004"></a>01004     <span class="keywordflow">for</span>( size_type j=n; j>0; --j )
+<a name="l01005"></a>01005         array[j-1].~T(); <span class="comment">// destructors are supposed to not throw any exceptions</span>
+<a name="l01006"></a>01006 }
+<a name="l01007"></a>01007 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) </span>
+<a name="l01008"></a>01008 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
+<a name="l01009"></a>01009 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4189 is back </span>
+<a name="l01010"></a>01010 <span class="preprocessor"></span>
+<a name="l01011"></a>01011 <span class="comment">// concurrent_vector's template functions</span>
+<a name="l01012"></a>01012 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A1, <span class="keyword">class</span> A2>
+<a name="l01013"></a>01013 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> concurrent_vector<T, A1> &a, <span class="keyword">const</span> concurrent_vector<T, A2> &b) {
+<a name="l01014"></a>01014     <span class="comment">// Simply:    return a.size() == b.size() && std::equal(a.begin(), a.end(), b.begin());</span>
+<a name="l01015"></a>01015     <span class="keywordflow">if</span>(a.size() != b.size()) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01016"></a>01016     <span class="keyword">typename</span> concurrent_vector<T, A1>::const_iterator i(a.begin());
+<a name="l01017"></a>01017     <span class="keyword">typename</span> concurrent_vector<T, A2>::const_iterator j(b.begin());
+<a name="l01018"></a>01018     <span class="keywordflow">for</span>(; i != a.end(); ++i, ++j)
+<a name="l01019"></a>01019         <span class="keywordflow">if</span>( !(*i == *j) ) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01020"></a>01020     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01021"></a>01021 }
+<a name="l01022"></a>01022 
+<a name="l01023"></a>01023 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A1, <span class="keyword">class</span> A2>
+<a name="l01024"></a>01024 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> concurrent_vector<T, A1> &a, <span class="keyword">const</span> concurrent_vector<T, A2> &b)
+<a name="l01025"></a>01025 {    <span class="keywordflow">return</span> !(a == b); }
+<a name="l01026"></a>01026 
+<a name="l01027"></a>01027 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A1, <span class="keyword">class</span> A2>
+<a name="l01028"></a>01028 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator<(const concurrent_vector<T, A1> &a, <span class="keyword">const</span> concurrent_vector<T, A2> &b)
+<a name="l01029"></a>01029 {    <span class="keywordflow">return</span> (std::lexicographical_compare(a.begin(), a.end(), b.begin(), b.end())); }
+<a name="l01030"></a>01030 
+<a name="l01031"></a>01031 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A1, <span class="keyword">class</span> A2>
+<a name="l01032"></a>01032 <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="l01033"></a>01033 {    <span class="keywordflow">return</span> b < a; }
+<a name="l01034"></a>01034 
+<a name="l01035"></a>01035 <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="l01036"></a>01036 <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="l01037"></a>01037 {    <span class="keywordflow">return</span> !(b < a); }
+<a name="l01038"></a>01038 
+<a name="l01039"></a>01039 <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="l01040"></a>01040 <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="l01041"></a>01041 {    <span class="keywordflow">return</span> !(a < b); }
+<a name="l01042"></a>01042 
+<a name="l01043"></a>01043 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l01044"></a>01044 <span class="keyword">inline</span> <span class="keywordtype">void</span> swap(concurrent_vector<T, A> &a, concurrent_vector<T, A> &b)
+<a name="l01045"></a>01045 {    a.swap( b ); }
+<a name="l01046"></a>01046 
+<a name="l01047"></a>01047 } <span class="comment">// namespace tbb</span>
+<a name="l01048"></a>01048 
+<a name="l01049"></a>01049 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && defined(_Wp64)</span>
+<a name="l01050"></a>01050 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
+<a name="l01051"></a>01051 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4267 is back</span>
+<a name="l01052"></a>01052 <span class="preprocessor"></span>
+<a name="l01053"></a>01053 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_concurrent_vector_H */</span>
 </pre></div><hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/a00449.html b/doc/html/a00449.html
deleted file mode 100644
index d5b6449..0000000
--- a/doc/html/a00449.html
+++ /dev/null
@@ -1,99 +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-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_task_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 
-<a name="l00026"></a>00026 <span class="keyword">namespace </span>tbb {
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="keyword">typedef</span> std::size_t stack_size_type;
-<a name="l00029"></a>00029 
-<a name="l00031"></a>00031 <span class="keyword">namespace </span>internal {
-<a name="l00033"></a>00033 
-<a name="l00034"></a>00034     <span class="keyword">class </span>scheduler;
-<a name="l00035"></a>00035 } <span class="comment">// namespace internal</span>
-<a name="l00037"></a>00037 <span class="comment"></span>
-<a name="l00039"></a>00039 
-<a name="l00042"></a><a class="code" href="a00203.html">00042</a> <span class="keyword">class </span><a class="code" href="a00203.html">task_scheduler_init</a>: internal::no_copy {
-<a name="l00044"></a>00044     internal::scheduler* my_scheduler;
-<a name="l00045"></a>00045 <span class="keyword">public</span>:
-<a name="l00046"></a>00046 
-<a name="l00048"></a><a class="code" href="a00203.html#8f5988e2b0fbb2d533fcbb7f2583743f">00048</a>     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code" href="a00203.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a> = -1;
-<a name="l00049"></a>00049 
-<a name="l00051"></a><a class="code" href="a00203.html#e6c860f1e559026ff3ef4599c0d6c514">00051</a>     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code" href="a00203.html#e6c860f1e559026ff3ef4599c0d6c514">deferred</a> = -2;
-<a name="l00052"></a>00052 
-<a name="l00054"></a>00054 
-<a name="l00062"></a>00062     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00203.html#d476053cc712e572554823492a5229ce">initialize</a>( <span class="keywordtype">int</span> number_of_threads=<a class="code" href="a00203.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a> );
-<a name="l00063"></a>00063 
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00203.html#d476053cc712e572554823492a5229ce">initialize</a>( <span class="keywordtype">int</span> number_of_threads, stack_size_type thread_stack_size );
-<a name="l00067"></a>00067 
-<a name="l00069"></a>00069     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00203.html#f73257e04cb7fb9bd5be2b635d9016f1">terminate</a>();
-<a name="l00070"></a>00070 
-<a name="l00072"></a><a class="code" href="a00203.html#421600bf9bf9338bcf937063f2ff0e90">00072</a>     <a class="code" href="a00203.html#421600bf9bf9338bcf937063f2ff0e90">task_scheduler_init</a>( <span class="keywordtype">int</span> number_of_threads=<a class="code" href="a00203.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a>, stack_size_type thread_stack_size=0 ) : my_scheduler(NULL)  {
-<a name="l00073"></a>00073         <a class="code" href="a00203.html#d476053cc712e572554823492a5229ce">initialize</a>( number_of_threads, thread_stack_size );
-<a name="l00074"></a>00074     }
-<a name="l00075"></a>00075 
-<a name="l00077"></a><a class="code" href="a00203.html#4da6c86292d80c703a66c1f6f5299488">00077</a>     <a class="code" href="a00203.html#4da6c86292d80c703a66c1f6f5299488">~task_scheduler_init</a>() {
-<a name="l00078"></a>00078         <span class="keywordflow">if</span>( my_scheduler ) 
-<a name="l00079"></a>00079             <a class="code" href="a00203.html#f73257e04cb7fb9bd5be2b635d9016f1">terminate</a>();
-<a name="l00080"></a>00080         internal::poison_pointer( my_scheduler );
-<a name="l00081"></a>00081     }
-<a name="l00083"></a>00083 
-<a name="l00090"></a>00090     <span class="keyword">static</span> <span class="keywordtype">int</span> __TBB_EXPORTED_FUNC <a class="code" href="a00203.html#ba00714c33a41a3c2216f48613971cab">default_num_threads</a> ();
-<a name="l00091"></a>00091 
-<a name="l00093"></a><a class="code" href="a00203.html#12752282977029f23416642bc03e8b74">00093</a>     <span class="keywordtype">bool</span> <a class="code" href="a00203.html#12752282977029f23416642bc03e8b74">is_active</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_scheduler != NULL; }
-<a name="l00094"></a>00094 };
-<a name="l00095"></a>00095 
-<a name="l00096"></a>00096 } <span class="comment">// namespace tbb</span>
-<a name="l00097"></a>00097 
-<a name="l00098"></a>00098 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_task_scheduler_init_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the 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
deleted file mode 100644
index 0d5a4d3..0000000
--- a/doc/html/a00450.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-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_task_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-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the 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..722c4e6
--- /dev/null
+++ b/doc/html/a00451.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-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_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-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/a00452.html b/doc/html/a00452.html
deleted file mode 100644
index 0f5074f..0000000
--- a/doc/html/a00452.html
+++ /dev/null
@@ -1,94 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb.h Source File</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li><a href="annotated.html"><span>Classes</span></a></li>
-    <li id="current"><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="files.html"><span>File List</span></a></li>
-    <li><a href="globals.html"><span>File Members</span></a></li>
-  </ul></div>
-<h1>tbb.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_tbb_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tbb_H</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include "aligned_space.h"</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "atomic.h"</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "blocked_range.h"</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "blocked_range2d.h"</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include "blocked_range3d.h"</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "cache_aligned_allocator.h"</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "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">#include "recursive_mutex.h"</span>
-<a name="l00061"></a>00061 <span class="preprocessor">#include "spin_mutex.h"</span>
-<a name="l00062"></a>00062 <span class="preprocessor">#include "spin_rw_mutex.h"</span>
-<a name="l00063"></a>00063 <span class="preprocessor">#include "task.h"</span>
-<a name="l00064"></a>00064 <span class="preprocessor">#include "task_group.h"</span>
-<a name="l00065"></a>00065 <span class="preprocessor">#include "task_scheduler_init.h"</span>
-<a name="l00066"></a>00066 <span class="preprocessor">#include "task_scheduler_observer.h"</span>
-<a name="l00067"></a>00067 <span class="preprocessor">#include "tbb_allocator.h"</span>
-<a name="l00068"></a>00068 <span class="preprocessor">#include "tbb_exception.h"</span>
-<a name="l00069"></a>00069 <span class="preprocessor">#include "tbb_thread.h"</span>
-<a name="l00070"></a>00070 <span class="preprocessor">#include "tick_count.h"</span>
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00453.html b/doc/html/a00453.html
deleted file mode 100644
index 0131842..0000000
--- a/doc/html/a00453.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-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_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="a00204.html">00070</a> <span class="keyword">class </span><a class="code" href="a00204.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="a00204.html">tbb_allocator<U></a> other;
-<a name="l00081"></a>00081     };
-<a name="l00082"></a>00082 
-<a name="l00084"></a><a class="code" href="a00204.html#09a7f81fb2c3055aaecf058b11538544">00084</a>     <span class="keyword">enum</span> <a class="code" href="a00204.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="a00204.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="a00204.html#f6cb487b1bdce0b581f265a77dca6d53">00097</a>     pointer <a class="code" href="a00204.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="a00204.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">00102</a>     <span class="keywordtype">void</span> <a class="code" href="a00204.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="a00204.html#f059ca2c96243024f0d562ee3a87a3a5">00107</a>     size_type <a class="code" href="a00204.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="a00204.html#ab228ab9e324ed041c2226e1d717df5f">00113</a>     <span class="keywordtype">void</span> <a class="code" href="a00204.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="a00204.html#ef133522bf55f05a605bee0763208281">00116</a>     <span class="keywordtype">void</span> <a class="code" href="a00204.html#ef133522bf55f05a605bee0763208281">destroy</a>( pointer p ) {p->~value_type();}
-<a name="l00117"></a>00117 
-<a name="l00119"></a><a class="code" href="a00204.html#78701e7454ef8e1a25b5acd364367080">00119</a>     <span class="keyword">static</span> <a class="code" href="a00204.html#09a7f81fb2c3055aaecf058b11538544">malloc_type</a> <a class="code" href="a00204.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="a00205.html">00131</a> <span class="keyword">class </span><a class="code" href="a00204.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="a00204.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="a00204.html">tbb_allocator<T></a>&, <span class="keyword">const</span> <a class="code" href="a00204.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="a00213.html">00154</a> <span class="keyword">class </span><a class="code" href="a00213.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="a00213.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="a00213.html">zero_allocator</a>() <span class="keywordflow">throw</span>() { }
-<a name="l00170"></a>00170     <a class="code" href="a00213.html">zero_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00213.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="a00213.html">zero_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00213.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="a00214.html">00184</a> <span class="keyword">class </span><a class="code" href="a00213.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="a00213.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="a00213.html">zero_allocator<T1,B1></a> &a, <span class="keyword">const</span> <a class="code" href="a00213.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-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00454.html b/doc/html/a00454.html
new file mode 100644
index 0000000..ae76a92
--- /dev/null
+++ b/doc/html/a00454.html
@@ -0,0 +1,967 @@
+<!DOCTYPE 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-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_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 "cache_aligned_allocator.h"</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include "aligned_space.h"</span>
+<a name="l00028"></a>00028 <span class="preprocessor">#include <string.h></span>  <span class="comment">// for memcpy</span>
+<a name="l00029"></a>00029 
+<a name="l00030"></a>00030 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#include "machine/windows_api.h"</span>
+<a name="l00032"></a>00032 <span class="preprocessor">#else</span>
+<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#include <pthread.h></span>
+<a name="l00034"></a>00034 <span class="preprocessor">#endif</span>
+<a name="l00035"></a>00035 <span class="preprocessor"></span>
+<a name="l00036"></a>00036 <span class="keyword">namespace </span>tbb {
+<a name="l00037"></a>00037 
+<a name="l00039"></a><a class="code" href="a00362.html#a8622ae61b7e7737dac26542e181178e">00039</a> <span class="keyword">enum</span> <a class="code" href="a00362.html#a8622ae61b7e7737dac26542e181178e">ets_key_usage_type</a> { ets_key_per_instance, ets_no_key };
+<a name="l00040"></a>00040 
+<a name="l00041"></a>00041 <span class="keyword">namespace </span>interface6 {
+<a name="l00042"></a>00042  
+<a name="l00044"></a>00044     <span class="keyword">namespace </span>internal { 
+<a name="l00045"></a>00045 
+<a name="l00046"></a>00046         <span class="keyword">template</span><ets_key_usage_type ETS_key_type>
+<a name="l00047"></a>00047         <span class="keyword">class </span>ets_base: tbb::internal::no_copy {
+<a name="l00048"></a>00048         <span class="keyword">protected</span>:
+<a name="l00049"></a>00049 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00050"></a>00050 <span class="preprocessor"></span>            <span class="keyword">typedef</span> DWORD key_type;
+<a name="l00051"></a>00051 <span class="preprocessor">#else</span>
+<a name="l00052"></a>00052 <span class="preprocessor"></span>            <span class="keyword">typedef</span> pthread_t key_type;
+<a name="l00053"></a>00053 <span class="preprocessor">#endif</span>
+<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor">#if __TBB_GCC_3_3_PROTECTED_BROKEN</span>
+<a name="l00055"></a>00055 <span class="preprocessor"></span>        <span class="keyword">public</span>:
+<a name="l00056"></a>00056 <span class="preprocessor">#endif</span>
+<a name="l00057"></a>00057 <span class="preprocessor"></span>            <span class="keyword">struct </span>slot;
+<a name="l00058"></a>00058 
+<a name="l00059"></a>00059             <span class="keyword">struct </span>array {
+<a name="l00060"></a>00060                 array* next;
+<a name="l00061"></a>00061                 size_t lg_size;
+<a name="l00062"></a>00062                 slot& at( size_t k ) {
+<a name="l00063"></a>00063                     <span class="keywordflow">return</span> ((slot*)(<span class="keywordtype">void</span>*)(<span class="keyword">this</span>+1))[k];
+<a name="l00064"></a>00064                 }
+<a name="l00065"></a>00065                 size_t size()<span class="keyword"> const </span>{<span class="keywordflow">return</span> (size_t)1<<lg_size;}
+<a name="l00066"></a>00066                 size_t mask()<span class="keyword"> const </span>{<span class="keywordflow">return</span> size()-1;}
+<a name="l00067"></a>00067                 size_t start( size_t h )<span class="keyword"> const </span>{
+<a name="l00068"></a>00068                     <span class="keywordflow">return</span> h>>(8*<span class="keyword">sizeof</span>(size_t)-lg_size);
+<a name="l00069"></a>00069                 }
+<a name="l00070"></a>00070             };
+<a name="l00071"></a>00071             <span class="keyword">struct </span>slot {
+<a name="l00072"></a>00072                 key_type key;
+<a name="l00073"></a>00073                 <span class="keywordtype">void</span>* ptr;
+<a name="l00074"></a>00074                 <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !key;}
+<a name="l00075"></a>00075                 <span class="keywordtype">bool</span> match( key_type k )<span class="keyword"> const </span>{<span class="keywordflow">return</span> key==k;}
+<a name="l00076"></a>00076                 <span class="keywordtype">bool</span> claim( key_type k ) {
+<a name="l00077"></a>00077                     __TBB_ASSERT(<span class="keyword">sizeof</span>(<a class="code" href="a00216.html">tbb::atomic<key_type></a>)==<span class="keyword">sizeof</span>(key_type), NULL);
+<a name="l00078"></a>00078                     <span class="keywordflow">return</span> tbb::internal::punned_cast<tbb::atomic<key_type>*>(&key)->compare_and_swap(k,0)==0;
+<a name="l00079"></a>00079                 }
+<a name="l00080"></a>00080             };
+<a name="l00081"></a>00081 <span class="preprocessor">#if __TBB_GCC_3_3_PROTECTED_BROKEN</span>
+<a name="l00082"></a>00082 <span class="preprocessor"></span>        <span class="keyword">protected</span>:
+<a name="l00083"></a>00083 <span class="preprocessor">#endif</span>
+<a name="l00084"></a>00084 <span class="preprocessor"></span>        
+<a name="l00085"></a>00085             <span class="keyword">static</span> key_type key_of_current_thread() {
+<a name="l00086"></a>00086                tbb::tbb_thread::id <span class="keywordtype">id</span> = tbb::this_tbb_thread::get_id();
+<a name="l00087"></a>00087                key_type k;
+<a name="l00088"></a>00088                memcpy( &k, &<span class="keywordtype">id</span>, <span class="keyword">sizeof</span>(k) );
+<a name="l00089"></a>00089                <span class="keywordflow">return</span> k;
+<a name="l00090"></a>00090             }
+<a name="l00091"></a>00091 
+<a name="l00093"></a>00093 
+<a name="l00095"></a>00095             atomic<array*> my_root;
+<a name="l00096"></a>00096             atomic<size_t> my_count;
+<a name="l00097"></a>00097             <span class="keyword">virtual</span> <span class="keywordtype">void</span>* create_local() = 0;
+<a name="l00098"></a>00098             <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="l00099"></a>00099             <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="l00100"></a>00100             array* allocate( size_t lg_size ) {
+<a name="l00101"></a>00101                 size_t n = 1<<lg_size;  
+<a name="l00102"></a>00102                 array* a = static_cast<array*>(create_array( <span class="keyword">sizeof</span>(array)+n*<span class="keyword">sizeof</span>(slot) ));
+<a name="l00103"></a>00103                 a->lg_size = lg_size;
+<a name="l00104"></a>00104                 std::memset( a+1, 0, n*<span class="keyword">sizeof</span>(slot) );
+<a name="l00105"></a>00105                 <span class="keywordflow">return</span> a;
+<a name="l00106"></a>00106             }
+<a name="l00107"></a>00107             <span class="keywordtype">void</span> free(array* a) {
+<a name="l00108"></a>00108                 size_t n = 1<<(a->lg_size);  
+<a name="l00109"></a>00109                 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="l00110"></a>00110             }
+<a name="l00111"></a>00111             <span class="keyword">static</span> size_t hash( key_type k ) {
+<a name="l00112"></a>00112                 <span class="comment">// Multiplicative hashing.  Client should use *upper* bits.</span>
+<a name="l00113"></a>00113                 <span class="comment">// casts required for Mac gcc4.* compiler</span>
+<a name="l00114"></a>00114 <span class="preprocessor">#if __TBB_WORDSIZE == 4</span>
+<a name="l00115"></a>00115 <span class="preprocessor"></span>                <span class="keywordflow">return</span> uintptr_t(k)*0x9E3779B9;
+<a name="l00116"></a>00116 <span class="preprocessor">#else</span>
+<a name="l00117"></a>00117 <span class="preprocessor"></span>                <span class="keywordflow">return</span> uintptr_t(k)*0x9E3779B97F4A7C15;
+<a name="l00118"></a>00118 <span class="preprocessor">#endif </span>
+<a name="l00119"></a>00119 <span class="preprocessor"></span>            } 
+<a name="l00120"></a>00120         
+<a name="l00121"></a>00121             ets_base() {my_root=NULL; my_count=0;}
+<a name="l00122"></a>00122             <span class="keyword">virtual</span> ~ets_base();  <span class="comment">// g++ complains if this is not virtual...</span>
+<a name="l00123"></a>00123             <span class="keywordtype">void</span>* table_lookup( <span class="keywordtype">bool</span>& exists );
+<a name="l00124"></a>00124             <span class="keywordtype">void</span> table_clear();
+<a name="l00125"></a>00125             slot& table_find( key_type k ) {
+<a name="l00126"></a>00126                 size_t h = hash(k);
+<a name="l00127"></a>00127                 array* r = my_root;
+<a name="l00128"></a>00128                 size_t mask = r->mask();
+<a name="l00129"></a>00129                 <span class="keywordflow">for</span>(size_t i = r->start(h);;i=(i+1)&mask) {
+<a name="l00130"></a>00130                     slot& s = r->at(i);
+<a name="l00131"></a>00131                     <span class="keywordflow">if</span>( s.empty() || s.match(k) )
+<a name="l00132"></a>00132                         <span class="keywordflow">return</span> s;
+<a name="l00133"></a>00133                 }
+<a name="l00134"></a>00134             }
+<a name="l00135"></a>00135             <span class="keywordtype">void</span> table_reserve_for_copy( <span class="keyword">const</span> ets_base& other ) {
+<a name="l00136"></a>00136                 __TBB_ASSERT(!my_root,NULL);
+<a name="l00137"></a>00137                 __TBB_ASSERT(!my_count,NULL);
+<a name="l00138"></a>00138                 <span class="keywordflow">if</span>( other.my_root ) {
+<a name="l00139"></a>00139                     array* a = allocate(other.my_root->lg_size);
+<a name="l00140"></a>00140                     a->next = NULL;
+<a name="l00141"></a>00141                     my_root = a;
+<a name="l00142"></a>00142                     my_count = other.my_count;
+<a name="l00143"></a>00143                 }
+<a name="l00144"></a>00144             }
+<a name="l00145"></a>00145         };
+<a name="l00146"></a>00146 
+<a name="l00147"></a>00147         <span class="keyword">template</span><ets_key_usage_type ETS_key_type>
+<a name="l00148"></a>00148         ets_base<ETS_key_type>::~ets_base() {
+<a name="l00149"></a>00149             __TBB_ASSERT(!my_root, NULL);
+<a name="l00150"></a>00150         }
+<a name="l00151"></a>00151 
+<a name="l00152"></a>00152         <span class="keyword">template</span><ets_key_usage_type ETS_key_type>
+<a name="l00153"></a>00153         <span class="keywordtype">void</span> ets_base<ETS_key_type>::table_clear() {
+<a name="l00154"></a>00154             <span class="keywordflow">while</span>( array* r = my_root ) {
+<a name="l00155"></a>00155                 my_root = r->next;
+<a name="l00156"></a>00156                 free(r);
+<a name="l00157"></a>00157             }
+<a name="l00158"></a>00158             my_count = 0;
+<a name="l00159"></a>00159         }
+<a name="l00160"></a>00160                 
+<a name="l00161"></a>00161         <span class="keyword">template</span><ets_key_usage_type ETS_key_type>
+<a name="l00162"></a>00162         <span class="keywordtype">void</span>* ets_base<ETS_key_type>::table_lookup( <span class="keywordtype">bool</span>& exists ) {
+<a name="l00163"></a>00163             <span class="keyword">const</span> key_type k = key_of_current_thread(); 
+<a name="l00164"></a>00164 
+<a name="l00165"></a>00165             __TBB_ASSERT(k!=0,NULL);
+<a name="l00166"></a>00166             <span class="keywordtype">void</span>* found;
+<a name="l00167"></a>00167             size_t h = hash(k);
+<a name="l00168"></a>00168             <span class="keywordflow">for</span>( array* r=my_root; r; r=r->next ) {
+<a name="l00169"></a>00169                 size_t mask=r->mask();
+<a name="l00170"></a>00170                 <span class="keywordflow">for</span>(size_t i = r->start(h); ;i=(i+1)&mask) {
+<a name="l00171"></a>00171                     slot& s = r->at(i);
+<a name="l00172"></a>00172                     <span class="keywordflow">if</span>( s.empty() ) <span class="keywordflow">break</span>;
+<a name="l00173"></a>00173                     <span class="keywordflow">if</span>( s.match(k) ) {
+<a name="l00174"></a>00174                         <span class="keywordflow">if</span>( r==my_root ) {
+<a name="l00175"></a>00175                             <span class="comment">// Success at top level</span>
+<a name="l00176"></a>00176                             exists = <span class="keyword">true</span>;
+<a name="l00177"></a>00177                             <span class="keywordflow">return</span> s.ptr;
+<a name="l00178"></a>00178                         } <span class="keywordflow">else</span> {
+<a name="l00179"></a>00179                             <span class="comment">// Success at some other level.  Need to insert at top level.</span>
+<a name="l00180"></a>00180                             exists = <span class="keyword">true</span>;
+<a name="l00181"></a>00181                             found = s.ptr;
+<a name="l00182"></a>00182                             <span class="keywordflow">goto</span> insert;
+<a name="l00183"></a>00183                         }
+<a name="l00184"></a>00184                     }
+<a name="l00185"></a>00185                 }
+<a name="l00186"></a>00186             }
+<a name="l00187"></a>00187             <span class="comment">// Key does not yet exist</span>
+<a name="l00188"></a>00188             exists = <span class="keyword">false</span>;
+<a name="l00189"></a>00189             found = create_local();
+<a name="l00190"></a>00190             {
+<a name="l00191"></a>00191                 size_t c = ++my_count;
+<a name="l00192"></a>00192                 array* r = my_root;
+<a name="l00193"></a>00193                 <span class="keywordflow">if</span>( !r || c>r->size()/2 ) {
+<a name="l00194"></a>00194                     size_t s = r ? r->lg_size : 2;
+<a name="l00195"></a>00195                     <span class="keywordflow">while</span>( c>size_t(1)<<(s-1) ) ++s;
+<a name="l00196"></a>00196                     array* a = allocate(s);
+<a name="l00197"></a>00197                     <span class="keywordflow">for</span>(;;) {
+<a name="l00198"></a>00198                         a->next = my_root;
+<a name="l00199"></a>00199                         array* new_r = my_root.compare_and_swap(a,r);
+<a name="l00200"></a>00200                         <span class="keywordflow">if</span>( new_r==r ) <span class="keywordflow">break</span>;
+<a name="l00201"></a>00201                         <span class="keywordflow">if</span>( new_r->lg_size>=s ) {
+<a name="l00202"></a>00202                             <span class="comment">// Another thread inserted an equal or  bigger array, so our array is superfluous.</span>
+<a name="l00203"></a>00203                             free(a);
+<a name="l00204"></a>00204                             <span class="keywordflow">break</span>;
+<a name="l00205"></a>00205                         }
+<a name="l00206"></a>00206                         r = new_r;
+<a name="l00207"></a>00207                     }
+<a name="l00208"></a>00208                 }
+<a name="l00209"></a>00209             }
+<a name="l00210"></a>00210         insert:
+<a name="l00211"></a>00211             <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="l00212"></a>00212             array* ir = my_root;
+<a name="l00213"></a>00213             size_t mask = ir->mask();
+<a name="l00214"></a>00214             <span class="keywordflow">for</span>(size_t i = ir->start(h);;i=(i+1)&mask) {
+<a name="l00215"></a>00215                 slot& s = ir->at(i);
+<a name="l00216"></a>00216                 <span class="keywordflow">if</span>( s.empty() ) {
+<a name="l00217"></a>00217                     <span class="keywordflow">if</span>( s.claim(k) ) {
+<a name="l00218"></a>00218                         s.ptr = found;
+<a name="l00219"></a>00219                         <span class="keywordflow">return</span> found;
+<a name="l00220"></a>00220                     }
+<a name="l00221"></a>00221                 }
+<a name="l00222"></a>00222             }
+<a name="l00223"></a>00223         }
+<a name="l00224"></a>00224 
+<a name="l00226"></a>00226         <span class="keyword">template</span> <>
+<a name="l00227"></a>00227         <span class="keyword">class </span>ets_base<ets_key_per_instance>: <span class="keyword">protected</span> ets_base<ets_no_key> {
+<a name="l00228"></a>00228             <span class="keyword">typedef</span> ets_base<ets_no_key> super;
+<a name="l00229"></a>00229 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00230"></a>00230 <span class="preprocessor"></span>            <span class="keyword">typedef</span> DWORD tls_key_t;
+<a name="l00231"></a>00231             <span class="keywordtype">void</span> create_key() { my_key = TlsAlloc(); }
+<a name="l00232"></a>00232             <span class="keywordtype">void</span> destroy_key() { TlsFree(my_key); }
+<a name="l00233"></a>00233             <span class="keywordtype">void</span> set_tls(<span class="keywordtype">void</span> * value) { TlsSetValue(my_key, (LPVOID)value); }
+<a name="l00234"></a>00234             <span class="keywordtype">void</span>* get_tls() { <span class="keywordflow">return</span> (<span class="keywordtype">void</span> *)TlsGetValue(my_key); }
+<a name="l00235"></a>00235 <span class="preprocessor">#else</span>
+<a name="l00236"></a>00236 <span class="preprocessor"></span>            <span class="keyword">typedef</span> pthread_key_t tls_key_t;
+<a name="l00237"></a>00237             <span class="keywordtype">void</span> create_key() { pthread_key_create(&my_key, NULL); }
+<a name="l00238"></a>00238             <span class="keywordtype">void</span> destroy_key() { pthread_key_delete(my_key); }
+<a name="l00239"></a>00239             <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="l00240"></a>00240             <span class="keywordtype">void</span>* get_tls()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> pthread_getspecific(my_key); }
+<a name="l00241"></a>00241 <span class="preprocessor">#endif</span>
+<a name="l00242"></a>00242 <span class="preprocessor"></span>            tls_key_t my_key;
+<a name="l00243"></a>00243             <span class="keyword">virtual</span> <span class="keywordtype">void</span>* create_local() = 0;
+<a name="l00244"></a>00244             <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="l00245"></a>00245             <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="l00246"></a>00246         <span class="keyword">public</span>:
+<a name="l00247"></a>00247             ets_base() {create_key();}
+<a name="l00248"></a>00248             ~ets_base() {destroy_key();}
+<a name="l00249"></a>00249             <span class="keywordtype">void</span>* table_lookup( <span class="keywordtype">bool</span>& exists ) {
+<a name="l00250"></a>00250                 <span class="keywordtype">void</span>* found = get_tls();
+<a name="l00251"></a>00251                 <span class="keywordflow">if</span>( found ) {
+<a name="l00252"></a>00252                     exists=<span class="keyword">true</span>;
+<a name="l00253"></a>00253                 } <span class="keywordflow">else</span> {
+<a name="l00254"></a>00254                     found = super::table_lookup(exists);
+<a name="l00255"></a>00255                     set_tls(found);
+<a name="l00256"></a>00256                 }
+<a name="l00257"></a>00257                 <span class="keywordflow">return</span> found; 
+<a name="l00258"></a>00258             }
+<a name="l00259"></a>00259             <span class="keywordtype">void</span> table_clear() {
+<a name="l00260"></a>00260                 destroy_key();
+<a name="l00261"></a>00261                 create_key(); 
+<a name="l00262"></a>00262                 super::table_clear();
+<a name="l00263"></a>00263             }
+<a name="l00264"></a>00264         };
+<a name="l00265"></a>00265 
+<a name="l00267"></a>00267         <span class="keyword">template</span>< <span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value >
+<a name="l00268"></a>00268         <span class="keyword">class </span>enumerable_thread_specific_iterator 
+<a name="l00269"></a>00269 #if defined(_WIN64) && defined(_MSC_VER) 
+<a name="l00270"></a>00270             <span class="comment">// Ensure that Microsoft's internal template function _Val_type works correctly.</span>
+<a name="l00271"></a>00271             : public std::iterator<std::random_access_iterator_tag,Value>
+<a name="l00272"></a>00272 #endif <span class="comment">/* defined(_WIN64) && defined(_MSC_VER) */</span>
+<a name="l00273"></a>00273         {
+<a name="l00275"></a>00275         
+<a name="l00276"></a>00276             Container *my_container;
+<a name="l00277"></a>00277             <span class="keyword">typename</span> Container::size_type my_index;
+<a name="l00278"></a>00278             <span class="keyword">mutable</span> Value *my_value;
+<a name="l00279"></a>00279         
+<a name="l00280"></a>00280             <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T>
+<a name="l00281"></a>00281             <span class="keyword">friend</span> enumerable_thread_specific_iterator<C,T> operator+( ptrdiff_t offset, 
+<a name="l00282"></a>00282                                                                        <span class="keyword">const</span> enumerable_thread_specific_iterator<C,T>& v );
+<a name="l00283"></a>00283         
+<a name="l00284"></a>00284             <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="l00285"></a>00285             <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="l00286"></a>00286                                     <span class="keyword">const</span> enumerable_thread_specific_iterator<C,U>& j );
+<a name="l00287"></a>00287         
+<a name="l00288"></a>00288             <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="l00289"></a>00289             <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator<( const enumerable_thread_specific_iterator<C,T>& i, 
+<a name="l00290"></a>00290                                    <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> T, <span class="keyword">typename</span> U>
+<a name="l00293"></a>00293             <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="l00294"></a>00294             
+<a name="l00295"></a>00295             <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> U> 
+<a name="l00296"></a>00296             <span class="keyword">friend</span> <span class="keyword">class </span>enumerable_thread_specific_iterator;
+<a name="l00297"></a>00297         
+<a name="l00298"></a>00298             <span class="keyword">public</span>:
+<a name="l00299"></a>00299         
+<a name="l00300"></a>00300             enumerable_thread_specific_iterator( <span class="keyword">const</span> Container &container, <span class="keyword">typename</span> Container::size_type index ) : 
+<a name="l00301"></a>00301                 my_container(&const_cast<Container &>(container)), my_index(index), my_value(NULL) {}
+<a name="l00302"></a>00302         
+<a name="l00304"></a>00304             enumerable_thread_specific_iterator() : my_container(NULL), my_index(0), my_value(NULL) {}
+<a name="l00305"></a>00305         
+<a name="l00306"></a>00306             <span class="keyword">template</span><<span class="keyword">typename</span> U>
+<a name="l00307"></a>00307             enumerable_thread_specific_iterator( <span class="keyword">const</span> enumerable_thread_specific_iterator<Container, U>& other ) :
+<a name="l00308"></a>00308                     my_container( other.my_container ), my_index( other.my_index), my_value( const_cast<Value *>(other.my_value) ) {}
+<a name="l00309"></a>00309         
+<a name="l00310"></a>00310             enumerable_thread_specific_iterator operator+( ptrdiff_t offset )<span class="keyword"> const </span>{
+<a name="l00311"></a>00311                 <span class="keywordflow">return</span> enumerable_thread_specific_iterator(*my_container, my_index + offset);
+<a name="l00312"></a>00312             }
+<a name="l00313"></a>00313         
+<a name="l00314"></a>00314             enumerable_thread_specific_iterator &operator+=( ptrdiff_t offset ) {
+<a name="l00315"></a>00315                 my_index += offset;
+<a name="l00316"></a>00316                 my_value = NULL;
+<a name="l00317"></a>00317                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00318"></a>00318             }
+<a name="l00319"></a>00319         
+<a name="l00320"></a>00320             enumerable_thread_specific_iterator operator-( ptrdiff_t offset )<span class="keyword"> const </span>{
+<a name="l00321"></a>00321                 <span class="keywordflow">return</span> enumerable_thread_specific_iterator( *my_container, my_index-offset );
+<a name="l00322"></a>00322             }
+<a name="l00323"></a>00323         
+<a name="l00324"></a>00324             enumerable_thread_specific_iterator &operator-=( ptrdiff_t offset ) {
+<a name="l00325"></a>00325                 my_index -= offset;
+<a name="l00326"></a>00326                 my_value = NULL;
+<a name="l00327"></a>00327                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00328"></a>00328             }
+<a name="l00329"></a>00329         
+<a name="l00330"></a>00330             Value& operator*()<span class="keyword"> const </span>{
+<a name="l00331"></a>00331                 Value* value = my_value;
+<a name="l00332"></a>00332                 <span class="keywordflow">if</span>( !value ) {
+<a name="l00333"></a>00333                     value = my_value = reinterpret_cast<Value *>(&(*my_container)[my_index].value);
+<a name="l00334"></a>00334                 }
+<a name="l00335"></a>00335                 __TBB_ASSERT( value==reinterpret_cast<Value *>(&(*my_container)[my_index].value), <span class="stringliteral">"corrupt cache"</span> );
+<a name="l00336"></a>00336                 <span class="keywordflow">return</span> *value;
+<a name="l00337"></a>00337             }
+<a name="l00338"></a>00338         
+<a name="l00339"></a>00339             Value& operator[]( ptrdiff_t k )<span class="keyword"> const </span>{
+<a name="l00340"></a>00340                <span class="keywordflow">return</span> (*my_container)[my_index + k].value;
+<a name="l00341"></a>00341             }
+<a name="l00342"></a>00342         
+<a name="l00343"></a>00343             Value* operator->()<span class="keyword"> const </span>{<span class="keywordflow">return</span> &operator*();}
+<a name="l00344"></a>00344         
+<a name="l00345"></a>00345             enumerable_thread_specific_iterator& operator++() {
+<a name="l00346"></a>00346                 ++my_index;
+<a name="l00347"></a>00347                 my_value = NULL;
+<a name="l00348"></a>00348                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00349"></a>00349             }
+<a name="l00350"></a>00350         
+<a name="l00351"></a>00351             enumerable_thread_specific_iterator& operator--() {
+<a name="l00352"></a>00352                 --my_index;
+<a name="l00353"></a>00353                 my_value = NULL;
+<a name="l00354"></a>00354                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00355"></a>00355             }
+<a name="l00356"></a>00356         
+<a name="l00358"></a>00358             enumerable_thread_specific_iterator operator++(<span class="keywordtype">int</span>) {
+<a name="l00359"></a>00359                 enumerable_thread_specific_iterator result = *<span class="keyword">this</span>;
+<a name="l00360"></a>00360                 ++my_index;
+<a name="l00361"></a>00361                 my_value = NULL;
+<a name="l00362"></a>00362                 <span class="keywordflow">return</span> result;
+<a name="l00363"></a>00363             }
+<a name="l00364"></a>00364         
+<a name="l00366"></a>00366             enumerable_thread_specific_iterator operator--(<span class="keywordtype">int</span>) {
+<a name="l00367"></a>00367                 enumerable_thread_specific_iterator result = *<span class="keyword">this</span>;
+<a name="l00368"></a>00368                 --my_index;
+<a name="l00369"></a>00369                 my_value = NULL;
+<a name="l00370"></a>00370                 <span class="keywordflow">return</span> result;
+<a name="l00371"></a>00371             }
+<a name="l00372"></a>00372         
+<a name="l00373"></a>00373             <span class="comment">// STL support</span>
+<a name="l00374"></a>00374             <span class="keyword">typedef</span> ptrdiff_t difference_type;
+<a name="l00375"></a>00375             <span class="keyword">typedef</span> Value value_type;
+<a name="l00376"></a>00376             <span class="keyword">typedef</span> Value* pointer;
+<a name="l00377"></a>00377             <span class="keyword">typedef</span> Value& reference;
+<a name="l00378"></a>00378             <span class="keyword">typedef</span> std::random_access_iterator_tag iterator_category;
+<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> Container, <span class="keyword">typename</span> T>
+<a name="l00382"></a>00382         enumerable_thread_specific_iterator<Container,T> operator+( ptrdiff_t offset, 
+<a name="l00383"></a>00383                                                                     <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,T>& v ) {
+<a name="l00384"></a>00384             <span class="keywordflow">return</span> enumerable_thread_specific_iterator<Container,T>( v.my_container, v.my_index + offset );
+<a name="l00385"></a>00385         }
+<a name="l00386"></a>00386         
+<a name="l00387"></a>00387         <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="l00388"></a>00388         <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,T>& i, 
+<a name="l00389"></a>00389                          <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
+<a name="l00390"></a>00390             <span class="keywordflow">return</span> i.my_index==j.my_index && i.my_container == j.my_container;
+<a name="l00391"></a>00391         }
+<a name="l00392"></a>00392         
+<a name="l00393"></a>00393         <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00394"></a>00394         <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,T>& i, 
+<a name="l00395"></a>00395                          <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
+<a name="l00396"></a>00396             <span class="keywordflow">return</span> !(i==j);
+<a name="l00397"></a>00397         }
+<a name="l00398"></a>00398         
+<a name="l00399"></a>00399         <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="l00400"></a>00400         <span class="keywordtype">bool</span> operator<( const enumerable_thread_specific_iterator<Container,T>& i, 
+<a name="l00401"></a>00401                         <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
+<a name="l00402"></a>00402             <span class="keywordflow">return</span> i.my_index<j.my_index;
+<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> T, <span class="keyword">typename</span> U>
+<a name="l00406"></a>00406         <span class="keywordtype">bool</span> operator>( <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,T>& i, 
+<a name="l00407"></a>00407                         <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
+<a name="l00408"></a>00408             <span class="keywordflow">return</span> j<i;
+<a name="l00409"></a>00409         }
+<a name="l00410"></a>00410         
+<a name="l00411"></a>00411         <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="l00412"></a>00412         <span class="keywordtype">bool</span> operator>=( <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,T>& i, 
+<a name="l00413"></a>00413                          <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
+<a name="l00414"></a>00414             <span class="keywordflow">return</span> !(i<j);
+<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<=( const enumerable_thread_specific_iterator<Container,T>& i, 
+<a name="l00419"></a>00419                          <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
+<a name="l00420"></a>00420             <span class="keywordflow">return</span> !(j<i);
+<a name="l00421"></a>00421         }
+<a name="l00422"></a>00422         
+<a name="l00423"></a>00423         <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="l00424"></a>00424         ptrdiff_t operator-( <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,T>& i, 
+<a name="l00425"></a>00425                              <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
+<a name="l00426"></a>00426             <span class="keywordflow">return</span> i.my_index-j.my_index;
+<a name="l00427"></a>00427         }
+<a name="l00428"></a>00428 
+<a name="l00429"></a>00429     <span class="keyword">template</span><<span class="keyword">typename</span> SegmentedContainer, <span class="keyword">typename</span> Value >
+<a name="l00430"></a>00430         <span class="keyword">class </span>segmented_iterator
+<a name="l00431"></a>00431 #if defined(_WIN64) && defined(_MSC_VER)
+<a name="l00432"></a>00432         : public std::iterator<std::input_iterator_tag, Value>
+<a name="l00433"></a>00433 #endif
+<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> T, <span class="keyword">typename</span> U>
+<a name="l00439"></a>00439             <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="l00440"></a>00440             
+<a name="l00441"></a>00441             <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> U> 
+<a name="l00442"></a>00442             <span class="keyword">friend</span> <span class="keyword">class </span>segmented_iterator;
+<a name="l00443"></a>00443 
+<a name="l00444"></a>00444             <span class="keyword">public</span>:
+<a name="l00445"></a>00445 
+<a name="l00446"></a>00446                 segmented_iterator() {my_segcont = NULL;}
+<a name="l00447"></a>00447 
+<a name="l00448"></a>00448                 segmented_iterator( <span class="keyword">const</span> SegmentedContainer& _segmented_container ) : 
+<a name="l00449"></a>00449                     my_segcont(const_cast<SegmentedContainer*>(&_segmented_container)),
+<a name="l00450"></a>00450                     outer_iter(my_segcont->end()) { }
+<a name="l00451"></a>00451 
+<a name="l00452"></a>00452                 ~segmented_iterator() {}
+<a name="l00453"></a>00453 
+<a name="l00454"></a>00454                 <span class="keyword">typedef</span> <span class="keyword">typename</span> SegmentedContainer::iterator outer_iterator;
+<a name="l00455"></a>00455                 <span class="keyword">typedef</span> <span class="keyword">typename</span> SegmentedContainer::value_type InnerContainer;
+<a name="l00456"></a>00456                 <span class="keyword">typedef</span> <span class="keyword">typename</span> InnerContainer::iterator inner_iterator;
+<a name="l00457"></a>00457 
+<a name="l00458"></a>00458                 <span class="comment">// STL support</span>
+<a name="l00459"></a>00459                 <span class="keyword">typedef</span> ptrdiff_t difference_type;
+<a name="l00460"></a>00460                 <span class="keyword">typedef</span> Value value_type;
+<a name="l00461"></a>00461                 <span class="keyword">typedef</span> <span class="keyword">typename</span> SegmentedContainer::size_type size_type;
+<a name="l00462"></a>00462                 <span class="keyword">typedef</span> Value* pointer;
+<a name="l00463"></a>00463                 <span class="keyword">typedef</span> Value& reference;
+<a name="l00464"></a>00464                 <span class="keyword">typedef</span> std::input_iterator_tag iterator_category;
+<a name="l00465"></a>00465 
+<a name="l00466"></a>00466                 <span class="comment">// Copy Constructor</span>
+<a name="l00467"></a>00467                 <span class="keyword">template</span><<span class="keyword">typename</span> U>
+<a name="l00468"></a>00468                 segmented_iterator(<span class="keyword">const</span> segmented_iterator<SegmentedContainer, U>& other) :
+<a name="l00469"></a>00469                     my_segcont(other.my_segcont),
+<a name="l00470"></a>00470                     outer_iter(other.outer_iter),
+<a name="l00471"></a>00471                     <span class="comment">// can we assign a default-constructed iterator to inner if we're at the end?</span>
+<a name="l00472"></a>00472                     inner_iter(other.inner_iter)
+<a name="l00473"></a>00473                 {}
+<a name="l00474"></a>00474 
+<a name="l00475"></a>00475                 <span class="comment">// assignment</span>
+<a name="l00476"></a>00476                 <span class="keyword">template</span><<span class="keyword">typename</span> U>
+<a name="l00477"></a>00477                 segmented_iterator& operator=( <span class="keyword">const</span> segmented_iterator<SegmentedContainer, U>& other) {
+<a name="l00478"></a>00478                     <span class="keywordflow">if</span>(<span class="keyword">this</span> != &other) {
+<a name="l00479"></a>00479                         my_segcont = other.my_segcont;
+<a name="l00480"></a>00480                         outer_iter = other.outer_iter;
+<a name="l00481"></a>00481                         <span class="keywordflow">if</span>(outer_iter != my_segcont->end()) inner_iter = other.inner_iter;
+<a name="l00482"></a>00482                     }
+<a name="l00483"></a>00483                     <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00484"></a>00484                 }
+<a name="l00485"></a>00485 
+<a name="l00486"></a>00486                 <span class="comment">// allow assignment of outer iterator to segmented iterator.  Once it is</span>
+<a name="l00487"></a>00487                 <span class="comment">// assigned, move forward until a non-empty inner container is found or</span>
+<a name="l00488"></a>00488                 <span class="comment">// the end of the outer container is reached.</span>
+<a name="l00489"></a>00489                 segmented_iterator& operator=(<span class="keyword">const</span> outer_iterator& new_outer_iter) {
+<a name="l00490"></a>00490                     __TBB_ASSERT(my_segcont != NULL, NULL);
+<a name="l00491"></a>00491                     <span class="comment">// check that this iterator points to something inside the segmented container</span>
+<a name="l00492"></a>00492                     <span class="keywordflow">for</span>(outer_iter = new_outer_iter ;outer_iter!=my_segcont->end(); ++outer_iter) {
+<a name="l00493"></a>00493                         <span class="keywordflow">if</span>( !outer_iter->empty() ) {
+<a name="l00494"></a>00494                             inner_iter = outer_iter->begin();
+<a name="l00495"></a>00495                             <span class="keywordflow">break</span>;
+<a name="l00496"></a>00496                         }
+<a name="l00497"></a>00497                     }
+<a name="l00498"></a>00498                     <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00499"></a>00499                 }
+<a name="l00500"></a>00500 
+<a name="l00501"></a>00501                 <span class="comment">// pre-increment</span>
+<a name="l00502"></a>00502                 segmented_iterator& operator++() {
+<a name="l00503"></a>00503                     advance_me();
+<a name="l00504"></a>00504                     <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00505"></a>00505                 }
+<a name="l00506"></a>00506 
+<a name="l00507"></a>00507                 <span class="comment">// post-increment</span>
+<a name="l00508"></a>00508                 segmented_iterator operator++(<span class="keywordtype">int</span>) {
+<a name="l00509"></a>00509                     segmented_iterator tmp = *<span class="keyword">this</span>;
+<a name="l00510"></a>00510                     operator++();
+<a name="l00511"></a>00511                     <span class="keywordflow">return</span> tmp;
+<a name="l00512"></a>00512                 }
+<a name="l00513"></a>00513 
+<a name="l00514"></a>00514                 <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> outer_iterator& other_outer)<span class="keyword"> const </span>{
+<a name="l00515"></a>00515                     __TBB_ASSERT(my_segcont != NULL, NULL);
+<a name="l00516"></a>00516                     <span class="keywordflow">return</span> (outer_iter == other_outer &&
+<a name="l00517"></a>00517                             (outer_iter == my_segcont->end() || inner_iter == outer_iter->begin()));
+<a name="l00518"></a>00518                 }
+<a name="l00519"></a>00519 
+<a name="l00520"></a>00520                 <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> outer_iterator& other_outer)<span class="keyword"> const </span>{
+<a name="l00521"></a>00521                     <span class="keywordflow">return</span> !operator==(other_outer);
+<a name="l00522"></a>00522 
+<a name="l00523"></a>00523                 }
+<a name="l00524"></a>00524 
+<a name="l00525"></a>00525                 <span class="comment">// (i)* RHS</span>
+<a name="l00526"></a>00526                 reference operator*()<span class="keyword"> const </span>{
+<a name="l00527"></a>00527                     __TBB_ASSERT(my_segcont != NULL, NULL);
+<a name="l00528"></a>00528                     __TBB_ASSERT(outer_iter != my_segcont->end(), <span class="stringliteral">"Dereferencing a pointer at end of container"</span>);
+<a name="l00529"></a>00529                     __TBB_ASSERT(inner_iter != outer_iter->end(), NULL); <span class="comment">// should never happen</span>
+<a name="l00530"></a>00530                     <span class="keywordflow">return</span> *inner_iter;
+<a name="l00531"></a>00531                 }
+<a name="l00532"></a>00532 
+<a name="l00533"></a>00533                 <span class="comment">// i-></span>
+<a name="l00534"></a>00534                 pointer operator->()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> &operator*();}
+<a name="l00535"></a>00535 
+<a name="l00536"></a>00536             <span class="keyword">private</span>:
+<a name="l00537"></a>00537                 SegmentedContainer*             my_segcont;
+<a name="l00538"></a>00538                 outer_iterator outer_iter;
+<a name="l00539"></a>00539                 inner_iterator inner_iter;
+<a name="l00540"></a>00540 
+<a name="l00541"></a>00541                 <span class="keywordtype">void</span> advance_me() {
+<a name="l00542"></a>00542                     __TBB_ASSERT(my_segcont != NULL, NULL);
+<a name="l00543"></a>00543                     __TBB_ASSERT(outer_iter != my_segcont->end(), NULL); <span class="comment">// not true if there are no inner containers</span>
+<a name="l00544"></a>00544                     __TBB_ASSERT(inner_iter != outer_iter->end(), NULL); <span class="comment">// not true if the inner containers are all empty.</span>
+<a name="l00545"></a>00545                     ++inner_iter;
+<a name="l00546"></a>00546                     <span class="keywordflow">while</span>(inner_iter == outer_iter->end() && ++outer_iter != my_segcont->end()) {
+<a name="l00547"></a>00547                         inner_iter = outer_iter->begin();
+<a name="l00548"></a>00548                     }
+<a name="l00549"></a>00549                 }
+<a name="l00550"></a>00550         };    <span class="comment">// segmented_iterator</span>
+<a name="l00551"></a>00551 
+<a name="l00552"></a>00552         <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="l00553"></a>00553         <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> segmented_iterator<SegmentedContainer,T>& i, 
+<a name="l00554"></a>00554                          <span class="keyword">const</span> segmented_iterator<SegmentedContainer,U>& j ) {
+<a name="l00555"></a>00555             <span class="keywordflow">if</span>(i.my_segcont != j.my_segcont) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00556"></a>00556             <span class="keywordflow">if</span>(i.my_segcont == NULL) <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00557"></a>00557             <span class="keywordflow">if</span>(i.outer_iter != j.outer_iter) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00558"></a>00558             <span class="keywordflow">if</span>(i.outer_iter == i.my_segcont->end()) <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00559"></a>00559             <span class="keywordflow">return</span> i.inner_iter == j.inner_iter;
+<a name="l00560"></a>00560         }
+<a name="l00561"></a>00561 
+<a name="l00562"></a>00562         <span class="comment">// !=</span>
+<a name="l00563"></a>00563         <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="l00564"></a>00564         <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> segmented_iterator<SegmentedContainer,T>& i, 
+<a name="l00565"></a>00565                          <span class="keyword">const</span> segmented_iterator<SegmentedContainer,U>& j ) {
+<a name="l00566"></a>00566             <span class="keywordflow">return</span> !(i==j);
+<a name="l00567"></a>00567         }
+<a name="l00568"></a>00568 
+<a name="l00569"></a>00569         <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00570"></a>00570         <span class="keyword">struct </span>destruct_only: tbb::internal::no_copy {
+<a name="l00571"></a>00571             <a class="code" href="a00215.html">tbb::aligned_space<T,1></a> value;
+<a name="l00572"></a>00572             ~destruct_only() {value.begin()[0].~T();}
+<a name="l00573"></a>00573         };
+<a name="l00574"></a>00574 
+<a name="l00575"></a>00575         <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00576"></a>00576         <span class="keyword">struct </span>construct_by_default: tbb::internal::no_assign {
+<a name="l00577"></a>00577             <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="l00578"></a>00578             construct_by_default( <span class="keywordtype">int</span> ) {}
+<a name="l00579"></a>00579         };
+<a name="l00580"></a>00580 
+<a name="l00581"></a>00581         <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00582"></a>00582         <span class="keyword">struct </span>construct_by_exemplar: tbb::internal::no_assign {
+<a name="l00583"></a>00583             <span class="keyword">const</span> T exemplar;
+<a name="l00584"></a>00584             <span class="keywordtype">void</span> construct(<span class="keywordtype">void</span>*where) {<span class="keyword">new</span>(where) T(exemplar);}
+<a name="l00585"></a>00585             construct_by_exemplar( <span class="keyword">const</span> T& t ) : exemplar(t) {}
+<a name="l00586"></a>00586         };
+<a name="l00587"></a>00587 
+<a name="l00588"></a>00588         <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> Finit>
+<a name="l00589"></a>00589         <span class="keyword">struct </span>construct_by_finit: tbb::internal::no_assign {
+<a name="l00590"></a>00590             Finit f;
+<a name="l00591"></a>00591             <span class="keywordtype">void</span> construct(<span class="keywordtype">void</span>* where) {<span class="keyword">new</span>(where) T(f());}
+<a name="l00592"></a>00592             construct_by_finit( <span class="keyword">const</span> Finit& f_ ) : f(f_) {}
+<a name="l00593"></a>00593         };
+<a name="l00594"></a>00594 
+<a name="l00595"></a>00595         <span class="comment">// storage for initialization function pointer</span>
+<a name="l00596"></a>00596         <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00597"></a>00597         <span class="keyword">class </span>callback_base {
+<a name="l00598"></a>00598         <span class="keyword">public</span>:
+<a name="l00599"></a>00599             <span class="comment">// Clone *this</span>
+<a name="l00600"></a>00600             <span class="keyword">virtual</span> callback_base* clone() = 0;
+<a name="l00601"></a>00601             <span class="comment">// Destruct and free *this</span>
+<a name="l00602"></a>00602             <span class="keyword">virtual</span> <span class="keywordtype">void</span> destroy() = 0;
+<a name="l00603"></a>00603             <span class="comment">// Need virtual destructor to satisfy GCC compiler warning</span>
+<a name="l00604"></a>00604             <span class="keyword">virtual</span> ~callback_base() { }
+<a name="l00605"></a>00605             <span class="comment">// Construct T at where</span>
+<a name="l00606"></a>00606             <span class="keyword">virtual</span> <span class="keywordtype">void</span> construct(<span class="keywordtype">void</span>* where) = 0;
+<a name="l00607"></a>00607         };
+<a name="l00608"></a>00608 
+<a name="l00609"></a>00609         <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">typename</span> Constructor>
+<a name="l00610"></a>00610         <span class="keyword">class </span>callback_leaf: <span class="keyword">public</span> callback_base<T>, Constructor {
+<a name="l00611"></a>00611             <span class="keyword">template</span><<span class="keyword">typename</span> X> callback_leaf( <span class="keyword">const</span> X& x ) : Constructor(x) {}
+<a name="l00612"></a>00612 
+<a name="l00613"></a>00613             <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00296.html">tbb::tbb_allocator<callback_leaf></a> my_allocator_type;
+<a name="l00614"></a>00614 
+<a name="l00615"></a>00615             <span class="comment">/*override*/</span> callback_base<T>* clone() {
+<a name="l00616"></a>00616                 <span class="keywordtype">void</span>* where = my_allocator_type().allocate(1);
+<a name="l00617"></a>00617                 <span class="keywordflow">return</span> <span class="keyword">new</span>(where) callback_leaf(*<span class="keyword">this</span>);
+<a name="l00618"></a>00618             }
+<a name="l00619"></a>00619 
+<a name="l00620"></a>00620             <span class="comment">/*override*/</span> <span class="keywordtype">void</span> destroy() {
+<a name="l00621"></a>00621                 my_allocator_type().destroy(<span class="keyword">this</span>);
+<a name="l00622"></a>00622                 my_allocator_type().deallocate(<span class="keyword">this</span>,1);
+<a name="l00623"></a>00623             }
+<a name="l00624"></a>00624 
+<a name="l00625"></a>00625             <span class="comment">/*override*/</span> <span class="keywordtype">void</span> construct(<span class="keywordtype">void</span>* where) {
+<a name="l00626"></a>00626                 Constructor::construct(where);
+<a name="l00627"></a>00627             }  
+<a name="l00628"></a>00628         <span class="keyword">public</span>:
+<a name="l00629"></a>00629             <span class="keyword">template</span><<span class="keyword">typename</span> X>
+<a name="l00630"></a>00630             <span class="keyword">static</span> callback_base<T>* make( <span class="keyword">const</span> X& x ) {
+<a name="l00631"></a>00631                 <span class="keywordtype">void</span>* where = my_allocator_type().allocate(1);
+<a name="l00632"></a>00632                 <span class="keywordflow">return</span> <span class="keyword">new</span>(where) callback_leaf(x);
+<a name="l00633"></a>00633             }
+<a name="l00634"></a>00634         };
+<a name="l00635"></a>00635 
+<a name="l00637"></a>00637 
+<a name="l00642"></a>00642         <span class="keyword">template</span><<span class="keyword">typename</span> U, size_t ModularSize>
+<a name="l00643"></a>00643         <span class="keyword">struct </span>ets_element {
+<a name="l00644"></a>00644             <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="l00645"></a>00645             <span class="keywordtype">void</span> unconstruct() {
+<a name="l00646"></a>00646                 tbb::internal::punned_cast<U*>(&value)->~U();
+<a name="l00647"></a>00647             }
+<a name="l00648"></a>00648         };
+<a name="l00649"></a>00649 
+<a name="l00650"></a>00650     } <span class="comment">// namespace internal</span>
+<a name="l00652"></a>00652 <span class="comment"></span>
+<a name="l00654"></a>00654 
+<a name="l00673"></a>00673     <span class="keyword">template</span> <<span class="keyword">typename</span> T, 
+<a name="l00674"></a>00674               <span class="keyword">typename</span> Allocator=cache_aligned_allocator<T>, 
+<a name="l00675"></a><a class="code" href="a00243.html">00675</a>               <a class="code" href="a00362.html#a8622ae61b7e7737dac26542e181178e">ets_key_usage_type</a> ETS_key_type=ets_no_key > 
+<a name="l00676"></a>00676     <span class="keyword">class </span><a class="code" href="a00243.html">enumerable_thread_specific</a>: internal::ets_base<ETS_key_type> { 
+<a name="l00677"></a>00677 
+<a name="l00678"></a>00678         <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="a00243.html">enumerable_thread_specific</a>;
+<a name="l00679"></a>00679     
+<a name="l00680"></a>00680         <span class="keyword">typedef</span> internal::ets_element<T,sizeof(T)%tbb::internal::NFS_MaxLineSize> padded_element;
+<a name="l00681"></a>00681 
+<a name="l00683"></a>00683         <span class="keyword">template</span><<span class="keyword">typename</span> I>
+<a name="l00684"></a>00684         <span class="keyword">class </span>generic_range_type: <span class="keyword">public</span> <a class="code" href="a00221.html">blocked_range</a><I> {
+<a name="l00685"></a>00685         <span class="keyword">public</span>:
+<a name="l00686"></a>00686             <span class="keyword">typedef</span> T value_type;
+<a name="l00687"></a>00687             <span class="keyword">typedef</span> T& reference;
+<a name="l00688"></a>00688             <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
+<a name="l00689"></a>00689             <span class="keyword">typedef</span> I iterator;
+<a name="l00690"></a>00690             <span class="keyword">typedef</span> ptrdiff_t difference_type;
+<a name="l00691"></a>00691             generic_range_type( I begin_, I end_, size_t grainsize_ = 1) : <a class="code" href="a00221.html">blocked_range<I></a>(begin_,end_,grainsize_) {} 
+<a name="l00692"></a>00692             template<typename U>
+<a name="l00693"></a>00693             generic_range_type( <span class="keyword">const</span> generic_range_type<U>& r) : <a class="code" href="a00221.html">blocked_range<I></a>(r.begin(),r.end(),r.grainsize()) {} 
+<a name="l00694"></a>00694             generic_range_type( generic_range_type& r, <a class="code" href="a00290.html">split</a> ) : <a class="code" href="a00221.html">blocked_range<I></a>(r,<a class="code" href="a00290.html">split</a>()) {}
+<a name="l00695"></a>00695         };
+<a name="l00696"></a>00696     
+<a name="l00697"></a>00697         <span class="keyword">typedef</span> <span class="keyword">typename</span> Allocator::template rebind< padded_element >::other padded_allocator_type;
+<a name="l00698"></a>00698         <span class="keyword">typedef</span> <a class="code" href="a00238.html">tbb::concurrent_vector< padded_element, padded_allocator_type ></a> <a class="code" href="a00238.html">internal_collection_type</a>;
+<a name="l00699"></a>00699         
+<a name="l00700"></a>00700         internal::callback_base<T> *my_construct_callback;
+<a name="l00701"></a>00701 
+<a name="l00702"></a>00702         internal_collection_type my_locals;
+<a name="l00703"></a>00703    
+<a name="l00704"></a>00704         <span class="comment">/*override*/</span> <span class="keywordtype">void</span>* create_local() {
+<a name="l00705"></a>00705 <span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00706"></a>00706 <span class="preprocessor"></span>            <span class="keywordtype">void</span>* lref = &my_locals[my_locals.<a class="code" href="a00238.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(padded_element())];
+<a name="l00707"></a>00707 <span class="preprocessor">#else</span>
+<a name="l00708"></a>00708 <span class="preprocessor"></span>            <span class="keywordtype">void</span>* lref = &*my_locals.<a class="code" href="a00238.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(padded_element());
+<a name="l00709"></a>00709 <span class="preprocessor">#endif</span>
+<a name="l00710"></a>00710 <span class="preprocessor"></span>            my_construct_callback->construct(lref);
+<a name="l00711"></a>00711             <span class="keywordflow">return</span> lref;
+<a name="l00712"></a>00712         } 
+<a name="l00713"></a>00713 
+<a name="l00714"></a>00714         <span class="keywordtype">void</span> unconstruct_locals() {
+<a name="l00715"></a>00715             <span class="keywordflow">for</span>(<span class="keyword">typename</span> internal_collection_type::iterator cvi = my_locals.<a class="code" href="a00238.html#730b23a251ecb6d37f692fb22f38e029">begin</a>(); cvi != my_locals.<a class="code" href="a00238.html#c0b51160e5a764982ec97a455f94f2c6">end</a>(); ++cvi) {
+<a name="l00716"></a>00716                 cvi->unconstruct();
+<a name="l00717"></a>00717             }
+<a name="l00718"></a>00718         }
+<a name="l00719"></a>00719 
+<a name="l00720"></a>00720         <span class="keyword">typedef</span> <span class="keyword">typename</span> Allocator::template rebind< uintptr_t >::other array_allocator_type;
+<a name="l00721"></a>00721 
+<a name="l00722"></a>00722         <span class="comment">// _size is in bytes</span>
+<a name="l00723"></a>00723         <span class="comment">/*override*/</span> <span class="keywordtype">void</span>* create_array(size_t _size) {
+<a name="l00724"></a>00724             size_t nelements = (_size + <span class="keyword">sizeof</span>(uintptr_t) -1) / <span class="keyword">sizeof</span>(uintptr_t);
+<a name="l00725"></a>00725             <span class="keywordflow">return</span> array_allocator_type().allocate(nelements);
+<a name="l00726"></a>00726         }
+<a name="l00727"></a>00727 
+<a name="l00728"></a>00728         <span class="comment">/*override*/</span> <span class="keywordtype">void</span> free_array( <span class="keywordtype">void</span>* _ptr, size_t _size) {
+<a name="l00729"></a>00729             size_t nelements = (_size + <span class="keyword">sizeof</span>(uintptr_t) -1) / <span class="keyword">sizeof</span>(uintptr_t);
+<a name="l00730"></a>00730             array_allocator_type().deallocate( reinterpret_cast<uintptr_t *>(_ptr),nelements);
+<a name="l00731"></a>00731         }
+<a name="l00732"></a>00732    
+<a name="l00733"></a>00733     <span class="keyword">public</span>:
+<a name="l00734"></a>00734     
+<a name="l00736"></a>00736         <span class="keyword">typedef</span> Allocator allocator_type;
+<a name="l00737"></a>00737         <span class="keyword">typedef</span> T value_type;
+<a name="l00738"></a>00738         <span class="keyword">typedef</span> T& reference;
+<a name="l00739"></a>00739         <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
+<a name="l00740"></a>00740         <span class="keyword">typedef</span> T* pointer;
+<a name="l00741"></a>00741         <span class="keyword">typedef</span> <span class="keyword">const</span> T* const_pointer;
+<a name="l00742"></a>00742         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal_collection_type::size_type size_type;
+<a name="l00743"></a>00743         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal_collection_type::difference_type difference_type;
+<a name="l00744"></a>00744     
+<a name="l00745"></a>00745         <span class="comment">// Iterator types</span>
+<a name="l00746"></a>00746         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::enumerable_thread_specific_iterator< internal_collection_type, value_type > iterator;
+<a name="l00747"></a>00747         <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="l00748"></a>00748 
+<a name="l00749"></a>00749         <span class="comment">// Parallel range types</span>
+<a name="l00750"></a>00750         <span class="keyword">typedef</span> generic_range_type< iterator > range_type;
+<a name="l00751"></a>00751         <span class="keyword">typedef</span> generic_range_type< const_iterator > const_range_type;
+<a name="l00752"></a>00752     
+<a name="l00754"></a>00754         <a class="code" href="a00243.html">enumerable_thread_specific</a>() : 
+<a name="l00755"></a>00755             my_construct_callback( internal::callback_leaf<T,internal::construct_by_default<T> >::make(<span class="comment">/*dummy argument*/</span>0) ) 
+<a name="l00756"></a>00756         {}
+<a name="l00757"></a>00757 
+<a name="l00759"></a><a class="code" href="a00243.html#8d4b456ff9d7b289c73254eccc11db45">00759</a>         <span class="keyword">template</span> <<span class="keyword">typename</span> Finit>
+<a name="l00760"></a>00760         <a class="code" href="a00243.html">enumerable_thread_specific</a>( Finit finit ) : 
+<a name="l00761"></a>00761             my_construct_callback( internal::callback_leaf<T,internal::construct_by_finit<T,Finit> >::make( finit ) ) 
+<a name="l00762"></a>00762         {}
+<a name="l00763"></a>00763     
+<a name="l00765"></a>00765         <a class="code" href="a00243.html">enumerable_thread_specific</a>(<span class="keyword">const</span> T& exemplar) : 
+<a name="l00766"></a>00766             my_construct_callback( internal::callback_leaf<T,internal::construct_by_exemplar<T> >::make( exemplar ) )
+<a name="l00767"></a>00767         {}
+<a name="l00768"></a>00768     
+<a name="l00770"></a>00770         ~<a class="code" href="a00243.html">enumerable_thread_specific</a>() { 
+<a name="l00771"></a>00771             my_construct_callback->destroy();
+<a name="l00772"></a>00772             this->clear();  <span class="comment">// deallocation before the derived class is finished destructing</span>
+<a name="l00773"></a>00773             <span class="comment">// So free(array *) is still accessible</span>
+<a name="l00774"></a>00774         }
+<a name="l00775"></a>00775       
+<a name="l00777"></a>00777         reference local() {
+<a name="l00778"></a>00778             <span class="keywordtype">bool</span> exists;
+<a name="l00779"></a>00779             <span class="keywordflow">return</span> local(exists);
+<a name="l00780"></a>00780         }
+<a name="l00781"></a>00781 
+<a name="l00783"></a>00783         reference local(<span class="keywordtype">bool</span>& exists)  {
+<a name="l00784"></a>00784             <span class="keywordtype">void</span>* ptr = this->table_lookup(exists);
+<a name="l00785"></a>00785             <span class="keywordflow">return</span> *(T*)ptr;
+<a name="l00786"></a>00786         }
+<a name="l00787"></a>00787 
+<a name="l00789"></a>00789         size_type size()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_locals.<a class="code" href="a00238.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>(); }
+<a name="l00790"></a>00790     
+<a name="l00792"></a>00792         <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_locals.<a class="code" href="a00238.html#c6426cb93cf20d3af40f3c90f1f0481a">empty</a>(); }
+<a name="l00793"></a>00793     
+<a name="l00795"></a>00795         iterator begin() { <span class="keywordflow">return</span> iterator( my_locals, 0 ); }
+<a name="l00797"></a>00797         iterator end() { <span class="keywordflow">return</span> iterator(my_locals, my_locals.<a class="code" href="a00238.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>() ); }
+<a name="l00798"></a>00798     
+<a name="l00800"></a>00800         const_iterator begin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(my_locals, 0); }
+<a name="l00801"></a>00801     
+<a name="l00803"></a>00803         const_iterator end()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(my_locals, my_locals.<a class="code" href="a00238.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>()); }
+<a name="l00804"></a>00804 
+<a name="l00806"></a>00806         range_type range( size_t grainsize=1 ) { <span class="keywordflow">return</span> range_type( begin(), end(), grainsize ); } 
+<a name="l00807"></a>00807         
+<a name="l00809"></a>00809         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="l00810"></a>00810 
+<a name="l00812"></a>00812         <span class="keywordtype">void</span> clear() {
+<a name="l00813"></a>00813             unconstruct_locals();
+<a name="l00814"></a>00814             my_locals.<a class="code" href="a00238.html#26f937a359a66b6aae904c3cd9a3c444">clear</a>();
+<a name="l00815"></a>00815             this->table_clear();
+<a name="l00816"></a>00816             <span class="comment">// callback is not destroyed</span>
+<a name="l00817"></a>00817             <span class="comment">// exemplar is not destroyed</span>
+<a name="l00818"></a>00818         }
+<a name="l00819"></a>00819 
+<a name="l00820"></a>00820     <span class="keyword">private</span>:
+<a name="l00821"></a>00821 
+<a name="l00822"></a>00822         <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> A2, ets_key_usage_type C2>
+<a name="l00823"></a>00823         <span class="keywordtype">void</span> internal_copy( <span class="keyword">const</span> enumerable_thread_specific<U, A2, C2>& other);
+<a name="l00824"></a>00824 
+<a name="l00825"></a>00825     <span class="keyword">public</span>:
+<a name="l00826"></a>00826 
+<a name="l00827"></a>00827         <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> Alloc, ets_key_usage_type Cachetype>
+<a name="l00828"></a>00828         enumerable_thread_specific( <span class="keyword">const</span> enumerable_thread_specific<U, Alloc, Cachetype>& other ) : internal::ets_base<ETS_key_type> ()
+<a name="l00829"></a>00829         {
+<a name="l00830"></a>00830             internal_copy(other);
+<a name="l00831"></a>00831         }
+<a name="l00832"></a>00832 
+<a name="l00833"></a>00833         enumerable_thread_specific( <span class="keyword">const</span> enumerable_thread_specific& other ) : internal::ets_base<ETS_key_type> ()
+<a name="l00834"></a>00834         {
+<a name="l00835"></a>00835             internal_copy(other);
+<a name="l00836"></a>00836         }
+<a name="l00837"></a>00837 
+<a name="l00838"></a>00838     <span class="keyword">private</span>:
+<a name="l00839"></a>00839 
+<a name="l00840"></a>00840         <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> A2, ets_key_usage_type C2>
+<a name="l00841"></a>00841         enumerable_thread_specific &
+<a name="l00842"></a>00842         internal_assign(<span class="keyword">const</span> enumerable_thread_specific<U, A2, C2>& other) {
+<a name="l00843"></a>00843             <span class="keywordflow">if</span>(static_cast<void *>( <span class="keyword">this</span> ) != static_cast<const void *>( &other )) {
+<a name="l00844"></a>00844                 this->clear(); 
+<a name="l00845"></a>00845                 my_construct_callback->destroy();
+<a name="l00846"></a>00846                 my_construct_callback = 0;
+<a name="l00847"></a>00847                 internal_copy( other );
+<a name="l00848"></a>00848             }
+<a name="l00849"></a>00849             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00850"></a>00850         }
+<a name="l00851"></a>00851 
+<a name="l00852"></a>00852     <span class="keyword">public</span>:
+<a name="l00853"></a>00853 
+<a name="l00854"></a>00854         <span class="comment">// assignment</span>
+<a name="l00855"></a>00855         enumerable_thread_specific& operator=(<span class="keyword">const</span> enumerable_thread_specific& other) {
+<a name="l00856"></a>00856             <span class="keywordflow">return</span> internal_assign(other);
+<a name="l00857"></a>00857         }
+<a name="l00858"></a>00858 
+<a name="l00859"></a>00859         <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> Alloc, ets_key_usage_type Cachetype>
+<a name="l00860"></a>00860         enumerable_thread_specific& operator=(<span class="keyword">const</span> enumerable_thread_specific<U, Alloc, Cachetype>& other)
+<a name="l00861"></a>00861         {
+<a name="l00862"></a>00862             <span class="keywordflow">return</span> internal_assign(other);
+<a name="l00863"></a>00863         }
+<a name="l00864"></a>00864 
+<a name="l00865"></a>00865         <span class="comment">// combine_func_t has signature T(T,T) or T(const T&, const T&)</span>
+<a name="l00866"></a>00866         <span class="keyword">template</span> <<span class="keyword">typename</span> combine_func_t>
+<a name="l00867"></a>00867         T combine(combine_func_t f_combine) {
+<a name="l00868"></a>00868             <span class="keywordflow">if</span>(begin() == end()) {
+<a name="l00869"></a>00869                 internal::destruct_only<T> location;
+<a name="l00870"></a>00870                 my_construct_callback->construct(location.value.begin());
+<a name="l00871"></a>00871                 <span class="keywordflow">return</span> *location.value.begin();
+<a name="l00872"></a>00872             }
+<a name="l00873"></a>00873             const_iterator ci = begin();
+<a name="l00874"></a>00874             T my_result = *ci;
+<a name="l00875"></a>00875             <span class="keywordflow">while</span>(++ci != end()) 
+<a name="l00876"></a>00876                 my_result = f_combine( my_result, *ci );
+<a name="l00877"></a>00877             <span class="keywordflow">return</span> my_result;
+<a name="l00878"></a>00878         }
+<a name="l00879"></a>00879 
+<a name="l00880"></a>00880         <span class="comment">// combine_func_t has signature void(T) or void(const T&)</span>
+<a name="l00881"></a>00881         <span class="keyword">template</span> <<span class="keyword">typename</span> combine_func_t>
+<a name="l00882"></a>00882         <span class="keywordtype">void</span> combine_each(combine_func_t f_combine) {
+<a name="l00883"></a>00883             <span class="keywordflow">for</span>(const_iterator ci = begin(); ci != end(); ++ci) {
+<a name="l00884"></a>00884                 f_combine( *ci );
+<a name="l00885"></a>00885             }
+<a name="l00886"></a>00886         }
+<a name="l00887"></a>00887 
+<a name="l00888"></a>00888     }; <span class="comment">// enumerable_thread_specific</span>
+<a name="l00889"></a>00889 
+<a name="l00890"></a>00890     <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="l00891"></a>00891     <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> A2, ets_key_usage_type C2>
+<a name="l00892"></a>00892     <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="l00893"></a>00893         <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="l00894"></a>00894         my_construct_callback = other.my_construct_callback->clone();
+<a name="l00895"></a>00895 
+<a name="l00896"></a>00896         <span class="keyword">typedef</span> internal::ets_base<ets_no_key> base;
+<a name="l00897"></a>00897         __TBB_ASSERT(my_locals.<a class="code" href="a00238.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>()==0,NULL);
+<a name="l00898"></a>00898         this->table_reserve_for_copy( other );
+<a name="l00899"></a>00899         <span class="keywordflow">for</span>( base::array* r=other.my_root; r; r=r->next ) {
+<a name="l00900"></a>00900             <span class="keywordflow">for</span>( size_t i=0; i<r-><a class="code" href="a00221.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>(); ++i ) {
+<a name="l00901"></a>00901                 base::slot& s1 = r->at(i);
+<a name="l00902"></a>00902                 <span class="keywordflow">if</span>( !s1.empty() ) {
+<a name="l00903"></a>00903                     base::slot& s2 = this->table_find(s1.key);
+<a name="l00904"></a>00904                     <span class="keywordflow">if</span>( s2.empty() ) { 
+<a name="l00905"></a>00905 #<span class="keywordflow">if</span> TBB_DEPRECATED
+<a name="l00906"></a>00906                         <span class="keywordtype">void</span>* lref = &my_locals[my_locals.<a class="code" href="a00238.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(padded_element())];
+<a name="l00907"></a>00907 <span class="preprocessor">#else</span>
+<a name="l00908"></a>00908 <span class="preprocessor"></span>                        <span class="keywordtype">void</span>* lref = &*my_locals.<a class="code" href="a00238.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(padded_element());
+<a name="l00909"></a>00909 <span class="preprocessor">#endif</span>
+<a name="l00910"></a>00910 <span class="preprocessor"></span>                        s2.ptr = <span class="keyword">new</span>(lref) T(*(U*)s1.ptr);
+<a name="l00911"></a>00911                         s2.key = s1.key;
+<a name="l00912"></a>00912                     } <span class="keywordflow">else</span> {
+<a name="l00913"></a>00913                         <span class="comment">// Skip the duplicate</span>
+<a name="l00914"></a>00914                     } 
+<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     <span class="keyword">template</span>< <span class="keyword">typename</span> Container >
+<a name="l00921"></a>00921     <span class="keyword">class </span>flattened2d {
+<a name="l00922"></a>00922 
+<a name="l00923"></a>00923         <span class="comment">// This intermediate typedef is to address issues with VC7.1 compilers</span>
+<a name="l00924"></a>00924         <span class="keyword">typedef</span> <span class="keyword">typename</span> Container::value_type conval_type;
+<a name="l00925"></a>00925 
+<a name="l00926"></a>00926     <span class="keyword">public</span>:
+<a name="l00927"></a>00927 
+<a name="l00929"></a>00929         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::size_type size_type;
+<a name="l00930"></a>00930         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::difference_type difference_type;
+<a name="l00931"></a>00931         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::allocator_type allocator_type;
+<a name="l00932"></a>00932         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::value_type value_type;
+<a name="l00933"></a>00933         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::reference reference;
+<a name="l00934"></a>00934         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::const_reference const_reference;
+<a name="l00935"></a>00935         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::pointer pointer;
+<a name="l00936"></a>00936         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::const_pointer const_pointer;
+<a name="l00937"></a>00937 
+<a name="l00938"></a>00938         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::segmented_iterator<Container, value_type> iterator;
+<a name="l00939"></a>00939         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::segmented_iterator<Container, const value_type> const_iterator;
+<a name="l00940"></a>00940 
+<a name="l00941"></a>00941         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="l00942"></a>00942             my_container(const_cast<Container*>(&c)), my_begin(b), my_end(e) { }
+<a name="l00943"></a>00943 
+<a name="l00944"></a>00944         flattened2d( <span class="keyword">const</span> Container &c ) : 
+<a name="l00945"></a>00945             my_container(const_cast<Container*>(&c)), my_begin(c.begin()), my_end(c.end()) { }
+<a name="l00946"></a>00946 
+<a name="l00947"></a>00947         iterator begin() { <span class="keywordflow">return</span> iterator(*my_container) = my_begin; }
+<a name="l00948"></a>00948         iterator end() { <span class="keywordflow">return</span> iterator(*my_container) = my_end; }
+<a name="l00949"></a>00949         const_iterator begin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(*my_container) = my_begin; }
+<a name="l00950"></a>00950         const_iterator end()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(*my_container) = my_end; }
+<a name="l00951"></a>00951 
+<a name="l00952"></a>00952         size_type size()<span class="keyword"> const </span>{
+<a name="l00953"></a>00953             size_type tot_size = 0;
+<a name="l00954"></a>00954             <span class="keywordflow">for</span>(<span class="keyword">typename</span> Container::const_iterator i = my_begin; i != my_end; ++i) {
+<a name="l00955"></a>00955                 tot_size += i->size();
+<a name="l00956"></a>00956             }
+<a name="l00957"></a>00957             <span class="keywordflow">return</span> tot_size;
+<a name="l00958"></a>00958         }
+<a name="l00959"></a>00959 
+<a name="l00960"></a>00960     <span class="keyword">private</span>:
+<a name="l00961"></a>00961 
+<a name="l00962"></a>00962         Container *my_container;
+<a name="l00963"></a>00963         <span class="keyword">typename</span> Container::const_iterator my_begin;
+<a name="l00964"></a>00964         <span class="keyword">typename</span> Container::const_iterator my_end;
+<a name="l00965"></a>00965 
+<a name="l00966"></a>00966     };
+<a name="l00967"></a>00967 
+<a name="l00968"></a>00968     <span class="keyword">template</span> <<span class="keyword">typename</span> Container>
+<a name="l00969"></a>00969     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="l00970"></a>00970         <span class="keywordflow">return</span> flattened2d<Container>(c, b, e);
+<a name="l00971"></a>00971     }
+<a name="l00972"></a>00972 
+<a name="l00973"></a>00973     <span class="keyword">template</span> <<span class="keyword">typename</span> Container>
+<a name="l00974"></a>00974     flattened2d<Container> flatten2d(<span class="keyword">const</span> Container &c) {
+<a name="l00975"></a>00975         <span class="keywordflow">return</span> flattened2d<Container>(c);
+<a name="l00976"></a>00976     }
+<a name="l00977"></a>00977 
+<a name="l00978"></a>00978 } <span class="comment">// interface6</span>
+<a name="l00979"></a>00979 
+<a name="l00980"></a>00980 <span class="keyword">namespace </span>internal {
+<a name="l00981"></a>00981 <span class="keyword">using</span> interface6::internal::segmented_iterator;
+<a name="l00982"></a>00982 }
+<a name="l00983"></a>00983 
+<a name="l00984"></a>00984 <span class="keyword">using</span> interface6::enumerable_thread_specific;
+<a name="l00985"></a>00985 <span class="keyword">using</span> interface6::flattened2d;
+<a name="l00986"></a>00986 <span class="keyword">using</span> interface6::flatten2d;
+<a name="l00987"></a>00987 
+<a name="l00988"></a>00988 } <span class="comment">// namespace tbb</span>
+<a name="l00989"></a>00989 
+<a name="l00990"></a>00990 <span class="preprocessor">#endif</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/a00457.html b/doc/html/a00457.html
deleted file mode 100644
index 09a4bb2..0000000
--- a/doc/html/a00457.html
+++ /dev/null
@@ -1,198 +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-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_tbb_config_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tbb_config_H</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#ifndef TBB_USE_DEBUG</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#ifdef TBB_DO_ASSERT</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_DEBUG TBB_DO_ASSERT</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_DEBUG 0</span>
-<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_ASSERT */</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#else</span>
-<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#define TBB_DO_ASSERT TBB_USE_DEBUG</span>
-<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_DEBUG */</span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="preprocessor">#ifndef TBB_USE_ASSERT</span>
-<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#ifdef TBB_DO_ASSERT</span>
-<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_ASSERT TBB_DO_ASSERT</span>
-<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">#else </span>
-<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_ASSERT TBB_USE_DEBUG</span>
-<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_ASSERT */</span>
-<a name="l00049"></a>00049 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00050"></a>00050 
-<a name="l00051"></a>00051 <span class="preprocessor">#ifndef TBB_USE_THREADING_TOOLS</span>
-<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="preprocessor">#ifdef TBB_DO_THREADING_TOOLS</span>
-<a name="l00053"></a>00053 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_THREADING_TOOLS TBB_DO_THREADING_TOOLS</span>
-<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor">#else </span>
-<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_THREADING_TOOLS TBB_USE_DEBUG</span>
-<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_THREADING_TOOLS */</span>
-<a name="l00057"></a>00057 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS */</span>
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059 <span class="preprocessor">#ifndef TBB_USE_PERFORMANCE_WARNINGS</span>
-<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">#ifdef TBB_PERFORMANCE_WARNINGS</span>
-<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_PERFORMANCE_WARNINGS TBB_PERFORMANCE_WARNINGS</span>
-<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="preprocessor">#else </span>
-<a name="l00063"></a>00063 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_PERFORMANCE_WARNINGS TBB_USE_DEBUG</span>
-<a name="l00064"></a>00064 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_PEFORMANCE_WARNINGS */</span>
-<a name="l00065"></a>00065 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_PERFORMANCE_WARNINGS */</span>
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067 <span class="preprocessor">#if !defined(__EXCEPTIONS) && !defined(_CPPUNWIND) && !defined(__SUNPRO_CC) || defined(_XBOX)</span>
-<a name="l00068"></a>00068 <span class="preprocessor"></span><span class="preprocessor">    #if TBB_USE_EXCEPTIONS</span>
-<a name="l00069"></a>00069 <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="l00070"></a>00070 <span class="preprocessor"></span><span class="preprocessor">    #elif !defined(TBB_USE_EXCEPTIONS)</span>
-<a name="l00071"></a>00071 <span class="preprocessor"></span><span class="preprocessor">        #define TBB_USE_EXCEPTIONS 0</span>
-<a name="l00072"></a>00072 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
-<a name="l00073"></a>00073 <span class="preprocessor"></span><span class="preprocessor">#elif !defined(TBB_USE_EXCEPTIONS)</span>
-<a name="l00074"></a>00074 <span class="preprocessor"></span><span class="preprocessor">    #define TBB_USE_EXCEPTIONS 1</span>
-<a name="l00075"></a>00075 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00076"></a>00076 <span class="preprocessor"></span>
-<a name="l00077"></a>00077 <span class="preprocessor">#ifndef TBB_IMPLEMENT_CPP0X</span>
-<a name="l00078"></a>00078 <span class="preprocessor"></span>
-<a name="l00079"></a>00079 <span class="preprocessor">#if __GNUC__==4 && __GNUC_MINOR__>=4 && __GXX_EXPERIMENTAL_CXX0X__</span>
-<a name="l00080"></a>00080 <span class="preprocessor"></span><span class="preprocessor">#define TBB_IMPLEMENT_CPP0X 0</span>
-<a name="l00081"></a>00081 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00082"></a>00082 <span class="preprocessor"></span><span class="preprocessor">#define TBB_IMPLEMENT_CPP0X 1</span>
-<a name="l00083"></a>00083 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00084"></a>00084 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_IMPLEMENT_CPP0X */</span>
-<a name="l00085"></a>00085 
-<a name="l00088"></a>00088 <span class="preprocessor">#ifndef __TBB_COUNT_TASK_NODES</span>
-<a name="l00089"></a>00089 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_COUNT_TASK_NODES TBB_USE_ASSERT</span>
-<a name="l00090"></a>00090 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00091"></a>00091 <span class="preprocessor"></span>
-<a name="l00092"></a>00092 <span class="preprocessor">#ifndef __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00093"></a>00093 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_TASK_GROUP_CONTEXT 1</span>
-<a name="l00094"></a>00094 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00095"></a>00095 
-<a name="l00096"></a>00096 <span class="preprocessor">#ifndef __TBB_SCHEDULER_OBSERVER</span>
-<a name="l00097"></a>00097 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_SCHEDULER_OBSERVER 1</span>
-<a name="l00098"></a>00098 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_SCHEDULER_OBSERVER */</span>
-<a name="l00099"></a>00099 
-<a name="l00100"></a>00100 <span class="preprocessor">#ifndef __TBB_ARENA_PER_MASTER</span>
-<a name="l00101"></a>00101 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_ARENA_PER_MASTER 1</span>
-<a name="l00102"></a>00102 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_ARENA_PER_MASTER */</span>
-<a name="l00103"></a>00103 
-<a name="l00104"></a>00104 <span class="comment">/* TODO: The following condition should be extended as soon as new compilers/runtimes </span>
-<a name="l00105"></a>00105 <span class="comment">         with std::exception_ptr support appear. */</span>
-<a name="l00106"></a>00106 <span class="preprocessor">#define __TBB_EXCEPTION_PTR_PRESENT  (_MSC_VER >= 1600 || __GXX_EXPERIMENTAL_CXX0X__ && (__GNUC__==4 && __GNUC_MINOR__>=4))</span>
-<a name="l00107"></a>00107 <span class="preprocessor"></span>
-<a name="l00108"></a>00108 
-<a name="l00109"></a>00109 <span class="preprocessor">#ifndef TBB_USE_CAPTURED_EXCEPTION</span>
-<a name="l00110"></a>00110 <span class="preprocessor"></span><span class="preprocessor">    #if __TBB_EXCEPTION_PTR_PRESENT</span>
-<a name="l00111"></a>00111 <span class="preprocessor"></span><span class="preprocessor">        #define TBB_USE_CAPTURED_EXCEPTION 0</span>
-<a name="l00112"></a>00112 <span class="preprocessor"></span><span class="preprocessor">    #else</span>
-<a name="l00113"></a>00113 <span class="preprocessor"></span><span class="preprocessor">        #define TBB_USE_CAPTURED_EXCEPTION 1</span>
-<a name="l00114"></a>00114 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
-<a name="l00115"></a>00115 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* defined TBB_USE_CAPTURED_EXCEPTION */</span>
-<a name="l00116"></a>00116 <span class="preprocessor">    #if !TBB_USE_CAPTURED_EXCEPTION && !__TBB_EXCEPTION_PTR_PRESENT</span>
-<a name="l00117"></a>00117 <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="l00118"></a>00118 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
-<a name="l00119"></a>00119 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* defined TBB_USE_CAPTURED_EXCEPTION */</span>
-<a name="l00120"></a>00120 
-<a name="l00121"></a>00121 
-<a name="l00122"></a>00122 <span class="preprocessor">#ifndef __TBB_DEFAULT_PARTITIONER</span>
-<a name="l00123"></a>00123 <span class="preprocessor"></span><span class="preprocessor">#if TBB_DEPRECATED</span>
-<a name="l00124"></a>00124 <span class="preprocessor"></span>
-<a name="l00125"></a>00125 <span class="preprocessor">#define __TBB_DEFAULT_PARTITIONER tbb::simple_partitioner</span>
-<a name="l00126"></a>00126 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00127"></a>00127 <span class="preprocessor"></span>
-<a name="l00128"></a>00128 <span class="preprocessor">#define __TBB_DEFAULT_PARTITIONER tbb::auto_partitioner</span>
-<a name="l00129"></a>00129 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_DEFAULT_PARTITIONER */</span>
-<a name="l00130"></a>00130 <span class="preprocessor">#endif </span><span class="comment">/* !defined(__TBB_DEFAULT_PARTITIONER */</span>
-<a name="l00131"></a>00131 
-<a name="l00134"></a>00134 <span class="preprocessor">#if __GNUC__==4 && __GNUC_MINOR__>=4 && !defined(__INTEL_COMPILER)</span>
-<a name="l00135"></a>00135 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_GCC_WARNING_SUPPRESSION_ENABLED 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="l00144"></a>00144 <span class="preprocessor">#if _MSC_VER && __INTEL_COMPILER && (__INTEL_COMPILER<1110 || __INTEL_COMPILER==1110 && __INTEL_COMPILER_BUILD_DATE < 20091012)</span>
-<a name="l00145"></a>00145 <span class="preprocessor"></span>
-<a name="l00148"></a>00148 <span class="preprocessor">    #define __TBB_DEFAULT_DTOR_THROW_SPEC_BROKEN 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>
-<a name="l00151"></a>00151 <span class="preprocessor">#if defined(_MSC_VER) && _MSC_VER < 1500 && !defined(__INTEL_COMPILER)</span>
-<a name="l00152"></a>00152 <span class="preprocessor"></span>
-<a name="l00154"></a>00154 <span class="preprocessor">    #define __TBB_TEMPLATE_FRIENDS_BROKEN 1</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 __GLIBC__==2 && __GLIBC_MINOR__==3 || __MINGW32__</span>
-<a name="l00159"></a>00159 <span class="preprocessor"></span>
-<a name="l00160"></a>00160 <span class="preprocessor">    #define __TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN 1</span>
-<a name="l00161"></a>00161 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00162"></a>00162 <span class="preprocessor"></span>
-<a name="l00163"></a>00163 <span class="preprocessor">#if (_WIN32||_WIN64) && __INTEL_COMPILER == 1110</span>
-<a name="l00164"></a>00164 <span class="preprocessor"></span>
-<a name="l00165"></a>00165 <span class="preprocessor">    #define __TBB_ICL_11_1_CODE_GEN_BROKEN 1</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 __GNUC__==3 && __GNUC_MINOR__==3 && !defined(__INTEL_COMPILER)</span>
-<a name="l00169"></a>00169 <span class="preprocessor"></span>
-<a name="l00170"></a>00170 <span class="preprocessor">    #define __TBB_GCC_3_3_PROTECTED_BROKEN 1</span>
-<a name="l00171"></a>00171 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00172"></a>00172 <span class="preprocessor"></span>
-<a name="l00173"></a>00173 <span class="preprocessor">#if __MINGW32__ && (__GNUC__<4 || __GNUC__==4 && __GNUC_MINOR__<2)</span>
-<a name="l00174"></a>00174 <span class="preprocessor"></span>
-<a name="l00176"></a>00176 <span class="preprocessor">    #define __TBB_SSE_STACK_ALIGNMENT_BROKEN 1</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">#if __FreeBSD__</span>
-<a name="l00180"></a>00180 <span class="preprocessor"></span>
-<a name="l00182"></a>00182 <span class="preprocessor">    #define __TBB_PRIO_INHERIT_BROKEN 1</span>
-<a name="l00183"></a>00183 <span class="preprocessor"></span>
-<a name="l00186"></a>00186 <span class="preprocessor">    #define __TBB_PLACEMENT_NEW_EXCEPTION_SAFETY_BROKEN 1</span>
-<a name="l00187"></a>00187 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __FreeBSD__ */</span>
-<a name="l00188"></a>00188 
-<a name="l00189"></a>00189 <span class="preprocessor">#if (__linux__ || __APPLE__) && __i386__ && defined(__INTEL_COMPILER)</span>
-<a name="l00190"></a>00190 <span class="preprocessor"></span>
-<a name="l00192"></a>00192 <span class="preprocessor">    #define __TBB_ICC_ASM_VOLATILE_BROKEN 1</span>
-<a name="l00193"></a>00193 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00194"></a>00194 <span class="preprocessor"></span>
-<a name="l00195"></a>00195 
-<a name="l00196"></a>00196 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_config_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00458.html b/doc/html/a00458.html
deleted file mode 100644
index f9d3047..0000000
--- a/doc/html/a00458.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_config_lrb.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_lrb.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_tbb_config_lrb_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tbb_config_lrb_H</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">    #error tbb_config_lrb.h should be included only when building for LRB platform</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span>
-<a name="l00026"></a>00026 <span class="preprocessor">#if __TBB_LRB_NATIVE</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span>
-<a name="l00029"></a>00029 <span class="preprocessor">#define __TBB_FLOATING_POINT_BROKEN 1</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#define __TBB_full_memory_fence __TBB_release_consistency_helper</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_Pause(x) _mm_delay_32(x)</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span>
-<a name="l00035"></a>00035 <span class="preprocessor">#if !__FreeBSD__</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">    #error LRB compiler does not define __FreeBSD__ anymore. Check for the __TBB_XXX_BROKEN defined under __FreeBSD__</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* !__FreeBSD__ */</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#endif </span><span class="comment">/*__TBB_LRB_NATIVE*/</span>
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_config_lrb_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00459.html b/doc/html/a00459.html
deleted file mode 100644
index c1bdf09..0000000
--- a/doc/html/a00459.html
+++ /dev/null
@@ -1,321 +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-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_exception_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_exception_H</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include "tbb_stddef.h"</span>
-<a name="l00025"></a>00025 
-<a name="l00026"></a>00026 <span class="preprocessor">#if !TBB_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 
-<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">#if __SUNPRO_CC</span>
-<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#include <string></span> <span class="comment">// required to construct std exception classes</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="keyword">namespace </span>tbb {
-<a name="l00043"></a>00043 
-<a name="l00045"></a><a class="code" href="a00146.html">00045</a> <span class="keyword">class </span><a class="code" href="a00146.html">bad_last_alloc</a> : <span class="keyword">public</span> std::bad_alloc {
-<a name="l00046"></a>00046 <span class="keyword">public</span>:
-<a name="l00047"></a>00047     <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="l00048"></a>00048 <span class="preprocessor">#if __TBB_DEFAULT_DTOR_THROW_SPEC_BROKEN</span>
-<a name="l00049"></a>00049 <span class="preprocessor"></span>    <span class="comment">/*override*/</span> ~<a class="code" href="a00146.html">bad_last_alloc</a>() <span class="keywordflow">throw</span>() {}
-<a name="l00050"></a>00050 <span class="preprocessor">#endif</span>
-<a name="l00051"></a>00051 <span class="preprocessor"></span>};
-<a name="l00052"></a>00052 
-<a name="l00054"></a><a class="code" href="a00168.html">00054</a> <span class="keyword">class </span><a class="code" href="a00168.html">improper_lock</a> : <span class="keyword">public</span> std::exception {
-<a name="l00055"></a>00055 <span class="keyword">public</span>:
-<a name="l00056"></a>00056     <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="l00057"></a>00057 };
-<a name="l00058"></a>00058 
-<a name="l00060"></a><a class="code" href="a00170.html">00060</a> <span class="keyword">class </span><a class="code" href="a00170.html">missing_wait</a> : <span class="keyword">public</span> std::exception {
-<a name="l00061"></a>00061 <span class="keyword">public</span>:
-<a name="l00062"></a>00062     <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="l00063"></a>00063 };
-<a name="l00064"></a>00064 
-<a name="l00066"></a><a class="code" href="a00169.html">00066</a> <span class="keyword">class </span><a class="code" href="a00169.html">invalid_multiple_scheduling</a> : <span class="keyword">public</span> std::exception {
-<a name="l00067"></a>00067 <span class="keyword">public</span>:
-<a name="l00068"></a>00068     <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="l00069"></a>00069 };
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 <span class="keyword">namespace </span>internal {
-<a name="l00073"></a>00073 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC throw_bad_last_alloc_exception_v4();
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075 <span class="keyword">enum</span> exception_id {
-<a name="l00076"></a>00076     eid_bad_alloc = 1,
-<a name="l00077"></a>00077     eid_bad_last_alloc,
-<a name="l00078"></a>00078     eid_nonpositive_step,
-<a name="l00079"></a>00079     eid_out_of_range,
-<a name="l00080"></a>00080     eid_segment_range_error,
-<a name="l00081"></a>00081     eid_index_range_error,
-<a name="l00082"></a>00082     eid_missing_wait,
-<a name="l00083"></a>00083     eid_invalid_multiple_scheduling,
-<a name="l00084"></a>00084     eid_improper_lock,
-<a name="l00085"></a>00085     eid_possible_deadlock,
-<a name="l00086"></a>00086     eid_operation_not_permitted,
-<a name="l00087"></a>00087     eid_condvar_wait_failed,
-<a name="l00088"></a>00088     eid_invalid_load_factor,
-<a name="l00089"></a>00089     eid_reserved, <span class="comment">// free slot for backward compatibility, can be reused.</span>
-<a name="l00090"></a>00090     eid_invalid_swap,
-<a name="l00091"></a>00091     eid_reservation_length_error,
-<a name="l00092"></a>00092     eid_invalid_key,
-<a name="l00094"></a>00094 
-<a name="l00096"></a>00096     eid_max
-<a name="l00097"></a>00097 };
-<a name="l00098"></a>00098 
-<a name="l00100"></a>00100 
-<a name="l00102"></a>00102 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC throw_exception_v4 ( exception_id );
-<a name="l00103"></a>00103 
-<a name="l00105"></a>00105 <span class="keyword">inline</span> <span class="keywordtype">void</span> throw_exception ( exception_id eid ) { throw_exception_v4(eid); }
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107 } <span class="comment">// namespace internal</span>
-<a name="l00108"></a>00108 } <span class="comment">// namespace tbb</span>
-<a name="l00109"></a>00109 
-<a name="l00110"></a>00110 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00111"></a>00111 <span class="preprocessor"></span><span class="preprocessor">#include "tbb_allocator.h"</span>
-<a name="l00112"></a>00112 <span class="preprocessor">#include <exception></span>
-<a name="l00113"></a>00113 <span class="preprocessor">#include <typeinfo></span>
-<a name="l00114"></a>00114 <span class="preprocessor">#include <new></span>
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116 <span class="keyword">namespace </span>tbb {
-<a name="l00117"></a>00117 
-<a name="l00119"></a>00119 
-<a name="l00139"></a><a class="code" href="a00206.html">00139</a> <span class="keyword">class </span><a class="code" href="a00206.html">tbb_exception</a> : <span class="keyword">public</span> std::exception
-<a name="l00140"></a>00140 {
-<a name="l00144"></a>00144     <span class="keywordtype">void</span>* operator new ( size_t );
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146 <span class="keyword">public</span>:
-<a name="l00148"></a>00148 
-<a name="l00149"></a>00149     <span class="keyword">virtual</span> <a class="code" href="a00206.html">tbb_exception</a>* <a class="code" href="a00206.html#3e3482bf264d4ca4dde046cd9c02c766">move</a> () <span class="keywordflow">throw</span>() = 0;
-<a name="l00150"></a>00150     
-<a name="l00152"></a>00152 
-<a name="l00154"></a>00154     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="a00206.html#66c94938eca8bf88b76f3eccaaf215d8">destroy</a> () <span class="keywordflow">throw</span>() = 0;
-<a name="l00155"></a>00155 
-<a name="l00157"></a>00157 
-<a name="l00161"></a>00161     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="a00206.html#8588e07fa49692f4d734e4f2e4f048f4">throw_self</a> () = 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="a00206.html#d00f6497e552fee978a02bfcbebf46e2">name</a>() <span class="keyword">const</span> <span class="keywordflow">throw</span>() = 0;
-<a name="l00165"></a>00165 
-<a name="l00167"></a>00167     <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="a00206.html#e8157689ecb66bc6c72d3618bf3cc371">what</a>() <span class="keyword">const</span> <span class="keywordflow">throw</span>() = 0;
-<a name="l00168"></a>00168 
-<a name="l00175"></a><a class="code" href="a00206.html#3f2da7f3d8a6e4c1df522af1213afb5a">00175</a>     <span class="keywordtype">void</span> <a class="code" href="a00206.html#3f2da7f3d8a6e4c1df522af1213afb5a">operator delete </a>( <span class="keywordtype">void</span>* p ) {
-<a name="l00176"></a>00176         internal::deallocate_via_handler_v3(p);
-<a name="l00177"></a>00177     }
-<a name="l00178"></a>00178 };
-<a name="l00179"></a>00179 
-<a name="l00181"></a>00181 
-<a name="l00185"></a><a class="code" href="a00152.html">00185</a> <span class="keyword">class </span><a class="code" href="a00152.html">captured_exception</a> : <span class="keyword">public</span> <a class="code" href="a00206.html">tbb_exception</a>
-<a name="l00186"></a>00186 {
-<a name="l00187"></a>00187 <span class="keyword">public</span>:
-<a name="l00188"></a>00188     <a class="code" href="a00152.html">captured_exception</a> ( <span class="keyword">const</span> <a class="code" href="a00152.html">captured_exception</a>& src )
-<a name="l00189"></a>00189         : <a class="code" href="a00206.html">tbb_exception</a>(src), my_dynamic(<span class="keyword">false</span>)
-<a name="l00190"></a>00190     {
-<a name="l00191"></a>00191         set(src.<a class="code" href="a00152.html#6a57f9aa0bce72392492d109b9e1d941">my_exception_name</a>, src.<a class="code" href="a00152.html#788adf4e55cdad7abc178a48a1d47e69">my_exception_info</a>);
-<a name="l00192"></a>00192     }
-<a name="l00193"></a>00193 
-<a name="l00194"></a>00194     <a class="code" href="a00152.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="l00195"></a>00195         : my_dynamic(<span class="keyword">false</span>)
-<a name="l00196"></a>00196     {
-<a name="l00197"></a>00197         set(name_, info);
-<a name="l00198"></a>00198     }
-<a name="l00199"></a>00199 
-<a name="l00200"></a>00200     __TBB_EXPORTED_METHOD ~<a class="code" href="a00152.html">captured_exception</a> () <span class="keywordflow">throw</span>() {
-<a name="l00201"></a>00201         clear();
-<a name="l00202"></a>00202     }
-<a name="l00203"></a>00203 
-<a name="l00204"></a>00204     <a class="code" href="a00152.html">captured_exception</a>& operator= ( <span class="keyword">const</span> <a class="code" href="a00152.html">captured_exception</a>& src ) {
-<a name="l00205"></a>00205         <span class="keywordflow">if</span> ( <span class="keyword">this</span> != &src ) {
-<a name="l00206"></a>00206             clear();
-<a name="l00207"></a>00207             set(src.<a class="code" href="a00152.html#6a57f9aa0bce72392492d109b9e1d941">my_exception_name</a>, src.<a class="code" href="a00152.html#788adf4e55cdad7abc178a48a1d47e69">my_exception_info</a>);
-<a name="l00208"></a>00208         }
-<a name="l00209"></a>00209         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00210"></a>00210     }
-<a name="l00211"></a>00211 
-<a name="l00212"></a>00212     <span class="comment">/*override*/</span> 
-<a name="l00213"></a>00213     <a class="code" href="a00152.html">captured_exception</a>* __TBB_EXPORTED_METHOD <a class="code" href="a00152.html#837a50b8f6a800bda225c39d1699643f">move</a> () <span class="keywordflow">throw</span>();
-<a name="l00214"></a>00214 
-<a name="l00215"></a>00215     <span class="comment">/*override*/</span> 
-<a name="l00216"></a>00216     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00152.html#93d875d3555502ff6f18513525de204c">destroy</a> () <span class="keywordflow">throw</span>();
-<a name="l00217"></a>00217 
-<a name="l00218"></a>00218     <span class="comment">/*override*/</span> 
-<a name="l00219"></a><a class="code" href="a00152.html#2dd1be66ab32fa27e0ddef5707fa67ef">00219</a>     <span class="keywordtype">void</span> <a class="code" href="a00152.html#2dd1be66ab32fa27e0ddef5707fa67ef">throw_self</a> () { __TBB_THROW(*<span class="keyword">this</span>); }
-<a name="l00220"></a>00220 
-<a name="l00221"></a>00221     <span class="comment">/*override*/</span> 
-<a name="l00222"></a>00222     <span class="keyword">const</span> <span class="keywordtype">char</span>* __TBB_EXPORTED_METHOD <a class="code" href="a00152.html#5af82fd677449c5ca727fa1d7e16f9f5">name</a>() const throw();
-<a name="l00223"></a>00223 
-<a name="l00224"></a>00224     <span class="comment">/*override*/</span> 
-<a name="l00225"></a>00225     const <span class="keywordtype">char</span>* __TBB_EXPORTED_METHOD <a class="code" href="a00152.html#6b5988ef74a1fe2a58998d110b3633e0">what</a>() const throw();
-<a name="l00226"></a>00226 
-<a name="l00227"></a>00227     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD set ( const <span class="keywordtype">char</span>* <a class="code" href="a00152.html#5af82fd677449c5ca727fa1d7e16f9f5">name</a>, const <span class="keywordtype">char</span>* info ) throw();
-<a name="l00228"></a>00228     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD clear () throw();
-<a name="l00229"></a>00229 
-<a name="l00230"></a>00230 private:
-<a name="l00232"></a>00232     <a class="code" href="a00152.html">captured_exception</a>() {}
-<a name="l00233"></a>00233 
-<a name="l00235"></a>00235     <span class="keyword">static</span> captured_exception* allocate ( <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="a00152.html#5af82fd677449c5ca727fa1d7e16f9f5">name</a>, <span class="keyword">const</span> <span class="keywordtype">char</span>* info );
-<a name="l00236"></a>00236 
-<a name="l00237"></a>00237     <span class="keywordtype">bool</span> my_dynamic;
-<a name="l00238"></a>00238     <span class="keyword">const</span> <span class="keywordtype">char</span>* my_exception_name;
-<a name="l00239"></a>00239     <span class="keyword">const</span> <span class="keywordtype">char</span>* my_exception_info;
-<a name="l00240"></a>00240 };
-<a name="l00241"></a>00241 
-<a name="l00243"></a>00243 
-<a name="l00247"></a>00247 <span class="keyword">template</span><<span class="keyword">typename</span> ExceptionData>
-<a name="l00248"></a><a class="code" href="a00171.html">00248</a> <span class="keyword">class </span><a class="code" href="a00171.html">movable_exception</a> : <span class="keyword">public</span> <a class="code" href="a00206.html">tbb_exception</a>
-<a name="l00249"></a>00249 {
-<a name="l00250"></a>00250     <span class="keyword">typedef</span> <a class="code" href="a00171.html">movable_exception<ExceptionData></a> <a class="code" href="a00171.html">self_type</a>;
-<a name="l00251"></a>00251 
-<a name="l00252"></a>00252 <span class="keyword">public</span>:
-<a name="l00253"></a>00253     <a class="code" href="a00171.html">movable_exception</a> ( <span class="keyword">const</span> ExceptionData& data_ ) 
-<a name="l00254"></a>00254         : <a class="code" href="a00171.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>(data_)
-<a name="l00255"></a>00255         , my_dynamic(<span class="keyword">false</span>)
-<a name="l00256"></a>00256         , my_exception_name(
-<a name="l00257"></a>00257 #<span class="keywordflow">if</span> TBB_USE_EXCEPTIONS
-<a name="l00258"></a>00258         <span class="keyword">typeid</span>(<a class="code" href="a00171.html">self_type</a>).<a class="code" href="a00171.html#bc5f5c4739b17ac5211ac58226c2f5a5">name</a>()
-<a name="l00259"></a>00259 #<span class="keywordflow">else</span> <span class="comment">/* !TBB_USE_EXCEPTIONS */</span>
-<a name="l00260"></a>00260         <span class="stringliteral">"movable_exception"</span>
-<a name="l00261"></a>00261 #endif <span class="comment">/* !TBB_USE_EXCEPTIONS */</span>
-<a name="l00262"></a>00262         )
-<a name="l00263"></a>00263     {}
-<a name="l00264"></a>00264 
-<a name="l00265"></a>00265     <a class="code" href="a00171.html">movable_exception</a> ( <span class="keyword">const</span> <a class="code" href="a00171.html">movable_exception</a>& src ) <span class="keywordflow">throw</span> () 
-<a name="l00266"></a>00266         : <a class="code" href="a00206.html">tbb_exception</a>(src)
-<a name="l00267"></a>00267         , <a class="code" href="a00171.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>(src.<a class="code" href="a00171.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>)
-<a name="l00268"></a>00268         , my_dynamic(<span class="keyword">false</span>)
-<a name="l00269"></a>00269         , my_exception_name(src.<a class="code" href="a00171.html#5f5843b501829ff824c9c8d28c8283eb">my_exception_name</a>)
-<a name="l00270"></a>00270     {}
-<a name="l00271"></a>00271 
-<a name="l00272"></a>00272     ~<a class="code" href="a00171.html">movable_exception</a> () <span class="keywordflow">throw</span>() {}
-<a name="l00273"></a>00273 
-<a name="l00274"></a>00274     <span class="keyword">const</span> <a class="code" href="a00171.html">movable_exception</a>& operator= ( <span class="keyword">const</span> <a class="code" href="a00171.html">movable_exception</a>& src ) {
-<a name="l00275"></a>00275         <span class="keywordflow">if</span> ( <span class="keyword">this</span> != &src ) {
-<a name="l00276"></a>00276             <a class="code" href="a00171.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a> = src.<a class="code" href="a00171.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>;
-<a name="l00277"></a>00277             my_exception_name = src.<a class="code" href="a00171.html#5f5843b501829ff824c9c8d28c8283eb">my_exception_name</a>;
-<a name="l00278"></a>00278         }
-<a name="l00279"></a>00279         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00280"></a>00280     }
-<a name="l00281"></a>00281 
-<a name="l00282"></a>00282     ExceptionData& data () <span class="keywordflow">throw</span>() { <span class="keywordflow">return</span> <a class="code" href="a00171.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>; }
-<a name="l00283"></a>00283 
-<a name="l00284"></a>00284     <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="a00171.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>; }
-<a name="l00285"></a>00285 
-<a name="l00286"></a><a class="code" href="a00171.html#bc5f5c4739b17ac5211ac58226c2f5a5">00286</a>     <span class="comment">/*override*/</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="a00171.html#bc5f5c4739b17ac5211ac58226c2f5a5">name</a> () const throw() { <span class="keywordflow">return</span> my_exception_name; }
-<a name="l00287"></a>00287 
-<a name="l00288"></a><a class="code" href="a00171.html#b33a89bccf0c63106f1270c7bfaaf54f">00288</a>     <span class="comment">/*override*/</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="a00171.html#b33a89bccf0c63106f1270c7bfaaf54f">what</a> () const throw() { <span class="keywordflow">return</span> <span class="stringliteral">"tbb::movable_exception"</span>; }
-<a name="l00289"></a>00289 
-<a name="l00290"></a>00290     <span class="comment">/*override*/</span> 
-<a name="l00291"></a><a class="code" href="a00171.html#1aea0ad179d6f0481fe7f3495f66adf9">00291</a>     <a class="code" href="a00171.html">movable_exception</a>* <a class="code" href="a00171.html#1aea0ad179d6f0481fe7f3495f66adf9">move</a> () throw() {
-<a name="l00292"></a>00292         <span class="keywordtype">void</span>* e = internal::allocate_via_handler_v3(<span class="keyword">sizeof</span>(<a class="code" href="a00171.html">movable_exception</a>));
-<a name="l00293"></a>00293         <span class="keywordflow">if</span> ( e ) {
-<a name="l00294"></a>00294             ::new (e) movable_exception(*<span class="keyword">this</span>);
-<a name="l00295"></a>00295             ((movable_exception*)e)->my_dynamic = <span class="keyword">true</span>;
-<a name="l00296"></a>00296         }
-<a name="l00297"></a>00297         <span class="keywordflow">return</span> (movable_exception*)e;
-<a name="l00298"></a>00298     }
-<a name="l00299"></a>00299     <span class="comment">/*override*/</span> 
-<a name="l00300"></a><a class="code" href="a00171.html#7a46873119d9f85a7b0009c13e41a258">00300</a>     <span class="keywordtype">void</span> <a class="code" href="a00171.html#7a46873119d9f85a7b0009c13e41a258">destroy</a> () throw() {
-<a name="l00301"></a>00301         __TBB_ASSERT ( my_dynamic, <span class="stringliteral">"Method destroy can be called only on dynamically allocated movable_exceptions"</span> );
-<a name="l00302"></a>00302         <span class="keywordflow">if</span> ( my_dynamic ) {
-<a name="l00303"></a>00303             this->~<a class="code" href="a00171.html">movable_exception</a>();
-<a name="l00304"></a>00304             internal::deallocate_via_handler_v3(<span class="keyword">this</span>);
-<a name="l00305"></a>00305         }
-<a name="l00306"></a>00306     }
-<a name="l00307"></a>00307     <span class="comment">/*override*/</span> 
-<a name="l00308"></a><a class="code" href="a00171.html#17cffba35811c92b7e65d63506b69602">00308</a>     <span class="keywordtype">void</span> <a class="code" href="a00171.html#17cffba35811c92b7e65d63506b69602">throw_self</a> () { __TBB_THROW( *<span class="keyword">this</span> ); }
-<a name="l00309"></a>00309 
-<a name="l00310"></a>00310 <span class="keyword">protected</span>:
-<a name="l00312"></a><a class="code" href="a00171.html#a8c0ae2089ae784b28907cf748b89416">00312</a>     ExceptionData  <a class="code" href="a00171.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>;
-<a name="l00313"></a>00313 
-<a name="l00314"></a>00314 <span class="keyword">private</span>:
-<a name="l00316"></a>00316     <span class="keywordtype">bool</span> my_dynamic;
-<a name="l00317"></a>00317 
-<a name="l00319"></a>00319 
-<a name="l00320"></a>00320     <span class="keyword">const</span> <span class="keywordtype">char</span>* my_exception_name;
-<a name="l00321"></a>00321 };
-<a name="l00322"></a>00322 
-<a name="l00323"></a>00323 <span class="preprocessor">#if !TBB_USE_CAPTURED_EXCEPTION</span>
-<a name="l00324"></a>00324 <span class="preprocessor"></span><span class="keyword">namespace </span>internal {
-<a name="l00325"></a>00325 
-<a name="l00327"></a>00327 
-<a name="l00329"></a><a class="code" href="a00207.html">00329</a> <span class="keyword">class </span><a class="code" href="a00207.html">tbb_exception_ptr</a> {
-<a name="l00330"></a>00330     std::exception_ptr  my_ptr;
-<a name="l00331"></a>00331 
-<a name="l00332"></a>00332 <span class="keyword">public</span>:
-<a name="l00333"></a>00333     <span class="keyword">static</span> <a class="code" href="a00207.html">tbb_exception_ptr</a>* allocate ();
-<a name="l00334"></a>00334     <span class="keyword">static</span> <a class="code" href="a00207.html">tbb_exception_ptr</a>* allocate ( <span class="keyword">const</span> <a class="code" href="a00206.html">tbb_exception</a>& tag );
-<a name="l00336"></a>00336     <span class="keyword">static</span> <a class="code" href="a00207.html">tbb_exception_ptr</a>* allocate ( <a class="code" href="a00152.html">captured_exception</a>& src );
-<a name="l00337"></a>00337     
-<a name="l00339"></a>00339 
-<a name="l00340"></a>00340     <span class="keywordtype">void</span> <a class="code" href="a00207.html#921875bbacd2c8a5f324c7da7a415262">destroy</a> () <span class="keywordflow">throw</span>();
-<a name="l00341"></a>00341 
-<a name="l00343"></a><a class="code" href="a00207.html#292832fd5c523e3d8081a22247840a1d">00343</a>     <span class="keywordtype">void</span> <a class="code" href="a00207.html#292832fd5c523e3d8081a22247840a1d">throw_self</a> () { std::rethrow_exception(my_ptr); }
-<a name="l00344"></a>00344 
-<a name="l00345"></a>00345 <span class="keyword">private</span>:
-<a name="l00346"></a>00346     <a class="code" href="a00207.html">tbb_exception_ptr</a> ( <span class="keyword">const</span> std::exception_ptr& src ) : my_ptr(src) {}
-<a name="l00347"></a>00347     tbb_exception_ptr ( <span class="keyword">const</span> <a class="code" href="a00152.html">captured_exception</a>& src ) : my_ptr(std::copy_exception(src)) {}
-<a name="l00348"></a>00348 }; <span class="comment">// class tbb::internal::tbb_exception_ptr</span>
-<a name="l00349"></a>00349 
-<a name="l00350"></a>00350 } <span class="comment">// namespace internal</span>
-<a name="l00351"></a>00351 <span class="preprocessor">#endif </span><span class="comment">/* !TBB_USE_CAPTURED_EXCEPTION */</span>
-<a name="l00352"></a>00352 
-<a name="l00353"></a>00353 } <span class="comment">// namespace tbb</span>
-<a name="l00354"></a>00354 
-<a name="l00355"></a>00355 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00356"></a>00356 
-<a name="l00357"></a>00357 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_exception_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00460.html b/doc/html/a00460.html
deleted file mode 100644
index 14de40d..0000000
--- a/doc/html/a00460.html
+++ /dev/null
@@ -1,656 +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-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_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="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>
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef _MANAGED</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#pragma managed(push, off)</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">#if __MINGW32__</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#include "machine/linux_ia32.h"</span>
-<a name="l00034"></a>00034 <span class="keyword">extern</span> <span class="stringliteral">"C"</span> __declspec(dllimport) int __stdcall SwitchToThread( <span class="keywordtype">void</span> );
-<a name="l00035"></a>00035 <span class="preprocessor">#define __TBB_Yield()  SwitchToThread()</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#elif defined(_M_IX86)</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#include "machine/windows_ia32.h"</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#elif defined(_M_AMD64) </span>
-<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#include "machine/windows_intel64.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#elif _XBOX </span>
-<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor">#include "machine/xbox360_ppc.h"</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#else</span>
-<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor">#error Unsupported platform</span>
-<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00045"></a>00045 <span class="preprocessor"></span>
-<a name="l00046"></a>00046 <span class="preprocessor">#ifdef _MANAGED</span>
-<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">#pragma managed(pop)</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">#elif __linux__ || __FreeBSD__</span>
-<a name="l00051"></a>00051 <span class="preprocessor"></span>
-<a name="l00052"></a>00052 <span class="preprocessor">#if __i386__</span>
-<a name="l00053"></a>00053 <span class="preprocessor"></span><span class="preprocessor">#include "machine/linux_ia32.h"</span>
-<a name="l00054"></a>00054 <span class="preprocessor">#elif __x86_64__</span>
-<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#include "machine/linux_intel64.h"</span>
-<a name="l00056"></a>00056 <span class="preprocessor">#elif __ia64__</span>
-<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">#include "machine/linux_ia64.h"</span>
-<a name="l00058"></a>00058 <span class="preprocessor">#endif</span>
-<a name="l00059"></a>00059 <span class="preprocessor"></span>
-<a name="l00060"></a>00060 <span class="preprocessor">#elif __APPLE__</span>
-<a name="l00061"></a>00061 <span class="preprocessor"></span>
-<a name="l00062"></a>00062 <span class="preprocessor">#if __i386__</span>
-<a name="l00063"></a>00063 <span class="preprocessor"></span><span class="preprocessor">#include "machine/linux_ia32.h"</span>
-<a name="l00064"></a>00064 <span class="preprocessor">#elif __x86_64__</span>
-<a name="l00065"></a>00065 <span class="preprocessor"></span><span class="preprocessor">#include "machine/linux_intel64.h"</span>
-<a name="l00066"></a>00066 <span class="preprocessor">#elif __POWERPC__</span>
-<a name="l00067"></a>00067 <span class="preprocessor"></span><span class="preprocessor">#include "machine/mac_ppc.h"</span>
-<a name="l00068"></a>00068 <span class="preprocessor">#endif</span>
-<a name="l00069"></a>00069 <span class="preprocessor"></span>
-<a name="l00070"></a>00070 <span class="preprocessor">#elif _AIX</span>
-<a name="l00071"></a>00071 <span class="preprocessor"></span>
-<a name="l00072"></a>00072 <span class="preprocessor">#include "machine/ibm_aix51.h"</span>
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074 <span class="preprocessor">#elif __sun || __SUNPRO_CC</span>
-<a name="l00075"></a>00075 <span class="preprocessor"></span>
-<a name="l00076"></a>00076 <span class="preprocessor">#define __asm__ asm </span>
-<a name="l00077"></a>00077 <span class="preprocessor"></span><span class="preprocessor">#define __volatile__ volatile</span>
-<a name="l00078"></a>00078 <span class="preprocessor"></span><span class="preprocessor">#if __i386  || __i386__</span>
-<a name="l00079"></a>00079 <span class="preprocessor"></span><span class="preprocessor">#include "machine/linux_ia32.h"</span>
-<a name="l00080"></a>00080 <span class="preprocessor">#elif __x86_64__</span>
-<a name="l00081"></a>00081 <span class="preprocessor"></span><span class="preprocessor">#include "machine/linux_intel64.h"</span>
-<a name="l00082"></a>00082 <span class="preprocessor">#elif __sparc</span>
-<a name="l00083"></a>00083 <span class="preprocessor"></span><span class="preprocessor">#include "machine/sunos_sparc.h"</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="preprocessor">#endif</span>
-<a name="l00087"></a>00087 <span class="preprocessor"></span>
-<a name="l00089"></a>00089 
-<a name="l00101"></a>00101 <span class="preprocessor">#if    !defined(__TBB_CompareAndSwap4) \</span>
-<a name="l00102"></a>00102 <span class="preprocessor">    || !defined(__TBB_CompareAndSwap8) \</span>
-<a name="l00103"></a>00103 <span class="preprocessor">    || !defined(__TBB_Yield)           \</span>
-<a name="l00104"></a>00104 <span class="preprocessor">    || !defined(__TBB_full_memory_fence)    \</span>
-<a name="l00105"></a>00105 <span class="preprocessor">    || !defined(__TBB_release_consistency_helper)</span>
-<a name="l00106"></a>00106 <span class="preprocessor"></span><span class="preprocessor">#error Minimal requirements for tbb_machine.h not satisfied </span>
-<a name="l00107"></a>00107 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00108"></a>00108 <span class="preprocessor"></span>
-<a name="l00109"></a>00109 <span class="preprocessor">#ifndef __TBB_load_with_acquire</span>
-<a name="l00111"></a>00111 <span class="preprocessor">    template<typename T></span>
-<a name="l00112"></a>00112 <span class="preprocessor"></span>    <span class="keyword">inline</span> T __TBB_load_with_acquire(<span class="keyword">const</span> <span class="keyword">volatile</span> T& location) {
-<a name="l00113"></a>00113         T temp = location;
-<a name="l00114"></a>00114         __TBB_release_consistency_helper();
-<a name="l00115"></a>00115         <span class="keywordflow">return</span> temp;
-<a name="l00116"></a>00116     }
-<a name="l00117"></a>00117 <span class="preprocessor">#endif</span>
-<a name="l00118"></a>00118 <span class="preprocessor"></span>
-<a name="l00119"></a>00119 <span class="preprocessor">#ifndef __TBB_store_with_release</span>
-<a name="l00121"></a>00121 <span class="preprocessor">    template<typename T, typename V></span>
-<a name="l00122"></a>00122 <span class="preprocessor"></span>    <span class="keyword">inline</span> <span class="keywordtype">void</span> __TBB_store_with_release(<span class="keyword">volatile</span> T& location, V value) {
-<a name="l00123"></a>00123         __TBB_release_consistency_helper();
-<a name="l00124"></a>00124         location = T(value); 
-<a name="l00125"></a>00125     }
-<a name="l00126"></a>00126 <span class="preprocessor">#endif</span>
-<a name="l00127"></a>00127 <span class="preprocessor"></span>
-<a name="l00128"></a>00128 <span class="preprocessor">#ifndef __TBB_Pause</span>
-<a name="l00129"></a>00129 <span class="preprocessor"></span>    <span class="keyword">inline</span> <span class="keywordtype">void</span> __TBB_Pause(int32_t) {
-<a name="l00130"></a>00130         __TBB_Yield();
-<a name="l00131"></a>00131     }
-<a name="l00132"></a>00132 <span class="preprocessor">#endif</span>
-<a name="l00133"></a>00133 <span class="preprocessor"></span>
-<a name="l00134"></a>00134 <span class="keyword">namespace </span>tbb {
-<a name="l00135"></a>00135 <span class="keyword">namespace </span>internal {
-<a name="l00136"></a>00136 
-<a name="l00138"></a>00138 
-<a name="l00139"></a><a class="code" href="a00144.html">00139</a> <span class="keyword">class </span><a class="code" href="a00144.html">atomic_backoff</a> {
-<a name="l00141"></a>00141 
-<a name="l00143"></a>00143     <span class="keyword">static</span> <span class="keyword">const</span> int32_t LOOPS_BEFORE_YIELD = 16;
-<a name="l00144"></a>00144     int32_t count;
-<a name="l00145"></a>00145 <span class="keyword">public</span>:
-<a name="l00146"></a>00146     <a class="code" href="a00144.html">atomic_backoff</a>() : count(1) {}
-<a name="l00147"></a>00147 
-<a name="l00149"></a><a class="code" href="a00144.html#a174ea93e3bd3d5cce82389c2f28d037">00149</a>     <span class="keywordtype">void</span> <a class="code" href="a00144.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>() {
-<a name="l00150"></a>00150         <span class="keywordflow">if</span>( count<=LOOPS_BEFORE_YIELD ) {
-<a name="l00151"></a>00151             __TBB_Pause(count);
-<a name="l00152"></a>00152             <span class="comment">// Pause twice as long the next time.</span>
-<a name="l00153"></a>00153             count*=2;
-<a name="l00154"></a>00154         } <span class="keywordflow">else</span> {
-<a name="l00155"></a>00155             <span class="comment">// Pause is so long that we might as well yield CPU to scheduler.</span>
-<a name="l00156"></a>00156             __TBB_Yield();
-<a name="l00157"></a>00157         }
-<a name="l00158"></a>00158     }
-<a name="l00159"></a>00159 
-<a name="l00160"></a>00160     <span class="comment">// pause for a few times and then return false immediately.</span>
-<a name="l00161"></a>00161     <span class="keywordtype">bool</span> bounded_pause() {
-<a name="l00162"></a>00162         <span class="keywordflow">if</span>( count<=LOOPS_BEFORE_YIELD ) {
-<a name="l00163"></a>00163             __TBB_Pause(count);
-<a name="l00164"></a>00164             <span class="comment">// Pause twice as long the next time.</span>
-<a name="l00165"></a>00165             count*=2;
-<a name="l00166"></a>00166             <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00167"></a>00167         } <span class="keywordflow">else</span> {
-<a name="l00168"></a>00168             <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00169"></a>00169         }
-<a name="l00170"></a>00170     }
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172     <span class="keywordtype">void</span> reset() {
-<a name="l00173"></a>00173         count = 1;
-<a name="l00174"></a>00174     }
-<a name="l00175"></a>00175 };
-<a name="l00176"></a>00176 
-<a name="l00178"></a>00178 
-<a name="l00179"></a>00179 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00180"></a>00180 <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="l00181"></a>00181     atomic_backoff backoff;
-<a name="l00182"></a>00182     <span class="keywordflow">while</span>( location==value ) backoff.pause();
-<a name="l00183"></a>00183 }
-<a name="l00184"></a>00184 
-<a name="l00186"></a>00186 
-<a name="l00187"></a>00187 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00188"></a>00188 <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="l00189"></a>00189     atomic_backoff backoff;
-<a name="l00190"></a>00190     <span class="keywordflow">while</span>( location!=value ) backoff.pause();
-<a name="l00191"></a>00191 }
-<a name="l00192"></a>00192 
-<a name="l00193"></a>00193 <span class="comment">// T should be unsigned, otherwise sign propagation will break correctness of bit manipulations.</span>
-<a name="l00194"></a>00194 <span class="comment">// S should be either 1 or 2, for the mask calculation to work correctly.</span>
-<a name="l00195"></a>00195 <span class="comment">// Together, these rules limit applicability of Masked CAS to unsigned char and unsigned short.</span>
-<a name="l00196"></a>00196 <span class="keyword">template</span><size_t S, <span class="keyword">typename</span> T>
-<a name="l00197"></a>00197 <span class="keyword">inline</span> T __TBB_MaskedCompareAndSwap (<span class="keyword">volatile</span> T *ptr, T value, T comparand ) {
-<a name="l00198"></a>00198     <span class="keyword">volatile</span> uint32_t * base = (uint32_t*)( (uintptr_t)ptr & ~(uintptr_t)0x3 );
-<a name="l00199"></a>00199 <span class="preprocessor">#if __TBB_BIG_ENDIAN</span>
-<a name="l00200"></a>00200 <span class="preprocessor"></span>    <span class="keyword">const</span> uint8_t bitoffset = uint8_t( 8*( 4-S - (uintptr_t(ptr) & 0x3) ) );
-<a name="l00201"></a>00201 <span class="preprocessor">#else</span>
-<a name="l00202"></a>00202 <span class="preprocessor"></span>    <span class="keyword">const</span> uint8_t bitoffset = uint8_t( 8*((uintptr_t)ptr & 0x3) );
-<a name="l00203"></a>00203 <span class="preprocessor">#endif</span>
-<a name="l00204"></a>00204 <span class="preprocessor"></span>    <span class="keyword">const</span> uint32_t mask = ( (1<<(S*8)) - 1 )<<bitoffset;
-<a name="l00205"></a>00205     atomic_backoff b;
-<a name="l00206"></a>00206     uint32_t result;
-<a name="l00207"></a>00207     <span class="keywordflow">for</span>(;;) {
-<a name="l00208"></a>00208         result = *base; <span class="comment">// reload the base value which might change during the pause</span>
-<a name="l00209"></a>00209         uint32_t old_value = ( result & ~mask ) | ( comparand << bitoffset );
-<a name="l00210"></a>00210         uint32_t new_value = ( result & ~mask ) | ( value << bitoffset );
-<a name="l00211"></a>00211         <span class="comment">// __TBB_CompareAndSwap4 presumed to have full fence. </span>
-<a name="l00212"></a>00212         result = __TBB_CompareAndSwap4( base, new_value, old_value );
-<a name="l00213"></a>00213         <span class="keywordflow">if</span>(  result==old_value               <span class="comment">// CAS succeeded</span>
-<a name="l00214"></a>00214           || ((result^old_value)&mask)!=0 )  <span class="comment">// CAS failed and the bits of interest have changed</span>
-<a name="l00215"></a>00215             <span class="keywordflow">break</span>;
-<a name="l00216"></a>00216         <span class="keywordflow">else</span>                                 <span class="comment">// CAS failed but the bits of interest left unchanged</span>
-<a name="l00217"></a>00217             b.pause();
-<a name="l00218"></a>00218     }
-<a name="l00219"></a>00219     <span class="keywordflow">return</span> T((result & mask) >> bitoffset);
-<a name="l00220"></a>00220 }
-<a name="l00221"></a>00221 
-<a name="l00222"></a>00222 <span class="keyword">template</span><size_t S, <span class="keyword">typename</span> T>
-<a name="l00223"></a>00223 <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="l00224"></a>00224     <span class="keywordflow">return</span> __TBB_CompareAndSwapW((T *)ptr,value,comparand);
-<a name="l00225"></a>00225 }
-<a name="l00226"></a>00226 
-<a name="l00227"></a>00227 <span class="keyword">template</span><>
-<a name="l00228"></a>00228 <span class="keyword">inline</span> 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="l00229"></a>00229 #ifdef __TBB_CompareAndSwap1
-<a name="l00230"></a>00230     <span class="keywordflow">return</span> __TBB_CompareAndSwap1(ptr,value,comparand);
-<a name="l00231"></a>00231 <span class="preprocessor">#else</span>
-<a name="l00232"></a>00232 <span class="preprocessor"></span>    <span class="keywordflow">return</span> __TBB_MaskedCompareAndSwap<1,uint8_t>((<span class="keyword">volatile</span> uint8_t *)ptr,value,comparand);
-<a name="l00233"></a>00233 <span class="preprocessor">#endif</span>
-<a name="l00234"></a>00234 <span class="preprocessor"></span>}
-<a name="l00235"></a>00235 
-<a name="l00236"></a>00236 <span class="keyword">template</span><>
-<a name="l00237"></a>00237 <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="l00238"></a>00238 #ifdef __TBB_CompareAndSwap2
-<a name="l00239"></a>00239     <span class="keywordflow">return</span> __TBB_CompareAndSwap2(ptr,value,comparand);
-<a name="l00240"></a>00240 <span class="preprocessor">#else</span>
-<a name="l00241"></a>00241 <span class="preprocessor"></span>    <span class="keywordflow">return</span> __TBB_MaskedCompareAndSwap<2,uint16_t>((<span class="keyword">volatile</span> uint16_t *)ptr,value,comparand);
-<a name="l00242"></a>00242 <span class="preprocessor">#endif</span>
-<a name="l00243"></a>00243 <span class="preprocessor"></span>}
-<a name="l00244"></a>00244 
-<a name="l00245"></a>00245 <span class="keyword">template</span><>
-<a name="l00246"></a>00246 <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="l00247"></a>00247     <span class="keywordflow">return</span> __TBB_CompareAndSwap4(ptr,value,comparand);
-<a name="l00248"></a>00248 }
-<a name="l00249"></a>00249 
-<a name="l00250"></a>00250 <span class="keyword">template</span><>
-<a name="l00251"></a>00251 <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="l00252"></a>00252     <span class="keywordflow">return</span> __TBB_CompareAndSwap8(ptr,value,comparand);
-<a name="l00253"></a>00253 }
-<a name="l00254"></a>00254 
-<a name="l00255"></a>00255 <span class="keyword">template</span><size_t S, <span class="keyword">typename</span> T>
-<a name="l00256"></a>00256 <span class="keyword">inline</span> T __TBB_FetchAndAddGeneric (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, T addend) {
-<a name="l00257"></a>00257     atomic_backoff b;
-<a name="l00258"></a>00258     T result;
-<a name="l00259"></a>00259     <span class="keywordflow">for</span>(;;) {
-<a name="l00260"></a>00260         result = *reinterpret_cast<volatile T *>(ptr);
-<a name="l00261"></a>00261         <span class="comment">// __TBB_CompareAndSwapGeneric presumed to have full fence. </span>
-<a name="l00262"></a>00262         <span class="keywordflow">if</span>( __TBB_CompareAndSwapGeneric<S,T> ( ptr, result+addend, result )==result ) 
-<a name="l00263"></a>00263             <span class="keywordflow">break</span>;
-<a name="l00264"></a>00264         b.pause();
-<a name="l00265"></a>00265     }
-<a name="l00266"></a>00266     <span class="keywordflow">return</span> result;
-<a name="l00267"></a>00267 }
-<a name="l00268"></a>00268 
-<a name="l00269"></a>00269 <span class="keyword">template</span><size_t S, <span class="keyword">typename</span> T>
-<a name="l00270"></a>00270 <span class="keyword">inline</span> T __TBB_FetchAndStoreGeneric (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, T value) {
-<a name="l00271"></a>00271     atomic_backoff b;
-<a name="l00272"></a>00272     T result;
-<a name="l00273"></a>00273     <span class="keywordflow">for</span>(;;) {
-<a name="l00274"></a>00274         result = *reinterpret_cast<volatile T *>(ptr);
-<a name="l00275"></a>00275         <span class="comment">// __TBB_CompareAndSwapGeneric presumed to have full fence.</span>
-<a name="l00276"></a>00276         <span class="keywordflow">if</span>( __TBB_CompareAndSwapGeneric<S,T> ( ptr, value, result )==result ) 
-<a name="l00277"></a>00277             <span class="keywordflow">break</span>;
-<a name="l00278"></a>00278         b.pause();
-<a name="l00279"></a>00279     }
-<a name="l00280"></a>00280     <span class="keywordflow">return</span> result;
-<a name="l00281"></a>00281 }
-<a name="l00282"></a>00282 
-<a name="l00283"></a>00283 <span class="comment">// Macro __TBB_TypeWithAlignmentAtLeastAsStrict(T) should be a type with alignment at least as </span>
-<a name="l00284"></a>00284 <span class="comment">// strict as type T.  Type type should have a trivial default constructor and destructor, so that</span>
-<a name="l00285"></a>00285 <span class="comment">// arrays of that type can be declared without initializers.  </span>
-<a name="l00286"></a>00286 <span class="comment">// It is correct (but perhaps a waste of space) if __TBB_TypeWithAlignmentAtLeastAsStrict(T) expands</span>
-<a name="l00287"></a>00287 <span class="comment">// to a type bigger than T.</span>
-<a name="l00288"></a>00288 <span class="comment">// The default definition here works on machines where integers are naturally aligned and the</span>
-<a name="l00289"></a>00289 <span class="comment">// strictest alignment is 16.</span>
-<a name="l00290"></a>00290 <span class="preprocessor">#ifndef __TBB_TypeWithAlignmentAtLeastAsStrict</span>
-<a name="l00291"></a>00291 <span class="preprocessor"></span>
-<a name="l00292"></a>00292 <span class="preprocessor">#if __GNUC__ || __SUNPRO_CC</span>
-<a name="l00293"></a>00293 <span class="preprocessor"></span><span class="keyword">struct </span>__TBB_machine_type_with_strictest_alignment {
-<a name="l00294"></a>00294     <span class="keywordtype">int</span> member[4];
-<a name="l00295"></a>00295 } __attribute__((aligned(16)));
-<a name="l00296"></a>00296 <span class="preprocessor">#elif _MSC_VER</span>
-<a name="l00297"></a>00297 <span class="preprocessor"></span>__declspec(align(16)) struct __TBB_machine_type_with_strictest_alignment {
-<a name="l00298"></a>00298     <span class="keywordtype">int</span> member[4];
-<a name="l00299"></a>00299 };
-<a name="l00300"></a>00300 <span class="preprocessor">#else</span>
-<a name="l00301"></a>00301 <span class="preprocessor"></span><span class="preprocessor">#error Must define __TBB_TypeWithAlignmentAtLeastAsStrict(T) or __TBB_machine_type_with_strictest_alignment</span>
-<a name="l00302"></a>00302 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00303"></a>00303 <span class="preprocessor"></span>
-<a name="l00304"></a>00304 <span class="keyword">template</span><size_t N> <span class="keyword">struct </span>type_with_alignment {__TBB_machine_type_with_strictest_alignment member;};
-<a name="l00305"></a>00305 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<1> { <span class="keywordtype">char</span> member; };
-<a name="l00306"></a>00306 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<2> { uint16_t member; };
-<a name="l00307"></a>00307 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<4> { uint32_t member; };
-<a name="l00308"></a>00308 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<8> { uint64_t member; };
-<a name="l00309"></a>00309 
-<a name="l00310"></a>00310 <span class="preprocessor">#if _MSC_VER||defined(__GNUC__)&&__GNUC__==3 && __GNUC_MINOR__<=2  </span>
-<a name="l00312"></a>00312 <span class="preprocessor"></span>
-<a name="l00314"></a>00314 <span class="preprocessor">template<size_t Size, typename T> </span>
-<a name="l00315"></a><a class="code" href="a00212.html">00315</a> <span class="preprocessor"></span><span class="keyword">struct </span><a class="code" href="a00212.html">work_around_alignment_bug</a> {
-<a name="l00316"></a>00316 <span class="preprocessor">#if _MSC_VER</span>
-<a name="l00317"></a>00317 <span class="preprocessor"></span>    <span class="keyword">static</span> <span class="keyword">const</span> size_t alignment = __alignof(T);
-<a name="l00318"></a>00318 <span class="preprocessor">#else</span>
-<a name="l00319"></a>00319 <span class="preprocessor"></span>    <span class="keyword">static</span> <span class="keyword">const</span> size_t alignment = __alignof__(T);
-<a name="l00320"></a>00320 <span class="preprocessor">#endif</span>
-<a name="l00321"></a>00321 <span class="preprocessor"></span>};
-<a name="l00322"></a>00322 <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="l00323"></a>00323 <span class="preprocessor"></span><span class="preprocessor">#elif __GNUC__ || __SUNPRO_CC</span>
-<a name="l00324"></a>00324 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_TypeWithAlignmentAtLeastAsStrict(T) tbb::internal::type_with_alignment<__alignof__(T)></span>
-<a name="l00325"></a>00325 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00326"></a>00326 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_TypeWithAlignmentAtLeastAsStrict(T) __TBB_machine_type_with_strictest_alignment</span>
-<a name="l00327"></a>00327 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00328"></a>00328 <span class="preprocessor"></span><span class="preprocessor">#endif  </span><span class="comment">/* ____TBB_TypeWithAlignmentAtLeastAsStrict */</span>
-<a name="l00329"></a>00329 
-<a name="l00330"></a>00330 <span class="comment">// Template class here is to avoid instantiation of the static data for modules that don't use it</span>
-<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>reverse {
-<a name="l00333"></a>00333     <span class="keyword">static</span> <span class="keyword">const</span> T byte_table[256];
-<a name="l00334"></a>00334 };
-<a name="l00335"></a>00335 <span class="comment">// An efficient implementation of the reverse function utilizes a 2^8 lookup table holding the bit-reversed</span>
-<a name="l00336"></a>00336 <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="l00337"></a>00337 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00338"></a>00338 <span class="keyword">const</span> T reverse<T>::byte_table[256] = {
-<a name="l00339"></a>00339     0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0,
-<a name="l00340"></a>00340     0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8,
-<a name="l00341"></a>00341     0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4,
-<a name="l00342"></a>00342     0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC,
-<a name="l00343"></a>00343     0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2,
-<a name="l00344"></a>00344     0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA,
-<a name="l00345"></a>00345     0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6,
-<a name="l00346"></a>00346     0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE,
-<a name="l00347"></a>00347     0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1, 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1,
-<a name="l00348"></a>00348     0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9,
-<a name="l00349"></a>00349     0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5, 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5,
-<a name="l00350"></a>00350     0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED, 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD,
-<a name="l00351"></a>00351     0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3, 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3,
-<a name="l00352"></a>00352     0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB,
-<a name="l00353"></a>00353     0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7,
-<a name="l00354"></a>00354     0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF
-<a name="l00355"></a>00355 };
-<a name="l00356"></a>00356 
-<a name="l00357"></a>00357 } <span class="comment">// namespace internal</span>
-<a name="l00358"></a>00358 } <span class="comment">// namespace tbb</span>
-<a name="l00359"></a>00359 
-<a name="l00360"></a>00360 <span class="preprocessor">#ifndef __TBB_CompareAndSwap1</span>
-<a name="l00361"></a>00361 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap1 tbb::internal::__TBB_CompareAndSwapGeneric<1,uint8_t></span>
-<a name="l00362"></a>00362 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00363"></a>00363 <span class="preprocessor"></span>
-<a name="l00364"></a>00364 <span class="preprocessor">#ifndef __TBB_CompareAndSwap2 </span>
-<a name="l00365"></a>00365 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap2 tbb::internal::__TBB_CompareAndSwapGeneric<2,uint16_t></span>
-<a name="l00366"></a>00366 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00367"></a>00367 <span class="preprocessor"></span>
-<a name="l00368"></a>00368 <span class="preprocessor">#ifndef __TBB_CompareAndSwapW</span>
-<a name="l00369"></a>00369 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwapW tbb::internal::__TBB_CompareAndSwapGeneric<sizeof(ptrdiff_t),ptrdiff_t></span>
-<a name="l00370"></a>00370 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00371"></a>00371 <span class="preprocessor"></span>
-<a name="l00372"></a>00372 <span class="preprocessor">#ifndef __TBB_FetchAndAdd1</span>
-<a name="l00373"></a>00373 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd1 tbb::internal::__TBB_FetchAndAddGeneric<1,uint8_t></span>
-<a name="l00374"></a>00374 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00375"></a>00375 <span class="preprocessor"></span>
-<a name="l00376"></a>00376 <span class="preprocessor">#ifndef __TBB_FetchAndAdd2</span>
-<a name="l00377"></a>00377 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd2 tbb::internal::__TBB_FetchAndAddGeneric<2,uint16_t></span>
-<a name="l00378"></a>00378 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00379"></a>00379 <span class="preprocessor"></span>
-<a name="l00380"></a>00380 <span class="preprocessor">#ifndef __TBB_FetchAndAdd4</span>
-<a name="l00381"></a>00381 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd4 tbb::internal::__TBB_FetchAndAddGeneric<4,uint32_t></span>
-<a name="l00382"></a>00382 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00383"></a>00383 <span class="preprocessor"></span>
-<a name="l00384"></a>00384 <span class="preprocessor">#ifndef __TBB_FetchAndAdd8</span>
-<a name="l00385"></a>00385 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd8 tbb::internal::__TBB_FetchAndAddGeneric<8,uint64_t></span>
-<a name="l00386"></a>00386 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00387"></a>00387 <span class="preprocessor"></span>
-<a name="l00388"></a>00388 <span class="preprocessor">#ifndef __TBB_FetchAndAddW</span>
-<a name="l00389"></a>00389 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAddW tbb::internal::__TBB_FetchAndAddGeneric<sizeof(ptrdiff_t),ptrdiff_t></span>
-<a name="l00390"></a>00390 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00391"></a>00391 <span class="preprocessor"></span>
-<a name="l00392"></a>00392 <span class="preprocessor">#ifndef __TBB_FetchAndStore1</span>
-<a name="l00393"></a>00393 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore1 tbb::internal::__TBB_FetchAndStoreGeneric<1,uint8_t></span>
-<a name="l00394"></a>00394 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00395"></a>00395 <span class="preprocessor"></span>
-<a name="l00396"></a>00396 <span class="preprocessor">#ifndef __TBB_FetchAndStore2</span>
-<a name="l00397"></a>00397 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore2 tbb::internal::__TBB_FetchAndStoreGeneric<2,uint16_t></span>
-<a name="l00398"></a>00398 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00399"></a>00399 <span class="preprocessor"></span>
-<a name="l00400"></a>00400 <span class="preprocessor">#ifndef __TBB_FetchAndStore4</span>
-<a name="l00401"></a>00401 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore4 tbb::internal::__TBB_FetchAndStoreGeneric<4,uint32_t></span>
-<a name="l00402"></a>00402 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00403"></a>00403 <span class="preprocessor"></span>
-<a name="l00404"></a>00404 <span class="preprocessor">#ifndef __TBB_FetchAndStore8</span>
-<a name="l00405"></a>00405 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore8 tbb::internal::__TBB_FetchAndStoreGeneric<8,uint64_t></span>
-<a name="l00406"></a>00406 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00407"></a>00407 <span class="preprocessor"></span>
-<a name="l00408"></a>00408 <span class="preprocessor">#ifndef __TBB_FetchAndStoreW</span>
-<a name="l00409"></a>00409 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStoreW tbb::internal::__TBB_FetchAndStoreGeneric<sizeof(ptrdiff_t),ptrdiff_t></span>
-<a name="l00410"></a>00410 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00411"></a>00411 <span class="preprocessor"></span>
-<a name="l00412"></a>00412 <span class="preprocessor">#if __TBB_DECL_FENCED_ATOMICS</span>
-<a name="l00413"></a>00413 <span class="preprocessor"></span>
-<a name="l00414"></a>00414 <span class="preprocessor">#ifndef __TBB_CompareAndSwap1__TBB_full_fence</span>
-<a name="l00415"></a>00415 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap1__TBB_full_fence __TBB_CompareAndSwap1</span>
-<a name="l00416"></a>00416 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
-<a name="l00417"></a>00417 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap1acquire</span>
-<a name="l00418"></a>00418 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap1acquire __TBB_CompareAndSwap1__TBB_full_fence</span>
-<a name="l00419"></a>00419 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
-<a name="l00420"></a>00420 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap1release</span>
-<a name="l00421"></a>00421 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap1release __TBB_CompareAndSwap1__TBB_full_fence</span>
-<a name="l00422"></a>00422 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
-<a name="l00423"></a>00423 <span class="preprocessor"></span>
-<a name="l00424"></a>00424 <span class="preprocessor">#ifndef __TBB_CompareAndSwap2__TBB_full_fence</span>
-<a name="l00425"></a>00425 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap2__TBB_full_fence __TBB_CompareAndSwap2</span>
-<a name="l00426"></a>00426 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00427"></a>00427 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap2acquire</span>
-<a name="l00428"></a>00428 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap2acquire __TBB_CompareAndSwap2__TBB_full_fence</span>
-<a name="l00429"></a>00429 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00430"></a>00430 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap2release</span>
-<a name="l00431"></a>00431 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap2release __TBB_CompareAndSwap2__TBB_full_fence</span>
-<a name="l00432"></a>00432 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00433"></a>00433 <span class="preprocessor"></span>
-<a name="l00434"></a>00434 <span class="preprocessor">#ifndef __TBB_CompareAndSwap4__TBB_full_fence</span>
-<a name="l00435"></a>00435 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap4__TBB_full_fence __TBB_CompareAndSwap4</span>
-<a name="l00436"></a>00436 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
-<a name="l00437"></a>00437 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap4acquire</span>
-<a name="l00438"></a>00438 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap4acquire __TBB_CompareAndSwap4__TBB_full_fence</span>
-<a name="l00439"></a>00439 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
-<a name="l00440"></a>00440 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap4release</span>
-<a name="l00441"></a>00441 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap4release __TBB_CompareAndSwap4__TBB_full_fence</span>
-<a name="l00442"></a>00442 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
-<a name="l00443"></a>00443 <span class="preprocessor"></span>
-<a name="l00444"></a>00444 <span class="preprocessor">#ifndef __TBB_CompareAndSwap8__TBB_full_fence</span>
-<a name="l00445"></a>00445 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap8__TBB_full_fence __TBB_CompareAndSwap8</span>
-<a name="l00446"></a>00446 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00447"></a>00447 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap8acquire</span>
-<a name="l00448"></a>00448 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap8acquire __TBB_CompareAndSwap8__TBB_full_fence</span>
-<a name="l00449"></a>00449 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00450"></a>00450 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap8release</span>
-<a name="l00451"></a>00451 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap8release __TBB_CompareAndSwap8__TBB_full_fence</span>
-<a name="l00452"></a>00452 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00453"></a>00453 <span class="preprocessor"></span>
-<a name="l00454"></a>00454 <span class="preprocessor">#ifndef __TBB_FetchAndAdd1__TBB_full_fence</span>
-<a name="l00455"></a>00455 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd1__TBB_full_fence __TBB_FetchAndAdd1</span>
-<a name="l00456"></a>00456 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00457"></a>00457 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd1acquire</span>
-<a name="l00458"></a>00458 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd1acquire __TBB_FetchAndAdd1__TBB_full_fence</span>
-<a name="l00459"></a>00459 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00460"></a>00460 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd1release</span>
-<a name="l00461"></a>00461 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd1release __TBB_FetchAndAdd1__TBB_full_fence</span>
-<a name="l00462"></a>00462 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00463"></a>00463 <span class="preprocessor"></span>
-<a name="l00464"></a>00464 <span class="preprocessor">#ifndef __TBB_FetchAndAdd2__TBB_full_fence</span>
-<a name="l00465"></a>00465 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd2__TBB_full_fence __TBB_FetchAndAdd2</span>
-<a name="l00466"></a>00466 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00467"></a>00467 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd2acquire</span>
-<a name="l00468"></a>00468 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd2acquire __TBB_FetchAndAdd2__TBB_full_fence</span>
-<a name="l00469"></a>00469 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00470"></a>00470 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd2release</span>
-<a name="l00471"></a>00471 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd2release __TBB_FetchAndAdd2__TBB_full_fence</span>
-<a name="l00472"></a>00472 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00473"></a>00473 <span class="preprocessor"></span>
-<a name="l00474"></a>00474 <span class="preprocessor">#ifndef __TBB_FetchAndAdd4__TBB_full_fence</span>
-<a name="l00475"></a>00475 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd4__TBB_full_fence __TBB_FetchAndAdd4</span>
-<a name="l00476"></a>00476 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00477"></a>00477 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd4acquire</span>
-<a name="l00478"></a>00478 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd4acquire __TBB_FetchAndAdd4__TBB_full_fence</span>
-<a name="l00479"></a>00479 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00480"></a>00480 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd4release</span>
-<a name="l00481"></a>00481 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd4release __TBB_FetchAndAdd4__TBB_full_fence</span>
-<a name="l00482"></a>00482 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00483"></a>00483 <span class="preprocessor"></span>
-<a name="l00484"></a>00484 <span class="preprocessor">#ifndef __TBB_FetchAndAdd8__TBB_full_fence</span>
-<a name="l00485"></a>00485 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd8__TBB_full_fence __TBB_FetchAndAdd8</span>
-<a name="l00486"></a>00486 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00487"></a>00487 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd8acquire</span>
-<a name="l00488"></a>00488 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd8acquire __TBB_FetchAndAdd8__TBB_full_fence</span>
-<a name="l00489"></a>00489 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00490"></a>00490 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd8release</span>
-<a name="l00491"></a>00491 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd8release __TBB_FetchAndAdd8__TBB_full_fence</span>
-<a name="l00492"></a>00492 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00493"></a>00493 <span class="preprocessor"></span>
-<a name="l00494"></a>00494 <span class="preprocessor">#ifndef __TBB_FetchAndStore1__TBB_full_fence</span>
-<a name="l00495"></a>00495 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore1__TBB_full_fence __TBB_FetchAndStore1</span>
-<a name="l00496"></a>00496 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00497"></a>00497 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore1acquire</span>
-<a name="l00498"></a>00498 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore1acquire __TBB_FetchAndStore1__TBB_full_fence</span>
-<a name="l00499"></a>00499 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00500"></a>00500 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore1release</span>
-<a name="l00501"></a>00501 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore1release __TBB_FetchAndStore1__TBB_full_fence</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">#ifndef __TBB_FetchAndStore2__TBB_full_fence</span>
-<a name="l00505"></a>00505 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore2__TBB_full_fence __TBB_FetchAndStore2</span>
-<a name="l00506"></a>00506 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00507"></a>00507 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore2acquire</span>
-<a name="l00508"></a>00508 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore2acquire __TBB_FetchAndStore2__TBB_full_fence</span>
-<a name="l00509"></a>00509 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00510"></a>00510 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore2release</span>
-<a name="l00511"></a>00511 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore2release __TBB_FetchAndStore2__TBB_full_fence</span>
-<a name="l00512"></a>00512 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00513"></a>00513 <span class="preprocessor"></span>
-<a name="l00514"></a>00514 <span class="preprocessor">#ifndef __TBB_FetchAndStore4__TBB_full_fence</span>
-<a name="l00515"></a>00515 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore4__TBB_full_fence __TBB_FetchAndStore4</span>
-<a name="l00516"></a>00516 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00517"></a>00517 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore4acquire</span>
-<a name="l00518"></a>00518 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore4acquire __TBB_FetchAndStore4__TBB_full_fence</span>
-<a name="l00519"></a>00519 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00520"></a>00520 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore4release</span>
-<a name="l00521"></a>00521 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore4release __TBB_FetchAndStore4__TBB_full_fence</span>
-<a name="l00522"></a>00522 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00523"></a>00523 <span class="preprocessor"></span>
-<a name="l00524"></a>00524 <span class="preprocessor">#ifndef __TBB_FetchAndStore8__TBB_full_fence</span>
-<a name="l00525"></a>00525 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore8__TBB_full_fence __TBB_FetchAndStore8</span>
-<a name="l00526"></a>00526 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00527"></a>00527 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore8acquire</span>
-<a name="l00528"></a>00528 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore8acquire __TBB_FetchAndStore8__TBB_full_fence</span>
-<a name="l00529"></a>00529 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00530"></a>00530 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore8release</span>
-<a name="l00531"></a>00531 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore8release __TBB_FetchAndStore8__TBB_full_fence</span>
-<a name="l00532"></a>00532 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00533"></a>00533 <span class="preprocessor"></span>
-<a name="l00534"></a>00534 <span class="preprocessor">#endif // __TBB_DECL_FENCED_ATOMICS</span>
-<a name="l00535"></a>00535 <span class="preprocessor"></span>
-<a name="l00536"></a>00536 <span class="comment">// Special atomic functions</span>
-<a name="l00537"></a>00537 <span class="preprocessor">#ifndef __TBB_FetchAndAddWrelease</span>
-<a name="l00538"></a>00538 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAddWrelease __TBB_FetchAndAddW</span>
-<a name="l00539"></a>00539 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00540"></a>00540 <span class="preprocessor"></span>
-<a name="l00541"></a>00541 <span class="preprocessor">#ifndef __TBB_FetchAndIncrementWacquire</span>
-<a name="l00542"></a>00542 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndIncrementWacquire(P) __TBB_FetchAndAddW(P,1)</span>
-<a name="l00543"></a>00543 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00544"></a>00544 <span class="preprocessor"></span>
-<a name="l00545"></a>00545 <span class="preprocessor">#ifndef __TBB_FetchAndDecrementWrelease</span>
-<a name="l00546"></a>00546 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndDecrementWrelease(P) __TBB_FetchAndAddW(P,(-1))</span>
-<a name="l00547"></a>00547 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00548"></a>00548 <span class="preprocessor"></span>
-<a name="l00549"></a>00549 <span class="preprocessor">#if __TBB_WORDSIZE==4</span>
-<a name="l00550"></a>00550 <span class="preprocessor"></span><span class="comment">// On 32-bit platforms, "atomic.h" requires definition of __TBB_Store8 and __TBB_Load8</span>
-<a name="l00551"></a>00551 <span class="preprocessor">#ifndef __TBB_Store8</span>
-<a name="l00552"></a>00552 <span class="preprocessor"></span><span class="keyword">inline</span> <span class="keywordtype">void</span> __TBB_Store8 (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, int64_t value) {
-<a name="l00553"></a>00553     <a class="code" href="a00144.html">tbb::internal::atomic_backoff</a> b;
-<a name="l00554"></a>00554     <span class="keywordflow">for</span>(;;) {
-<a name="l00555"></a>00555         int64_t result = *(int64_t *)ptr;
-<a name="l00556"></a>00556         <span class="keywordflow">if</span>( __TBB_CompareAndSwap8(ptr,value,result)==result ) <span class="keywordflow">break</span>;
-<a name="l00557"></a>00557         b.<a class="code" href="a00144.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>();
-<a name="l00558"></a>00558     }
-<a name="l00559"></a>00559 }
-<a name="l00560"></a>00560 <span class="preprocessor">#endif</span>
-<a name="l00561"></a>00561 <span class="preprocessor"></span>
-<a name="l00562"></a>00562 <span class="preprocessor">#ifndef __TBB_Load8</span>
-<a name="l00563"></a>00563 <span class="preprocessor"></span><span class="keyword">inline</span> int64_t __TBB_Load8 (<span class="keyword">const</span> <span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr) {
-<a name="l00564"></a>00564     int64_t result = *(int64_t *)ptr;
-<a name="l00565"></a>00565     result = __TBB_CompareAndSwap8((<span class="keyword">volatile</span> <span class="keywordtype">void</span> *)ptr,result,result);
-<a name="l00566"></a>00566     <span class="keywordflow">return</span> result;
-<a name="l00567"></a>00567 }
-<a name="l00568"></a>00568 <span class="preprocessor">#endif</span>
-<a name="l00569"></a>00569 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_WORDSIZE==4 */</span>
-<a name="l00570"></a>00570 
-<a name="l00571"></a>00571 <span class="preprocessor">#ifndef __TBB_Log2</span>
-<a name="l00572"></a>00572 <span class="preprocessor"></span><span class="keyword">inline</span> intptr_t __TBB_Log2( uintptr_t x ) {
-<a name="l00573"></a>00573     <span class="keywordflow">if</span>( x==0 ) <span class="keywordflow">return</span> -1;
-<a name="l00574"></a>00574     intptr_t result = 0;
-<a name="l00575"></a>00575     uintptr_t tmp;
-<a name="l00576"></a>00576 <span class="preprocessor">#if __TBB_WORDSIZE>=8</span>
-<a name="l00577"></a>00577 <span class="preprocessor"></span>    <span class="keywordflow">if</span>( (tmp = x>>32) ) { x=tmp; result += 32; }
-<a name="l00578"></a>00578 <span class="preprocessor">#endif</span>
-<a name="l00579"></a>00579 <span class="preprocessor"></span>    <span class="keywordflow">if</span>( (tmp = x>>16) ) { x=tmp; result += 16; }
-<a name="l00580"></a>00580     <span class="keywordflow">if</span>( (tmp = x>>8) )  { x=tmp; result += 8; }
-<a name="l00581"></a>00581     <span class="keywordflow">if</span>( (tmp = x>>4) )  { x=tmp; result += 4; }
-<a name="l00582"></a>00582     <span class="keywordflow">if</span>( (tmp = x>>2) )  { x=tmp; result += 2; }
-<a name="l00583"></a>00583     <span class="keywordflow">return</span> (x&2)? result+1: result;
-<a name="l00584"></a>00584 }
-<a name="l00585"></a>00585 <span class="preprocessor">#endif</span>
-<a name="l00586"></a>00586 <span class="preprocessor"></span>
-<a name="l00587"></a>00587 <span class="preprocessor">#ifndef __TBB_AtomicOR</span>
-<a name="l00588"></a>00588 <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="l00589"></a>00589     <a class="code" href="a00144.html">tbb::internal::atomic_backoff</a> b;
-<a name="l00590"></a>00590     <span class="keywordflow">for</span>(;;) {
-<a name="l00591"></a>00591         uintptr_t tmp = *(<span class="keyword">volatile</span> uintptr_t *)operand;
-<a name="l00592"></a>00592         uintptr_t result = __TBB_CompareAndSwapW(operand, tmp|addend, tmp);
-<a name="l00593"></a>00593         <span class="keywordflow">if</span>( result==tmp ) <span class="keywordflow">break</span>;
-<a name="l00594"></a>00594         b.<a class="code" href="a00144.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>();
-<a name="l00595"></a>00595     }
-<a name="l00596"></a>00596 }
-<a name="l00597"></a>00597 <span class="preprocessor">#endif</span>
-<a name="l00598"></a>00598 <span class="preprocessor"></span>
-<a name="l00599"></a>00599 <span class="preprocessor">#ifndef __TBB_AtomicAND</span>
-<a name="l00600"></a>00600 <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="l00601"></a>00601     <a class="code" href="a00144.html">tbb::internal::atomic_backoff</a> b;
-<a name="l00602"></a>00602     <span class="keywordflow">for</span>(;;) {
-<a name="l00603"></a>00603         uintptr_t tmp = *(<span class="keyword">volatile</span> uintptr_t *)operand;
-<a name="l00604"></a>00604         uintptr_t result = __TBB_CompareAndSwapW(operand, tmp&addend, tmp);
-<a name="l00605"></a>00605         <span class="keywordflow">if</span>( result==tmp ) <span class="keywordflow">break</span>;
-<a name="l00606"></a>00606         b.<a class="code" href="a00144.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>();
-<a name="l00607"></a>00607     }
-<a name="l00608"></a>00608 }
-<a name="l00609"></a>00609 <span class="preprocessor">#endif</span>
-<a name="l00610"></a>00610 <span class="preprocessor"></span>
-<a name="l00611"></a>00611 <span class="preprocessor">#ifndef __TBB_TryLockByte</span>
-<a name="l00612"></a>00612 <span class="preprocessor"></span><span class="keyword">inline</span> <span class="keywordtype">bool</span> __TBB_TryLockByte( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> &flag ) {
-<a name="l00613"></a>00613     <span class="keywordflow">return</span> __TBB_CompareAndSwap1(&flag,1,0)==0;
-<a name="l00614"></a>00614 }
-<a name="l00615"></a>00615 <span class="preprocessor">#endif</span>
-<a name="l00616"></a>00616 <span class="preprocessor"></span>
-<a name="l00617"></a>00617 <span class="preprocessor">#ifndef __TBB_LockByte</span>
-<a name="l00618"></a>00618 <span class="preprocessor"></span><span class="keyword">inline</span> uintptr_t __TBB_LockByte( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>& flag ) {
-<a name="l00619"></a>00619     <span class="keywordflow">if</span> ( !__TBB_TryLockByte(flag) ) {
-<a name="l00620"></a>00620         <a class="code" href="a00144.html">tbb::internal::atomic_backoff</a> b;
-<a name="l00621"></a>00621         <span class="keywordflow">do</span> {
-<a name="l00622"></a>00622             b.<a class="code" href="a00144.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>();
-<a name="l00623"></a>00623         } <span class="keywordflow">while</span> ( !__TBB_TryLockByte(flag) );
-<a name="l00624"></a>00624     }
-<a name="l00625"></a>00625     <span class="keywordflow">return</span> 0;
-<a name="l00626"></a>00626 }
-<a name="l00627"></a>00627 <span class="preprocessor">#endif</span>
-<a name="l00628"></a>00628 <span class="preprocessor"></span>
-<a name="l00629"></a>00629 <span class="preprocessor">#ifndef __TBB_ReverseByte</span>
-<a name="l00630"></a>00630 <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="l00631"></a>00631     <span class="keywordflow">return</span> tbb::internal::reverse<unsigned char>::byte_table[src];
-<a name="l00632"></a>00632 }
-<a name="l00633"></a>00633 <span class="preprocessor">#endif</span>
-<a name="l00634"></a>00634 <span class="preprocessor"></span>
-<a name="l00635"></a>00635 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00636"></a>00636 T __TBB_ReverseBits(T src)
-<a name="l00637"></a>00637 {
-<a name="l00638"></a>00638     T dst;
-<a name="l00639"></a>00639     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *original = (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) &src;
-<a name="l00640"></a>00640     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *reversed = (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) &dst;
-<a name="l00641"></a>00641 
-<a name="l00642"></a>00642     <span class="keywordflow">for</span>( <span class="keywordtype">int</span> i = <span class="keyword">sizeof</span>(T)-1; i >= 0; i-- )
-<a name="l00643"></a>00643         reversed[i] = __TBB_ReverseByte( original[<span class="keyword">sizeof</span>(T)-i-1] );
-<a name="l00644"></a>00644 
-<a name="l00645"></a>00645     <span class="keywordflow">return</span> dst;
-<a name="l00646"></a>00646 }
-<a name="l00647"></a>00647 
-<a name="l00648"></a>00648 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_machine_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00464.html b/doc/html/a00464.html
deleted file mode 100644
index cf221d6..0000000
--- a/doc/html/a00464.html
+++ /dev/null
@@ -1,125 +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-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_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">#endif </span><span class="comment">/* __TBB_profiling_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00465.html b/doc/html/a00465.html
deleted file mode 100644
index 3dc7ddf..0000000
--- a/doc/html/a00465.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>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-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_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 3</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 5000</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#define TBB_INTERFACE_VERSION_MAJOR TBB_INTERFACE_VERSION/1000</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">// The oldest major interface version still supported</span>
-<a name="l00033"></a>00033 <span class="comment">// To be used in SONAME, manifests, etc.</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#define TBB_COMPATIBLE_INTERFACE_VERSION 2</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span>
-<a name="l00036"></a>00036 <span class="preprocessor">#define __TBB_STRING_AUX(x) #x</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_STRING(x) __TBB_STRING_AUX(x)</span>
-<a name="l00038"></a>00038 <span class="preprocessor"></span>
-<a name="l00039"></a>00039 <span class="comment">// We do not need defines below for resource processing on windows</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#if !defined RC_INVOKED</span>
-<a name="l00041"></a>00041 <span class="preprocessor"></span>
-<a name="l00042"></a>00042 <span class="comment">// Define groups for Doxygen documentation</span>
-<a name="l00052"></a>00052 <span class="comment"></span><span class="comment">// Simple text that is displayed on the main page of Doxygen documentation.</span>
-<a name="l00094"></a>00094 <span class="comment"></span><span class="comment">// Define preprocessor symbols used to determine architecture</span>
-<a name="l00095"></a>00095 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00096"></a>00096 <span class="preprocessor"></span><span class="preprocessor">#   if defined(_M_AMD64)</span>
-<a name="l00097"></a>00097 <span class="preprocessor"></span><span class="preprocessor">#       define __TBB_x86_64 1</span>
-<a name="l00098"></a>00098 <span class="preprocessor"></span><span class="preprocessor">#   elif defined(_M_IA64)</span>
-<a name="l00099"></a>00099 <span class="preprocessor"></span><span class="preprocessor">#       define __TBB_ipf 1</span>
-<a name="l00100"></a>00100 <span class="preprocessor"></span><span class="preprocessor">#   elif defined(_M_IX86)||defined(__i386__) // the latter for MinGW support</span>
-<a name="l00101"></a>00101 <span class="preprocessor"></span><span class="preprocessor">#       define __TBB_x86_32 1</span>
-<a name="l00102"></a>00102 <span class="preprocessor"></span><span class="preprocessor">#   endif</span>
-<a name="l00103"></a>00103 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* Assume generic Unix */</span>
-<a name="l00104"></a>00104 <span class="preprocessor">#   if !__linux__ && !__APPLE__</span>
-<a name="l00105"></a>00105 <span class="preprocessor"></span><span class="preprocessor">#       define __TBB_generic_os 1</span>
-<a name="l00106"></a>00106 <span class="preprocessor"></span><span class="preprocessor">#   endif</span>
-<a name="l00107"></a>00107 <span class="preprocessor"></span><span class="preprocessor">#   if __x86_64__</span>
-<a name="l00108"></a>00108 <span class="preprocessor"></span><span class="preprocessor">#       define __TBB_x86_64 1</span>
-<a name="l00109"></a>00109 <span class="preprocessor"></span><span class="preprocessor">#   elif __ia64__</span>
-<a name="l00110"></a>00110 <span class="preprocessor"></span><span class="preprocessor">#       define __TBB_ipf 1</span>
-<a name="l00111"></a>00111 <span class="preprocessor"></span><span class="preprocessor">#   elif __i386__||__i386  // __i386 is for Sun OS</span>
-<a name="l00112"></a>00112 <span class="preprocessor"></span><span class="preprocessor">#       define __TBB_x86_32 1</span>
-<a name="l00113"></a>00113 <span class="preprocessor"></span><span class="preprocessor">#   else</span>
-<a name="l00114"></a>00114 <span class="preprocessor"></span><span class="preprocessor">#       define __TBB_generic_arch 1</span>
-<a name="l00115"></a>00115 <span class="preprocessor"></span><span class="preprocessor">#   endif</span>
-<a name="l00116"></a>00116 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00117"></a>00117 <span class="preprocessor"></span>
-<a name="l00118"></a>00118 <span class="preprocessor">#if _MSC_VER</span>
-<a name="l00119"></a>00119 <span class="preprocessor"></span><span class="comment">// define the parts of stdint.h that are needed, but put them inside tbb::internal</span>
-<a name="l00120"></a>00120 <span class="keyword">namespace </span>tbb {
-<a name="l00121"></a>00121 <span class="keyword">namespace </span>internal {
-<a name="l00122"></a>00122     <span class="keyword">typedef</span> __int8 int8_t;
-<a name="l00123"></a>00123     <span class="keyword">typedef</span> __int16 int16_t;
-<a name="l00124"></a>00124     <span class="keyword">typedef</span> __int32 int32_t;
-<a name="l00125"></a>00125     <span class="keyword">typedef</span> __int64 int64_t;
-<a name="l00126"></a>00126     <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> __int8 uint8_t;
-<a name="l00127"></a>00127     <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> __int16 uint16_t;
-<a name="l00128"></a>00128     <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> __int32 uint32_t;
-<a name="l00129"></a>00129     <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> __int64 uint64_t;
-<a name="l00130"></a>00130 } <span class="comment">// namespace internal</span>
-<a name="l00131"></a>00131 } <span class="comment">// namespace tbb</span>
-<a name="l00132"></a>00132 <span class="preprocessor">#else</span>
-<a name="l00133"></a>00133 <span class="preprocessor"></span><span class="preprocessor">#include <stdint.h></span>
-<a name="l00134"></a>00134 <span class="preprocessor">#endif </span><span class="comment">/* _MSC_VER */</span>
-<a name="l00135"></a>00135 
-<a name="l00136"></a>00136 <span class="preprocessor">#if _MSC_VER >=1400</span>
-<a name="l00137"></a>00137 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXPORTED_FUNC   __cdecl</span>
-<a name="l00138"></a>00138 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXPORTED_METHOD __thiscall</span>
-<a name="l00139"></a>00139 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00140"></a>00140 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXPORTED_FUNC</span>
-<a name="l00141"></a>00141 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXPORTED_METHOD</span>
-<a name="l00142"></a>00142 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00143"></a>00143 <span class="preprocessor"></span>
-<a name="l00144"></a>00144 <span class="preprocessor">#include <cstddef></span>      <span class="comment">/* Need size_t and ptrdiff_t (the latter on Windows only) from here. */</span>
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146 <span class="preprocessor">#if _MSC_VER</span>
-<a name="l00147"></a>00147 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tbb_windef_H</span>
-<a name="l00148"></a>00148 <span class="preprocessor"></span><span class="preprocessor">#include "_tbb_windef.h"</span>
-<a name="l00149"></a>00149 <span class="preprocessor">#undef __TBB_tbb_windef_H</span>
-<a name="l00150"></a>00150 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00151"></a>00151 <span class="preprocessor"></span>
-<a name="l00152"></a>00152 <span class="preprocessor">#include "tbb_config.h"</span>
-<a name="l00153"></a>00153 
-<a name="l00155"></a>00155 <span class="keyword">namespace </span>tbb {
-<a name="l00157"></a><a class="code" href="a00267.html#ed375248ff6019a70ca0f9da528e5d0b">00157</a>     <span class="keyword">typedef</span> void(*<a class="code" href="a00267.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="l00158"></a>00158 
-<a name="l00159"></a>00159 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00160"></a>00160 <span class="preprocessor"></span>
-<a name="l00162"></a>00162 
-<a name="l00165"></a>00165 <span class="preprocessor">#define __TBB_ASSERT(predicate,message) ((predicate)?((void)0):tbb::assertion_failure(__FILE__,__LINE__,#predicate,message))</span>
-<a name="l00166"></a>00166 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_ASSERT_EX __TBB_ASSERT</span>
-<a name="l00167"></a>00167 <span class="preprocessor"></span>
-<a name="l00169"></a>00169     <a class="code" href="a00267.html#ed375248ff6019a70ca0f9da528e5d0b">assertion_handler_type</a> __TBB_EXPORTED_FUNC <a class="code" href="a00267.html#823fa1c15dd829d1d9167157450ddcd9">set_assertion_handler</a>( <a class="code" href="a00267.html#ed375248ff6019a70ca0f9da528e5d0b">assertion_handler_type</a> 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 <a class="code" href="a00267.html#3d1252787be39b4aef311f1cadaff9e8">assertion_failure</a>( <span class="keyword">const</span> <span class="keywordtype">char</span>* filename, <span class="keywordtype">int</span> line, <span class="keyword">const</span> <span class="keywordtype">char</span>* expression, <span class="keyword">const</span> <span class="keywordtype">char</span>* comment );
-<a name="l00176"></a>00176 
-<a name="l00177"></a>00177 <span class="preprocessor">#else</span>
-<a name="l00178"></a>00178 <span class="preprocessor"></span>
-<a name="l00180"></a>00180 <span class="preprocessor">#define __TBB_ASSERT(predicate,comment) ((void)0)</span>
-<a name="l00182"></a>00182 <span class="preprocessor">#define __TBB_ASSERT_EX(predicate,comment) ((void)(1 && (predicate)))</span>
-<a name="l00183"></a>00183 <span class="preprocessor"></span>
-<a name="l00184"></a>00184 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00185"></a>00185 
-<a name="l00187"></a>00187 
-<a name="l00191"></a>00191 <span class="keyword">extern</span> <span class="stringliteral">"C"</span> <span class="keywordtype">int</span> __TBB_EXPORTED_FUNC <a class="code" href="a00267.html#a6858b22e90041c9c4669674ff39b056">TBB_runtime_interface_version</a>();
-<a name="l00192"></a>00192 
-<a name="l00194"></a>00194 
-<a name="l00198"></a><a class="code" href="a00198.html">00198</a> <span class="keyword">class </span><a class="code" href="a00198.html">split</a> {
-<a name="l00199"></a>00199 };
-<a name="l00200"></a>00200 
-<a name="l00205"></a>00205 <span class="keyword">namespace </span>internal {
-<a name="l00206"></a>00206 
-<a name="l00207"></a>00207 <span class="keyword">using</span> std::size_t;
-<a name="l00208"></a>00208 
-<a name="l00210"></a>00210 
-<a name="l00213"></a>00213 <span class="keyword">const</span> size_t NFS_MaxLineSize = 128;
-<a name="l00214"></a>00214 
-<a name="l00215"></a>00215 <span class="keyword">template</span><<span class="keyword">class</span> T, <span class="keywordtype">int</span> S>
-<a name="l00216"></a>00216 <span class="keyword">struct </span>padded_base : T {
-<a name="l00217"></a>00217     <span class="keywordtype">char</span> pad[NFS_MaxLineSize - <span class="keyword">sizeof</span>(T) % NFS_MaxLineSize];
-<a name="l00218"></a>00218 };
-<a name="l00219"></a>00219 <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">struct </span>padded_base<T, 0> : T {};
-<a name="l00220"></a>00220 
-<a name="l00222"></a>00222 <span class="keyword">template</span><<span class="keyword">class</span> T>
-<a name="l00223"></a>00223 <span class="keyword">struct </span>padded : padded_base<T, sizeof(T)> {};
-<a name="l00224"></a>00224 
-<a name="l00226"></a>00226 
-<a name="l00228"></a>00228 <span class="preprocessor">#define __TBB_offsetof(class_name, member_name) \</span>
-<a name="l00229"></a>00229 <span class="preprocessor">    ((ptrdiff_t)&(reinterpret_cast<class_name*>(0x1000)->member_name) - 0x1000)</span>
-<a name="l00230"></a>00230 <span class="preprocessor"></span>
-<a name="l00232"></a>00232 <span class="preprocessor">#define __TBB_get_object_ref(class_name, member_name, member_addr) \</span>
-<a name="l00233"></a>00233 <span class="preprocessor">    (*reinterpret_cast<class_name*>((char*)member_addr - __TBB_offsetof(class_name, member_name)))</span>
-<a name="l00234"></a>00234 <span class="preprocessor"></span>
-<a name="l00236"></a>00236 <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="l00237"></a>00237 
-<a name="l00238"></a>00238 <span class="preprocessor">#if TBB_USE_EXCEPTIONS</span>
-<a name="l00239"></a>00239 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_TRY try</span>
-<a name="l00240"></a>00240 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_CATCH(e) catch(e)</span>
-<a name="l00241"></a>00241 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_THROW(e) throw e</span>
-<a name="l00242"></a>00242 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_RETHROW() throw</span>
-<a name="l00243"></a>00243 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* !TBB_USE_EXCEPTIONS */</span>
-<a name="l00244"></a>00244     <span class="keyword">inline</span> <span class="keywordtype">bool</span> __TBB_false() { <span class="keywordflow">return</span> <span class="keyword">false</span>; }
-<a name="l00245"></a>00245 <span class="preprocessor">    #define __TBB_TRY</span>
-<a name="l00246"></a>00246 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_CATCH(e) if ( tbb::internal::__TBB_false() )</span>
-<a name="l00247"></a>00247 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_THROW(e) ((void)0)</span>
-<a name="l00248"></a>00248 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_RETHROW() ((void)0)</span>
-<a name="l00249"></a>00249 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* !TBB_USE_EXCEPTIONS */</span>
-<a name="l00250"></a>00250 
-<a name="l00252"></a>00252 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC runtime_warning( <span class="keyword">const</span> <span class="keywordtype">char</span>* format, ... );
-<a name="l00253"></a>00253 
-<a name="l00254"></a>00254 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00256"></a>00256 <span class="preprocessor">template<typename T></span>
-<a name="l00257"></a>00257 <span class="preprocessor"></span><span class="keyword">inline</span> <span class="keywordtype">void</span> poison_pointer( T* & p ) {
-<a name="l00258"></a>00258     p = reinterpret_cast<T*>(-1);
-<a name="l00259"></a>00259 }
-<a name="l00260"></a>00260 <span class="preprocessor">#else</span>
-<a name="l00261"></a>00261 <span class="preprocessor"></span><span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00262"></a>00262 <span class="keyword">inline</span> <span class="keywordtype">void</span> poison_pointer( T* ) {<span class="comment">/*do nothing*/</span>}
-<a name="l00263"></a>00263 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00264"></a>00264 
-<a name="l00266"></a>00266 
-<a name="l00268"></a>00268 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U> 
-<a name="l00269"></a>00269 <span class="keyword">inline</span> T punned_cast( U* ptr ) {
-<a name="l00270"></a>00270     uintptr_t x = reinterpret_cast<uintptr_t>(ptr);
-<a name="l00271"></a>00271     <span class="keywordflow">return</span> reinterpret_cast<T>(x);
-<a name="l00272"></a>00272 }
-<a name="l00273"></a>00273 
-<a name="l00275"></a>00275 <span class="keyword">class </span>no_assign {
-<a name="l00276"></a>00276     <span class="comment">// Deny assignment</span>
-<a name="l00277"></a>00277     <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> no_assign& );
-<a name="l00278"></a>00278 <span class="keyword">public</span>:
-<a name="l00279"></a>00279 <span class="preprocessor">#if __GNUC__</span>
-<a name="l00281"></a>00281 <span class="preprocessor">    no_assign() {}</span>
-<a name="l00282"></a>00282 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __GNUC__ */</span>
-<a name="l00283"></a>00283 };
-<a name="l00284"></a>00284 
-<a name="l00286"></a>00286 <span class="keyword">class </span>no_copy: no_assign {
-<a name="l00288"></a>00288     no_copy( <span class="keyword">const</span> no_copy& );
-<a name="l00289"></a>00289 <span class="keyword">public</span>:
-<a name="l00291"></a>00291     no_copy() {}
-<a name="l00292"></a>00292 };
-<a name="l00293"></a>00293 
-<a name="l00295"></a>00295 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00296"></a>00296 <span class="keyword">struct </span>allocator_type {
-<a name="l00297"></a>00297     <span class="keyword">typedef</span> T value_type;
-<a name="l00298"></a>00298 };
-<a name="l00299"></a>00299 
-<a name="l00300"></a>00300 <span class="preprocessor">#if _MSC_VER</span>
-<a name="l00302"></a>00302 <span class="preprocessor">template<typename T></span>
-<a name="l00303"></a>00303 <span class="preprocessor"></span><span class="keyword">struct </span>allocator_type<const T> {
-<a name="l00304"></a>00304     <span class="keyword">typedef</span> T value_type;
-<a name="l00305"></a>00305 };
-<a name="l00306"></a>00306 <span class="preprocessor">#endif</span>
-<a name="l00307"></a>00307 <span class="preprocessor"></span>
-<a name="l00308"></a>00308 <span class="comment">// Struct to be used as a version tag for inline functions.</span>
-<a name="l00311"></a>00311 <span class="comment"></span><span class="keyword">struct </span>version_tag_v3 {};
-<a name="l00312"></a>00312 
-<a name="l00313"></a>00313 <span class="keyword">typedef</span> version_tag_v3 version_tag;
-<a name="l00314"></a>00314 
-<a name="l00315"></a>00315 } <span class="comment">// internal</span>
-<a name="l00317"></a>00317 <span class="comment"></span>
-<a name="l00318"></a>00318 } <span class="comment">// tbb</span>
-<a name="l00319"></a>00319 
-<a name="l00320"></a>00320 <span class="preprocessor">#endif </span><span class="comment">/* RC_INVOKED */</span>
-<a name="l00321"></a>00321 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_stddef_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00466.html b/doc/html/a00466.html
new file mode 100644
index 0000000..4cd8731
--- /dev/null
+++ b/doc/html/a00466.html
@@ -0,0 +1,2522 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>graph.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>graph.h</h1><a href="a00326.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_graph_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_graph_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#if !TBB_PREVIEW_GRAPH</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#error Set TBB_PREVIEW_GRAPH to include graph.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_stddef.h"</span>
+<a name="l00029"></a>00029 <span class="preprocessor">#include "atomic.h"</span>
+<a name="l00030"></a>00030 <span class="preprocessor">#include "spin_mutex.h"</span>
+<a name="l00031"></a>00031 <span class="preprocessor">#include "null_mutex.h"</span>
+<a name="l00032"></a>00032 <span class="preprocessor">#include "spin_rw_mutex.h"</span>
+<a name="l00033"></a>00033 <span class="preprocessor">#include "null_rw_mutex.h"</span>
+<a name="l00034"></a>00034 <span class="preprocessor">#include "task.h"</span>
+<a name="l00035"></a>00035 <span class="preprocessor">#include "concurrent_vector.h"</span>
+<a name="l00036"></a>00036 <span class="preprocessor">#include "_aggregator_internal.h"</span>
+<a name="l00037"></a>00037 
+<a name="l00038"></a>00038 <span class="comment">// use the VC10 or gcc version of tuple if it is available.</span>
+<a name="l00039"></a>00039 <span class="preprocessor">#if TBB_IMPLEMENT_CPP0X && (!defined(_MSC_VER) || _MSC_VER < 1600)</span>
+<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#define TBB_PREVIEW_TUPLE 1</span>
+<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor">#include "compat/tuple"</span>
+<a name="l00042"></a>00042 <span class="preprocessor">#else</span>
+<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor">#include <tuple></span>
+<a name="l00044"></a>00044 <span class="preprocessor">#endif</span>
+<a name="l00045"></a>00045 <span class="preprocessor"></span>
+<a name="l00046"></a>00046 <span class="preprocessor">#include<list></span>
+<a name="l00047"></a>00047 <span class="preprocessor">#include<queue></span>
+<a name="l00048"></a>00048 
+<a name="l00049"></a>00049 
+<a name="l00060"></a>00060 <span class="keyword">namespace </span>tbb {
+<a name="l00061"></a>00061 
+<a name="l00063"></a><a class="code" href="a00251.html">00063</a>     <span class="keyword">class </span><a class="code" href="a00251.html">graph_node</a> {
+<a name="l00064"></a>00064     <span class="keyword">public</span>:
+<a name="l00065"></a>00065         <span class="keyword">virtual</span> ~<a class="code" href="a00251.html">graph_node</a>() {} 
+<a name="l00066"></a>00066     }; 
+<a name="l00067"></a>00067 
+<a name="l00069"></a><a class="code" href="a00239.html">00069</a>     <span class="keyword">class </span><a class="code" href="a00239.html">continue_msg</a> {};
+<a name="l00070"></a>00070 
+<a name="l00071"></a>00071     <span class="keyword">template</span>< <span class="keyword">typename</span> T > <span class="keyword">class </span><a class="code" href="a00282.html">sender</a>;
+<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="a00277.html">receiver</a>;
+<a name="l00073"></a>00073     <span class="keyword">class </span><a class="code" href="a00241.html">continue_receiver</a>;
+<a name="l00074"></a>00074 
+<a name="l00076"></a>00076     <span class="keyword">template</span>< <span class="keyword">typename</span> T >
+<a name="l00077"></a><a class="code" href="a00282.html">00077</a>     <span class="keyword">class </span><a class="code" href="a00282.html">sender</a> {
+<a name="l00078"></a>00078     <span class="keyword">public</span>:
+<a name="l00080"></a><a class="code" href="a00282.html#d3aa21714dfc464e65a471816e38ea89">00080</a>         <span class="keyword">typedef</span> T <a class="code" href="a00282.html#d3aa21714dfc464e65a471816e38ea89">output_type</a>;
+<a name="l00081"></a>00081 
+<a name="l00083"></a><a class="code" href="a00282.html#c0746cda7dfd266f01acaf6cd5d4b77d">00083</a>         <span class="keyword">typedef</span> <a class="code" href="a00277.html">receiver<T></a> <a class="code" href="a00277.html">successor_type</a>;
+<a name="l00084"></a>00084 
+<a name="l00085"></a>00085         <span class="keyword">virtual</span> ~<a class="code" href="a00282.html">sender</a>() {}
+<a name="l00086"></a>00086 
+<a name="l00088"></a>00088         <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="a00282.html#be48ac70174cf8e08e2b0279cd6343d3">register_successor</a>( <a class="code" href="a00282.html#c0746cda7dfd266f01acaf6cd5d4b77d">successor_type</a> &r ) = 0;
+<a name="l00089"></a>00089 
+<a name="l00091"></a>00091         <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="a00282.html#3f345427e812e8741370308ff88f30bf">remove_successor</a>( <a class="code" href="a00282.html#c0746cda7dfd266f01acaf6cd5d4b77d">successor_type</a> &r ) = 0;
+<a name="l00092"></a>00092 
+<a name="l00094"></a><a class="code" href="a00282.html#bf8c9235810354f3353a899c982645de">00094</a>         <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="a00282.html#bf8c9235810354f3353a899c982645de">try_get</a>( T & ) { <span class="keywordflow">return</span> <span class="keyword">false</span>; }
+<a name="l00095"></a>00095 
+<a name="l00097"></a><a class="code" href="a00282.html#3506c7275aeeb2fc3ba5d5f10ee0adac">00097</a>         <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="a00282.html#3506c7275aeeb2fc3ba5d5f10ee0adac">try_reserve</a>( T & ) { <span class="keywordflow">return</span> <span class="keyword">false</span>; }
+<a name="l00098"></a>00098 
+<a name="l00100"></a><a class="code" href="a00282.html#28c41df1c0c7ed485b4a691ec8f30098">00100</a>         <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="a00282.html#28c41df1c0c7ed485b4a691ec8f30098">try_release</a>( ) { <span class="keywordflow">return</span> <span class="keyword">false</span>; }
+<a name="l00101"></a>00101 
+<a name="l00103"></a><a class="code" href="a00282.html#add46946c4c7330422733432e4032fac">00103</a>         <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="a00282.html#add46946c4c7330422733432e4032fac">try_consume</a>( ) { <span class="keywordflow">return</span> <span class="keyword">false</span>; }
+<a name="l00104"></a>00104 
+<a name="l00105"></a>00105     };
+<a name="l00106"></a>00106 
+<a name="l00107"></a>00107 
+<a name="l00109"></a>00109     <span class="keyword">template</span>< <span class="keyword">typename</span> T >
+<a name="l00110"></a><a class="code" href="a00277.html">00110</a>     <span class="keyword">class </span><a class="code" href="a00277.html">receiver</a> {
+<a name="l00111"></a>00111     <span class="keyword">public</span>:
+<a name="l00112"></a>00112 
+<a name="l00114"></a><a class="code" href="a00277.html#9cfd5ef0d67d5bbfb5f9a76d75e62765">00114</a>         <span class="keyword">typedef</span> T <a class="code" href="a00239.html">input_type</a>;
+<a name="l00115"></a>00115 
+<a name="l00117"></a><a class="code" href="a00277.html#c802c845b51c6d129153b684d33f7310">00117</a>         <span class="keyword">typedef</span> <a class="code" href="a00282.html">sender<T></a> <a class="code" href="a00282.html">predecessor_type</a>;
+<a name="l00118"></a>00118 
+<a name="l00120"></a><a class="code" href="a00277.html#18f74b83abae0ee1e4ce07942797ef27">00120</a>         <span class="keyword">virtual</span> <a class="code" href="a00277.html#18f74b83abae0ee1e4ce07942797ef27">~receiver</a>() {}
+<a name="l00121"></a>00121 
+<a name="l00123"></a>00123         <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="a00277.html#6e5422b03b4570138f227b3d5d0073b8">try_put</a>( T t ) = 0;
+<a name="l00124"></a>00124 
+<a name="l00126"></a><a class="code" href="a00277.html#14ae737c8fca4c8bf8e1a736dfbac444">00126</a>         <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="a00277.html#14ae737c8fca4c8bf8e1a736dfbac444">register_predecessor</a>( <a class="code" href="a00282.html">predecessor_type</a> & ) { <span class="keywordflow">return</span> <span class="keyword">false</span>; }
+<a name="l00127"></a>00127 
+<a name="l00129"></a><a class="code" href="a00277.html#d2f23b40b328dc254a7c2a0a30f408e4">00129</a>         <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="a00277.html#d2f23b40b328dc254a7c2a0a30f408e4">remove_predecessor</a>( <a class="code" href="a00282.html">predecessor_type</a> & ) { <span class="keywordflow">return</span> <span class="keyword">false</span>; }
+<a name="l00130"></a>00130 
+<a name="l00131"></a>00131     };
+<a name="l00132"></a>00132 
+<a name="l00134"></a>00134 
+<a name="l00135"></a><a class="code" href="a00241.html">00135</a>     <span class="keyword">class </span><a class="code" href="a00241.html">continue_receiver</a> : <span class="keyword">public</span> <a class="code" href="a00277.html">receiver</a>< continue_msg > {
+<a name="l00136"></a>00136     <span class="keyword">public</span>:
+<a name="l00137"></a>00137 
+<a name="l00139"></a><a class="code" href="a00241.html#21acef0b97b53d92f637619012837b30">00139</a>         <span class="keyword">typedef</span> <a class="code" href="a00239.html">continue_msg</a> <a class="code" href="a00239.html">input_type</a>;
+<a name="l00140"></a>00140 
+<a name="l00142"></a><a class="code" href="a00241.html#52fa92968dd48560d59798ca7ba6a3a2">00142</a>         <span class="keyword">typedef</span> <a class="code" href="a00282.html">sender< continue_msg ></a> <a class="code" href="a00282.html">predecessor_type</a>;
+<a name="l00143"></a>00143 
+<a name="l00145"></a><a class="code" href="a00241.html#799d383813261426d881b10247caadba">00145</a>         <a class="code" href="a00241.html#799d383813261426d881b10247caadba">continue_receiver</a>( <span class="keywordtype">int</span> number_of_predecessors = 0 ) { 
+<a name="l00146"></a>00146             my_predecessor_count = number_of_predecessors;
+<a name="l00147"></a>00147             my_current_count = 0;
+<a name="l00148"></a>00148         }
+<a name="l00149"></a>00149 
+<a name="l00151"></a><a class="code" href="a00241.html#9a38edb7e1e3c9be4e3848145c51a617">00151</a>         <span class="keyword">virtual</span> <a class="code" href="a00241.html#9a38edb7e1e3c9be4e3848145c51a617">~continue_receiver</a>() { }
+<a name="l00152"></a>00152 
+<a name="l00154"></a><a class="code" href="a00241.html#b9fa9290cbb871f8780f9d69e1ec3b4e">00154</a>         <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00241.html#b9fa9290cbb871f8780f9d69e1ec3b4e">register_predecessor</a>( <a class="code" href="a00282.html">predecessor_type</a> & ) {
+<a name="l00155"></a>00155             <a class="code" href="a00287.html">spin_mutex::scoped_lock</a> l(my_mutex);
+<a name="l00156"></a>00156             ++my_predecessor_count;
+<a name="l00157"></a>00157             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00158"></a>00158         }
+<a name="l00159"></a>00159 
+<a name="l00161"></a>00161 
+<a name="l00164"></a><a class="code" href="a00241.html#02411d8d13b380062548aff133752cc5">00164</a>         <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00241.html#02411d8d13b380062548aff133752cc5">remove_predecessor</a>( <a class="code" href="a00282.html">predecessor_type</a> & ) {
+<a name="l00165"></a>00165             <a class="code" href="a00287.html">spin_mutex::scoped_lock</a> l(my_mutex);
+<a name="l00166"></a>00166             --my_predecessor_count;
+<a name="l00167"></a>00167             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00168"></a>00168         }
+<a name="l00169"></a>00169 
+<a name="l00171"></a>00171 
+<a name="l00173"></a><a class="code" href="a00241.html#a7f8b9cc6286eb2cd8d429d6279da64d">00173</a>         <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00241.html#a7f8b9cc6286eb2cd8d429d6279da64d">try_put</a>( <a class="code" href="a00239.html">input_type</a> ) {
+<a name="l00174"></a>00174             {
+<a name="l00175"></a>00175                 <a class="code" href="a00287.html">spin_mutex::scoped_lock</a> l(my_mutex);
+<a name="l00176"></a>00176                 <span class="keywordflow">if</span> ( ++my_current_count < my_predecessor_count ) 
+<a name="l00177"></a>00177                     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00178"></a>00178                 <span class="keywordflow">else</span>
+<a name="l00179"></a>00179                     my_current_count = 0;
+<a name="l00180"></a>00180             }
+<a name="l00181"></a>00181             <a class="code" href="a00241.html#e6bf1d21e670b78ea00c71fccbe17c78">execute</a>();
+<a name="l00182"></a>00182             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00183"></a>00183         }
+<a name="l00184"></a>00184 
+<a name="l00185"></a>00185     <span class="keyword">protected</span>:
+<a name="l00186"></a>00186 
+<a name="l00187"></a>00187         <a class="code" href="a00286.html">spin_mutex</a> my_mutex;
+<a name="l00188"></a>00188         <span class="keywordtype">int</span> my_predecessor_count;
+<a name="l00189"></a>00189         <span class="keywordtype">int</span> my_current_count;
+<a name="l00190"></a>00190 
+<a name="l00192"></a>00192 
+<a name="l00194"></a>00194         <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="a00241.html#e6bf1d21e670b78ea00c71fccbe17c78">execute</a>() = 0;
+<a name="l00195"></a>00195 
+<a name="l00196"></a>00196     };
+<a name="l00197"></a>00197 
+<a name="l00199"></a>00199     <span class="keyword">namespace </span>internal {
+<a name="l00200"></a>00200 
+<a name="l00202"></a>00202         <span class="keyword">enum</span> node_state { node_state_idle=0, node_state_nonidle=1, node_state_inactive=2 };
+<a name="l00203"></a>00203 
+<a name="l00204"></a>00204 
+<a name="l00206"></a>00206         <span class="keyword">template</span>< <span class="keyword">typename</span> Output >
+<a name="l00207"></a>00207         <span class="keyword">class </span>source_body : no_assign   {
+<a name="l00208"></a>00208         <span class="keyword">public</span>:
+<a name="l00209"></a>00209             <span class="keyword">virtual</span> ~source_body() {}
+<a name="l00210"></a>00210             <span class="keyword">virtual</span> <span class="keywordtype">bool</span> operator()(Output &output) = 0;
+<a name="l00211"></a>00211         };
+<a name="l00212"></a>00212 
+<a name="l00214"></a>00214         <span class="keyword">template</span>< <span class="keyword">typename</span> Output, <span class="keyword">typename</span> Body>
+<a name="l00215"></a>00215         <span class="keyword">class </span>source_body_leaf : <span class="keyword">public</span> source_body<Output> {
+<a name="l00216"></a>00216         <span class="keyword">public</span>:
+<a name="l00217"></a>00217             source_body_leaf( Body _body ) : body(_body) { }
+<a name="l00218"></a>00218             <span class="comment">/*override */</span> <span class="keywordtype">bool</span> operator()(Output &output) { <span class="keywordflow">return</span> body( output ); }
+<a name="l00219"></a>00219         <span class="keyword">private</span>:
+<a name="l00220"></a>00220             Body body;
+<a name="l00221"></a>00221         };
+<a name="l00222"></a>00222 
+<a name="l00224"></a>00224         <span class="keyword">template</span>< <span class="keyword">typename</span> Input, <span class="keyword">typename</span> Output >
+<a name="l00225"></a>00225             <span class="keyword">class </span>function_body : no_assign {
+<a name="l00226"></a>00226         <span class="keyword">public</span>:
+<a name="l00227"></a>00227             <span class="keyword">virtual</span> ~function_body() {}
+<a name="l00228"></a>00228             <span class="keyword">virtual</span> Output operator()(Input input) = 0;
+<a name="l00229"></a>00229         };
+<a name="l00230"></a>00230 
+<a name="l00232"></a>00232         <span class="keyword">template</span> <<span class="keyword">typename</span> Input, <span class="keyword">typename</span> Output, <span class="keyword">typename</span> B>
+<a name="l00233"></a>00233         <span class="keyword">class </span>function_body_leaf : <span class="keyword">public</span> function_body< Input, Output > {
+<a name="l00234"></a>00234         <span class="keyword">public</span>:
+<a name="l00235"></a>00235             function_body_leaf( B _body ) : body(_body) { }
+<a name="l00236"></a>00236             Output operator()(Input i) { <span class="keywordflow">return</span> body(i); }
+<a name="l00237"></a>00237 
+<a name="l00238"></a>00238         <span class="keyword">private</span>:
+<a name="l00239"></a>00239             B body;
+<a name="l00240"></a>00240         };
+<a name="l00241"></a>00241 
+<a name="l00243"></a>00243         <span class="keyword">template</span> <<span class="keyword">typename</span> B>
+<a name="l00244"></a>00244         <span class="keyword">class </span>function_body_leaf< continue_msg, continue_msg, B> : <span class="keyword">public</span> function_body< continue_msg, continue_msg > {
+<a name="l00245"></a>00245         <span class="keyword">public</span>:
+<a name="l00246"></a>00246             function_body_leaf( B _body ) : body(_body) { }
+<a name="l00247"></a>00247             continue_msg operator()( continue_msg i ) { 
+<a name="l00248"></a>00248                 body(i); 
+<a name="l00249"></a>00249                 <span class="keywordflow">return</span> i; 
+<a name="l00250"></a>00250             }
+<a name="l00251"></a>00251 
+<a name="l00252"></a>00252         <span class="keyword">private</span>:
+<a name="l00253"></a>00253             B body;
+<a name="l00254"></a>00254         };
+<a name="l00255"></a>00255 
+<a name="l00257"></a>00257         <span class="keyword">template</span> <<span class="keyword">typename</span> Input, <span class="keyword">typename</span> B>
+<a name="l00258"></a>00258         <span class="keyword">class </span>function_body_leaf< Input, continue_msg, B> : <span class="keyword">public</span> function_body< Input, continue_msg > {
+<a name="l00259"></a>00259         <span class="keyword">public</span>:
+<a name="l00260"></a>00260             function_body_leaf( B _body ) : body(_body) { }
+<a name="l00261"></a>00261             continue_msg operator()(Input i) { 
+<a name="l00262"></a>00262                 body(i); 
+<a name="l00263"></a>00263                 <span class="keywordflow">return</span> continue_msg();
+<a name="l00264"></a>00264             }
+<a name="l00265"></a>00265 
+<a name="l00266"></a>00266         <span class="keyword">private</span>:
+<a name="l00267"></a>00267             B body;
+<a name="l00268"></a>00268         };
+<a name="l00269"></a>00269 
+<a name="l00271"></a>00271         <span class="keyword">template</span> <<span class="keyword">typename</span> Output, <span class="keyword">typename</span> B>
+<a name="l00272"></a>00272         <span class="keyword">class </span>function_body_leaf< continue_msg, Output, B > : <span class="keyword">public</span> function_body< continue_msg, Output > {
+<a name="l00273"></a>00273         <span class="keyword">public</span>:
+<a name="l00274"></a>00274             function_body_leaf( B _body ) : body(_body) { }
+<a name="l00275"></a>00275             Output operator()(continue_msg i) { 
+<a name="l00276"></a>00276                 <span class="keywordflow">return</span> body(i); 
+<a name="l00277"></a>00277             }
+<a name="l00278"></a>00278 
+<a name="l00279"></a>00279         <span class="keyword">private</span>:
+<a name="l00280"></a>00280             B body;
+<a name="l00281"></a>00281         };
+<a name="l00282"></a>00282 
+<a name="l00284"></a>00284         <span class="keyword">template</span>< <span class="keyword">typename</span> NodeType >
+<a name="l00285"></a>00285         <span class="keyword">class </span>forward_task : <span class="keyword">public</span> task {
+<a name="l00286"></a>00286 
+<a name="l00287"></a>00287             NodeType &my_node;
+<a name="l00288"></a>00288 
+<a name="l00289"></a>00289         <span class="keyword">public</span>:
+<a name="l00290"></a>00290 
+<a name="l00291"></a>00291             forward_task( NodeType &n ) : my_node(n) {}
+<a name="l00292"></a>00292 
+<a name="l00293"></a>00293             task *execute() {
+<a name="l00294"></a>00294                 my_node.forward();
+<a name="l00295"></a>00295                 <span class="keywordflow">return</span> NULL;
+<a name="l00296"></a>00296             }
+<a name="l00297"></a>00297         };
+<a name="l00298"></a>00298 
+<a name="l00300"></a>00300         <span class="keyword">template</span>< <span class="keyword">typename</span> NodeType, <span class="keyword">typename</span> Input >
+<a name="l00301"></a>00301         <span class="keyword">class </span>apply_body_task : <span class="keyword">public</span> task {
+<a name="l00302"></a>00302 
+<a name="l00303"></a>00303             NodeType &my_node;
+<a name="l00304"></a>00304             Input my_input;
+<a name="l00305"></a>00305 
+<a name="l00306"></a>00306         <span class="keyword">public</span>:
+<a name="l00307"></a>00307 
+<a name="l00308"></a>00308             apply_body_task( NodeType &n, Input i ) : my_node(n), my_input(i) {}
+<a name="l00309"></a>00309 
+<a name="l00310"></a>00310             task *execute() {
+<a name="l00311"></a>00311                 my_node.apply_body( my_input );
+<a name="l00312"></a>00312                 <span class="keywordflow">return</span> NULL;
+<a name="l00313"></a>00313             }
+<a name="l00314"></a>00314         };
+<a name="l00315"></a>00315 
+<a name="l00317"></a>00317         <span class="keyword">template</span>< <span class="keyword">typename</span> NodeType >
+<a name="l00318"></a>00318         <span class="keyword">class </span>source_task : <span class="keyword">public</span> task {
+<a name="l00319"></a>00319 
+<a name="l00320"></a>00320             NodeType &my_node;
+<a name="l00321"></a>00321 
+<a name="l00322"></a>00322         <span class="keyword">public</span>:
+<a name="l00323"></a>00323 
+<a name="l00324"></a>00324             source_task( NodeType &n ) : my_node(n) {}
+<a name="l00325"></a>00325 
+<a name="l00326"></a>00326             task *execute() {
+<a name="l00327"></a>00327                 my_node.apply_body( );
+<a name="l00328"></a>00328                 <span class="keywordflow">return</span> NULL;
+<a name="l00329"></a>00329             }
+<a name="l00330"></a>00330         };
+<a name="l00331"></a>00331 
+<a name="l00333"></a>00333         <span class="keyword">template</span>< <span class="keyword">typename</span> Input, <span class="keyword">typename</span> Output >
+<a name="l00334"></a>00334         <span class="keyword">struct </span>empty_body {
+<a name="l00335"></a>00335            Output operator()( Input & )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> Output(); } 
+<a name="l00336"></a>00336         };
+<a name="l00337"></a>00337 
+<a name="l00339"></a>00339         <span class="keyword">template</span>< <span class="keyword">typename</span> T, <span class="keyword">typename</span> M=spin_mutex >
+<a name="l00340"></a>00340         <span class="keyword">class </span>node_cache {
+<a name="l00341"></a>00341             <span class="keyword">public</span>:
+<a name="l00342"></a>00342 
+<a name="l00343"></a>00343             <span class="keyword">typedef</span> size_t size_type;
+<a name="l00344"></a>00344 
+<a name="l00345"></a>00345             <span class="keywordtype">bool</span> empty() {
+<a name="l00346"></a>00346                 <span class="keyword">typename</span> my_mutex_type::scoped_lock lock( my_mutex );
+<a name="l00347"></a>00347                 <span class="keywordflow">return</span> internal_empty();
+<a name="l00348"></a>00348             }
+<a name="l00349"></a>00349 
+<a name="l00350"></a>00350             <span class="keywordtype">void</span> add( T &n ) {
+<a name="l00351"></a>00351                 <span class="keyword">typename</span> my_mutex_type::scoped_lock lock( my_mutex );
+<a name="l00352"></a>00352                 internal_push(n);
+<a name="l00353"></a>00353             }
+<a name="l00354"></a>00354 
+<a name="l00355"></a>00355             <span class="keywordtype">void</span> remove( T &n ) {
+<a name="l00356"></a>00356                 <span class="keyword">typename</span> my_mutex_type::scoped_lock lock( my_mutex );
+<a name="l00357"></a>00357                 <span class="keywordflow">for</span> ( size_t i = internal_size(); i != 0; --i ) {
+<a name="l00358"></a>00358                     T &s = internal_pop();
+<a name="l00359"></a>00359                     <span class="keywordflow">if</span> ( &s != &n ) {
+<a name="l00360"></a>00360                         internal_push(s);
+<a name="l00361"></a>00361                     }
+<a name="l00362"></a>00362                 }
+<a name="l00363"></a>00363             }
+<a name="l00364"></a>00364 
+<a name="l00365"></a>00365         <span class="keyword">protected</span>:
+<a name="l00366"></a>00366 
+<a name="l00367"></a>00367             <span class="keyword">typedef</span> M my_mutex_type;
+<a name="l00368"></a>00368             my_mutex_type my_mutex;
+<a name="l00369"></a>00369             std::queue< T * > my_q;
+<a name="l00370"></a>00370 
+<a name="l00371"></a>00371             <span class="comment">// Assumes lock is held</span>
+<a name="l00372"></a>00372             <span class="keyword">inline</span> <span class="keywordtype">bool</span> internal_empty( )  {
+<a name="l00373"></a>00373                 <span class="keywordflow">return</span> my_q.empty();
+<a name="l00374"></a>00374             }
+<a name="l00375"></a>00375 
+<a name="l00376"></a>00376             <span class="comment">// Assumes lock is held</span>
+<a name="l00377"></a>00377             <span class="keyword">inline</span> size_type internal_size( )  {
+<a name="l00378"></a>00378                 <span class="keywordflow">return</span> my_q.size(); 
+<a name="l00379"></a>00379             }
+<a name="l00380"></a>00380 
+<a name="l00381"></a>00381             <span class="comment">// Assumes lock is held</span>
+<a name="l00382"></a>00382             <span class="keyword">inline</span> <span class="keywordtype">void</span> internal_push( T &n )  {
+<a name="l00383"></a>00383                 my_q.push(&n);
+<a name="l00384"></a>00384             }
+<a name="l00385"></a>00385 
+<a name="l00386"></a>00386             <span class="comment">// Assumes lock is held</span>
+<a name="l00387"></a>00387             <span class="keyword">inline</span> T &internal_pop() {
+<a name="l00388"></a>00388                 T *v = my_q.front();
+<a name="l00389"></a>00389                 my_q.pop();
+<a name="l00390"></a>00390                 <span class="keywordflow">return</span> *v;
+<a name="l00391"></a>00391             }
+<a name="l00392"></a>00392 
+<a name="l00393"></a>00393         };
+<a name="l00394"></a>00394 
+<a name="l00396"></a>00396         <span class="keyword">template</span>< <span class="keyword">typename</span> T, <span class="keyword">typename</span> M=spin_mutex >
+<a name="l00397"></a>00397         <span class="keyword">class </span>predecessor_cache : <span class="keyword">public</span> node_cache< sender<T>, M > {
+<a name="l00398"></a>00398             <span class="keyword">public</span>:
+<a name="l00399"></a>00399             <span class="keyword">typedef</span> M my_mutex_type;
+<a name="l00400"></a>00400             <span class="keyword">typedef</span> T output_type; 
+<a name="l00401"></a>00401             <span class="keyword">typedef</span> sender<output_type> predecessor_type;
+<a name="l00402"></a>00402             <span class="keyword">typedef</span> receiver<output_type> successor_type;
+<a name="l00403"></a>00403 
+<a name="l00404"></a>00404             predecessor_cache( ) : my_owner( NULL ) { }
+<a name="l00405"></a>00405 
+<a name="l00406"></a>00406             <span class="keywordtype">void</span> set_owner( successor_type *owner ) { my_owner = owner; }
+<a name="l00407"></a>00407 
+<a name="l00408"></a>00408             <span class="keywordtype">bool</span> get_item( output_type &v ) {
+<a name="l00409"></a>00409 
+<a name="l00410"></a>00410                 <span class="keywordtype">bool</span> msg = <span class="keyword">false</span>;
+<a name="l00411"></a>00411 
+<a name="l00412"></a>00412                 <span class="keywordflow">do</span> {
+<a name="l00413"></a>00413                     predecessor_type *src;
+<a name="l00414"></a>00414                     {
+<a name="l00415"></a>00415                         <span class="keyword">typename</span> my_mutex_type::scoped_lock lock(this->my_mutex);
+<a name="l00416"></a>00416                         <span class="keywordflow">if</span> ( this->internal_empty() ) {
+<a name="l00417"></a>00417                             <span class="keywordflow">break</span>;
+<a name="l00418"></a>00418                         }
+<a name="l00419"></a>00419                         src = &this->internal_pop();
+<a name="l00420"></a>00420                     }
+<a name="l00421"></a>00421 
+<a name="l00422"></a>00422                     <span class="comment">// Try to get from this sender</span>
+<a name="l00423"></a>00423                     msg = src->try_get( v );
+<a name="l00424"></a>00424 
+<a name="l00425"></a>00425                     <span class="keywordflow">if</span> (msg == <span class="keyword">false</span>) {
+<a name="l00426"></a>00426                         <span class="comment">// Relinquish ownership of the edge</span>
+<a name="l00427"></a>00427                         <span class="keywordflow">if</span> ( my_owner) 
+<a name="l00428"></a>00428                             src->register_successor( *my_owner );
+<a name="l00429"></a>00429                     } <span class="keywordflow">else</span> {
+<a name="l00430"></a>00430                         <span class="comment">// Retain ownership of the edge</span>
+<a name="l00431"></a>00431                         this->add(*src);
+<a name="l00432"></a>00432                     }
+<a name="l00433"></a>00433                 } <span class="keywordflow">while</span> ( msg == <span class="keyword">false</span> );
+<a name="l00434"></a>00434                 <span class="keywordflow">return</span> msg;
+<a name="l00435"></a>00435             }
+<a name="l00436"></a>00436 
+<a name="l00437"></a>00437         <span class="keyword">protected</span>:
+<a name="l00438"></a>00438             successor_type *my_owner;
+<a name="l00439"></a>00439         };
+<a name="l00440"></a>00440 
+<a name="l00442"></a>00442         <span class="keyword">template</span>< <span class="keyword">typename</span> T, <span class="keyword">typename</span> M=spin_mutex >
+<a name="l00443"></a>00443         <span class="keyword">class </span>reservable_predecessor_cache : <span class="keyword">public</span> predecessor_cache< T, M > {
+<a name="l00444"></a>00444         <span class="keyword">public</span>:
+<a name="l00445"></a>00445             <span class="keyword">typedef</span> M my_mutex_type;
+<a name="l00446"></a>00446             <span class="keyword">typedef</span> T output_type; 
+<a name="l00447"></a>00447             <span class="keyword">typedef</span> sender<T> predecessor_type;
+<a name="l00448"></a>00448             <span class="keyword">typedef</span> receiver<T> successor_type;
+<a name="l00449"></a>00449 
+<a name="l00450"></a>00450             reservable_predecessor_cache( ) : reserved_src(NULL) { }
+<a name="l00451"></a>00451 
+<a name="l00452"></a>00452             <span class="keywordtype">bool</span> 
+<a name="l00453"></a>00453             try_reserve( output_type &v ) {
+<a name="l00454"></a>00454                 <span class="keywordtype">bool</span> msg = <span class="keyword">false</span>;
+<a name="l00455"></a>00455 
+<a name="l00456"></a>00456                 <span class="keywordflow">do</span> {
+<a name="l00457"></a>00457                     {
+<a name="l00458"></a>00458                         <span class="keyword">typename</span> my_mutex_type::scoped_lock lock(this->my_mutex);
+<a name="l00459"></a>00459                         <span class="keywordflow">if</span> ( reserved_src || this->internal_empty() ) 
+<a name="l00460"></a>00460                             <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00461"></a>00461 
+<a name="l00462"></a>00462                         reserved_src = &this->internal_pop();
+<a name="l00463"></a>00463                     }
+<a name="l00464"></a>00464 
+<a name="l00465"></a>00465                     <span class="comment">// Try to get from this sender</span>
+<a name="l00466"></a>00466                     msg = reserved_src->try_reserve( v );
+<a name="l00467"></a>00467 
+<a name="l00468"></a>00468                     <span class="keywordflow">if</span> (msg == <span class="keyword">false</span>) {
+<a name="l00469"></a>00469                         <span class="keyword">typename</span> my_mutex_type::scoped_lock lock(this->my_mutex);
+<a name="l00470"></a>00470                         <span class="comment">// Relinquish ownership of the edge</span>
+<a name="l00471"></a>00471                         reserved_src->register_successor( *this->my_owner );
+<a name="l00472"></a>00472                         reserved_src = NULL;
+<a name="l00473"></a>00473                     } <span class="keywordflow">else</span> {
+<a name="l00474"></a>00474                         <span class="comment">// Retain ownership of the edge</span>
+<a name="l00475"></a>00475                         this->add( *reserved_src );
+<a name="l00476"></a>00476                     }
+<a name="l00477"></a>00477                 } <span class="keywordflow">while</span> ( msg == <span class="keyword">false</span> );
+<a name="l00478"></a>00478 
+<a name="l00479"></a>00479                 <span class="keywordflow">return</span> msg;
+<a name="l00480"></a>00480             }
+<a name="l00481"></a>00481 
+<a name="l00482"></a>00482             <span class="keywordtype">bool</span> 
+<a name="l00483"></a>00483             try_release( ) {
+<a name="l00484"></a>00484                 reserved_src->try_release( );
+<a name="l00485"></a>00485                 reserved_src = NULL;
+<a name="l00486"></a>00486                 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00487"></a>00487             }
+<a name="l00488"></a>00488 
+<a name="l00489"></a>00489             <span class="keywordtype">bool</span> 
+<a name="l00490"></a>00490             try_consume( ) {
+<a name="l00491"></a>00491                 reserved_src->try_consume( );
+<a name="l00492"></a>00492                 reserved_src = NULL;
+<a name="l00493"></a>00493                 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00494"></a>00494             }
+<a name="l00495"></a>00495 
+<a name="l00496"></a>00496         <span class="keyword">private</span>:
+<a name="l00497"></a>00497             predecessor_type *reserved_src;
+<a name="l00498"></a>00498         };
+<a name="l00499"></a>00499 
+<a name="l00500"></a>00500 
+<a name="l00502"></a>00502         <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> M=spin_rw_mutex >
+<a name="l00503"></a>00503         <span class="keyword">class </span>successor_cache : no_copy {
+<a name="l00504"></a>00504         <span class="keyword">protected</span>:
+<a name="l00505"></a>00505 
+<a name="l00506"></a>00506             <span class="keyword">typedef</span> M my_mutex_type;
+<a name="l00507"></a>00507             my_mutex_type my_mutex;
+<a name="l00508"></a>00508 
+<a name="l00509"></a>00509             <span class="keyword">typedef</span> std::list< receiver<T> * > my_successors_type;
+<a name="l00510"></a>00510             my_successors_type my_successors;
+<a name="l00511"></a>00511 
+<a name="l00512"></a>00512             sender<T> *my_owner;
+<a name="l00513"></a>00513 
+<a name="l00514"></a>00514         <span class="keyword">public</span>:
+<a name="l00515"></a>00515 
+<a name="l00516"></a>00516             successor_cache( ) : my_owner(NULL) {}
+<a name="l00517"></a>00517 
+<a name="l00518"></a>00518             <span class="keywordtype">void</span> set_owner( sender<T> *owner ) { my_owner = owner; }
+<a name="l00519"></a>00519 
+<a name="l00520"></a>00520             <span class="keyword">virtual</span> ~successor_cache() {}
+<a name="l00521"></a>00521 
+<a name="l00522"></a>00522             <span class="keywordtype">void</span> register_successor( receiver<T> &r ) {
+<a name="l00523"></a>00523                 <span class="keyword">typename</span> my_mutex_type::scoped_lock l(my_mutex, <span class="keyword">true</span>);
+<a name="l00524"></a>00524                 my_successors.push_back( &r ); 
+<a name="l00525"></a>00525             }
+<a name="l00526"></a>00526 
+<a name="l00527"></a>00527             <span class="keywordtype">void</span> remove_successor( receiver<T> &r ) {
+<a name="l00528"></a>00528                 <span class="keyword">typename</span> my_mutex_type::scoped_lock l(my_mutex, <span class="keyword">true</span>);
+<a name="l00529"></a>00529                 <span class="keywordflow">for</span> ( <span class="keyword">typename</span> my_successors_type::iterator i = my_successors.begin();
+<a name="l00530"></a>00530                       i != my_successors.end(); ++i ) { 
+<a name="l00531"></a>00531                     <span class="keywordflow">if</span> ( *i == & r ) { 
+<a name="l00532"></a>00532                         my_successors.erase(i);
+<a name="l00533"></a>00533                         <span class="keywordflow">break</span>;
+<a name="l00534"></a>00534                     }
+<a name="l00535"></a>00535                 }
+<a name="l00536"></a>00536             }
+<a name="l00537"></a>00537 
+<a name="l00538"></a>00538             <span class="keywordtype">bool</span> empty() { 
+<a name="l00539"></a>00539                 <span class="keyword">typename</span> my_mutex_type::scoped_lock l(my_mutex, <span class="keyword">false</span>);
+<a name="l00540"></a>00540                 <span class="keywordflow">return</span> my_successors.empty(); 
+<a name="l00541"></a>00541             }
+<a name="l00542"></a>00542 
+<a name="l00543"></a>00543             <span class="keyword">virtual</span> <span class="keywordtype">bool</span> try_put( T t ) = 0; 
+<a name="l00544"></a>00544          };
+<a name="l00545"></a>00545 
+<a name="l00547"></a>00547         <span class="keyword">template</span><>
+<a name="l00548"></a>00548         <span class="keyword">class </span>successor_cache< continue_msg > : no_copy {
+<a name="l00549"></a>00549         <span class="keyword">protected</span>:
+<a name="l00550"></a>00550 
+<a name="l00551"></a>00551             <span class="keyword">typedef</span> spin_rw_mutex my_mutex_type;
+<a name="l00552"></a>00552             my_mutex_type my_mutex;
+<a name="l00553"></a>00553 
+<a name="l00554"></a>00554             <span class="keyword">typedef</span> std::list< receiver<continue_msg> * > my_successors_type;
+<a name="l00555"></a>00555             my_successors_type my_successors;
+<a name="l00556"></a>00556 
+<a name="l00557"></a>00557             sender<continue_msg> *my_owner;
+<a name="l00558"></a>00558 
+<a name="l00559"></a>00559         <span class="keyword">public</span>:
+<a name="l00560"></a>00560 
+<a name="l00561"></a>00561             successor_cache( ) : my_owner(NULL) {}
+<a name="l00562"></a>00562 
+<a name="l00563"></a>00563             <span class="keywordtype">void</span> set_owner( sender<continue_msg> *owner ) { my_owner = owner; }
+<a name="l00564"></a>00564 
+<a name="l00565"></a>00565             <span class="keyword">virtual</span> ~successor_cache() {}
+<a name="l00566"></a>00566 
+<a name="l00567"></a>00567             <span class="keywordtype">void</span> register_successor( receiver<continue_msg> &r ) {
+<a name="l00568"></a>00568                 my_mutex_type::scoped_lock l(my_mutex, <span class="keyword">true</span>);
+<a name="l00569"></a>00569                 my_successors.push_back( &r ); 
+<a name="l00570"></a>00570                 <span class="keywordflow">if</span> ( my_owner )
+<a name="l00571"></a>00571                     r.register_predecessor( *my_owner );
+<a name="l00572"></a>00572             }
+<a name="l00573"></a>00573 
+<a name="l00574"></a>00574             <span class="keywordtype">void</span> remove_successor( receiver<continue_msg> &r ) {
+<a name="l00575"></a>00575                 my_mutex_type::scoped_lock l(my_mutex, <span class="keyword">true</span>);
+<a name="l00576"></a>00576                 <span class="keywordflow">for</span> ( my_successors_type::iterator i = my_successors.begin();
+<a name="l00577"></a>00577                       i != my_successors.end(); ++i ) { 
+<a name="l00578"></a>00578                     <span class="keywordflow">if</span> ( *i == & r ) { 
+<a name="l00579"></a>00579                         <span class="keywordflow">if</span> ( my_owner )
+<a name="l00580"></a>00580                             r.remove_predecessor( *my_owner );
+<a name="l00581"></a>00581                         my_successors.erase(i);
+<a name="l00582"></a>00582                         <span class="keywordflow">break</span>;
+<a name="l00583"></a>00583                     }
+<a name="l00584"></a>00584                 }
+<a name="l00585"></a>00585             }
+<a name="l00586"></a>00586 
+<a name="l00587"></a>00587             <span class="keywordtype">bool</span> empty() { 
+<a name="l00588"></a>00588                 my_mutex_type::scoped_lock l(my_mutex, <span class="keyword">false</span>);
+<a name="l00589"></a>00589                 <span class="keywordflow">return</span> my_successors.empty(); 
+<a name="l00590"></a>00590             }
+<a name="l00591"></a>00591 
+<a name="l00592"></a>00592             <span class="keyword">virtual</span> <span class="keywordtype">bool</span> try_put( continue_msg t ) = 0; 
+<a name="l00593"></a>00593 
+<a name="l00594"></a>00594          };
+<a name="l00595"></a>00595 
+<a name="l00597"></a>00597         <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> M=spin_rw_mutex>
+<a name="l00598"></a>00598         <span class="keyword">class </span>broadcast_cache : <span class="keyword">public</span> successor_cache<T, M> {
+<a name="l00599"></a>00599             <span class="keyword">typedef</span> M my_mutex_type;
+<a name="l00600"></a>00600             <span class="keyword">typedef</span> std::list< receiver<T> * > my_successors_type;
+<a name="l00601"></a>00601 
+<a name="l00602"></a>00602         <span class="keyword">public</span>:
+<a name="l00603"></a>00603 
+<a name="l00604"></a>00604             broadcast_cache( ) {}
+<a name="l00605"></a>00605 
+<a name="l00606"></a>00606             <span class="keywordtype">bool</span> try_put( T t ) {
+<a name="l00607"></a>00607                 <span class="keywordtype">bool</span> msg = <span class="keyword">false</span>;
+<a name="l00608"></a>00608                 <span class="keywordtype">bool</span> upgraded = <span class="keyword">false</span>;
+<a name="l00609"></a>00609                 <span class="keyword">typename</span> my_mutex_type::scoped_lock l(this->my_mutex, <span class="keyword">false</span>);
+<a name="l00610"></a>00610                 <span class="keyword">typename</span> my_successors_type::iterator i = this->my_successors.begin();
+<a name="l00611"></a>00611                 <span class="keywordflow">while</span> ( i != this->my_successors.end() ) {
+<a name="l00612"></a>00612                    <span class="keywordflow">if</span> ( (*i)->try_put( t ) == true ) {
+<a name="l00613"></a>00613                        ++i;
+<a name="l00614"></a>00614                        msg = <span class="keyword">true</span>;
+<a name="l00615"></a>00615                    } <span class="keywordflow">else</span> {
+<a name="l00616"></a>00616                       <span class="keywordflow">if</span> ( (*i)->register_predecessor(*this->my_owner) ) {
+<a name="l00617"></a>00617                           <span class="keywordflow">if</span> (!upgraded) {
+<a name="l00618"></a>00618                               l.upgrade_to_writer();
+<a name="l00619"></a>00619                               upgraded = <span class="keyword">true</span>;
+<a name="l00620"></a>00620                           }
+<a name="l00621"></a>00621                           i = this->my_successors.erase(i);
+<a name="l00622"></a>00622                       }
+<a name="l00623"></a>00623                       <span class="keywordflow">else</span> {
+<a name="l00624"></a>00624                           ++i;
+<a name="l00625"></a>00625                       }
+<a name="l00626"></a>00626                    }
+<a name="l00627"></a>00627                 }
+<a name="l00628"></a>00628                 <span class="keywordflow">return</span> msg;
+<a name="l00629"></a>00629             }
+<a name="l00630"></a>00630         };
+<a name="l00631"></a>00631 
+<a name="l00633"></a>00633         <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> M=spin_rw_mutex >
+<a name="l00634"></a>00634         <span class="keyword">class </span>round_robin_cache : <span class="keyword">public</span> successor_cache<T, M> {
+<a name="l00635"></a>00635             <span class="keyword">typedef</span> size_t size_type;
+<a name="l00636"></a>00636             <span class="keyword">typedef</span> M my_mutex_type;
+<a name="l00637"></a>00637             <span class="keyword">typedef</span> std::list< receiver<T> * > my_successors_type;
+<a name="l00638"></a>00638 
+<a name="l00639"></a>00639         <span class="keyword">public</span>:
+<a name="l00640"></a>00640 
+<a name="l00641"></a>00641             round_robin_cache( ) {}
+<a name="l00642"></a>00642 
+<a name="l00643"></a>00643             size_type size() {
+<a name="l00644"></a>00644                 <span class="keyword">typename</span> my_mutex_type::scoped_lock l(this->my_mutex, <span class="keyword">false</span>);
+<a name="l00645"></a>00645                 <span class="keywordflow">return</span> this->my_successors.size();
+<a name="l00646"></a>00646             }
+<a name="l00647"></a>00647 
+<a name="l00648"></a>00648             <span class="keywordtype">bool</span> try_put( T t ) {
+<a name="l00649"></a>00649                 <span class="keywordtype">bool</span> upgraded = <span class="keyword">false</span>;
+<a name="l00650"></a>00650                 <span class="keyword">typename</span> my_mutex_type::scoped_lock l(this->my_mutex, <span class="keyword">false</span>);
+<a name="l00651"></a>00651                 <span class="keyword">typename</span> my_successors_type::iterator i = this->my_successors.begin();
+<a name="l00652"></a>00652                 <span class="keywordflow">while</span> ( i != this->my_successors.end() ) {
+<a name="l00653"></a>00653                    <span class="keywordflow">if</span> ( (*i)->try_put( t ) ) {
+<a name="l00654"></a>00654                        <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00655"></a>00655                    } <span class="keywordflow">else</span> {
+<a name="l00656"></a>00656                       <span class="keywordflow">if</span> ( (*i)->register_predecessor(*this->my_owner) ) {
+<a name="l00657"></a>00657                           <span class="keywordflow">if</span> (!upgraded) {
+<a name="l00658"></a>00658                               l.upgrade_to_writer();
+<a name="l00659"></a>00659                               upgraded = <span class="keyword">true</span>;
+<a name="l00660"></a>00660                           }
+<a name="l00661"></a>00661                           i = this->my_successors.erase(i);
+<a name="l00662"></a>00662                       }
+<a name="l00663"></a>00663                       <span class="keywordflow">else</span> {
+<a name="l00664"></a>00664                           ++i;
+<a name="l00665"></a>00665                       }
+<a name="l00666"></a>00666                    }
+<a name="l00667"></a>00667                 }
+<a name="l00668"></a>00668                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00669"></a>00669             }
+<a name="l00670"></a>00670         };
+<a name="l00671"></a>00671 
+<a name="l00672"></a>00672         <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00673"></a>00673         <span class="keyword">class </span>decrementer : <span class="keyword">public</span> continue_receiver, internal::no_copy {
+<a name="l00674"></a>00674 
+<a name="l00675"></a>00675             T *my_node;
+<a name="l00676"></a>00676 
+<a name="l00677"></a>00677             <span class="keywordtype">void</span> execute() {
+<a name="l00678"></a>00678                 my_node->decrement_counter();
+<a name="l00679"></a>00679             }
+<a name="l00680"></a>00680 
+<a name="l00681"></a>00681         <span class="keyword">public</span>:
+<a name="l00682"></a>00682            
+<a name="l00683"></a>00683             <span class="keyword">typedef</span> continue_msg input_type;
+<a name="l00684"></a>00684             <span class="keyword">typedef</span> continue_msg output_type;
+<a name="l00685"></a>00685             decrementer( <span class="keywordtype">int</span> number_of_predecessors = 0 ) : continue_receiver( number_of_predecessors ) { }
+<a name="l00686"></a>00686             <span class="keywordtype">void</span> set_owner( T *node ) { my_node = node; }
+<a name="l00687"></a>00687         };
+<a name="l00688"></a>00688 
+<a name="l00689"></a>00689     }
+<a name="l00691"></a>00691 
+<a name="l00692"></a>00692 
+<a name="l00694"></a>00694 
+<a name="l00695"></a><a class="code" href="a00250.html">00695</a>     <span class="keyword">class </span><a class="code" href="a00250.html">graph</a> : internal::no_copy {
+<a name="l00696"></a>00696 
+<a name="l00697"></a>00697         <span class="keyword">template</span>< <span class="keyword">typename</span> Body >
+<a name="l00698"></a>00698         <span class="keyword">class </span>run_task : <span class="keyword">public</span> <a class="code" href="a00291.html">task</a> {
+<a name="l00699"></a>00699         <span class="keyword">public</span>: 
+<a name="l00700"></a>00700             run_task( Body& body ) : my_body(body) {}
+<a name="l00701"></a>00701             <a class="code" href="a00291.html">task</a> *execute() {
+<a name="l00702"></a>00702                 my_body();
+<a name="l00703"></a>00703                 <span class="keywordflow">return</span> NULL;
+<a name="l00704"></a>00704             }
+<a name="l00705"></a>00705         <span class="keyword">private</span>:
+<a name="l00706"></a>00706             Body my_body;
+<a name="l00707"></a>00707         };
+<a name="l00708"></a>00708 
+<a name="l00709"></a>00709         <span class="keyword">template</span>< <span class="keyword">typename</span> Receiver, <span class="keyword">typename</span> Body >
+<a name="l00710"></a>00710         <span class="keyword">class </span>run_and_put_task : <span class="keyword">public</span> <a class="code" href="a00291.html">task</a> {
+<a name="l00711"></a>00711         <span class="keyword">public</span>: 
+<a name="l00712"></a>00712             run_and_put_task( Receiver &r, Body& body ) : my_receiver(r), my_body(body) {}
+<a name="l00713"></a>00713             <a class="code" href="a00291.html">task</a> *execute() {
+<a name="l00714"></a>00714                 my_receiver.try_put( my_body() );
+<a name="l00715"></a>00715                 <span class="keywordflow">return</span> NULL;
+<a name="l00716"></a>00716             }
+<a name="l00717"></a>00717         <span class="keyword">private</span>:
+<a name="l00718"></a>00718             Receiver &my_receiver;
+<a name="l00719"></a>00719             Body my_body;
+<a name="l00720"></a>00720         };
+<a name="l00721"></a>00721 
+<a name="l00722"></a>00722     <span class="keyword">public</span>:
+<a name="l00723"></a>00723 
+<a name="l00725"></a><a class="code" href="a00250.html#633b9b55e3248b785efd13264261f0e5">00725</a>         <span class="keyword">enum</span> <a class="code" href="a00250.html#633b9b55e3248b785efd13264261f0e5">concurrency</a> { unlimited = 0, serial = 1 };
+<a name="l00726"></a>00726 
+<a name="l00728"></a><a class="code" href="a00250.html#1ba8311506558a2419101722f5d49ba9">00728</a>         <a class="code" href="a00250.html#1ba8311506558a2419101722f5d49ba9">graph</a>() : my_root_task( new ( <a class="code" href="a00291.html">task</a>::allocate_root( ) ) <a class="code" href="a00242.html">empty_task</a> ) {
+<a name="l00729"></a>00729             my_root_task-><a class="code" href="a00291.html#06a4206a57e8e12a439b14d6d41cfd92">set_ref_count</a>(1);
+<a name="l00730"></a>00730         }
+<a name="l00731"></a>00731 
+<a name="l00733"></a>00733 
+<a name="l00735"></a><a class="code" href="a00250.html#55332084e7884a26ff288b8fe960030d">00735</a>         <a class="code" href="a00250.html#55332084e7884a26ff288b8fe960030d">~graph</a>() {
+<a name="l00736"></a>00736             <a class="code" href="a00250.html#bafd6349fdc6563ffa02746866e30bec">wait_for_all</a>();
+<a name="l00737"></a>00737             my_root_task-><a class="code" href="a00291.html#06a4206a57e8e12a439b14d6d41cfd92">set_ref_count</a>(0);
+<a name="l00738"></a>00738             <a class="code" href="a00291.html#dfaacf92685e5f86393bf657b2853bf8">task::destroy</a>( *my_root_task );
+<a name="l00739"></a>00739         }
+<a name="l00740"></a>00740 
+<a name="l00741"></a>00741 
+<a name="l00743"></a>00743 
+<a name="l00745"></a><a class="code" href="a00250.html#1e5c5ae6538ec714cee107d1004705b9">00745</a>         <span class="keywordtype">void</span> <a class="code" href="a00250.html#1e5c5ae6538ec714cee107d1004705b9">increment_wait_count</a>() { 
+<a name="l00746"></a>00746             <span class="keywordflow">if</span> (my_root_task)
+<a name="l00747"></a>00747                 my_root_task-><a class="code" href="a00291.html#f5fb43c7ad0de5a4b95703cebc39e345">increment_ref_count</a>();
+<a name="l00748"></a>00748         }
+<a name="l00749"></a>00749 
+<a name="l00751"></a>00751 
+<a name="l00753"></a><a class="code" href="a00250.html#ff3b6a3ef2ae1e661dcdb398c227b43c">00753</a>         <span class="keywordtype">void</span> <a class="code" href="a00250.html#ff3b6a3ef2ae1e661dcdb398c227b43c">decrement_wait_count</a>() { 
+<a name="l00754"></a>00754             <span class="keywordflow">if</span> (my_root_task)
+<a name="l00755"></a>00755                 my_root_task-><a class="code" href="a00291.html#ef4680f5c148020c5e7e43ddef44cd5d">decrement_ref_count</a>(); 
+<a name="l00756"></a>00756         }
+<a name="l00757"></a>00757 
+<a name="l00759"></a>00759 
+<a name="l00761"></a>00761         <span class="keyword">template</span>< <span class="keyword">typename</span> Receiver, <span class="keyword">typename</span> Body >
+<a name="l00762"></a><a class="code" href="a00250.html#4c5e8dc5a45e641d534d6206838cfa7f">00762</a>             <span class="keywordtype">void</span> <a class="code" href="a00250.html#4c5e8dc5a45e641d534d6206838cfa7f">run</a>( Receiver &r, Body body ) {
+<a name="l00763"></a>00763            <a class="code" href="a00291.html#8365d063c0cc9d7bd616bca47256b93c">task::enqueue</a>( * <span class="keyword">new</span> ( task::allocate_additional_child_of( *my_root_task ) ) 
+<a name="l00764"></a>00764                run_and_put_task< Receiver, Body >( r, body ) );
+<a name="l00765"></a>00765         }
+<a name="l00766"></a>00766 
+<a name="l00768"></a>00768 
+<a name="l00770"></a>00770         <span class="keyword">template</span>< <span class="keyword">typename</span> Body >
+<a name="l00771"></a><a class="code" href="a00250.html#71213dd18099298dc74731e293c8286a">00771</a>         <span class="keywordtype">void</span> <a class="code" href="a00250.html#4c5e8dc5a45e641d534d6206838cfa7f">run</a>( Body body ) {
+<a name="l00772"></a>00772            <a class="code" href="a00291.html#8365d063c0cc9d7bd616bca47256b93c">task::enqueue</a>( * <span class="keyword">new</span> ( task::allocate_additional_child_of( *my_root_task ) ) 
+<a name="l00773"></a>00773                run_task< Body >( body ) );
+<a name="l00774"></a>00774         }
+<a name="l00775"></a>00775 
+<a name="l00777"></a>00777 
+<a name="l00778"></a><a class="code" href="a00250.html#bafd6349fdc6563ffa02746866e30bec">00778</a>         <span class="keywordtype">void</span> <a class="code" href="a00250.html#bafd6349fdc6563ffa02746866e30bec">wait_for_all</a>() {
+<a name="l00779"></a>00779             <span class="keywordflow">if</span> (my_root_task)
+<a name="l00780"></a>00780                 my_root_task-><a class="code" href="a00291.html#53d2615ad9c38859b4c8080936600283">wait_for_all</a>();
+<a name="l00781"></a>00781             my_root_task-><a class="code" href="a00291.html#06a4206a57e8e12a439b14d6d41cfd92">set_ref_count</a>(1);
+<a name="l00782"></a>00782         }
+<a name="l00783"></a>00783 
+<a name="l00785"></a><a class="code" href="a00250.html#34d61d8b6560e5b2eb42e0112701db0f">00785</a>         <a class="code" href="a00291.html">task</a> * <a class="code" href="a00250.html#34d61d8b6560e5b2eb42e0112701db0f">root_task</a>() {
+<a name="l00786"></a>00786             <span class="keywordflow">return</span> my_root_task;
+<a name="l00787"></a>00787         }
+<a name="l00788"></a>00788 
+<a name="l00789"></a>00789     <span class="keyword">private</span>:
+<a name="l00790"></a>00790 
+<a name="l00791"></a>00791         <a class="code" href="a00291.html">task</a> *my_root_task;
+<a name="l00792"></a>00792 
+<a name="l00793"></a>00793     };
+<a name="l00794"></a>00794 
+<a name="l00795"></a>00795 
+<a name="l00797"></a>00797     <span class="keyword">namespace </span>internal {
+<a name="l00798"></a>00798 
+<a name="l00800"></a>00800         <span class="keyword">template</span>< <span class="keyword">typename</span> Input, <span class="keyword">typename</span> Output >
+<a name="l00801"></a>00801         <span class="keyword">class </span>function_input : <span class="keyword">public</span> receiver<Input>, no_assign {
+<a name="l00802"></a>00802             <span class="keyword">typedef</span> sender<Input> predecessor_type;
+<a name="l00803"></a>00803             <span class="keyword">enum</span> op_stat {WAIT=0, SUCCEEDED, FAILED};
+<a name="l00804"></a>00804             <span class="keyword">enum</span> op_type {reg_pred, rem_pred, app_body, tryput, try_fwd};
+<a name="l00805"></a>00805 
+<a name="l00806"></a>00806         <span class="keyword">public</span>:
+<a name="l00808"></a>00808             <span class="keyword">typedef</span> Input input_type;
+<a name="l00810"></a>00810             <span class="keyword">typedef</span> Output output_type;
+<a name="l00811"></a>00811 
+<a name="l00813"></a>00813             <span class="keyword">template</span>< <span class="keyword">typename</span> Body >
+<a name="l00814"></a>00814             function_input( graph &g, size_t max_concurrency, Body& body )
+<a name="l00815"></a>00815                 : my_root_task(g.root_task()), my_max_concurrency(max_concurrency), my_concurrency(internal::node_state_idle),
+<a name="l00816"></a>00816                   my_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ),
+<a name="l00817"></a>00817                 forwarder_busy(false) {
+<a name="l00818"></a>00818                 my_predecessors.set_owner(<span class="keyword">this</span>);
+<a name="l00819"></a>00819                 my_aggregator.initialize_handler(my_functor_t(<span class="keyword">this</span>));
+<a name="l00820"></a>00820             }
+<a name="l00821"></a>00821 
+<a name="l00823"></a>00823             <span class="keyword">virtual</span> ~function_input() { <span class="keyword">delete</span> my_body; }
+<a name="l00824"></a>00824 
+<a name="l00826"></a>00826             <span class="keyword">virtual</span> <span class="keywordtype">bool</span> try_put( input_type t ) {
+<a name="l00827"></a>00827                <span class="keywordflow">if</span> ( my_max_concurrency == 0 ) {
+<a name="l00828"></a>00828                    spawn_body_task( t );
+<a name="l00829"></a>00829                    <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00830"></a>00830                } <span class="keywordflow">else</span> {
+<a name="l00831"></a>00831                    my_operation op_data(t, tryput);
+<a name="l00832"></a>00832                    my_aggregator.execute(&op_data);
+<a name="l00833"></a>00833                    <span class="keywordflow">return</span> op_data.status == SUCCEEDED;
+<a name="l00834"></a>00834                }
+<a name="l00835"></a>00835             }
+<a name="l00836"></a>00836 
+<a name="l00838"></a>00838             <span class="comment">/* override */</span> <span class="keywordtype">bool</span> register_predecessor( predecessor_type &src ) {
+<a name="l00839"></a>00839                 my_operation op_data(reg_pred);
+<a name="l00840"></a>00840                 op_data.r = &src;
+<a name="l00841"></a>00841                 my_aggregator.execute(&op_data);
+<a name="l00842"></a>00842                 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00843"></a>00843             }
+<a name="l00844"></a>00844 
+<a name="l00846"></a>00846             <span class="comment">/* override */</span> <span class="keywordtype">bool</span> remove_predecessor( predecessor_type &src ) {
+<a name="l00847"></a>00847                 my_operation op_data(rem_pred);
+<a name="l00848"></a>00848                 op_data.r = &src;
+<a name="l00849"></a>00849                 my_aggregator.execute(&op_data);
+<a name="l00850"></a>00850                 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00851"></a>00851             }
+<a name="l00852"></a>00852 
+<a name="l00853"></a>00853         <span class="keyword">protected</span>:
+<a name="l00854"></a>00854             task *my_root_task;
+<a name="l00855"></a>00855             <span class="keyword">const</span> size_t my_max_concurrency;
+<a name="l00856"></a>00856             size_t my_concurrency;
+<a name="l00857"></a>00857             function_body<input_type, output_type> *my_body;
+<a name="l00858"></a>00858             predecessor_cache<input_type, null_mutex > my_predecessors;
+<a name="l00859"></a>00859 
+<a name="l00860"></a>00860             <span class="keyword">virtual</span> broadcast_cache<output_type > &successors() = 0;
+<a name="l00861"></a>00861 
+<a name="l00862"></a>00862         <span class="keyword">private</span>:
+<a name="l00863"></a>00863             <span class="keyword">friend</span> <span class="keyword">class </span>apply_body_task< function_input< input_type, output_type >, input_type >;
+<a name="l00864"></a>00864             <span class="keyword">friend</span> <span class="keyword">class </span>forward_task< function_input< input_type, output_type > >;
+<a name="l00865"></a>00865 
+<a name="l00866"></a>00866             <span class="keyword">class </span>my_operation : <span class="keyword">public</span> aggregated_operation< my_operation > {
+<a name="l00867"></a>00867             <span class="keyword">public</span>:
+<a name="l00868"></a>00868                 <span class="keywordtype">char</span> type;
+<a name="l00869"></a>00869                 <span class="keyword">union </span>{
+<a name="l00870"></a>00870                     input_type *elem;
+<a name="l00871"></a>00871                     predecessor_type *r;
+<a name="l00872"></a>00872                 };
+<a name="l00873"></a>00873                 my_operation(<span class="keyword">const</span> input_type& e, op_type t) :
+<a name="l00874"></a>00874                     type(char(t)), elem(const_cast<input_type*>(&e)) {}
+<a name="l00875"></a>00875                 my_operation(op_type t) : type(char(t)), r(NULL) {}
+<a name="l00876"></a>00876             };
+<a name="l00877"></a>00877 
+<a name="l00878"></a>00878             <span class="keyword">class </span>my_functor_t {
+<a name="l00879"></a>00879                 function_input<input_type, output_type> *fi;
+<a name="l00880"></a>00880              <span class="keyword">public</span>:
+<a name="l00881"></a>00881                 my_functor_t() {}
+<a name="l00882"></a>00882                 my_functor_t(function_input<input_type, output_type> *fi_) : fi(fi_) {}
+<a name="l00883"></a>00883                 <span class="keywordtype">void</span> operator()(my_operation* op_list) {
+<a name="l00884"></a>00884                     fi->handle_operations(op_list);
+<a name="l00885"></a>00885                 }
+<a name="l00886"></a>00886             };
+<a name="l00887"></a>00887 
+<a name="l00888"></a>00888             <span class="keywordtype">bool</span> forwarder_busy;
+<a name="l00889"></a>00889             aggregator< my_functor_t, my_operation > my_aggregator;
+<a name="l00890"></a>00890 
+<a name="l00891"></a>00891             <span class="keywordtype">void</span> handle_operations(my_operation *op_list) {
+<a name="l00892"></a>00892                 my_operation *tmp;
+<a name="l00893"></a>00893                 <span class="keywordflow">while</span> (op_list) {
+<a name="l00894"></a>00894                     tmp = op_list;
+<a name="l00895"></a>00895                     op_list = op_list->next;
+<a name="l00896"></a>00896                     <span class="keywordflow">switch</span> (tmp->type) {
+<a name="l00897"></a>00897                     <span class="keywordflow">case</span> reg_pred:
+<a name="l00898"></a>00898                         my_predecessors.add(*(tmp->r));
+<a name="l00899"></a>00899                         __TBB_store_with_release(tmp->status, SUCCEEDED);
+<a name="l00900"></a>00900                         <span class="keywordflow">if</span> (!forwarder_busy) {
+<a name="l00901"></a>00901                             forwarder_busy = <span class="keyword">true</span>;
+<a name="l00902"></a>00902                             spawn_forward_task();
+<a name="l00903"></a>00903                         }
+<a name="l00904"></a>00904                         <span class="keywordflow">break</span>;
+<a name="l00905"></a>00905                     <span class="keywordflow">case</span> rem_pred:
+<a name="l00906"></a>00906                         my_predecessors.remove(*(tmp->r));
+<a name="l00907"></a>00907                         __TBB_store_with_release(tmp->status, SUCCEEDED);
+<a name="l00908"></a>00908                         <span class="keywordflow">break</span>;
+<a name="l00909"></a>00909                     <span class="keywordflow">case</span> app_body:
+<a name="l00910"></a>00910                         __TBB_ASSERT(my_max_concurrency != 0, NULL);
+<a name="l00911"></a>00911                         --my_concurrency;
+<a name="l00912"></a>00912                         __TBB_store_with_release(tmp->status, SUCCEEDED);
+<a name="l00913"></a>00913                         <span class="keywordflow">if</span> (my_concurrency<my_max_concurrency) {
+<a name="l00914"></a>00914                             input_type i;
+<a name="l00915"></a>00915                             <span class="keywordflow">if</span> (my_predecessors.get_item(i)) {
+<a name="l00916"></a>00916                                 ++my_concurrency;
+<a name="l00917"></a>00917                                 spawn_body_task(i);
+<a name="l00918"></a>00918                             }
+<a name="l00919"></a>00919                         }
+<a name="l00920"></a>00920                         <span class="keywordflow">break</span>;
+<a name="l00921"></a>00921                     <span class="keywordflow">case</span> tryput: internal_try_put(tmp);  <span class="keywordflow">break</span>;
+<a name="l00922"></a>00922                     <span class="keywordflow">case</span> try_fwd: internal_forward(tmp);  <span class="keywordflow">break</span>;
+<a name="l00923"></a>00923                     }
+<a name="l00924"></a>00924                 }
+<a name="l00925"></a>00925             }
+<a name="l00926"></a>00926 
+<a name="l00927"></a>00927 
+<a name="l00929"></a>00929             <span class="keywordtype">void</span> internal_try_put(my_operation *op) {
+<a name="l00930"></a>00930                 __TBB_ASSERT(my_max_concurrency != 0, NULL);
+<a name="l00931"></a>00931                 <span class="keywordflow">if</span> (my_concurrency < my_max_concurrency) {
+<a name="l00932"></a>00932                    ++my_concurrency;
+<a name="l00933"></a>00933                    spawn_body_task(*(op->elem));
+<a name="l00934"></a>00934                    __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l00935"></a>00935                } <span class="keywordflow">else</span> {
+<a name="l00936"></a>00936                    __TBB_store_with_release(op->status, FAILED);
+<a name="l00937"></a>00937                }
+<a name="l00938"></a>00938             }
+<a name="l00939"></a>00939 
+<a name="l00941"></a>00941             <span class="keywordtype">void</span> internal_forward(my_operation *op) {
+<a name="l00942"></a>00942                 <span class="keywordflow">if</span> (my_concurrency<my_max_concurrency || !my_max_concurrency) {
+<a name="l00943"></a>00943                     input_type i;
+<a name="l00944"></a>00944                     <span class="keywordflow">if</span> (my_predecessors.get_item(i)) {
+<a name="l00945"></a>00945                         ++my_concurrency;
+<a name="l00946"></a>00946                         __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l00947"></a>00947                         spawn_body_task(i);
+<a name="l00948"></a>00948                         <span class="keywordflow">return</span>;
+<a name="l00949"></a>00949                     }
+<a name="l00950"></a>00950                 }
+<a name="l00951"></a>00951                 __TBB_store_with_release(op->status, FAILED);
+<a name="l00952"></a>00952                 forwarder_busy = <span class="keyword">false</span>;
+<a name="l00953"></a>00953             }
+<a name="l00954"></a>00954 
+<a name="l00956"></a>00956             <span class="keywordtype">void</span> apply_body( input_type &i ) {
+<a name="l00957"></a>00957                 successors().try_put( (*my_body)(i) );
+<a name="l00958"></a>00958                 <span class="keywordflow">if</span> ( my_max_concurrency != 0 ) {
+<a name="l00959"></a>00959                     my_operation op_data(app_body);
+<a name="l00960"></a>00960                     my_aggregator.execute(&op_data);
+<a name="l00961"></a>00961                 }
+<a name="l00962"></a>00962             }
+<a name="l00963"></a>00963 
+<a name="l00965"></a>00965            <span class="keyword">inline</span> <span class="keywordtype">void</span> spawn_body_task( input_type &input ) {
+<a name="l00966"></a>00966                <a class="code" href="a00291.html#8365d063c0cc9d7bd616bca47256b93c">task::enqueue</a>(*<span class="keyword">new</span>(task::allocate_additional_child_of(*my_root_task)) apply_body_task<function_input<input_type, output_type>, input_type >(*<span class="keyword">this</span>, input));
+<a name="l00967"></a>00967            }
+<a name="l00968"></a>00968 
+<a name="l00970"></a>00970            <span class="keywordtype">void</span> forward() {
+<a name="l00971"></a>00971                my_operation op_data(try_fwd);
+<a name="l00972"></a>00972                <span class="keywordflow">do</span> {
+<a name="l00973"></a>00973                    op_data.status = WAIT;
+<a name="l00974"></a>00974                    my_aggregator.execute(&op_data);
+<a name="l00975"></a>00975                } <span class="keywordflow">while</span> (op_data.status == SUCCEEDED);
+<a name="l00976"></a>00976            }
+<a name="l00977"></a>00977 
+<a name="l00979"></a>00979            <span class="keyword">inline</span> <span class="keywordtype">void</span> spawn_forward_task() {
+<a name="l00980"></a>00980                <a class="code" href="a00291.html#8365d063c0cc9d7bd616bca47256b93c">task::enqueue</a>(*<span class="keyword">new</span>(task::allocate_additional_child_of(*my_root_task)) forward_task<function_input<input_type, output_type> >(*<span class="keyword">this</span>));
+<a name="l00981"></a>00981            }
+<a name="l00982"></a>00982         };
+<a name="l00983"></a>00983 
+<a name="l00985"></a>00985         <span class="keyword">template</span>< <span class="keyword">typename</span> Output >
+<a name="l00986"></a>00986         <span class="keyword">class </span>continue_input : <span class="keyword">public</span> continue_receiver {
+<a name="l00987"></a>00987         <span class="keyword">public</span>:
+<a name="l00988"></a>00988 
+<a name="l00990"></a>00990             <span class="keyword">typedef</span> continue_msg input_type;
+<a name="l00991"></a>00991     
+<a name="l00993"></a>00993             <span class="keyword">typedef</span> Output output_type;
+<a name="l00994"></a>00994 
+<a name="l00995"></a>00995             <span class="keyword">template</span>< <span class="keyword">typename</span> Body >
+<a name="l00996"></a>00996             continue_input( graph &g, Body& body )
+<a name="l00997"></a>00997                 : my_root_task(g.root_task()), 
+<a name="l00998"></a>00998                  my_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ) { }
+<a name="l00999"></a>00999 
+<a name="l01000"></a>01000             <span class="keyword">template</span>< <span class="keyword">typename</span> Body >
+<a name="l01001"></a>01001             continue_input( graph &g, <span class="keywordtype">int</span> number_of_predecessors, Body& body )
+<a name="l01002"></a>01002                 : continue_receiver( number_of_predecessors ), my_root_task(g.root_task()), 
+<a name="l01003"></a>01003                  my_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ) { }
+<a name="l01004"></a>01004 
+<a name="l01005"></a>01005         <span class="keyword">protected</span>:
+<a name="l01006"></a>01006 
+<a name="l01007"></a>01007             task *my_root_task;
+<a name="l01008"></a>01008             function_body<input_type, output_type> *my_body;
+<a name="l01009"></a>01009 
+<a name="l01010"></a>01010             <span class="keyword">virtual</span> broadcast_cache<output_type > &successors() = 0; 
+<a name="l01011"></a>01011 
+<a name="l01012"></a>01012             <span class="keyword">friend</span> <span class="keyword">class </span>apply_body_task< continue_input< Output >, continue_msg >;
+<a name="l01013"></a>01013 
+<a name="l01015"></a>01015             <span class="comment">/* override */</span> <span class="keywordtype">void</span> apply_body( input_type ) {
+<a name="l01016"></a>01016                 successors().try_put( (*my_body)( continue_msg() ) );
+<a name="l01017"></a>01017             }
+<a name="l01018"></a>01018 
+<a name="l01020"></a>01020             <span class="comment">/* override */</span> <span class="keywordtype">void</span> execute( ) {
+<a name="l01021"></a>01021                 <a class="code" href="a00291.html#8365d063c0cc9d7bd616bca47256b93c">task::enqueue</a>( * <span class="keyword">new</span> ( task::allocate_additional_child_of( *my_root_task ) ) 
+<a name="l01022"></a>01022                    apply_body_task< continue_input< Output >, continue_msg >( *<span class="keyword">this</span>, continue_msg() ) ); 
+<a name="l01023"></a>01023             }
+<a name="l01024"></a>01024         };
+<a name="l01025"></a>01025 
+<a name="l01027"></a>01027         <span class="keyword">template</span>< <span class="keyword">typename</span> Output >
+<a name="l01028"></a>01028         <span class="keyword">class </span>function_output : <span class="keyword">public</span> sender<Output> {
+<a name="l01029"></a>01029         <span class="keyword">public</span>:
+<a name="l01030"></a>01030 
+<a name="l01031"></a>01031             <span class="keyword">typedef</span> Output output_type;
+<a name="l01032"></a>01032 
+<a name="l01033"></a>01033             function_output() { }
+<a name="l01034"></a>01034 
+<a name="l01036"></a>01036             <span class="comment">/* override */</span> <span class="keywordtype">bool</span> register_successor( receiver<output_type> &r ) {
+<a name="l01037"></a>01037                 successors().register_successor( r );
+<a name="l01038"></a>01038                 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01039"></a>01039             }
+<a name="l01040"></a>01040 
+<a name="l01042"></a>01042             <span class="comment">/* override */</span> <span class="keywordtype">bool</span> remove_successor( receiver<output_type> &r ) {
+<a name="l01043"></a>01043                 successors().remove_successor( r );
+<a name="l01044"></a>01044                 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01045"></a>01045             }
+<a name="l01046"></a>01046   
+<a name="l01047"></a>01047         <span class="keyword">protected</span>:
+<a name="l01048"></a>01048 
+<a name="l01049"></a>01049             <span class="keyword">virtual</span> broadcast_cache<output_type > &successors() = 0; 
+<a name="l01050"></a>01050 
+<a name="l01051"></a>01051         };
+<a name="l01052"></a>01052 
+<a name="l01053"></a>01053     }
+<a name="l01055"></a>01055 
+<a name="l01057"></a>01057     <span class="keyword">template</span> < <span class="keyword">typename</span> Output >
+<a name="l01058"></a><a class="code" href="a00285.html">01058</a>     <span class="keyword">class </span><a class="code" href="a00285.html">source_node</a> : <span class="keyword">public</span> <a class="code" href="a00251.html">graph_node</a>, <span class="keyword">public</span> <a class="code" href="a00282.html">sender</a>< Output > {
+<a name="l01059"></a>01059     <span class="keyword">public</span>:
+<a name="l01060"></a>01060 
+<a name="l01062"></a><a class="code" href="a00285.html#c5a2c6ab64bcd798724976d7d75ba92f">01062</a>         <span class="keyword">typedef</span> Output <a class="code" href="a00285.html#c5a2c6ab64bcd798724976d7d75ba92f">output_type</a>;           
+<a name="l01063"></a>01063 
+<a name="l01065"></a><a class="code" href="a00285.html#217d72bbc6e7a4b35ef014dd9a15efca">01065</a>         <span class="keyword">typedef</span> <a class="code" href="a00277.html">receiver< Output ></a> <a class="code" href="a00277.html">successor_type</a>;
+<a name="l01066"></a>01066 
+<a name="l01068"></a>01068         <span class="keyword">template</span>< <span class="keyword">typename</span> Body >
+<a name="l01069"></a><a class="code" href="a00285.html#0513272133a06db6742873671af98f21">01069</a>         <a class="code" href="a00285.html#0513272133a06db6742873671af98f21">source_node</a>( <a class="code" href="a00250.html">graph</a> &g, Body body, <span class="keywordtype">bool</span> is_active = <span class="keyword">true</span> )
+<a name="l01070"></a>01070              : my_root_task(g.root_task()), my_state( is_active ? internal::node_state_idle : internal::node_state_inactive ),
+<a name="l01071"></a>01071               my_body( new internal::source_body_leaf< <a class="code" href="a00285.html#c5a2c6ab64bcd798724976d7d75ba92f">output_type</a>, Body>(body) ),
+<a name="l01072"></a>01072               my_reserved(false), my_has_cached_item(false) { 
+<a name="l01073"></a>01073             my_successors.set_owner(<span class="keyword">this</span>);
+<a name="l01074"></a>01074         }
+<a name="l01075"></a>01075 
+<a name="l01077"></a><a class="code" href="a00285.html#90c94a8a52cc3d19cf393ce289e80733">01077</a>         <a class="code" href="a00285.html#90c94a8a52cc3d19cf393ce289e80733">~source_node</a>() { <span class="keyword">delete</span> my_body; }
+<a name="l01078"></a>01078 
+<a name="l01080"></a><a class="code" href="a00285.html#ce601874ec5cbb0996f6dcb8e43badb8">01080</a>         <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00285.html#ce601874ec5cbb0996f6dcb8e43badb8">register_successor</a>( <a class="code" href="a00277.html">receiver<output_type></a> &r ) {
+<a name="l01081"></a>01081             <a class="code" href="a00287.html">spin_mutex::scoped_lock</a> lock(my_mutex);
+<a name="l01082"></a>01082             my_successors.register_successor(r);
+<a name="l01083"></a>01083             <span class="keywordflow">if</span> ( my_state != internal::node_state_inactive )
+<a name="l01084"></a>01084                 spawn_put();
+<a name="l01085"></a>01085             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01086"></a>01086         }
+<a name="l01087"></a>01087 
+<a name="l01089"></a><a class="code" href="a00285.html#de069bfc6fae7ed4e82b2a1fbb58b721">01089</a>         <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00285.html#de069bfc6fae7ed4e82b2a1fbb58b721">remove_successor</a>( <a class="code" href="a00277.html">receiver<output_type></a> &r ) {
+<a name="l01090"></a>01090             <a class="code" href="a00287.html">spin_mutex::scoped_lock</a> lock(my_mutex);
+<a name="l01091"></a>01091             my_successors.remove_successor(r);
+<a name="l01092"></a>01092             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01093"></a>01093         }
+<a name="l01094"></a>01094 
+<a name="l01096"></a><a class="code" href="a00285.html#0434d2933ad082d3c43a4ec774150511">01096</a>         <span class="comment">/*override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00285.html#0434d2933ad082d3c43a4ec774150511">try_get</a>( <a class="code" href="a00285.html#c5a2c6ab64bcd798724976d7d75ba92f">output_type</a> &v ) {
+<a name="l01097"></a>01097             <a class="code" href="a00287.html">spin_mutex::scoped_lock</a> lock(my_mutex);
+<a name="l01098"></a>01098             <span class="keywordflow">if</span> ( my_reserved )  
+<a name="l01099"></a>01099                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01100"></a>01100 
+<a name="l01101"></a>01101             <span class="keywordflow">if</span> ( my_has_cached_item ) {
+<a name="l01102"></a>01102                 v = my_cached_item;
+<a name="l01103"></a>01103                 my_has_cached_item = <span class="keyword">false</span>;
+<a name="l01104"></a>01104             } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( (*my_body)(v) == <span class="keyword">false</span> ) {
+<a name="l01105"></a>01105                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01106"></a>01106             }
+<a name="l01107"></a>01107             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01108"></a>01108         }
+<a name="l01109"></a>01109 
+<a name="l01111"></a><a class="code" href="a00285.html#ecac0bb52cff61912dcd186647ccd1bf">01111</a>         <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00285.html#ecac0bb52cff61912dcd186647ccd1bf">try_reserve</a>( <a class="code" href="a00285.html#c5a2c6ab64bcd798724976d7d75ba92f">output_type</a> &v ) {
+<a name="l01112"></a>01112             <a class="code" href="a00287.html">spin_mutex::scoped_lock</a> lock(my_mutex);
+<a name="l01113"></a>01113             <span class="keywordflow">if</span> ( my_reserved ) {
+<a name="l01114"></a>01114                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01115"></a>01115             }
+<a name="l01116"></a>01116 
+<a name="l01117"></a>01117             <span class="keywordflow">if</span> ( !my_has_cached_item && (*my_body)(my_cached_item) )  
+<a name="l01118"></a>01118                 my_has_cached_item = <span class="keyword">true</span>;
+<a name="l01119"></a>01119 
+<a name="l01120"></a>01120             <span class="keywordflow">if</span> ( my_has_cached_item ) {
+<a name="l01121"></a>01121                 v = my_cached_item;
+<a name="l01122"></a>01122                 my_reserved = <span class="keyword">true</span>;
+<a name="l01123"></a>01123                 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01124"></a>01124             } <span class="keywordflow">else</span> {
+<a name="l01125"></a>01125                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01126"></a>01126             }
+<a name="l01127"></a>01127         }
+<a name="l01128"></a>01128 
+<a name="l01130"></a>01130 
+<a name="l01131"></a><a class="code" href="a00285.html#3dd7e998aa3e7258b3b5731307df23a0">01131</a>         <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00285.html#3dd7e998aa3e7258b3b5731307df23a0">try_release</a>( ) {
+<a name="l01132"></a>01132             <a class="code" href="a00287.html">spin_mutex::scoped_lock</a> lock(my_mutex);
+<a name="l01133"></a>01133             __TBB_ASSERT( my_reserved && my_has_cached_item, <span class="stringliteral">"releasing non-existent reservation"</span> );
+<a name="l01134"></a>01134             my_reserved = <span class="keyword">false</span>;
+<a name="l01135"></a>01135             spawn_put();
+<a name="l01136"></a>01136             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01137"></a>01137         }
+<a name="l01138"></a>01138 
+<a name="l01140"></a><a class="code" href="a00285.html#809f51859ca4dd04204591d76c8572eb">01140</a>         <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00285.html#809f51859ca4dd04204591d76c8572eb">try_consume</a>( ) {
+<a name="l01141"></a>01141             <a class="code" href="a00287.html">spin_mutex::scoped_lock</a> lock(my_mutex);
+<a name="l01142"></a>01142             __TBB_ASSERT( my_reserved && my_has_cached_item, <span class="stringliteral">"consuming non-existent reservation"</span> );
+<a name="l01143"></a>01143             my_reserved = <span class="keyword">false</span>;
+<a name="l01144"></a>01144             my_has_cached_item = <span class="keyword">false</span>;
+<a name="l01145"></a>01145             <span class="keywordflow">if</span> ( !my_successors.empty() ) {
+<a name="l01146"></a>01146                 spawn_put();
+<a name="l01147"></a>01147             }
+<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><a class="code" href="a00285.html#d71ed386c53032463f3435f79a15b6ff">01152</a>         <span class="keywordtype">void</span> <a class="code" href="a00285.html#d71ed386c53032463f3435f79a15b6ff">activate</a>() {
+<a name="l01153"></a>01153             <a class="code" href="a00287.html">spin_mutex::scoped_lock</a> lock(my_mutex);
+<a name="l01154"></a>01154             my_state = internal::node_state_idle;
+<a name="l01155"></a>01155             <span class="keywordflow">if</span> ( !my_successors.empty() )
+<a name="l01156"></a>01156                 spawn_put();
+<a name="l01157"></a>01157         }
+<a name="l01158"></a>01158 
+<a name="l01159"></a>01159     <span class="keyword">private</span>:
+<a name="l01160"></a>01160 
+<a name="l01161"></a>01161         <a class="code" href="a00291.html">task</a> *my_root_task;
+<a name="l01162"></a>01162         <a class="code" href="a00286.html">spin_mutex</a> my_mutex;
+<a name="l01163"></a>01163         internal::node_state my_state;
+<a name="l01164"></a>01164         internal::source_body<output_type> *my_body;
+<a name="l01165"></a>01165         internal::broadcast_cache< output_type > my_successors;
+<a name="l01166"></a>01166         <span class="keywordtype">bool</span> my_reserved;
+<a name="l01167"></a>01167         <span class="keywordtype">bool</span> my_has_cached_item;
+<a name="l01168"></a>01168         <a class="code" href="a00285.html#c5a2c6ab64bcd798724976d7d75ba92f">output_type</a> my_cached_item;
+<a name="l01169"></a>01169 
+<a name="l01170"></a>01170         <span class="keyword">friend</span> <span class="keyword">class </span>internal::source_task< source_node< output_type > >;
+<a name="l01171"></a>01171 
+<a name="l01173"></a>01173         <span class="comment">/* override */</span> <span class="keywordtype">void</span> apply_body( ) {
+<a name="l01174"></a>01174             output_type v;
+<a name="l01175"></a>01175             <span class="keywordflow">if</span> ( <a class="code" href="a00285.html#ecac0bb52cff61912dcd186647ccd1bf">try_reserve</a>(v) == <span class="keyword">false</span> )
+<a name="l01176"></a>01176                 <span class="keywordflow">return</span>;
+<a name="l01177"></a>01177 
+<a name="l01178"></a>01178             <span class="keywordflow">if</span> ( my_successors.try_put( v ) ) 
+<a name="l01179"></a>01179                 <a class="code" href="a00285.html#809f51859ca4dd04204591d76c8572eb">try_consume</a>();
+<a name="l01180"></a>01180             <span class="keywordflow">else</span>
+<a name="l01181"></a>01181                 <a class="code" href="a00285.html#3dd7e998aa3e7258b3b5731307df23a0">try_release</a>();
+<a name="l01182"></a>01182         }
+<a name="l01183"></a>01183 
+<a name="l01185"></a>01185         <span class="comment">/* override */</span> <span class="keywordtype">void</span> spawn_put( ) {
+<a name="l01186"></a>01186             <a class="code" href="a00291.html#8365d063c0cc9d7bd616bca47256b93c">task::enqueue</a>( * <span class="keyword">new</span> ( task::allocate_additional_child_of( *my_root_task ) ) 
+<a name="l01187"></a>01187                internal::source_task< source_node< output_type > >( *<span class="keyword">this</span> ) ); 
+<a name="l01188"></a>01188         }
+<a name="l01189"></a>01189 
+<a name="l01190"></a>01190     };
+<a name="l01191"></a>01191 
+<a name="l01193"></a>01193     <span class="keyword">template</span> <<span class="keyword">typename</span> Input, <span class="keyword">typename</span> Output = continue_msg >
+<a name="l01194"></a><a class="code" href="a00249.html">01194</a>     <span class="keyword">class </span><a class="code" href="a00249.html">function_node</a> : <span class="keyword">public</span> <a class="code" href="a00251.html">graph_node</a>, <span class="keyword">public</span> internal::function_input<Input,Output>, <span class="keyword">public</span> internal::function_output<Output> {
+<a name="l01195"></a>01195     <span class="keyword">public</span>:
+<a name="l01196"></a>01196 
+<a name="l01197"></a>01197         <span class="keyword">typedef</span> Input input_type;
+<a name="l01198"></a>01198         <span class="keyword">typedef</span> Output output_type;
+<a name="l01199"></a>01199         <span class="keyword">typedef</span> <a class="code" href="a00282.html">sender< input_type ></a> <a class="code" href="a00282.html">predecessor_type</a>;
+<a name="l01200"></a>01200         <span class="keyword">typedef</span> <a class="code" href="a00277.html">receiver< output_type ></a> <a class="code" href="a00277.html">successor_type</a>;
+<a name="l01201"></a>01201 
+<a name="l01203"></a>01203         <span class="keyword">template</span>< <span class="keyword">typename</span> Body >
+<a name="l01204"></a><a class="code" href="a00249.html#7bde12e8ee43d4cafbdd5b1fc2031e2b">01204</a>         <a class="code" href="a00249.html#7bde12e8ee43d4cafbdd5b1fc2031e2b">function_node</a>( <a class="code" href="a00250.html">graph</a> &g, size_t concurrency, Body body )
+<a name="l01205"></a>01205         : internal::function_input<input_type,output_type>( g, concurrency, body ) {
+<a name="l01206"></a>01206             my_successors.set_owner(<span class="keyword">this</span>);
+<a name="l01207"></a>01207         }
+<a name="l01208"></a>01208 
+<a name="l01209"></a>01209     <span class="keyword">protected</span>:
+<a name="l01210"></a>01210 
+<a name="l01211"></a>01211         internal::broadcast_cache<output_type> my_successors; 
+<a name="l01212"></a>01212         <span class="comment">/* override */</span> internal::broadcast_cache<output_type> &successors () { <span class="keywordflow">return</span> my_successors; }
+<a name="l01213"></a>01213 
+<a name="l01214"></a>01214     };
+<a name="l01215"></a>01215 
+<a name="l01217"></a>01217     <span class="keyword">template</span> <<span class="keyword">typename</span> Output>
+<a name="l01218"></a><a class="code" href="a00244.html">01218</a>     <span class="keyword">class </span><a class="code" href="a00244.html">executable_node</a> : <span class="keyword">public</span> <a class="code" href="a00251.html">graph_node</a>, <span class="keyword">public</span> internal::continue_input<Output>, <span class="keyword">public</span> internal::function_output<Output> {
+<a name="l01219"></a>01219     <span class="keyword">public</span>:
+<a name="l01220"></a>01220 
+<a name="l01221"></a>01221         <span class="keyword">typedef</span> continue_msg input_type;
+<a name="l01222"></a>01222         <span class="keyword">typedef</span> Output output_type;
+<a name="l01223"></a>01223         <span class="keyword">typedef</span> <a class="code" href="a00282.html">sender< input_type ></a> <a class="code" href="a00282.html">predecessor_type</a>;
+<a name="l01224"></a>01224         <span class="keyword">typedef</span> <a class="code" href="a00277.html">receiver< output_type ></a> <a class="code" href="a00277.html">successor_type</a>;
+<a name="l01225"></a>01225 
+<a name="l01227"></a>01227          <span class="keyword">template</span> <<span class="keyword">typename</span> Body >
+<a name="l01228"></a><a class="code" href="a00244.html#73d4304b322a25ed0df468e607dd1dac">01228</a>          <a class="code" href="a00244.html#73d4304b322a25ed0df468e607dd1dac">executable_node</a>( <a class="code" href="a00250.html">graph</a> &g, Body body )
+<a name="l01229"></a>01229                  : internal::continue_input<output_type>( g, body ) {
+<a name="l01230"></a>01230              my_successors.set_owner(<span class="keyword">this</span>);
+<a name="l01231"></a>01231          }
+<a name="l01232"></a>01232 
+<a name="l01234"></a>01234          <span class="keyword">template</span> <<span class="keyword">typename</span> Body >
+<a name="l01235"></a><a class="code" href="a00244.html#c13030111d34feeafd9cdb1dd21584f1">01235</a>          <a class="code" href="a00244.html#73d4304b322a25ed0df468e607dd1dac">executable_node</a>( <a class="code" href="a00250.html">graph</a> &g, <span class="keywordtype">int</span> number_of_predecessors, Body body )
+<a name="l01236"></a>01236                  : internal::continue_input<output_type>( g, number_of_predecessors, body ) {
+<a name="l01237"></a>01237              my_successors.set_owner(<span class="keyword">this</span>);
+<a name="l01238"></a>01238          }
+<a name="l01239"></a>01239 
+<a name="l01240"></a>01240     <span class="keyword">protected</span>:
+<a name="l01241"></a>01241 
+<a name="l01242"></a>01242         internal::broadcast_cache<output_type> my_successors; 
+<a name="l01243"></a>01243         <span class="comment">/* override */</span> internal::broadcast_cache<output_type> &successors () { <span class="keywordflow">return</span> my_successors; }
+<a name="l01244"></a>01244 
+<a name="l01245"></a>01245     };
+<a name="l01246"></a>01246 
+<a name="l01247"></a>01247 
+<a name="l01248"></a>01248 
+<a name="l01249"></a>01249     <span class="keyword">template</span>< <span class="keyword">typename</span> T >
+<a name="l01250"></a>01250     <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>, internal::no_copy {
+<a name="l01251"></a>01251     <span class="keyword">public</span>:
+<a name="l01252"></a>01252 
+<a name="l01253"></a>01253         <span class="keyword">typedef</span> T input_type;
+<a name="l01254"></a>01254         <span class="keyword">typedef</span> T output_type;
+<a name="l01255"></a>01255         <span class="keyword">typedef</span> sender< input_type > predecessor_type;
+<a name="l01256"></a>01256         <span class="keyword">typedef</span> receiver< output_type > successor_type;
+<a name="l01257"></a>01257 
+<a name="l01258"></a>01258         overwrite_node() : my_buffer_is_valid(false) {
+<a name="l01259"></a>01259             my_successors.set_owner( <span class="keyword">this</span> );
+<a name="l01260"></a>01260         }
+<a name="l01261"></a>01261 
+<a name="l01262"></a>01262         ~overwrite_node() {}
+<a name="l01263"></a>01263 
+<a name="l01264"></a>01264         <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00282.html#be48ac70174cf8e08e2b0279cd6343d3">register_successor</a>( successor_type &s ) {
+<a name="l01265"></a>01265             spin_mutex::scoped_lock l( my_mutex );
+<a name="l01266"></a>01266             <span class="keywordflow">if</span> ( my_buffer_is_valid ) {
+<a name="l01267"></a>01267                 <span class="comment">// We have a valid value that must be forwarded immediately.</span>
+<a name="l01268"></a>01268                 <span class="keywordflow">if</span> ( s.try_put( my_buffer ) || !s.register_predecessor( *<span class="keyword">this</span>  ) ) {
+<a name="l01269"></a>01269                     <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="l01270"></a>01270                     my_successors.register_successor( s );
+<a name="l01271"></a>01271                     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01272"></a>01272                 } <span class="keywordflow">else</span> {
+<a name="l01273"></a>01273                     <span class="comment">// We don't add the successor: it rejected our put and we became its predecessor instead</span>
+<a name="l01274"></a>01274                     <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01275"></a>01275                 }
+<a name="l01276"></a>01276             } <span class="keywordflow">else</span> {
+<a name="l01277"></a>01277                 <span class="comment">// No valid value yet, just add as successor</span>
+<a name="l01278"></a>01278                 my_successors.register_successor( s );
+<a name="l01279"></a>01279                 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01280"></a>01280             }
+<a name="l01281"></a>01281         }
+<a name="l01282"></a>01282 
+<a name="l01283"></a>01283         <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00282.html#3f345427e812e8741370308ff88f30bf">remove_successor</a>( successor_type &s ) {
+<a name="l01284"></a>01284             spin_mutex::scoped_lock l( my_mutex );
+<a name="l01285"></a>01285             my_successors.remove_successor(s);
+<a name="l01286"></a>01286             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01287"></a>01287         }
+<a name="l01288"></a>01288 
+<a name="l01289"></a>01289         <span class="comment">/* override */</span> <span class="keywordtype">bool</span> try_put( T v ) {
+<a name="l01290"></a>01290             spin_mutex::scoped_lock l( my_mutex );
+<a name="l01291"></a>01291             my_buffer = v;
+<a name="l01292"></a>01292             my_buffer_is_valid = <span class="keyword">true</span>;
+<a name="l01293"></a>01293             my_successors.try_put(v);
+<a name="l01294"></a>01294             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01295"></a>01295         }
+<a name="l01296"></a>01296 
+<a name="l01297"></a>01297         <span class="comment">/* override */</span> <span class="keywordtype">bool</span> try_get( T &v ) {
+<a name="l01298"></a>01298             spin_mutex::scoped_lock l( my_mutex );
+<a name="l01299"></a>01299             <span class="keywordflow">if</span> ( my_buffer_is_valid ) {
+<a name="l01300"></a>01300                 v = my_buffer;
+<a name="l01301"></a>01301                 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01302"></a>01302             } <span class="keywordflow">else</span> {
+<a name="l01303"></a>01303                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01304"></a>01304             }
+<a name="l01305"></a>01305         }
+<a name="l01306"></a>01306 
+<a name="l01307"></a>01307         <span class="keywordtype">bool</span> is_valid() {
+<a name="l01308"></a>01308            spin_mutex::scoped_lock l( my_mutex );
+<a name="l01309"></a>01309            <span class="keywordflow">return</span> my_buffer_is_valid;
+<a name="l01310"></a>01310         }
+<a name="l01311"></a>01311 
+<a name="l01312"></a>01312         <span class="keywordtype">void</span> clear() {
+<a name="l01313"></a>01313            spin_mutex::scoped_lock l( my_mutex );
+<a name="l01314"></a>01314            my_buffer_is_valid = <span class="keyword">false</span>;
+<a name="l01315"></a>01315         }
+<a name="l01316"></a>01316 
+<a name="l01317"></a>01317     <span class="keyword">protected</span>:
+<a name="l01318"></a>01318 
+<a name="l01319"></a>01319         spin_mutex my_mutex;
+<a name="l01320"></a>01320         internal::broadcast_cache< T, null_rw_mutex > my_successors;
+<a name="l01321"></a>01321         T my_buffer;
+<a name="l01322"></a>01322         <span class="keywordtype">bool</span> my_buffer_is_valid;
+<a name="l01323"></a>01323 
+<a name="l01324"></a>01324     };
+<a name="l01325"></a>01325 
+<a name="l01326"></a>01326     <span class="keyword">template</span>< <span class="keyword">typename</span> T >
+<a name="l01327"></a>01327     <span class="keyword">class </span>write_once_node : <span class="keyword">public</span> overwrite_node<T> {
+<a name="l01328"></a>01328     <span class="keyword">public</span>:
+<a name="l01329"></a>01329 
+<a name="l01330"></a>01330         <span class="keyword">typedef</span> T input_type;
+<a name="l01331"></a>01331         <span class="keyword">typedef</span> T output_type;
+<a name="l01332"></a>01332         <span class="keyword">typedef</span> sender< input_type > predecessor_type;
+<a name="l01333"></a>01333         <span class="keyword">typedef</span> receiver< output_type > successor_type;
+<a name="l01334"></a>01334 
+<a name="l01335"></a>01335         <span class="comment">/* override */</span> <span class="keywordtype">bool</span> try_put( T v ) {
+<a name="l01336"></a>01336             spin_mutex::scoped_lock l( this->my_mutex );
+<a name="l01337"></a>01337             <span class="keywordflow">if</span> ( this->my_buffer_is_valid ) {
+<a name="l01338"></a>01338                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01339"></a>01339             } <span class="keywordflow">else</span> {
+<a name="l01340"></a>01340                 this->my_buffer = v;
+<a name="l01341"></a>01341                 this->my_buffer_is_valid = <span class="keyword">true</span>;
+<a name="l01342"></a>01342                 this->my_successors.try_put(v);
+<a name="l01343"></a>01343                 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01344"></a>01344             }
+<a name="l01345"></a>01345         }
+<a name="l01346"></a>01346     };
+<a name="l01347"></a>01347 
+<a name="l01349"></a>01349 
+<a name="l01350"></a><a class="code" href="a00240.html">01350</a>     <span class="keyword">class </span><a class="code" href="a00240.html">continue_node</a> : <span class="keyword">public</span> <a class="code" href="a00244.html">executable_node</a>< continue_msg > { 
+<a name="l01351"></a>01351     <span class="keyword">public</span>:
+<a name="l01352"></a>01352 
+<a name="l01353"></a>01353         <span class="keyword">typedef</span> continue_msg input_type;
+<a name="l01354"></a>01354         <span class="keyword">typedef</span> continue_msg output_type;
+<a name="l01355"></a>01355         <span class="keyword">typedef</span> <a class="code" href="a00282.html">sender< input_type ></a> <a class="code" href="a00282.html">predecessor_type</a>;
+<a name="l01356"></a>01356         <span class="keyword">typedef</span> <a class="code" href="a00277.html">receiver< output_type ></a> <a class="code" href="a00277.html">successor_type</a>;
+<a name="l01357"></a>01357 
+<a name="l01358"></a>01358         <a class="code" href="a00240.html">continue_node</a>( <a class="code" href="a00250.html">graph</a> &g ) : <a class="code" href="a00244.html">executable_node<continue_msg></a>( g, internal::empty_body< continue_msg, continue_msg>() ) {}
+<a name="l01359"></a>01359     };
+<a name="l01360"></a>01360 
+<a name="l01362"></a>01362     <span class="keyword">template</span> <<span class="keyword">typename</span> T>
+<a name="l01363"></a><a class="code" href="a00224.html">01363</a>     <span class="keyword">class </span><a class="code" href="a00224.html">broadcast_node</a> : <span class="keyword">public</span> <a class="code" href="a00251.html">graph_node</a>, <span class="keyword">public</span> <a class="code" href="a00277.html">receiver</a><T>, <span class="keyword">public</span> <a class="code" href="a00282.html">sender</a><T>, internal::no_copy {
+<a name="l01364"></a>01364 
+<a name="l01365"></a>01365         internal::broadcast_cache<T> my_successors;
+<a name="l01366"></a>01366 
+<a name="l01367"></a>01367     <span class="keyword">public</span>:
+<a name="l01368"></a>01368 
+<a name="l01369"></a><a class="code" href="a00224.html#59ea89dbeab816742e6dc6af467e6c3f">01369</a>         <span class="keyword">typedef</span> T <a class="code" href="a00224.html#59ea89dbeab816742e6dc6af467e6c3f">input_type</a>;
+<a name="l01370"></a><a class="code" href="a00224.html#b844ca1ee578a54bc11ff28467b12e7d">01370</a>         <span class="keyword">typedef</span> T output_type;
+<a name="l01371"></a><a class="code" href="a00224.html#4dd13b81f6361fc244abe7cbcacd048c">01371</a>         <span class="keyword">typedef</span> <a class="code" href="a00282.html">sender< input_type ></a> <a class="code" href="a00282.html">predecessor_type</a>;
+<a name="l01372"></a><a class="code" href="a00224.html#453928c367d813cb481f1b9aa1e1742a">01372</a>         <span class="keyword">typedef</span> <a class="code" href="a00277.html">receiver< output_type ></a> <a class="code" href="a00277.html">successor_type</a>;
+<a name="l01373"></a>01373 
+<a name="l01374"></a>01374         <a class="code" href="a00224.html">broadcast_node</a>( ) {
+<a name="l01375"></a>01375            my_successors.set_owner( <span class="keyword">this</span> ); 
+<a name="l01376"></a>01376         }
+<a name="l01377"></a>01377 
+<a name="l01379"></a><a class="code" href="a00224.html#3f4149fa6b984b2138cb5ed40a2ddc6c">01379</a>         <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="a00224.html#3f4149fa6b984b2138cb5ed40a2ddc6c">register_successor</a>( <a class="code" href="a00277.html">receiver<T></a> &r ) {
+<a name="l01380"></a>01380             my_successors.register_successor( r );
+<a name="l01381"></a>01381             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01382"></a>01382         }
+<a name="l01383"></a>01383 
+<a name="l01385"></a><a class="code" href="a00224.html#eefb3210bb9727765ea7385ba163c2a6">01385</a>         <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="a00224.html#eefb3210bb9727765ea7385ba163c2a6">remove_successor</a>( <a class="code" href="a00277.html">receiver<T></a> &r ) {
+<a name="l01386"></a>01386             my_successors.remove_successor( r );
+<a name="l01387"></a>01387             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01388"></a>01388         }
+<a name="l01389"></a>01389 
+<a name="l01390"></a><a class="code" href="a00224.html#9b211e02554d6b39dc04f7e7f4e00073">01390</a>         <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00224.html#9b211e02554d6b39dc04f7e7f4e00073">try_put</a>( T t ) {
+<a name="l01391"></a>01391             my_successors.try_put(t);
+<a name="l01392"></a>01392             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01393"></a>01393         }
+<a name="l01394"></a>01394 
+<a name="l01395"></a>01395     };
+<a name="l01396"></a>01396 
+<a name="l01397"></a>01397 
+<a name="l01399"></a>01399     <span class="keyword">template</span> <<span class="keyword">typename</span> T>
+<a name="l01400"></a><a class="code" href="a00225.html">01400</a>     <span class="keyword">class </span><a class="code" href="a00225.html">buffer_node</a> : <span class="keyword">public</span> <a class="code" href="a00251.html">graph_node</a>, <span class="keyword">public</span> <a class="code" href="a00277.html">receiver</a><T>, <span class="keyword">public</span> <a class="code" href="a00282.html">sender</a><T>, internal::no_copy {
+<a name="l01401"></a>01401     <span class="keyword">public</span>:
+<a name="l01402"></a><a class="code" href="a00225.html#90de308ba6abefb74c537a62ed0f1ca3">01402</a>         <span class="keyword">typedef</span> T <a class="code" href="a00225.html#90de308ba6abefb74c537a62ed0f1ca3">input_type</a>;
+<a name="l01403"></a><a class="code" href="a00225.html#28c06a61dbad153f2e989efbf43016c5">01403</a>         <span class="keyword">typedef</span> T output_type;
+<a name="l01404"></a><a class="code" href="a00225.html#688cf819089ee2fac2b9de2e050adea7">01404</a>         <span class="keyword">typedef</span> <a class="code" href="a00282.html">sender< input_type ></a> <a class="code" href="a00282.html">predecessor_type</a>;
+<a name="l01405"></a><a class="code" href="a00225.html#5e23f4f377ff4e1f53e71fd909a65771">01405</a>         <span class="keyword">typedef</span> <a class="code" href="a00277.html">receiver< output_type ></a> <a class="code" href="a00277.html">successor_type</a>;
+<a name="l01406"></a>01406     <span class="keyword">protected</span>:
+<a name="l01407"></a>01407         <span class="keyword">typedef</span> size_t size_type;
+<a name="l01408"></a>01408         <span class="keyword">typedef</span> std::pair< T, bool > item_type;
+<a name="l01409"></a>01409 
+<a name="l01410"></a>01410         internal::round_robin_cache< T, null_rw_mutex > my_successors;
+<a name="l01411"></a>01411 
+<a name="l01412"></a>01412         <a class="code" href="a00291.html">task</a> *my_parent;
+<a name="l01413"></a>01413         item_type *my_array;
+<a name="l01414"></a>01414         size_type my_array_size;
+<a name="l01415"></a>01415         <span class="keyword">static</span> <span class="keyword">const</span> size_type initial_buffer_size = 4;
+<a name="l01416"></a>01416         size_type my_head;
+<a name="l01417"></a>01417         size_type my_tail;
+<a name="l01418"></a>01418         <a class="code" href="a00286.html">spin_mutex</a> my_mutex;
+<a name="l01419"></a>01419         <span class="keywordtype">bool</span> my_reserved;
+<a name="l01420"></a>01420         size_type my_reserved_id;
+<a name="l01421"></a>01421 
+<a name="l01422"></a>01422         <span class="keyword">friend</span> <span class="keyword">class </span>internal::forward_task< buffer_node< T > >;
+<a name="l01423"></a>01423 
+<a name="l01424"></a>01424         <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="l01425"></a>01425         <span class="keyword">enum</span> op_stat {WAIT=0, SUCCEEDED, FAILED};
+<a name="l01426"></a>01426 
+<a name="l01427"></a>01427         <span class="comment">// implements the aggregator_operation concept</span>
+<a name="l01428"></a>01428         <span class="keyword">class </span>buffer_operation : <span class="keyword">public</span> internal::aggregated_operation< buffer_operation > {
+<a name="l01429"></a>01429         <span class="keyword">public</span>:
+<a name="l01430"></a>01430             <span class="keywordtype">char</span> type;
+<a name="l01431"></a>01431             T *elem;
+<a name="l01432"></a>01432             <a class="code" href="a00225.html#5e23f4f377ff4e1f53e71fd909a65771">successor_type</a> *r;
+<a name="l01433"></a>01433             buffer_operation(<span class="keyword">const</span> T& e, op_type t) :
+<a name="l01434"></a>01434                 type(char(t)), elem(const_cast<T*>(&e)), r(NULL) {}
+<a name="l01435"></a>01435             buffer_operation(op_type t) : type(char(t)), r(NULL) {}
+<a name="l01436"></a>01436         };
+<a name="l01437"></a>01437 
+<a name="l01438"></a>01438         <span class="keyword">class </span>my_functor_t {
+<a name="l01439"></a>01439             buffer_node<T> *bfr;
+<a name="l01440"></a>01440         <span class="keyword">public</span>:
+<a name="l01441"></a>01441             my_functor_t(buffer_node<T> *bfr_) : bfr(bfr_) {}
+<a name="l01442"></a>01442             my_functor_t() {}
+<a name="l01443"></a>01443             <span class="keywordtype">void</span> operator()(buffer_operation* op_list) {
+<a name="l01444"></a>01444                 bfr->handle_operations(op_list);
+<a name="l01445"></a>01445             }
+<a name="l01446"></a>01446         };
+<a name="l01447"></a>01447 
+<a name="l01448"></a>01448         <span class="keywordtype">bool</span> forwarder_busy;
+<a name="l01449"></a>01449         internal::aggregator< my_functor_t, buffer_operation> my_aggregator;
+<a name="l01450"></a>01450 
+<a name="l01451"></a>01451         <span class="keyword">virtual</span> <span class="keywordtype">void</span> handle_operations(buffer_operation *op_list) {
+<a name="l01452"></a>01452             buffer_operation *tmp;
+<a name="l01453"></a>01453             <span class="keywordtype">bool</span> try_forwarding=<span class="keyword">false</span>;
+<a name="l01454"></a>01454             <span class="keywordflow">while</span> (op_list) {
+<a name="l01455"></a>01455                 tmp = op_list;
+<a name="l01456"></a>01456                 op_list = op_list->next;
+<a name="l01457"></a>01457                 <span class="keywordflow">switch</span> (tmp->type) {
+<a name="l01458"></a>01458                 <span class="keywordflow">case</span> reg_succ: <a class="code" href="a00225.html#017f16c8d6e0fb65d0d3a61aec86b3e2">internal_reg_succ</a>(tmp);  try_forwarding = <span class="keyword">true</span>; <span class="keywordflow">break</span>;
+<a name="l01459"></a>01459                 <span class="keywordflow">case</span> rem_succ: <a class="code" href="a00225.html#a75f731cf9fc93f7487eb72de3fcf7b1">internal_rem_succ</a>(tmp); <span class="keywordflow">break</span>;
+<a name="l01460"></a>01460                 <span class="keywordflow">case</span> req_item: internal_pop(tmp); <span class="keywordflow">break</span>;
+<a name="l01461"></a>01461                 <span class="keywordflow">case</span> res_item: internal_reserve(tmp); <span class="keywordflow">break</span>;
+<a name="l01462"></a>01462                 <span class="keywordflow">case</span> rel_res:  internal_release(tmp);  try_forwarding = <span class="keyword">true</span>; <span class="keywordflow">break</span>;
+<a name="l01463"></a>01463                 <span class="keywordflow">case</span> con_res:  internal_consume(tmp);  try_forwarding = <span class="keyword">true</span>; <span class="keywordflow">break</span>;
+<a name="l01464"></a>01464                 <span class="keywordflow">case</span> put_item: internal_push(tmp);  try_forwarding = <span class="keyword">true</span>; <span class="keywordflow">break</span>;
+<a name="l01465"></a>01465                 <span class="keywordflow">case</span> try_fwd:  <a class="code" href="a00225.html#a3cb61d8a98bc4bc860b1cb04944b4f8">internal_forward</a>(tmp); <span class="keywordflow">break</span>;
+<a name="l01466"></a>01466                 }
+<a name="l01467"></a>01467             }
+<a name="l01468"></a>01468             <span class="keywordflow">if</span> (try_forwarding && !forwarder_busy) {
+<a name="l01469"></a>01469                 forwarder_busy = <span class="keyword">true</span>;
+<a name="l01470"></a>01470                 <a class="code" href="a00291.html#8365d063c0cc9d7bd616bca47256b93c">task::enqueue</a>(*<span class="keyword">new</span>(task::allocate_additional_child_of(*my_parent)) internal::forward_task< buffer_node<input_type> >(*<span class="keyword">this</span>));
+<a name="l01471"></a>01471             }
+<a name="l01472"></a>01472         }
+<a name="l01473"></a>01473 
+<a name="l01475"></a><a class="code" href="a00225.html#3a31b3b55bee417de3af09c7b45b9ad6">01475</a>         <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="a00225.html#3a31b3b55bee417de3af09c7b45b9ad6">forward</a>() {
+<a name="l01476"></a>01476             buffer_operation op_data(try_fwd);
+<a name="l01477"></a>01477             <span class="keywordflow">do</span> {
+<a name="l01478"></a>01478                 op_data.status = WAIT;
+<a name="l01479"></a>01479                 my_aggregator.execute(&op_data);
+<a name="l01480"></a>01480             } <span class="keywordflow">while</span> (op_data.status == SUCCEEDED);
+<a name="l01481"></a>01481         }
+<a name="l01482"></a>01482 
+<a name="l01484"></a><a class="code" href="a00225.html#017f16c8d6e0fb65d0d3a61aec86b3e2">01484</a>         <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="a00225.html#017f16c8d6e0fb65d0d3a61aec86b3e2">internal_reg_succ</a>(buffer_operation *op) {
+<a name="l01485"></a>01485             my_successors.register_successor(*(op->r));
+<a name="l01486"></a>01486             __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01487"></a>01487         }
+<a name="l01488"></a>01488 
+<a name="l01490"></a><a class="code" href="a00225.html#a75f731cf9fc93f7487eb72de3fcf7b1">01490</a>         <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="a00225.html#a75f731cf9fc93f7487eb72de3fcf7b1">internal_rem_succ</a>(buffer_operation *op) {
+<a name="l01491"></a>01491             my_successors.remove_successor(*(op->r));
+<a name="l01492"></a>01492             __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01493"></a>01493         }
+<a name="l01494"></a>01494 
+<a name="l01496"></a><a class="code" href="a00225.html#a3cb61d8a98bc4bc860b1cb04944b4f8">01496</a>         <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="a00225.html#a3cb61d8a98bc4bc860b1cb04944b4f8">internal_forward</a>(buffer_operation *op) {
+<a name="l01497"></a>01497             T i_copy;
+<a name="l01498"></a>01498             <span class="keywordtype">bool</span> success = <span class="keyword">false</span>; <span class="comment">// flagged when a successor accepts</span>
+<a name="l01499"></a>01499             size_type counter = my_successors.size();
+<a name="l01500"></a>01500             <span class="comment">// Try forwarding, giving each successor a chance</span>
+<a name="l01501"></a>01501             <span class="keywordflow">while</span> (counter>0 && my_tail>my_head && my_array[ (my_tail-1) & (my_array_size-1)].second == <span class="keyword">true</span> ) {
+<a name="l01502"></a>01502                 i_copy = my_array[ (my_tail-1) & (my_array_size-1)].first;
+<a name="l01503"></a>01503                 <span class="keywordtype">bool</span> msg = my_successors.try_put(i_copy);
+<a name="l01504"></a>01504                 <span class="keywordflow">if</span> ( msg == <span class="keyword">true</span> ) {
+<a name="l01505"></a>01505                     my_array[ (my_tail-1) & (my_array_size-1)].second = <span class="keyword">false</span>;
+<a name="l01506"></a>01506                     --my_tail;
+<a name="l01507"></a>01507                     success = <span class="keyword">true</span>; <span class="comment">// found an accepting successor</span>
+<a name="l01508"></a>01508                 }
+<a name="l01509"></a>01509                 --counter;
+<a name="l01510"></a>01510             }
+<a name="l01511"></a>01511             <span class="keywordflow">if</span> (success && !counter)
+<a name="l01512"></a>01512                 __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01513"></a>01513             <span class="keywordflow">else</span> {
+<a name="l01514"></a>01514                 __TBB_store_with_release(op->status, FAILED);
+<a name="l01515"></a>01515                 forwarder_busy = <span class="keyword">false</span>;
+<a name="l01516"></a>01516             }
+<a name="l01517"></a>01517         }
+<a name="l01518"></a>01518 
+<a name="l01519"></a>01519         <span class="keyword">virtual</span> <span class="keywordtype">void</span> internal_push(buffer_operation *op) {
+<a name="l01520"></a>01520             <span class="keywordflow">while</span>( my_tail-my_head >= my_array_size ) {
+<a name="l01521"></a>01521                 <a class="code" href="a00225.html#3ec9d33aa9f1e9292d5952e3eb477ca1">grow_my_array</a>( my_tail - my_head + 1 );
+<a name="l01522"></a>01522             }
+<a name="l01523"></a>01523             my_array[my_tail&(my_array_size-1)] = std::make_pair( *(op->elem), <span class="keyword">true</span> );
+<a name="l01524"></a>01524             ++my_tail;
+<a name="l01525"></a>01525             __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01526"></a>01526         }
+<a name="l01527"></a>01527         <span class="keyword">virtual</span> <span class="keywordtype">void</span> internal_pop(buffer_operation *op) {
+<a name="l01528"></a>01528             <span class="keywordflow">if</span> ( my_array[(my_tail-1) & (my_array_size-1)].second == <span class="keyword">false</span> ) {
+<a name="l01529"></a>01529                 __TBB_store_with_release(op->status, FAILED);
+<a name="l01530"></a>01530             }
+<a name="l01531"></a>01531             <span class="keywordflow">else</span> {
+<a name="l01532"></a>01532                 *(op->elem) = my_array[(my_tail-1) & (my_array_size-1)].first;
+<a name="l01533"></a>01533                 my_array[(my_tail-1) & (my_array_size-1)].second = <span class="keyword">false</span>;
+<a name="l01534"></a>01534                 --my_tail;
+<a name="l01535"></a>01535                 __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01536"></a>01536             }
+<a name="l01537"></a>01537         }
+<a name="l01538"></a>01538         <span class="keyword">virtual</span> <span class="keywordtype">void</span> internal_reserve(buffer_operation *op) {
+<a name="l01539"></a>01539             <span class="keywordflow">if</span> (my_reserved == <span class="keyword">true</span> || my_array[ my_head & (my_array_size-1)].second == <span class="keyword">false</span> ) {
+<a name="l01540"></a>01540                 __TBB_store_with_release(op->status, FAILED);
+<a name="l01541"></a>01541             }
+<a name="l01542"></a>01542             <span class="keywordflow">else</span> {
+<a name="l01543"></a>01543                 my_reserved = <span class="keyword">true</span>;
+<a name="l01544"></a>01544                 *(op->elem) = my_array[ my_head & (my_array_size-1)].first;
+<a name="l01545"></a>01545                 my_array[ my_head & (my_array_size-1)].second = <span class="keyword">false</span>;
+<a name="l01546"></a>01546                 __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01547"></a>01547             }
+<a name="l01548"></a>01548         }
+<a name="l01549"></a>01549         <span class="keyword">virtual</span> <span class="keywordtype">void</span> internal_consume(buffer_operation *op) {
+<a name="l01550"></a>01550             my_reserved = <span class="keyword">false</span>;
+<a name="l01551"></a>01551             ++my_head;
+<a name="l01552"></a>01552             __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01553"></a>01553         }
+<a name="l01554"></a>01554 
+<a name="l01555"></a>01555         <span class="keyword">virtual</span> <span class="keywordtype">void</span> internal_release(buffer_operation *op) {
+<a name="l01556"></a>01556             my_array[my_head&(my_array_size-1)].second = <span class="keyword">true</span>;
+<a name="l01557"></a>01557             my_reserved = <span class="keyword">false</span>;
+<a name="l01558"></a>01558             __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01559"></a>01559         }
+<a name="l01560"></a>01560 
+<a name="l01562"></a><a class="code" href="a00225.html#3ec9d33aa9f1e9292d5952e3eb477ca1">01562</a>         <span class="keywordtype">void</span> <a class="code" href="a00225.html#3ec9d33aa9f1e9292d5952e3eb477ca1">grow_my_array</a>( size_t minimum_size ) {
+<a name="l01563"></a>01563             size_type old_size = my_array_size;
+<a name="l01564"></a>01564             size_type new_size = old_size ? 2*old_size : initial_buffer_size;
+<a name="l01565"></a>01565             <span class="keywordflow">while</span>( new_size<minimum_size )
+<a name="l01566"></a>01566                 new_size*=2;
+<a name="l01567"></a>01567 
+<a name="l01568"></a>01568             item_type* new_array = <a class="code" href="a00226.html">cache_aligned_allocator<item_type></a>().allocate(new_size);
+<a name="l01569"></a>01569             item_type* old_array = my_array;
+<a name="l01570"></a>01570 
+<a name="l01571"></a>01571             <span class="keywordflow">for</span>( size_type i=0; i<new_size; ++i )
+<a name="l01572"></a>01572                 new_array[i].second = <span class="keyword">false</span>;
+<a name="l01573"></a>01573 
+<a name="l01574"></a>01574             size_t t=my_head;
+<a name="l01575"></a>01575             <span class="keywordflow">for</span>( size_type i=0; i<old_size; ++i, ++t )
+<a name="l01576"></a>01576                 new_array[t&(new_size-1)] = old_array[t&(old_size-1)];
+<a name="l01577"></a>01577             my_array = new_array;
+<a name="l01578"></a>01578             my_array_size = new_size;
+<a name="l01579"></a>01579             <span class="keywordflow">if</span>( old_array )
+<a name="l01580"></a>01580                 <a class="code" href="a00226.html">cache_aligned_allocator<item_type></a>().deallocate(old_array,old_size);
+<a name="l01581"></a>01581         }
+<a name="l01582"></a>01582 
+<a name="l01583"></a>01583     <span class="keyword">public</span>:
+<a name="l01585"></a><a class="code" href="a00225.html#7360978fa427d054bc6cde05c80e5e9f">01585</a>         <a class="code" href="a00225.html#7360978fa427d054bc6cde05c80e5e9f">buffer_node</a>( <a class="code" href="a00250.html">graph</a> &g ) :
+<a name="l01586"></a>01586             my_parent( g.root_task() ), my_array(NULL), my_array_size(0),
+<a name="l01587"></a>01587             my_head(0), my_tail(0), my_reserved(false), forwarder_busy(false) {
+<a name="l01588"></a>01588             my_successors.set_owner(<span class="keyword">this</span>);
+<a name="l01589"></a>01589             my_aggregator.initialize_handler(my_functor_t(<span class="keyword">this</span>));
+<a name="l01590"></a>01590             <a class="code" href="a00225.html#3ec9d33aa9f1e9292d5952e3eb477ca1">grow_my_array</a>(initial_buffer_size);
+<a name="l01591"></a>01591         }
+<a name="l01592"></a>01592 
+<a name="l01593"></a>01593         <span class="keyword">virtual</span> ~buffer_node() {}
+<a name="l01594"></a>01594 
+<a name="l01595"></a>01595         <span class="comment">//</span>
+<a name="l01596"></a>01596         <span class="comment">// message sender implementation</span>
+<a name="l01597"></a>01597         <span class="comment">//</span>
+<a name="l01598"></a>01598 
+<a name="l01600"></a>01600 
+<a name="l01601"></a><a class="code" href="a00225.html#cd2ef588b0ee6eb8d23ee169e00c73a9">01601</a>         <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00225.html#cd2ef588b0ee6eb8d23ee169e00c73a9">register_successor</a>( <a class="code" href="a00277.html">receiver<output_type></a> &r ) {
+<a name="l01602"></a>01602             buffer_operation op_data(reg_succ);
+<a name="l01603"></a>01603             op_data.r = &r;
+<a name="l01604"></a>01604             my_aggregator.execute(&op_data);
+<a name="l01605"></a>01605             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01606"></a>01606         }
+<a name="l01607"></a>01607 
+<a name="l01609"></a>01609 
+<a name="l01611"></a><a class="code" href="a00225.html#415428db02e74a479fb056a8ed72ba53">01611</a>         <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00225.html#415428db02e74a479fb056a8ed72ba53">remove_successor</a>( <a class="code" href="a00277.html">receiver<output_type></a> &r ) {
+<a name="l01612"></a>01612             r.<a class="code" href="a00277.html#d2f23b40b328dc254a7c2a0a30f408e4">remove_predecessor</a>(*<span class="keyword">this</span>);
+<a name="l01613"></a>01613             buffer_operation op_data(rem_succ);
+<a name="l01614"></a>01614             op_data.r = &r;
+<a name="l01615"></a>01615             my_aggregator.execute(&op_data);
+<a name="l01616"></a>01616             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01617"></a>01617         }
+<a name="l01618"></a>01618 
+<a name="l01620"></a>01620 
+<a name="l01622"></a><a class="code" href="a00225.html#b68bdec127703dbfb2d93d685abbfd67">01622</a>         <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00225.html#b68bdec127703dbfb2d93d685abbfd67">try_get</a>( T &v ) {
+<a name="l01623"></a>01623             buffer_operation op_data(req_item);
+<a name="l01624"></a>01624             op_data.elem = &v;
+<a name="l01625"></a>01625             my_aggregator.execute(&op_data);
+<a name="l01626"></a>01626             <span class="keywordflow">return</span> (op_data.status==SUCCEEDED);
+<a name="l01627"></a>01627         }
+<a name="l01628"></a>01628 
+<a name="l01630"></a>01630 
+<a name="l01632"></a><a class="code" href="a00225.html#11ebad4c72082a1a03ecccd3afab4ae2">01632</a>         <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00225.html#11ebad4c72082a1a03ecccd3afab4ae2">try_reserve</a>( T &v ) {
+<a name="l01633"></a>01633             buffer_operation op_data(res_item);
+<a name="l01634"></a>01634             op_data.elem = &v;
+<a name="l01635"></a>01635             my_aggregator.execute(&op_data);
+<a name="l01636"></a>01636             <span class="keywordflow">return</span> (op_data.status==SUCCEEDED);
+<a name="l01637"></a>01637         }
+<a name="l01638"></a>01638 
+<a name="l01640"></a>01640 
+<a name="l01641"></a><a class="code" href="a00225.html#435e29a66f0719d4822a0a8dc78a0405">01641</a>         <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00225.html#435e29a66f0719d4822a0a8dc78a0405">try_release</a>() {
+<a name="l01642"></a>01642             buffer_operation op_data(rel_res);
+<a name="l01643"></a>01643             my_aggregator.execute(&op_data);
+<a name="l01644"></a>01644             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01645"></a>01645         }
+<a name="l01646"></a>01646 
+<a name="l01648"></a>01648 
+<a name="l01649"></a><a class="code" href="a00225.html#46b8b257a97e2192a2b11743279e8ffe">01649</a>         <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00225.html#46b8b257a97e2192a2b11743279e8ffe">try_consume</a>() {
+<a name="l01650"></a>01650             buffer_operation op_data(con_res);
+<a name="l01651"></a>01651             my_aggregator.execute(&op_data);
+<a name="l01652"></a>01652             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01653"></a>01653         }
+<a name="l01654"></a>01654 
+<a name="l01656"></a>01656 
+<a name="l01657"></a><a class="code" href="a00225.html#f74899ffb67687998168ad428f586b64">01657</a>         <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00225.html#f74899ffb67687998168ad428f586b64">try_put</a>(T t) {
+<a name="l01658"></a>01658             buffer_operation op_data(t, put_item);
+<a name="l01659"></a>01659             my_aggregator.execute(&op_data);
+<a name="l01660"></a>01660             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01661"></a>01661         }
+<a name="l01662"></a>01662     };
+<a name="l01663"></a>01663 
+<a name="l01664"></a>01664 
+<a name="l01666"></a>01666     <span class="keyword">template</span> <<span class="keyword">typename</span> T>
+<a name="l01667"></a><a class="code" href="a00269.html">01667</a>     <span class="keyword">class </span><a class="code" href="a00269.html">queue_node</a> : <span class="keyword">public</span> buffer_node<T> {
+<a name="l01668"></a>01668     <span class="keyword">protected</span>:
+<a name="l01669"></a>01669         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00225.html">buffer_node<T>::size_type</a> size_type;
+<a name="l01670"></a>01670         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00225.html">buffer_node<T>::buffer_operation</a> queue_operation;
+<a name="l01671"></a>01671 
+<a name="l01672"></a>01672         <span class="keyword">enum</span> op_stat {WAIT=0, SUCCEEDED, FAILED};
+<a name="l01673"></a>01673 
+<a name="l01675"></a><a class="code" href="a00269.html#fb58bac5ac355e5134c51125e601fa2a">01675</a>         <span class="comment">/* override */</span> <span class="keywordtype">void</span> <a class="code" href="a00269.html#fb58bac5ac355e5134c51125e601fa2a">internal_forward</a>(queue_operation *op) {
+<a name="l01676"></a>01676             T i_copy;
+<a name="l01677"></a>01677             <span class="keywordtype">bool</span> success = <span class="keyword">false</span>; <span class="comment">// flagged when a successor accepts</span>
+<a name="l01678"></a>01678             size_type counter = this->my_successors.size();
+<a name="l01679"></a>01679             <span class="keywordflow">if</span> (this->my_reserved || this->my_array[ this->my_head & (this->my_array_size-1)].second == <span class="keyword">false</span>) {
+<a name="l01680"></a>01680                 __TBB_store_with_release(op->status, FAILED);
+<a name="l01681"></a>01681                 this->forwarder_busy = <span class="keyword">false</span>;
+<a name="l01682"></a>01682                 <span class="keywordflow">return</span>;
+<a name="l01683"></a>01683             }
+<a name="l01684"></a>01684             <span class="comment">// Keep trying to send items while there is at least one accepting successor</span>
+<a name="l01685"></a>01685             <span class="keywordflow">while</span> (counter>0 && this->my_array[ this->my_head & (this->my_array_size-1)].second == <span class="keyword">true</span> ) {
+<a name="l01686"></a>01686                 i_copy = this->my_array[ this->my_head & (this->my_array_size-1)].first;
+<a name="l01687"></a>01687                 <span class="keywordtype">bool</span> msg = this->my_successors.try_put(i_copy);
+<a name="l01688"></a>01688                 <span class="keywordflow">if</span> ( msg == <span class="keyword">true</span> ) {
+<a name="l01689"></a>01689                      this->my_array[ this->my_head & (this->my_array_size-1)].second = <span class="keyword">false</span>;
+<a name="l01690"></a>01690                      ++(this->my_head);
+<a name="l01691"></a>01691                     success = <span class="keyword">true</span>; <span class="comment">// found an accepting successor</span>
+<a name="l01692"></a>01692                 }
+<a name="l01693"></a>01693                 --counter;
+<a name="l01694"></a>01694             }
+<a name="l01695"></a>01695             <span class="keywordflow">if</span> (success && !counter)
+<a name="l01696"></a>01696                 __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01697"></a>01697             <span class="keywordflow">else</span> {
+<a name="l01698"></a>01698                 __TBB_store_with_release(op->status, FAILED);
+<a name="l01699"></a>01699                 this->forwarder_busy = <span class="keyword">false</span>;
+<a name="l01700"></a>01700             }
+<a name="l01701"></a>01701         }
+<a name="l01702"></a>01702 
+<a name="l01703"></a>01703         <span class="comment">/* override */</span> <span class="keywordtype">void</span> internal_pop(queue_operation *op) {
+<a name="l01704"></a>01704             <span class="keywordflow">if</span> ( this->my_reserved == <span class="keyword">true</span> || this->my_array[ this->my_head & (this->my_array_size-1)].second == <span class="keyword">false</span> ) {
+<a name="l01705"></a>01705                 __TBB_store_with_release(op->status, FAILED);
+<a name="l01706"></a>01706             }
+<a name="l01707"></a>01707             <span class="keywordflow">else</span> {
+<a name="l01708"></a>01708                 *(op->elem) = this->my_array[ this->my_head & (this->my_array_size-1)].first;
+<a name="l01709"></a>01709                 this->my_array[ this->my_head & (this->my_array_size-1)].second = <span class="keyword">false</span>;
+<a name="l01710"></a>01710                 ++(this->my_head);
+<a name="l01711"></a>01711                 __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01712"></a>01712             }
+<a name="l01713"></a>01713         }
+<a name="l01714"></a>01714         <span class="comment">/* override */</span> <span class="keywordtype">void</span> internal_reserve(queue_operation *op) {
+<a name="l01715"></a>01715             <span class="keywordflow">if</span> (this->my_reserved == <span class="keyword">true</span> || this->my_array[ this->my_head & (this->my_array_size-1)].second == <span class="keyword">false</span> ) {
+<a name="l01716"></a>01716                 __TBB_store_with_release(op->status, FAILED);
+<a name="l01717"></a>01717             }
+<a name="l01718"></a>01718             <span class="keywordflow">else</span> {
+<a name="l01719"></a>01719                 this->my_reserved = <span class="keyword">true</span>;
+<a name="l01720"></a>01720                 *(op->elem) = this->my_array[ this->my_head & (this->my_array_size-1)].first;
+<a name="l01721"></a>01721                 __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01722"></a>01722             }
+<a name="l01723"></a>01723         }
+<a name="l01724"></a>01724         <span class="comment">/* override */</span> <span class="keywordtype">void</span> internal_consume(queue_operation *op) {
+<a name="l01725"></a>01725             this->my_reserved = <span class="keyword">false</span>;
+<a name="l01726"></a>01726             this->my_array[ this->my_head & (this->my_array_size-1)].second = <span class="keyword">false</span>;
+<a name="l01727"></a>01727             ++(this->my_head);
+<a name="l01728"></a>01728             __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01729"></a>01729         }
+<a name="l01730"></a>01730 
+<a name="l01731"></a>01731     <span class="keyword">public</span>:
+<a name="l01732"></a>01732 
+<a name="l01733"></a><a class="code" href="a00269.html#27016487003a4ff2908748c3cf11c1fe">01733</a>         <span class="keyword">typedef</span> T <a class="code" href="a00269.html#27016487003a4ff2908748c3cf11c1fe">input_type</a>;
+<a name="l01734"></a><a class="code" href="a00269.html#d227f122eebe2f9489ba763ff24fd6fb">01734</a>         <span class="keyword">typedef</span> T output_type;
+<a name="l01735"></a><a class="code" href="a00269.html#83bc7308a38f1d205377d78ec14931d1">01735</a>         <span class="keyword">typedef</span> <a class="code" href="a00282.html">sender< input_type ></a> <a class="code" href="a00282.html">predecessor_type</a>;
+<a name="l01736"></a><a class="code" href="a00269.html#c3b1d76b66b1292f6a1b6dae52c67a0e">01736</a>         <span class="keyword">typedef</span> <a class="code" href="a00277.html">receiver< output_type ></a> <a class="code" href="a00277.html">successor_type</a>;
+<a name="l01737"></a>01737 
+<a name="l01739"></a><a class="code" href="a00269.html#1564c6bf9573b13d6854b0e8f7ce2b68">01739</a>         <a class="code" href="a00269.html#1564c6bf9573b13d6854b0e8f7ce2b68">queue_node</a>( <a class="code" href="a00250.html">graph</a> &g ) : buffer_node<T>(g) {}
+<a name="l01740"></a>01740     };
+<a name="l01741"></a>01741 
+<a name="l01743"></a>01743     <span class="keyword">template</span>< <span class="keyword">typename</span> T >
+<a name="l01744"></a><a class="code" href="a00283.html">01744</a>     <span class="keyword">class </span><a class="code" href="a00283.html">sequencer_node</a> : <span class="keyword">public</span> <a class="code" href="a00269.html">queue_node</a><T> {
+<a name="l01745"></a>01745         internal::function_body< T, size_t > *my_sequencer;
+<a name="l01746"></a>01746     <span class="keyword">public</span>:
+<a name="l01747"></a>01747 
+<a name="l01748"></a><a class="code" href="a00283.html#a73e4a3ae6c430281f08226d448ebfc8">01748</a>         <span class="keyword">typedef</span> T <a class="code" href="a00283.html#a73e4a3ae6c430281f08226d448ebfc8">input_type</a>;
+<a name="l01749"></a><a class="code" href="a00283.html#0c613bb01103dfcfbc3f9cbe943f95b0">01749</a>         <span class="keyword">typedef</span> T output_type;
+<a name="l01750"></a><a class="code" href="a00283.html#6581686ef0cf8e13c0270687628af5eb">01750</a>         <span class="keyword">typedef</span> <a class="code" href="a00282.html">sender< input_type ></a> <a class="code" href="a00282.html">predecessor_type</a>;
+<a name="l01751"></a><a class="code" href="a00283.html#3591313e30d0f485a09106686067411f">01751</a>         <span class="keyword">typedef</span> <a class="code" href="a00277.html">receiver< output_type ></a> <a class="code" href="a00277.html">successor_type</a>;
+<a name="l01752"></a>01752 
+<a name="l01754"></a>01754         <span class="keyword">template</span>< <span class="keyword">typename</span> Sequencer >
+<a name="l01755"></a><a class="code" href="a00283.html#c3138c1c96b76ae9f13b0abbf7029590">01755</a>         <a class="code" href="a00283.html#c3138c1c96b76ae9f13b0abbf7029590">sequencer_node</a>( <a class="code" href="a00250.html">graph</a> &g, <span class="keyword">const</span> Sequencer& s ) : <a class="code" href="a00269.html">queue_node</a><T>(g),
+<a name="l01756"></a>01756             my_sequencer(new internal::function_body_leaf< T, size_t, Sequencer>(s) ) {}
+<a name="l01757"></a>01757 
+<a name="l01759"></a><a class="code" href="a00283.html#c87d80feebaf2bae4af22b5f2459b37e">01759</a>         <a class="code" href="a00283.html#c87d80feebaf2bae4af22b5f2459b37e">~sequencer_node</a>() { <span class="keyword">delete</span> my_sequencer; }
+<a name="l01760"></a>01760     <span class="keyword">protected</span>:
+<a name="l01761"></a>01761         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00225.html">buffer_node<T>::size_type</a> size_type;
+<a name="l01762"></a>01762         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00225.html">buffer_node<T>::buffer_operation</a> sequencer_operation;
+<a name="l01763"></a>01763 
+<a name="l01764"></a>01764         <span class="keyword">enum</span> op_stat {WAIT=0, SUCCEEDED, FAILED};
+<a name="l01765"></a>01765 
+<a name="l01766"></a>01766     <span class="keyword">private</span>:
+<a name="l01767"></a>01767         <span class="comment">/* override */</span> <span class="keywordtype">void</span> internal_push(sequencer_operation *op) {
+<a name="l01768"></a>01768             size_type tag = (*my_sequencer)(*(op->elem));
+<a name="l01769"></a>01769 
+<a name="l01770"></a>01770             this->my_tail = (tag+1 > this->my_tail) ? tag+1 : this->my_tail;
+<a name="l01771"></a>01771             while ( this->my_tail - this->my_head >= this->my_array_size ) {
+<a name="l01772"></a>01772                 this-><a class="code" href="a00225.html#3ec9d33aa9f1e9292d5952e3eb477ca1">grow_my_array</a>( this->my_tail - this->my_head  + 1);
+<a name="l01773"></a>01773             }
+<a name="l01774"></a>01774             this->my_array[tag&(this->my_array_size-1)] = std::make_pair( *(op->elem), <span class="keyword">true</span> );
+<a name="l01775"></a>01775             __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01776"></a>01776         }
+<a name="l01777"></a>01777     };
+<a name="l01778"></a>01778 
+<a name="l01780"></a>01780     <span class="keyword">template</span>< <span class="keyword">typename</span> T, <span class="keyword">typename</span> Compare = std::less<T> >
+<a name="l01781"></a><a class="code" href="a00268.html">01781</a>     <span class="keyword">class </span><a class="code" href="a00268.html">priority_queue_node</a> : <span class="keyword">public</span> buffer_node<T> {
+<a name="l01782"></a>01782     <span class="keyword">public</span>:
+<a name="l01783"></a><a class="code" href="a00268.html#40fdedd4829aeae3ebd1a5fdaf39b23d">01783</a>         <span class="keyword">typedef</span> T <a class="code" href="a00268.html#40fdedd4829aeae3ebd1a5fdaf39b23d">input_type</a>;
+<a name="l01784"></a><a class="code" href="a00268.html#3b3fa4479416e7cb6d4a6a4b175c2b15">01784</a>         <span class="keyword">typedef</span> T output_type;
+<a name="l01785"></a><a class="code" href="a00268.html#98900a87758cac05500fcbc74113cebf">01785</a>         <span class="keyword">typedef</span> <a class="code" href="a00282.html">sender< input_type ></a> <a class="code" href="a00282.html">predecessor_type</a>;
+<a name="l01786"></a><a class="code" href="a00268.html#e01014f2e5ceea292c68f6fe47391c57">01786</a>         <span class="keyword">typedef</span> <a class="code" href="a00277.html">receiver< output_type ></a> <a class="code" href="a00277.html">successor_type</a>;
+<a name="l01787"></a>01787 
+<a name="l01789"></a><a class="code" href="a00268.html#1630f68674c4b201346a391b1e8d3f5d">01789</a>         <a class="code" href="a00268.html#1630f68674c4b201346a391b1e8d3f5d">priority_queue_node</a>( <a class="code" href="a00250.html">graph</a> &g ) : buffer_node<T>(g), mark(0) {}
+<a name="l01790"></a>01790 
+<a name="l01791"></a>01791     <span class="keyword">protected</span>:
+<a name="l01792"></a>01792         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00225.html">buffer_node<T>::size_type</a> size_type;
+<a name="l01793"></a>01793         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00225.html">buffer_node<T>::item_type</a> item_type;
+<a name="l01794"></a>01794         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00225.html">buffer_node<T>::buffer_operation</a> prio_operation;
+<a name="l01795"></a>01795 
+<a name="l01796"></a>01796         <span class="keyword">enum</span> op_stat {WAIT=0, SUCCEEDED, FAILED};
+<a name="l01797"></a>01797 
+<a name="l01798"></a>01798         <span class="comment">/* override */</span> <span class="keywordtype">void</span> handle_operations(prio_operation *op_list) {
+<a name="l01799"></a>01799             prio_operation *tmp <span class="comment">/*, *pop_list*/</span> ;
+<a name="l01800"></a>01800             <span class="keywordtype">bool</span> try_forwarding=<span class="keyword">false</span>;
+<a name="l01801"></a>01801             <span class="keywordflow">while</span> (op_list) {
+<a name="l01802"></a>01802                 tmp = op_list;
+<a name="l01803"></a>01803                 op_list = op_list->next;
+<a name="l01804"></a>01804                 <span class="keywordflow">switch</span> (tmp->type) {
+<a name="l01805"></a>01805                 <span class="keywordflow">case</span> buffer_node<T>::reg_succ: this-><a class="code" href="a00225.html#017f16c8d6e0fb65d0d3a61aec86b3e2">internal_reg_succ</a>(tmp); try_forwarding = <span class="keyword">true</span>; <span class="keywordflow">break</span>;
+<a name="l01806"></a>01806                 <span class="keywordflow">case</span> buffer_node<T>::rem_succ: this-><a class="code" href="a00225.html#a75f731cf9fc93f7487eb72de3fcf7b1">internal_rem_succ</a>(tmp); <span class="keywordflow">break</span>;
+<a name="l01807"></a>01807                 <span class="keywordflow">case</span> buffer_node<T>::put_item: internal_push(tmp); try_forwarding = <span class="keyword">true</span>; <span class="keywordflow">break</span>;
+<a name="l01808"></a>01808                 <span class="keywordflow">case</span> buffer_node<T>::try_fwd: <a class="code" href="a00268.html#79161e73f79cc43b2c2b08367504dfda">internal_forward</a>(tmp); <span class="keywordflow">break</span>;
+<a name="l01809"></a>01809                 <span class="keywordflow">case</span> buffer_node<T>::rel_res: internal_release(tmp); try_forwarding = <span class="keyword">true</span>; <span class="keywordflow">break</span>;
+<a name="l01810"></a>01810                 <span class="keywordflow">case</span> buffer_node<T>::con_res: internal_consume(tmp); try_forwarding = <span class="keyword">true</span>; <span class="keywordflow">break</span>;
+<a name="l01811"></a>01811                 <span class="keywordflow">case</span> buffer_node<T>::req_item: internal_pop(tmp); <span class="keywordflow">break</span>;
+<a name="l01812"></a>01812                 <span class="keywordflow">case</span> buffer_node<T>::res_item: internal_reserve(tmp); <span class="keywordflow">break</span>;
+<a name="l01813"></a>01813                 }
+<a name="l01814"></a>01814             }
+<a name="l01815"></a>01815             <span class="comment">// process pops!  for now, no special pop processing</span>
+<a name="l01816"></a>01816             <span class="keywordflow">if</span> (mark<this->my_tail) heapify();
+<a name="l01817"></a>01817             <span class="keywordflow">if</span> (try_forwarding && !this->forwarder_busy) {
+<a name="l01818"></a>01818                 this->forwarder_busy = <span class="keyword">true</span>;
+<a name="l01819"></a>01819                 <a class="code" href="a00291.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> >(*<span class="keyword">this</span>));
+<a name="l01820"></a>01820             }
+<a name="l01821"></a>01821         }
+<a name="l01822"></a>01822 
+<a name="l01824"></a><a class="code" href="a00268.html#79161e73f79cc43b2c2b08367504dfda">01824</a>         <span class="comment">/* override */</span> <span class="keywordtype">void</span> <a class="code" href="a00268.html#79161e73f79cc43b2c2b08367504dfda">internal_forward</a>(prio_operation *op) {
+<a name="l01825"></a>01825             T i_copy;
+<a name="l01826"></a>01826             <span class="keywordtype">bool</span> success = <span class="keyword">false</span>; <span class="comment">// flagged when a successor accepts</span>
+<a name="l01827"></a>01827             size_type counter = this->my_successors.size();
+<a name="l01828"></a>01828 
+<a name="l01829"></a>01829             <span class="keywordflow">if</span> (this->my_reserved || this->my_tail == 0) {
+<a name="l01830"></a>01830                 __TBB_store_with_release(op->status, FAILED);
+<a name="l01831"></a>01831                 this->forwarder_busy = <span class="keyword">false</span>;
+<a name="l01832"></a>01832                 <span class="keywordflow">return</span>;
+<a name="l01833"></a>01833             }
+<a name="l01834"></a>01834             <span class="comment">// Keep trying to send while there exists an accepting successor</span>
+<a name="l01835"></a>01835             <span class="keywordflow">while</span> (counter>0 && this->my_tail > 0) {
+<a name="l01836"></a>01836                 i_copy = this->my_array[0].first;
+<a name="l01837"></a>01837                 <span class="keywordtype">bool</span> msg = this->my_successors.try_put(i_copy);
+<a name="l01838"></a>01838                 <span class="keywordflow">if</span> ( msg == <span class="keyword">true</span> ) {
+<a name="l01839"></a>01839                      <span class="keywordflow">if</span> (mark == this->my_tail) --mark;
+<a name="l01840"></a>01840                     --(this->my_tail);
+<a name="l01841"></a>01841                     this->my_array[0].first=this->my_array[this->my_tail].first;
+<a name="l01842"></a>01842                     <span class="keywordflow">if</span> (this->my_tail > 1) <span class="comment">// don't reheap for heap of size 1</span>
+<a name="l01843"></a>01843                         reheap();
+<a name="l01844"></a>01844                     success = <span class="keyword">true</span>; <span class="comment">// found an accepting successor</span>
+<a name="l01845"></a>01845                 }
+<a name="l01846"></a>01846                 --counter;
+<a name="l01847"></a>01847             }
+<a name="l01848"></a>01848             <span class="keywordflow">if</span> (success && !counter)
+<a name="l01849"></a>01849                 __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01850"></a>01850             <span class="keywordflow">else</span> {
+<a name="l01851"></a>01851                 __TBB_store_with_release(op->status, FAILED);
+<a name="l01852"></a>01852                 this->forwarder_busy = <span class="keyword">false</span>;
+<a name="l01853"></a>01853             }
+<a name="l01854"></a>01854         }
+<a name="l01855"></a>01855 
+<a name="l01856"></a>01856         <span class="comment">/* override */</span> <span class="keywordtype">void</span> internal_push(prio_operation *op) {
+<a name="l01857"></a>01857             <span class="keywordflow">if</span> ( this->my_tail >= this->my_array_size )
+<a name="l01858"></a>01858                 this-><a class="code" href="a00225.html#3ec9d33aa9f1e9292d5952e3eb477ca1">grow_my_array</a>( this->my_tail + 1 );
+<a name="l01859"></a>01859             this->my_array[this->my_tail] = std::make_pair( *(op->elem), <span class="keyword">true</span> );
+<a name="l01860"></a>01860             ++(this->my_tail);
+<a name="l01861"></a>01861             __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01862"></a>01862         }
+<a name="l01863"></a>01863         <span class="comment">/* override */</span> <span class="keywordtype">void</span> internal_pop(prio_operation *op) {
+<a name="l01864"></a>01864             <span class="keywordflow">if</span> ( this->my_reserved == <span class="keyword">true</span> || this->my_tail == 0 ) {
+<a name="l01865"></a>01865                 __TBB_store_with_release(op->status, FAILED);
+<a name="l01866"></a>01866             }
+<a name="l01867"></a>01867             <span class="keywordflow">else</span> {
+<a name="l01868"></a>01868                 <span class="keywordflow">if</span> (mark<this->my_tail &&
+<a name="l01869"></a>01869                     compare(this->my_array[0].first,
+<a name="l01870"></a>01870                             this->my_array[this->my_tail-1].first)) {
+<a name="l01871"></a>01871                     <span class="comment">// there are newly pushed elems; last one higher than top</span>
+<a name="l01872"></a>01872                     <span class="comment">// copy the data</span>
+<a name="l01873"></a>01873                     *(op->elem) = this->my_array[this->my_tail-1].first;
+<a name="l01874"></a>01874                     --(this->my_tail);
+<a name="l01875"></a>01875                     __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01876"></a>01876                 }
+<a name="l01877"></a>01877                 <span class="keywordflow">else</span> { <span class="comment">// extract and push the last element down heap</span>
+<a name="l01878"></a>01878                     *(op->elem) = this->my_array[0].first; <span class="comment">// copy the data</span>
+<a name="l01879"></a>01879                     if (mark == this->my_tail) --mark;
+<a name="l01880"></a>01880                     --(this->my_tail);
+<a name="l01881"></a>01881                     __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01882"></a>01882                     this->my_array[0].first=this->my_array[this->my_tail].first;
+<a name="l01883"></a>01883                     <span class="keywordflow">if</span> (this->my_tail > 1) <span class="comment">// don't reheap for heap of size 1</span>
+<a name="l01884"></a>01884                         reheap();
+<a name="l01885"></a>01885                 }
+<a name="l01886"></a>01886             }
+<a name="l01887"></a>01887         }
+<a name="l01888"></a>01888         <span class="comment">/* override */</span> <span class="keywordtype">void</span> internal_reserve(prio_operation *op) {
+<a name="l01889"></a>01889             <span class="keywordflow">if</span> (this->my_reserved == <span class="keyword">true</span> || this->my_tail == 0) {
+<a name="l01890"></a>01890                 __TBB_store_with_release(op->status, FAILED);
+<a name="l01891"></a>01891             }
+<a name="l01892"></a>01892             <span class="keywordflow">else</span> {
+<a name="l01893"></a>01893                 this->my_reserved = <span class="keyword">true</span>;
+<a name="l01894"></a>01894                 *(op->elem) = reserved_item = this->my_array[0].first;
+<a name="l01895"></a>01895                 if (mark == this->my_tail) --mark;
+<a name="l01896"></a>01896                 --(this->my_tail);
+<a name="l01897"></a>01897                 __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01898"></a>01898                 this->my_array[0].first = this->my_array[this->my_tail].first;
+<a name="l01899"></a>01899                 <span class="keywordflow">if</span> (this->my_tail > 1) <span class="comment">// don't reheap for heap of size 1</span>
+<a name="l01900"></a>01900                     reheap();
+<a name="l01901"></a>01901             }
+<a name="l01902"></a>01902         }
+<a name="l01903"></a>01903         <span class="comment">/* override */</span> <span class="keywordtype">void</span> internal_consume(prio_operation *op) {
+<a name="l01904"></a>01904             this->my_reserved = <span class="keyword">false</span>;
+<a name="l01905"></a>01905             __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01906"></a>01906         }
+<a name="l01907"></a>01907         <span class="comment">/* override */</span> <span class="keywordtype">void</span> internal_release(prio_operation *op) {
+<a name="l01908"></a>01908             <span class="keywordflow">if</span> (this->my_tail >= this->my_array_size)
+<a name="l01909"></a>01909                 this-><a class="code" href="a00225.html#3ec9d33aa9f1e9292d5952e3eb477ca1">grow_my_array</a>( this->my_tail + 1 );
+<a name="l01910"></a>01910             this->my_array[this->my_tail] = std::make_pair(reserved_item, <span class="keyword">true</span>);
+<a name="l01911"></a>01911             ++(this->my_tail);
+<a name="l01912"></a>01912             this->my_reserved = <span class="keyword">false</span>;
+<a name="l01913"></a>01913             __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01914"></a>01914             heapify();
+<a name="l01915"></a>01915         }
+<a name="l01916"></a>01916     <span class="keyword">private</span>:
+<a name="l01917"></a>01917         Compare compare;
+<a name="l01918"></a>01918         size_type mark;
+<a name="l01919"></a>01919         <a class="code" href="a00268.html#40fdedd4829aeae3ebd1a5fdaf39b23d">input_type</a> reserved_item;
+<a name="l01920"></a>01920 
+<a name="l01921"></a>01921         <span class="keywordtype">void</span> heapify() {
+<a name="l01922"></a>01922             <span class="keywordflow">if</span> (!mark) mark = 1;
+<a name="l01923"></a>01923             <span class="keywordflow">for</span> (; mark<this->my_tail; ++mark) { <span class="comment">// for each unheaped element</span>
+<a name="l01924"></a>01924                 size_type cur_pos = mark;
+<a name="l01925"></a>01925                 <a class="code" href="a00268.html#40fdedd4829aeae3ebd1a5fdaf39b23d">input_type</a> to_place = this->my_array[mark].first;
+<a name="l01926"></a>01926                 <span class="keywordflow">do</span> { <span class="comment">// push to_place up the heap</span>
+<a name="l01927"></a>01927                     size_type parent = (cur_pos-1)>>1;
+<a name="l01928"></a>01928                     <span class="keywordflow">if</span> (!compare(this->my_array[parent].first, to_place))
+<a name="l01929"></a>01929                         <span class="keywordflow">break</span>;
+<a name="l01930"></a>01930                     this->my_array[cur_pos].first = this->my_array[parent].first;
+<a name="l01931"></a>01931                     cur_pos = parent;
+<a name="l01932"></a>01932                 } <span class="keywordflow">while</span>( cur_pos );
+<a name="l01933"></a>01933                 this->my_array[cur_pos].first = to_place;
+<a name="l01934"></a>01934             }
+<a name="l01935"></a>01935         }
+<a name="l01936"></a>01936 
+<a name="l01937"></a>01937         <span class="keywordtype">void</span> reheap() {
+<a name="l01938"></a>01938             size_type cur_pos=0, child=1;
+<a name="l01939"></a>01939             <span class="keywordflow">while</span> (child < mark) {
+<a name="l01940"></a>01940                 size_type target = child;
+<a name="l01941"></a>01941                 <span class="keywordflow">if</span> (child+1<mark &&
+<a name="l01942"></a>01942                     compare(this->my_array[child].first,
+<a name="l01943"></a>01943                             this->my_array[child+1].first))
+<a name="l01944"></a>01944                     ++target;
+<a name="l01945"></a>01945                 <span class="comment">// target now has the higher priority child</span>
+<a name="l01946"></a>01946                 <span class="keywordflow">if</span> (compare(this->my_array[target].first,
+<a name="l01947"></a>01947                             this->my_array[this->my_tail].first))
+<a name="l01948"></a>01948                     <span class="keywordflow">break</span>;
+<a name="l01949"></a>01949                 this->my_array[cur_pos].first = this->my_array[target].first;
+<a name="l01950"></a>01950                 cur_pos = target;
+<a name="l01951"></a>01951                 child = (cur_pos<<1)+1;
+<a name="l01952"></a>01952             }
+<a name="l01953"></a>01953             this->my_array[cur_pos].first = this->my_array[this->my_tail].first;
+<a name="l01954"></a>01954         }
+<a name="l01955"></a>01955     };
+<a name="l01956"></a>01956 
+<a name="l01958"></a>01958 
+<a name="l01961"></a>01961     <span class="keyword">template</span>< <span class="keyword">typename</span> T >
+<a name="l01962"></a><a class="code" href="a00255.html">01962</a>     <span class="keyword">class </span><a class="code" href="a00255.html">limiter_node</a> : <span class="keyword">public</span> <a class="code" href="a00251.html">graph_node</a>, <span class="keyword">public</span> <a class="code" href="a00277.html">receiver</a>< T >, <span class="keyword">public</span> <a class="code" href="a00282.html">sender</a>< T >, internal::no_copy {
+<a name="l01963"></a>01963     <span class="keyword">public</span>:
+<a name="l01964"></a>01964 
+<a name="l01965"></a><a class="code" href="a00255.html#f654b8974c613e8fd3de5a40e181d5ff">01965</a>         <span class="keyword">typedef</span> T <a class="code" href="a00255.html#f654b8974c613e8fd3de5a40e181d5ff">input_type</a>;
+<a name="l01966"></a><a class="code" href="a00255.html#370f88278dec6f584c1d08a375f9b4cd">01966</a>         <span class="keyword">typedef</span> T output_type;
+<a name="l01967"></a><a class="code" href="a00255.html#fd88ce7670e7107aef2161b45f156185">01967</a>         <span class="keyword">typedef</span> <a class="code" href="a00282.html">sender< input_type ></a> <a class="code" href="a00282.html">predecessor_type</a>;
+<a name="l01968"></a><a class="code" href="a00255.html#754182cc1e5b403201495bc1fd45674b">01968</a>         <span class="keyword">typedef</span> <a class="code" href="a00277.html">receiver< output_type ></a> <a class="code" href="a00277.html">successor_type</a>;
+<a name="l01969"></a>01969 
+<a name="l01970"></a>01970     <span class="keyword">private</span>:
+<a name="l01971"></a>01971 
+<a name="l01972"></a>01972         <a class="code" href="a00291.html">task</a> *my_root_task;
+<a name="l01973"></a>01973         size_t my_threshold;
+<a name="l01974"></a>01974         size_t my_count;
+<a name="l01975"></a>01975         internal::predecessor_cache< T > my_predecessors;
+<a name="l01976"></a>01976         <a class="code" href="a00286.html">spin_mutex</a> my_mutex;
+<a name="l01977"></a>01977         internal::broadcast_cache< T > my_successors;
+<a name="l01978"></a>01978 
+<a name="l01979"></a>01979         <span class="keyword">friend</span> <span class="keyword">class </span>internal::forward_task< limiter_node<T> >;
+<a name="l01980"></a>01980 
+<a name="l01981"></a>01981         <span class="comment">// Let decrementer call decrement_counter()</span>
+<a name="l01982"></a>01982         <span class="keyword">friend</span> <span class="keyword">class </span>internal::decrementer< limiter_node<T> >;
+<a name="l01983"></a>01983 
+<a name="l01984"></a>01984         <span class="keywordtype">void</span> decrement_counter() {
+<a name="l01985"></a>01985             <a class="code" href="a00255.html#f654b8974c613e8fd3de5a40e181d5ff">input_type</a> v;
+<a name="l01986"></a>01986             
+<a name="l01987"></a>01987             <span class="comment">// If we can't get / put an item immediately then drop the count</span>
+<a name="l01988"></a>01988             <span class="keywordflow">if</span> ( my_predecessors.get_item( v ) == <span class="keyword">false</span> 
+<a name="l01989"></a>01989                  || my_successors.try_put(v) == false ) {
+<a name="l01990"></a>01990                 <a class="code" href="a00287.html">spin_mutex::scoped_lock</a> lock(my_mutex);
+<a name="l01991"></a>01991                 --my_count;
+<a name="l01992"></a>01992                 <span class="keywordflow">if</span> ( !my_predecessors.empty() ) 
+<a name="l01993"></a>01993                     <a class="code" href="a00291.html#8365d063c0cc9d7bd616bca47256b93c">task::enqueue</a>( * <span class="keyword">new</span> ( task::allocate_additional_child_of( *my_root_task ) ) 
+<a name="l01994"></a>01994                                 internal::forward_task< <a class="code" href="a00255.html">limiter_node<T></a> >( *<span class="keyword">this</span> ) );
+<a name="l01995"></a>01995             }
+<a name="l01996"></a>01996         }
+<a name="l01997"></a>01997 
+<a name="l01998"></a>01998         <span class="keywordtype">void</span> forward() {
+<a name="l01999"></a>01999             {
+<a name="l02000"></a>02000                 spin_mutex::scoped_lock lock(my_mutex);
+<a name="l02001"></a>02001                 <span class="keywordflow">if</span> ( my_count < my_threshold ) 
+<a name="l02002"></a>02002                     ++my_count;
+<a name="l02003"></a>02003                 <span class="keywordflow">else</span>
+<a name="l02004"></a>02004                     <span class="keywordflow">return</span>;
+<a name="l02005"></a>02005             }
+<a name="l02006"></a>02006             decrement_counter();
+<a name="l02007"></a>02007         }
+<a name="l02008"></a>02008 
+<a name="l02009"></a>02009     <span class="keyword">public</span>:
+<a name="l02010"></a>02010 
+<a name="l02012"></a><a class="code" href="a00255.html#181fa37d3e3c68ec3819ea46beed79a2">02012</a>         internal::decrementer< limiter_node<T> > <a class="code" href="a00255.html#181fa37d3e3c68ec3819ea46beed79a2">decrement</a>;
+<a name="l02013"></a>02013 
+<a name="l02015"></a><a class="code" href="a00255.html#f0139fc645a51ce30b7aebb59c38a4ed">02015</a>         <a class="code" href="a00255.html#f0139fc645a51ce30b7aebb59c38a4ed">limiter_node</a>( <a class="code" href="a00250.html">graph</a> &g, size_t threshold, <span class="keywordtype">int</span> number_of_decrement_predecessors = 0 ) : 
+<a name="l02016"></a>02016            my_root_task(g.root_task()), my_threshold(threshold), my_count(0), <a class="code" href="a00255.html#181fa37d3e3c68ec3819ea46beed79a2">decrement</a>(number_of_decrement_predecessors) {
+<a name="l02017"></a>02017             my_predecessors.set_owner(<span class="keyword">this</span>);
+<a name="l02018"></a>02018             my_successors.set_owner(<span class="keyword">this</span>);
+<a name="l02019"></a>02019             <a class="code" href="a00255.html#181fa37d3e3c68ec3819ea46beed79a2">decrement</a>.set_owner(<span class="keyword">this</span>);
+<a name="l02020"></a>02020         }
+<a name="l02021"></a>02021 
+<a name="l02023"></a><a class="code" href="a00255.html#b8b9dbfbfc52750fa0c6bb8849681e86">02023</a>         <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00255.html#b8b9dbfbfc52750fa0c6bb8849681e86">register_successor</a>( <a class="code" href="a00277.html">receiver<output_type></a> &r ) {
+<a name="l02024"></a>02024             my_successors.register_successor(r);
+<a name="l02025"></a>02025             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l02026"></a>02026         }
+<a name="l02027"></a>02027 
+<a name="l02029"></a>02029 
+<a name="l02030"></a><a class="code" href="a00255.html#047d77f583e789e6d3ac6a52aba3168b">02030</a>         <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00255.html#047d77f583e789e6d3ac6a52aba3168b">remove_successor</a>( <a class="code" href="a00277.html">receiver<output_type></a> &r ) {
+<a name="l02031"></a>02031             r.<a class="code" href="a00277.html#d2f23b40b328dc254a7c2a0a30f408e4">remove_predecessor</a>(*<span class="keyword">this</span>);
+<a name="l02032"></a>02032             my_successors.remove_successor(r);
+<a name="l02033"></a>02033             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l02034"></a>02034         }
+<a name="l02035"></a>02035 
+<a name="l02037"></a><a class="code" href="a00255.html#a38facb46cde854cb7408bf9f3bf8999">02037</a>         <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00255.html#a38facb46cde854cb7408bf9f3bf8999">try_put</a>( T t ) {
+<a name="l02038"></a>02038             {
+<a name="l02039"></a>02039                 <a class="code" href="a00287.html">spin_mutex::scoped_lock</a> lock(my_mutex);
+<a name="l02040"></a>02040                 <span class="keywordflow">if</span> ( my_count >= my_threshold ) 
+<a name="l02041"></a>02041                     <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l02042"></a>02042                 <span class="keywordflow">else</span>
+<a name="l02043"></a>02043                     ++my_count; 
+<a name="l02044"></a>02044             }
+<a name="l02045"></a>02045 
+<a name="l02046"></a>02046             <span class="keywordtype">bool</span> msg = my_successors.try_put(t);
+<a name="l02047"></a>02047 
+<a name="l02048"></a>02048             <span class="keywordflow">if</span> ( msg != <span class="keyword">true</span> ) {
+<a name="l02049"></a>02049                 <a class="code" href="a00287.html">spin_mutex::scoped_lock</a> lock(my_mutex);
+<a name="l02050"></a>02050                 --my_count;
+<a name="l02051"></a>02051                 <span class="keywordflow">if</span> ( !my_predecessors.empty() ) 
+<a name="l02052"></a>02052                     <a class="code" href="a00291.html#8365d063c0cc9d7bd616bca47256b93c">task::enqueue</a>( * <span class="keyword">new</span> ( task::allocate_additional_child_of( *my_root_task ) ) 
+<a name="l02053"></a>02053                                 internal::forward_task< <a class="code" href="a00255.html">limiter_node<T></a> >( *<span class="keyword">this</span> ) );
+<a name="l02054"></a>02054             }
+<a name="l02055"></a>02055 
+<a name="l02056"></a>02056             <span class="keywordflow">return</span> msg;
+<a name="l02057"></a>02057         }
+<a name="l02058"></a>02058 
+<a name="l02060"></a><a class="code" href="a00255.html#fb9909b87538f5c881c7cb7577436d14">02060</a>         <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00255.html#fb9909b87538f5c881c7cb7577436d14">register_predecessor</a>( <a class="code" href="a00282.html">predecessor_type</a> &src ) {
+<a name="l02061"></a>02061             <a class="code" href="a00287.html">spin_mutex::scoped_lock</a> lock(my_mutex);
+<a name="l02062"></a>02062             my_predecessors.add( src );
+<a name="l02063"></a>02063             <span class="keywordflow">if</span> ( my_count < my_threshold && !my_successors.empty() ) 
+<a name="l02064"></a>02064                 <a class="code" href="a00291.html#8365d063c0cc9d7bd616bca47256b93c">task::enqueue</a>( * <span class="keyword">new</span> ( task::allocate_additional_child_of( *my_root_task ) ) 
+<a name="l02065"></a>02065                                internal::forward_task< <a class="code" href="a00255.html">limiter_node<T></a> >( *<span class="keyword">this</span> ) );
+<a name="l02066"></a>02066             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l02067"></a>02067         }
+<a name="l02068"></a>02068 
+<a name="l02070"></a><a class="code" href="a00255.html#a05cf39b2825183e9c0393890fbbbb41">02070</a>         <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00255.html#a05cf39b2825183e9c0393890fbbbb41">remove_predecessor</a>( <a class="code" href="a00282.html">predecessor_type</a> &src ) {
+<a name="l02071"></a>02071             my_predecessors.remove( src );
+<a name="l02072"></a>02072             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l02073"></a>02073         }
+<a name="l02074"></a>02074 
+<a name="l02075"></a>02075     };
+<a name="l02076"></a>02076 
+<a name="l02077"></a>02077     <span class="keyword">namespace </span>internal {
+<a name="l02078"></a>02078 
+<a name="l02079"></a>02079     <span class="keyword">struct </span>forwarding_base {
+<a name="l02080"></a>02080         <span class="keyword">virtual</span> ~forwarding_base() {}
+<a name="l02081"></a>02081         <span class="keyword">virtual</span> <span class="keywordtype">void</span> decrement_port_count() = 0;
+<a name="l02082"></a>02082         <span class="keyword">virtual</span> <span class="keywordtype">void</span> increment_port_count() = 0;
+<a name="l02083"></a>02083     };
+<a name="l02084"></a>02084 
+<a name="l02085"></a>02085     <span class="keyword">template</span>< <span class="keywordtype">int</span> N >
+<a name="l02086"></a>02086     <span class="keyword">struct </span>join_helper {
+<a name="l02087"></a>02087 
+<a name="l02088"></a>02088         <span class="keyword">template</span>< <span class="keyword">typename</span> TupleType, <span class="keyword">typename</span> PortType >
+<a name="l02089"></a>02089         <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> set_join_node_pointer(TupleType &my_input, PortType *port) {
+<a name="l02090"></a>02090             std::get<N-1>( my_input ).set_join_node_pointer(port);
+<a name="l02091"></a>02091             join_helper<N-1>::set_join_node_pointer( my_input, port );
+<a name="l02092"></a>02092         }
+<a name="l02093"></a>02093         <span class="keyword">template</span>< <span class="keyword">typename</span> TupleType >
+<a name="l02094"></a>02094         <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> consume_reservations( TupleType &my_input ) {
+<a name="l02095"></a>02095             std::get<N-1>( my_input ).consume();
+<a name="l02096"></a>02096             join_helper<N-1>::consume_reservations( my_input );
+<a name="l02097"></a>02097         }
+<a name="l02098"></a>02098 
+<a name="l02099"></a>02099         <span class="keyword">template</span>< <span class="keyword">typename</span> TupleType >
+<a name="l02100"></a>02100         <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> release_my_reservation( TupleType &my_input ) {
+<a name="l02101"></a>02101             std::get<N-1>( my_input ).<a class="code" href="a00362.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>();
+<a name="l02102"></a>02102         }
+<a name="l02103"></a>02103 
+<a name="l02104"></a>02104         <span class="keyword">template</span> <<span class="keyword">typename</span> TupleType>
+<a name="l02105"></a>02105         <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> release_reservations( TupleType &my_input) {
+<a name="l02106"></a>02106             join_helper<N-1>::release_reservations(my_input);
+<a name="l02107"></a>02107             release_my_reservation(my_input);
+<a name="l02108"></a>02108         }
+<a name="l02109"></a>02109 
+<a name="l02110"></a>02110         <span class="keyword">template</span>< <span class="keyword">typename</span> InputTuple, <span class="keyword">typename</span> OutputTuple >
+<a name="l02111"></a>02111         <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> reserve( InputTuple &my_input, OutputTuple &out) {
+<a name="l02112"></a>02112             <span class="keywordflow">if</span> ( !std::get<N-1>( my_input ).reserve( std::get<N-1>( out ) ) ) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l02113"></a>02113             <span class="keywordflow">if</span> ( !join_helper<N-1>::reserve( my_input, out ) ) {
+<a name="l02114"></a>02114                 release_my_reservation( my_input );
+<a name="l02115"></a>02115                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l02116"></a>02116             }
+<a name="l02117"></a>02117             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l02118"></a>02118         }
+<a name="l02119"></a>02119     };
+<a name="l02120"></a>02120 
+<a name="l02121"></a>02121     <span class="keyword">template</span>< >
+<a name="l02122"></a>02122     <span class="keyword">struct </span>join_helper<1> {
+<a name="l02123"></a>02123 
+<a name="l02124"></a>02124         <span class="keyword">template</span>< <span class="keyword">typename</span> TupleType, <span class="keyword">typename</span> PortType >
+<a name="l02125"></a>02125         <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> set_join_node_pointer(TupleType &my_input, PortType *port) {
+<a name="l02126"></a>02126             std::get<0>( my_input ).set_join_node_pointer(port);
+<a name="l02127"></a>02127         }
+<a name="l02128"></a>02128 
+<a name="l02129"></a>02129         <span class="keyword">template</span>< <span class="keyword">typename</span> TupleType >
+<a name="l02130"></a>02130         <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> consume_reservations( TupleType &my_input ) {
+<a name="l02131"></a>02131             std::get<0>( my_input ).consume();
+<a name="l02132"></a>02132         }
+<a name="l02133"></a>02133 
+<a name="l02134"></a>02134         <span class="keyword">template</span>< <span class="keyword">typename</span> TupleType >
+<a name="l02135"></a>02135         <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> release_my_reservation( TupleType &my_input ) {
+<a name="l02136"></a>02136             std::get<0>( my_input ).<a class="code" href="a00362.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>();
+<a name="l02137"></a>02137         }
+<a name="l02138"></a>02138         
+<a name="l02139"></a>02139         <span class="keyword">template</span><<span class="keyword">typename</span> TupleType>
+<a name="l02140"></a>02140         <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> release_reservations( TupleType &my_input) {
+<a name="l02141"></a>02141             release_my_reservation(my_input);
+<a name="l02142"></a>02142         }
+<a name="l02143"></a>02143 
+<a name="l02144"></a>02144         <span class="keyword">template</span>< <span class="keyword">typename</span> InputTuple, <span class="keyword">typename</span> OutputTuple >
+<a name="l02145"></a>02145         <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> reserve( InputTuple &my_input, OutputTuple &out) {
+<a name="l02146"></a>02146             <span class="keywordflow">return</span> std::get<0>( my_input ).reserve( std::get<0>( out ) );
+<a name="l02147"></a>02147         }
+<a name="l02148"></a>02148     };
+<a name="l02149"></a>02149 
+<a name="l02150"></a>02150     <span class="keyword">namespace </span>join_policy_namespace {
+<a name="l02151"></a>02151         <span class="keyword">enum</span> join_policy { two_phase
+<a name="l02152"></a>02152         };
+<a name="l02153"></a>02153     }
+<a name="l02154"></a>02154     <span class="keyword">using namespace </span>join_policy_namespace;
+<a name="l02155"></a>02155 
+<a name="l02157"></a>02157     <span class="keyword">template</span>< <span class="keyword">typename</span> T >
+<a name="l02158"></a><a class="code" href="a00304.html">02158</a>     <span class="keyword">class </span><a class="code" href="a00304.html">two_phase_port</a> : <span class="keyword">public</span> <a class="code" href="a00277.html">receiver</a><T> {
+<a name="l02159"></a>02159     <span class="keyword">public</span>:
+<a name="l02160"></a><a class="code" href="a00304.html#0f464d59e15941d6d625e8c7d634e26b">02160</a>         <span class="keyword">typedef</span> T <a class="code" href="a00304.html#0f464d59e15941d6d625e8c7d634e26b">input_type</a>;
+<a name="l02161"></a><a class="code" href="a00304.html#37ee9b5320b631c39bccc0b4745d88d1">02161</a>         <span class="keyword">typedef</span> <a class="code" href="a00282.html">sender<T></a> <a class="code" href="a00282.html">predecessor_type</a>;
+<a name="l02162"></a>02162 
+<a name="l02164"></a><a class="code" href="a00304.html#60e17ef935031c86c4a288eafab5c066">02164</a>         <a class="code" href="a00304.html#60e17ef935031c86c4a288eafab5c066">two_phase_port</a>() : reserved(false) {
+<a name="l02165"></a>02165            my_join = NULL;
+<a name="l02166"></a>02166            my_predecessors.set_owner( <span class="keyword">this</span> );
+<a name="l02167"></a>02167         }
+<a name="l02168"></a>02168 
+<a name="l02169"></a>02169         <span class="comment">// copy constructor</span>
+<a name="l02170"></a>02170         <a class="code" href="a00304.html#60e17ef935031c86c4a288eafab5c066">two_phase_port</a>(<span class="keyword">const</span> <a class="code" href="a00304.html">two_phase_port</a>& <span class="comment">/* other */</span>) : <a class="code" href="a00277.html">receiver</a><T>() {
+<a name="l02171"></a>02171             reserved = <span class="keyword">false</span>;
+<a name="l02172"></a>02172             my_join = NULL;
+<a name="l02173"></a>02173             my_predecessors.set_owner( <span class="keyword">this</span> );
+<a name="l02174"></a>02174         }
+<a name="l02175"></a>02175 
+<a name="l02176"></a>02176         <span class="keywordtype">void</span> set_join_node_pointer(forwarding_base *join) {
+<a name="l02177"></a>02177             my_join = join;
+<a name="l02178"></a>02178         }
+<a name="l02179"></a>02179 
+<a name="l02180"></a><a class="code" href="a00304.html#f316c0d5ff67068ff23b684accbe87f4">02180</a>         <span class="keywordtype">bool</span> <a class="code" href="a00304.html#f316c0d5ff67068ff23b684accbe87f4">try_put</a>( T ) {
+<a name="l02181"></a>02181             <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l02182"></a>02182         }
+<a name="l02183"></a>02183 
+<a name="l02185"></a><a class="code" href="a00304.html#6dc1f9bf02109c7f6fe4cc58bc31a00c">02185</a>         <span class="keywordtype">bool</span> <a class="code" href="a00304.html#6dc1f9bf02109c7f6fe4cc58bc31a00c">register_predecessor</a>( <a class="code" href="a00282.html">sender<T></a> &src ) {
+<a name="l02186"></a>02186             <a class="code" href="a00287.html">spin_mutex::scoped_lock</a> l(my_mutex);
+<a name="l02187"></a>02187             <span class="keywordtype">bool</span> no_predecessors = my_predecessors.empty();
+<a name="l02188"></a>02188             my_predecessors.add(src);
+<a name="l02189"></a>02189             <span class="keywordflow">if</span> ( no_predecessors ) {
+<a name="l02190"></a>02190                 my_join->decrement_port_count( );
+<a name="l02191"></a>02191             }
+<a name="l02192"></a>02192             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l02193"></a>02193         }
+<a name="l02194"></a>02194 
+<a name="l02196"></a><a class="code" href="a00304.html#a734a55289804ff34ce1c6ac4c5075e4">02196</a>         <span class="keywordtype">bool</span> <a class="code" href="a00304.html#a734a55289804ff34ce1c6ac4c5075e4">remove_predecessor</a>( <a class="code" href="a00282.html">sender<T></a> &src ) {
+<a name="l02197"></a>02197             <a class="code" href="a00287.html">spin_mutex::scoped_lock</a> l(my_mutex);
+<a name="l02198"></a>02198             my_predecessors.remove( src );
+<a name="l02199"></a>02199             <span class="keywordflow">if</span>(my_predecessors.empty()) my_join->increment_port_count();
+<a name="l02200"></a>02200             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l02201"></a>02201         }
+<a name="l02202"></a>02202 
+<a name="l02204"></a><a class="code" href="a00304.html#1d7399cfc77fca8878d8d16049ce4e7e">02204</a>         <span class="keywordtype">bool</span> <a class="code" href="a00304.html#1d7399cfc77fca8878d8d16049ce4e7e">reserve</a>( T &v ) {
+<a name="l02205"></a>02205             <a class="code" href="a00287.html">spin_mutex::scoped_lock</a> l(my_mutex);
+<a name="l02206"></a>02206             <span class="keywordflow">if</span> ( reserved ) {
+<a name="l02207"></a>02207                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l02208"></a>02208             }
+<a name="l02209"></a>02209             <span class="keywordflow">if</span> ( my_predecessors.try_reserve( v ) ) {
+<a name="l02210"></a>02210                 reserved = <span class="keyword">true</span>;
+<a name="l02211"></a>02211                 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l02212"></a>02212             } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( my_predecessors.empty() ) {
+<a name="l02213"></a>02213                 my_join->increment_port_count();
+<a name="l02214"></a>02214             }
+<a name="l02215"></a>02215             <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l02216"></a>02216         }
+<a name="l02217"></a>02217 
+<a name="l02219"></a><a class="code" href="a00304.html#091f6efffaadbbeca6cf23483dabd891">02219</a>         <span class="keywordtype">void</span> <a class="code" href="a00304.html#091f6efffaadbbeca6cf23483dabd891">release</a>( ) {
+<a name="l02220"></a>02220             <a class="code" href="a00287.html">spin_mutex::scoped_lock</a> l(my_mutex);
+<a name="l02221"></a>02221             reserved = <span class="keyword">false</span>;
+<a name="l02222"></a>02222             my_predecessors.try_release( );
+<a name="l02223"></a>02223         }
+<a name="l02224"></a>02224 
+<a name="l02226"></a><a class="code" href="a00304.html#684f6bbc3290270ed43cb34ffd273f71">02226</a>         <span class="keywordtype">void</span> <a class="code" href="a00304.html#684f6bbc3290270ed43cb34ffd273f71">consume</a>( ) {
+<a name="l02227"></a>02227             <a class="code" href="a00287.html">spin_mutex::scoped_lock</a> l(my_mutex);
+<a name="l02228"></a>02228             reserved = <span class="keyword">false</span>;
+<a name="l02229"></a>02229             my_predecessors.try_consume( );
+<a name="l02230"></a>02230         }
+<a name="l02231"></a>02231 
+<a name="l02232"></a>02232     <span class="keyword">private</span>:
+<a name="l02233"></a>02233         <a class="code" href="a00286.html">spin_mutex</a> my_mutex;
+<a name="l02234"></a>02234         forwarding_base *my_join;
+<a name="l02235"></a>02235         reservable_predecessor_cache< T > my_predecessors;
+<a name="l02236"></a>02236         <span class="keywordtype">bool</span> reserved;
+<a name="l02237"></a>02237     };
+<a name="l02238"></a>02238 
+<a name="l02239"></a>02239     <span class="keyword">template</span><join_policy JP, <span class="keyword">typename</span> InputTuple, <span class="keyword">typename</span> OutputTuple>
+<a name="l02240"></a>02240     <span class="keyword">class </span>join_node_base;
+<a name="l02241"></a>02241 
+<a name="l02243"></a>02243     <span class="keyword">template</span><join_policy JP, <span class="keyword">typename</span> InputTuple, <span class="keyword">typename</span> OutputTuple>
+<a name="l02244"></a>02244     <span class="keyword">class </span>join_node_FE;
+<a name="l02245"></a>02245 
+<a name="l02246"></a>02246     <span class="keyword">template</span><<span class="keyword">typename</span> InputTuple, <span class="keyword">typename</span> OutputTuple>
+<a name="l02247"></a>02247     <span class="keyword">class </span>join_node_FE<two_phase, InputTuple, OutputTuple> : <span class="keyword">public</span> forwarding_base {
+<a name="l02248"></a>02248     <span class="keyword">public</span>:
+<a name="l02249"></a>02249         <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> N = std::tuple_size<OutputTuple>::value;
+<a name="l02250"></a>02250         <span class="keyword">typedef</span> OutputTuple output_type;
+<a name="l02251"></a>02251         <span class="keyword">typedef</span> InputTuple input_type;
+<a name="l02252"></a>02252         <span class="keyword">typedef</span> join_node_base<two_phase, InputTuple, OutputTuple> my_node_type; <span class="comment">// for forwarding</span>
+<a name="l02253"></a>02253 
+<a name="l02254"></a>02254         join_node_FE(<a class="code" href="a00250.html">graph</a> &g) : my_root_task(g.root_task()), my_node(NULL) {
+<a name="l02255"></a>02255             ports_with_no_inputs = N;
+<a name="l02256"></a>02256             join_helper<N>::set_join_node_pointer(my_inputs, <span class="keyword">this</span>);
+<a name="l02257"></a>02257         }
+<a name="l02258"></a>02258 
+<a name="l02259"></a>02259         <span class="keywordtype">void</span> set_my_node(my_node_type *new_my_node) { my_node = new_my_node; }
+<a name="l02260"></a>02260 
+<a name="l02261"></a>02261        <span class="keywordtype">void</span> increment_port_count() {
+<a name="l02262"></a>02262             ++ports_with_no_inputs;
+<a name="l02263"></a>02263         }
+<a name="l02264"></a>02264 
+<a name="l02265"></a>02265         <span class="comment">// if all input_ports have predecessors, spawn forward to try and consume tuples</span>
+<a name="l02266"></a>02266         <span class="keywordtype">void</span> decrement_port_count() {
+<a name="l02267"></a>02267             <span class="keywordflow">if</span>(ports_with_no_inputs.fetch_and_decrement() == 1) {
+<a name="l02268"></a>02268                 <a class="code" href="a00291.html#8365d063c0cc9d7bd616bca47256b93c">task::enqueue</a>( * <span class="keyword">new</span> ( task::allocate_additional_child_of( *my_root_task ) )
+<a name="l02269"></a>02269                     forward_task<my_node_type>(*my_node) );
+<a name="l02270"></a>02270             }
+<a name="l02271"></a>02271         }
+<a name="l02272"></a>02272 
+<a name="l02273"></a>02273         input_type &inputs() { <span class="keywordflow">return</span> my_inputs; }
+<a name="l02274"></a>02274     <span class="keyword">protected</span>:
+<a name="l02275"></a>02275         <span class="comment">// all methods on input ports should be called under spin lock from join_node_base.</span>
+<a name="l02276"></a>02276 
+<a name="l02277"></a>02277         <span class="keywordtype">bool</span> tuple_build_may_succeed() {
+<a name="l02278"></a>02278             <span class="keywordflow">return</span> !ports_with_no_inputs;
+<a name="l02279"></a>02279         }
+<a name="l02280"></a>02280 
+<a name="l02281"></a>02281         <span class="keywordtype">bool</span> try_to_make_tuple(output_type &out) {
+<a name="l02282"></a>02282             <span class="keywordflow">if</span>(ports_with_no_inputs) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l02283"></a>02283             <span class="keywordflow">return</span> join_helper<N>::reserve(my_inputs, out);
+<a name="l02284"></a>02284         }
+<a name="l02285"></a>02285 
+<a name="l02286"></a>02286         <span class="keywordtype">void</span> tuple_accepted() {
+<a name="l02287"></a>02287             join_helper<N>::consume_reservations(my_inputs);
+<a name="l02288"></a>02288         }
+<a name="l02289"></a>02289         <span class="keywordtype">void</span> tuple_rejected() {
+<a name="l02290"></a>02290             join_helper<N>::release_reservations(my_inputs);
+<a name="l02291"></a>02291         }
+<a name="l02292"></a>02292 
+<a name="l02293"></a>02293         input_type my_inputs;
+<a name="l02294"></a>02294         task *my_root_task;
+<a name="l02295"></a>02295         my_node_type *my_node;
+<a name="l02296"></a>02296         atomic<size_t> ports_with_no_inputs;
+<a name="l02297"></a>02297     };
+<a name="l02298"></a>02298 
+<a name="l02300"></a>02300     <span class="keyword">template</span><join_policy JP, <span class="keyword">typename</span> InputTuple, <span class="keyword">typename</span> OutputTuple>
+<a name="l02301"></a><a class="code" href="a00254.html">02301</a>     <span class="keyword">class </span><a class="code" href="a00254.html">join_node_base</a> : <span class="keyword">public</span> <a class="code" href="a00251.html">graph_node</a>, <span class="keyword">public</span> join_node_FE<JP, InputTuple, OutputTuple>,
+<a name="l02302"></a>02302                            <span class="keyword">public</span> <a class="code" href="a00282.html">sender</a><OutputTuple>, no_copy {
+<a name="l02303"></a>02303     <span class="keyword">public</span>:
+<a name="l02304"></a><a class="code" href="a00254.html#578893d923f91b7e44a15dea8b0d7082">02304</a>         <span class="keyword">typedef</span> OutputTuple output_type;
+<a name="l02305"></a>02305 
+<a name="l02306"></a><a class="code" href="a00254.html#1212cbaa293a93c3bf334da1539556bd">02306</a>         <span class="keyword">typedef</span> <a class="code" href="a00277.html">receiver<output_type></a> <a class="code" href="a00277.html">successor_type</a>;
+<a name="l02307"></a>02307         <span class="keyword">typedef</span> join_node_FE<JP, InputTuple, OutputTuple> input_ports_type;
+<a name="l02308"></a>02308         <span class="keyword">using</span> input_ports_type::tuple_build_may_succeed;
+<a name="l02309"></a>02309         <span class="keyword">using</span> input_ports_type::try_to_make_tuple;
+<a name="l02310"></a>02310         <span class="keyword">using</span> input_ports_type::tuple_accepted;
+<a name="l02311"></a>02311         <span class="keyword">using</span> input_ports_type::tuple_rejected;
+<a name="l02312"></a>02312 
+<a name="l02313"></a>02313         <a class="code" href="a00254.html">join_node_base</a>(<a class="code" href="a00250.html">graph</a> &g) : input_ports_type(g),  my_root_task(g.root_task()) {
+<a name="l02314"></a>02314             my_successors.set_owner(<span class="keyword">this</span>);
+<a name="l02315"></a>02315             input_ports_type::set_my_node(<span class="keyword">this</span>);
+<a name="l02316"></a>02316         }
+<a name="l02317"></a>02317 
+<a name="l02318"></a>02318         <span class="keywordtype">bool</span> register_successor(<a class="code" href="a00254.html#1212cbaa293a93c3bf334da1539556bd">successor_type</a> &r) {
+<a name="l02319"></a>02319             <a class="code" href="a00287.html">spin_mutex::scoped_lock</a> l(my_mutex);
+<a name="l02320"></a>02320             my_successors.register_successor(r);
+<a name="l02321"></a>02321             <span class="keywordflow">if</span>(tuple_build_may_succeed()) {
+<a name="l02322"></a>02322                 <a class="code" href="a00291.html#8365d063c0cc9d7bd616bca47256b93c">task::enqueue</a>( * <span class="keyword">new</span> ( task::allocate_additional_child_of( *my_root_task) )
+<a name="l02323"></a>02323                         forward_task<<a class="code" href="a00254.html">join_node_base<JP,InputTuple,OutputTuple></a> >( *<span class="keyword">this</span> ) );
+<a name="l02324"></a>02324             }
+<a name="l02325"></a>02325             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l02326"></a>02326         }
+<a name="l02327"></a>02327 
+<a name="l02328"></a>02328         <span class="keyword">template</span><size_t N>
+<a name="l02329"></a>02329         receiver<typename std::tuple_element<N, OutputTuple>::value> & input_port(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> std::get<N>(input_ports_type::inputs()); }
+<a name="l02330"></a>02330 
+<a name="l02331"></a>02331         <span class="keywordtype">bool</span> remove_successor( <a class="code" href="a00254.html#1212cbaa293a93c3bf334da1539556bd">successor_type</a> &r) {
+<a name="l02332"></a>02332             spin_mutex::scoped_lock l(my_mutex);
+<a name="l02333"></a>02333             my_successors.remove_successor(r);
+<a name="l02334"></a>02334             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l02335"></a>02335         }
+<a name="l02336"></a>02336 
+<a name="l02337"></a><a class="code" href="a00254.html#50c0e6465ac929a2e94d4e62a13ebeff">02337</a>         <span class="keywordtype">bool</span> <a class="code" href="a00254.html#50c0e6465ac929a2e94d4e62a13ebeff">try_get</a>( output_type &v) {
+<a name="l02338"></a>02338             <a class="code" href="a00287.html">spin_mutex::scoped_lock</a> l(my_mutex);
+<a name="l02339"></a>02339             <span class="keywordflow">if</span>(tuple_build_may_succeed()) {
+<a name="l02340"></a>02340                 <span class="keywordflow">if</span>(try_to_make_tuple(v)) {
+<a name="l02341"></a>02341                     <span class="comment">// successor requested, so acceptance guaranteed</span>
+<a name="l02342"></a>02342                     tuple_accepted();
+<a name="l02343"></a>02343                     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l02344"></a>02344                 }
+<a name="l02345"></a>02345             }
+<a name="l02346"></a>02346             <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l02347"></a>02347         }
+<a name="l02348"></a>02348 
+<a name="l02349"></a>02349     <span class="keyword">private</span>:
+<a name="l02350"></a>02350         <a class="code" href="a00291.html">task</a> *my_root_task;
+<a name="l02351"></a>02351         broadcast_cache<output_type, null_rw_mutex> my_successors;
+<a name="l02352"></a>02352         <a class="code" href="a00286.html">spin_mutex</a> my_mutex;
+<a name="l02353"></a>02353 
+<a name="l02354"></a>02354         <span class="keyword">friend</span> <span class="keyword">class </span>forward_task< join_node_base<JP, InputTuple, OutputTuple> >;
+<a name="l02355"></a>02355 
+<a name="l02356"></a>02356         <span class="keywordtype">void</span> forward() {
+<a name="l02357"></a>02357             <a class="code" href="a00287.html">spin_mutex::scoped_lock</a> l(my_mutex);
+<a name="l02358"></a>02358             output_type out;
+<a name="l02359"></a>02359             <span class="keywordflow">if</span>(!tuple_build_may_succeed()) <span class="keywordflow">return</span>;
+<a name="l02360"></a>02360             <span class="keywordflow">while</span>(try_to_make_tuple(out)) {
+<a name="l02361"></a>02361                 <span class="keywordflow">if</span>(my_successors.try_put(out)) {
+<a name="l02362"></a>02362                     tuple_accepted();
+<a name="l02363"></a>02363                 }
+<a name="l02364"></a>02364                 <span class="keywordflow">else</span> {
+<a name="l02365"></a>02365                     tuple_rejected();
+<a name="l02366"></a>02366                     <span class="keywordflow">return</span>;
+<a name="l02367"></a>02367                 }
+<a name="l02368"></a>02368             }
+<a name="l02369"></a>02369         }
+<a name="l02370"></a>02370     };
+<a name="l02371"></a>02371 
+<a name="l02373"></a>02373     <span class="comment">//  using tuple_element.</span>
+<a name="l02374"></a>02374     <span class="keyword">template</span><<span class="keywordtype">int</span> N, <span class="keyword">typename</span> OutputTuple, join_policy JP>
+<a name="l02375"></a>02375     <span class="keyword">class </span>unfolded_join_node;
+<a name="l02376"></a>02376 
+<a name="l02377"></a>02377     <span class="keyword">template</span><<span class="keyword">typename</span> OutputTuple>
+<a name="l02378"></a>02378     <span class="keyword">class </span>unfolded_join_node<2,OutputTuple,two_phase> : <span class="keyword">public</span> internal::join_node_base<two_phase,
+<a name="l02379"></a>02379         std::tuple<
+<a name="l02380"></a>02380                 two_phase_port<typename std::tuple_element<0,OutputTuple>::type>, 
+<a name="l02381"></a>02381                 two_phase_port<typename std::tuple_element<1,OutputTuple>::type> >,
+<a name="l02382"></a>02382         OutputTuple
+<a name="l02383"></a>02383                   >
+<a name="l02384"></a>02384                   {
+<a name="l02385"></a>02385     <span class="keyword">private</span>:
+<a name="l02386"></a>02386         <span class="keyword">typedef</span> <span class="keyword">typename</span> std::tuple<
+<a name="l02387"></a>02387                 two_phase_port<typename std::tuple_element<0,OutputTuple>::type>, 
+<a name="l02388"></a>02388                 two_phase_port<typename std::tuple_element<1,OutputTuple>::type> > port_tuple_type;
+<a name="l02389"></a>02389     <span class="keyword">public</span>:
+<a name="l02390"></a>02390         <span class="keyword">typedef</span> OutputTuple output_type;
+<a name="l02391"></a>02391     <span class="keyword">private</span>:
+<a name="l02392"></a>02392         <span class="keyword">typedef</span> join_node_base<two_phase, port_tuple_type, output_type > base_type;
+<a name="l02393"></a>02393     <span class="keyword">public</span>:
+<a name="l02394"></a>02394         unfolded_join_node(graph &g) : base_type(g) {}
+<a name="l02395"></a>02395     };
+<a name="l02396"></a>02396 
+<a name="l02397"></a>02397     <span class="keyword">template</span><<span class="keyword">typename</span> OutputTuple>
+<a name="l02398"></a>02398     <span class="keyword">class </span>unfolded_join_node<3,OutputTuple,two_phase> : <span class="keyword">public</span> internal::join_node_base<two_phase,
+<a name="l02399"></a>02399         std::tuple<
+<a name="l02400"></a>02400                 two_phase_port<typename std::tuple_element<0,OutputTuple>::type>,
+<a name="l02401"></a>02401                 two_phase_port<typename std::tuple_element<1,OutputTuple>::type>,
+<a name="l02402"></a>02402                 two_phase_port<typename std::tuple_element<2,OutputTuple>::type> >,
+<a name="l02403"></a>02403         OutputTuple
+<a name="l02404"></a>02404                     >
+<a name="l02405"></a>02405                     {
+<a name="l02406"></a>02406     <span class="keyword">private</span>:
+<a name="l02407"></a>02407         <span class="keyword">typedef</span> <span class="keyword">typename</span> std::tuple<
+<a name="l02408"></a>02408                 two_phase_port<typename std::tuple_element<0,OutputTuple>::type>, 
+<a name="l02409"></a>02409                 two_phase_port<typename std::tuple_element<1,OutputTuple>::type>, 
+<a name="l02410"></a>02410                 two_phase_port<typename std::tuple_element<2,OutputTuple>::type> > port_tuple_type;
+<a name="l02411"></a>02411     <span class="keyword">public</span>:
+<a name="l02412"></a>02412         <span class="keyword">typedef</span> OutputTuple output_type;
+<a name="l02413"></a>02413     <span class="keyword">private</span>:
+<a name="l02414"></a>02414         <span class="keyword">typedef</span> join_node_base<two_phase, port_tuple_type, output_type > base_type;
+<a name="l02415"></a>02415     <span class="keyword">public</span>:
+<a name="l02416"></a>02416         unfolded_join_node(graph &g) : base_type(g) {}
+<a name="l02417"></a>02417     };
+<a name="l02418"></a>02418 
+<a name="l02419"></a>02419     <span class="keyword">template</span><<span class="keyword">typename</span> OutputTuple>
+<a name="l02420"></a>02420     <span class="keyword">class </span>unfolded_join_node<4,OutputTuple,two_phase> : <span class="keyword">public</span> internal::join_node_base<two_phase,
+<a name="l02421"></a>02421         std::tuple<
+<a name="l02422"></a>02422                 two_phase_port<typename std::tuple_element<0,OutputTuple>::type>,
+<a name="l02423"></a>02423                 two_phase_port<typename std::tuple_element<1,OutputTuple>::type>,
+<a name="l02424"></a>02424                 two_phase_port<typename std::tuple_element<2,OutputTuple>::type>,
+<a name="l02425"></a>02425                 two_phase_port<typename std::tuple_element<3,OutputTuple>::type> >,
+<a name="l02426"></a>02426         OutputTuple
+<a name="l02427"></a>02427                     > {
+<a name="l02428"></a>02428     <span class="keyword">private</span>:
+<a name="l02429"></a>02429         <span class="keyword">typedef</span> <span class="keyword">typename</span> std::tuple<
+<a name="l02430"></a>02430                 two_phase_port<typename std::tuple_element<0,OutputTuple>::type>, 
+<a name="l02431"></a>02431                 two_phase_port<typename std::tuple_element<1,OutputTuple>::type>, 
+<a name="l02432"></a>02432                 two_phase_port<typename std::tuple_element<2,OutputTuple>::type>, 
+<a name="l02433"></a>02433                 two_phase_port<typename std::tuple_element<3,OutputTuple>::type> > port_tuple_type;
+<a name="l02434"></a>02434     <span class="keyword">public</span>:
+<a name="l02435"></a>02435         <span class="keyword">typedef</span> OutputTuple output_type;
+<a name="l02436"></a>02436     <span class="keyword">private</span>:
+<a name="l02437"></a>02437         <span class="keyword">typedef</span> join_node_base<two_phase, port_tuple_type, output_type > base_type;
+<a name="l02438"></a>02438     <span class="keyword">public</span>:
+<a name="l02439"></a>02439         unfolded_join_node(graph &g) : base_type(g) {}
+<a name="l02440"></a>02440     };
+<a name="l02441"></a>02441 
+<a name="l02442"></a>02442     <span class="keyword">template</span><<span class="keyword">typename</span> OutputTuple>
+<a name="l02443"></a>02443     <span class="keyword">class </span>unfolded_join_node<5,OutputTuple,two_phase> : <span class="keyword">public</span> internal::join_node_base<two_phase,
+<a name="l02444"></a>02444         std::tuple<
+<a name="l02445"></a>02445                 two_phase_port<typename std::tuple_element<0,OutputTuple>::type>,
+<a name="l02446"></a>02446                 two_phase_port<typename std::tuple_element<1,OutputTuple>::type>,
+<a name="l02447"></a>02447                 two_phase_port<typename std::tuple_element<2,OutputTuple>::type>,
+<a name="l02448"></a>02448                 two_phase_port<typename std::tuple_element<3,OutputTuple>::type>,
+<a name="l02449"></a>02449                 two_phase_port<typename std::tuple_element<4,OutputTuple>::type> >,
+<a name="l02450"></a>02450         OutputTuple
+<a name="l02451"></a>02451                 > {
+<a name="l02452"></a>02452     <span class="keyword">private</span>:
+<a name="l02453"></a>02453         <span class="keyword">typedef</span> <span class="keyword">typename</span> std::tuple<
+<a name="l02454"></a>02454                 two_phase_port<typename std::tuple_element<0,OutputTuple>::type>, 
+<a name="l02455"></a>02455                 two_phase_port<typename std::tuple_element<1,OutputTuple>::type>, 
+<a name="l02456"></a>02456                 two_phase_port<typename std::tuple_element<2,OutputTuple>::type>, 
+<a name="l02457"></a>02457                 two_phase_port<typename std::tuple_element<3,OutputTuple>::type>, 
+<a name="l02458"></a>02458                 two_phase_port<typename std::tuple_element<4,OutputTuple>::type> > port_tuple_type;
+<a name="l02459"></a>02459     <span class="keyword">public</span>:
+<a name="l02460"></a>02460         <span class="keyword">typedef</span> OutputTuple output_type;
+<a name="l02461"></a>02461     <span class="keyword">private</span>:
+<a name="l02462"></a>02462         <span class="keyword">typedef</span> join_node_base<two_phase, port_tuple_type, output_type > base_type;
+<a name="l02463"></a>02463     <span class="keyword">public</span>:
+<a name="l02464"></a>02464         unfolded_join_node(graph &g) : base_type(g) {}
+<a name="l02465"></a>02465     };
+<a name="l02466"></a>02466 
+<a name="l02467"></a>02467     <span class="keyword">template</span><<span class="keyword">typename</span> OutputTuple>
+<a name="l02468"></a>02468     <span class="keyword">class </span>unfolded_join_node<6,OutputTuple,two_phase> : <span class="keyword">public</span> internal::join_node_base<two_phase,
+<a name="l02469"></a>02469         std::tuple<
+<a name="l02470"></a>02470                 two_phase_port<typename std::tuple_element<0,OutputTuple>::type>,
+<a name="l02471"></a>02471                 two_phase_port<typename std::tuple_element<1,OutputTuple>::type>,
+<a name="l02472"></a>02472                 two_phase_port<typename std::tuple_element<2,OutputTuple>::type>,
+<a name="l02473"></a>02473                 two_phase_port<typename std::tuple_element<3,OutputTuple>::type>,
+<a name="l02474"></a>02474                 two_phase_port<typename std::tuple_element<4,OutputTuple>::type>,
+<a name="l02475"></a>02475                 two_phase_port<typename std::tuple_element<5,OutputTuple>::type> >,
+<a name="l02476"></a>02476         OutputTuple
+<a name="l02477"></a>02477                     > {
+<a name="l02478"></a>02478     <span class="keyword">private</span>:
+<a name="l02479"></a>02479         <span class="keyword">typedef</span> <span class="keyword">typename</span> std::tuple<
+<a name="l02480"></a>02480                 two_phase_port<typename std::tuple_element<0,OutputTuple>::type>, 
+<a name="l02481"></a>02481                 two_phase_port<typename std::tuple_element<1,OutputTuple>::type>, 
+<a name="l02482"></a>02482                 two_phase_port<typename std::tuple_element<2,OutputTuple>::type>, 
+<a name="l02483"></a>02483                 two_phase_port<typename std::tuple_element<3,OutputTuple>::type>, 
+<a name="l02484"></a>02484                 two_phase_port<typename std::tuple_element<4,OutputTuple>::type>, 
+<a name="l02485"></a>02485                 two_phase_port<typename std::tuple_element<5,OutputTuple>::type> > port_tuple_type;
+<a name="l02486"></a>02486     <span class="keyword">public</span>:
+<a name="l02487"></a>02487         <span class="keyword">typedef</span> OutputTuple output_type;
+<a name="l02488"></a>02488     <span class="keyword">private</span>:
+<a name="l02489"></a>02489         <span class="keyword">typedef</span> join_node_base<two_phase, port_tuple_type, output_type > base_type;
+<a name="l02490"></a>02490     <span class="keyword">public</span>:
+<a name="l02491"></a>02491         unfolded_join_node(graph &g) : base_type(g) {}
+<a name="l02492"></a>02492     };
+<a name="l02493"></a>02493 
+<a name="l02494"></a>02494     <span class="keyword">template</span><<span class="keyword">typename</span> OutputTuple>
+<a name="l02495"></a>02495     <span class="keyword">class </span>unfolded_join_node<7,OutputTuple,two_phase> : <span class="keyword">public</span> internal::join_node_base<two_phase,
+<a name="l02496"></a>02496         std::tuple<
+<a name="l02497"></a>02497                 two_phase_port<typename std::tuple_element<0,OutputTuple>::type>,
+<a name="l02498"></a>02498                 two_phase_port<typename std::tuple_element<1,OutputTuple>::type>,
+<a name="l02499"></a>02499                 two_phase_port<typename std::tuple_element<2,OutputTuple>::type>,
+<a name="l02500"></a>02500                 two_phase_port<typename std::tuple_element<3,OutputTuple>::type>,
+<a name="l02501"></a>02501                 two_phase_port<typename std::tuple_element<4,OutputTuple>::type>,
+<a name="l02502"></a>02502                 two_phase_port<typename std::tuple_element<5,OutputTuple>::type>,
+<a name="l02503"></a>02503                 two_phase_port<typename std::tuple_element<6,OutputTuple>::type> >,
+<a name="l02504"></a>02504         OutputTuple
+<a name="l02505"></a>02505                 > {
+<a name="l02506"></a>02506     <span class="keyword">private</span>:
+<a name="l02507"></a>02507         <span class="keyword">typedef</span> <span class="keyword">typename</span> std::tuple<
+<a name="l02508"></a>02508                 two_phase_port<typename std::tuple_element<0,OutputTuple>::type>, 
+<a name="l02509"></a>02509                 two_phase_port<typename std::tuple_element<1,OutputTuple>::type>, 
+<a name="l02510"></a>02510                 two_phase_port<typename std::tuple_element<2,OutputTuple>::type>, 
+<a name="l02511"></a>02511                 two_phase_port<typename std::tuple_element<3,OutputTuple>::type>, 
+<a name="l02512"></a>02512                 two_phase_port<typename std::tuple_element<4,OutputTuple>::type>, 
+<a name="l02513"></a>02513                 two_phase_port<typename std::tuple_element<5,OutputTuple>::type>, 
+<a name="l02514"></a>02514                 two_phase_port<typename std::tuple_element<6,OutputTuple>::type> > port_tuple_type;
+<a name="l02515"></a>02515     <span class="keyword">public</span>:
+<a name="l02516"></a>02516         <span class="keyword">typedef</span> OutputTuple output_type;
+<a name="l02517"></a>02517     <span class="keyword">private</span>:
+<a name="l02518"></a>02518         <span class="keyword">typedef</span> join_node_base<two_phase, port_tuple_type, output_type > base_type;
+<a name="l02519"></a>02519     <span class="keyword">public</span>:
+<a name="l02520"></a>02520         unfolded_join_node(graph &g) : base_type(g) {}
+<a name="l02521"></a>02521     };
+<a name="l02522"></a>02522 
+<a name="l02523"></a>02523     <span class="keyword">template</span><<span class="keyword">typename</span> OutputTuple>
+<a name="l02524"></a>02524     <span class="keyword">class </span>unfolded_join_node<8,OutputTuple,two_phase> : <span class="keyword">public</span> internal::join_node_base<two_phase,
+<a name="l02525"></a>02525         std::tuple<
+<a name="l02526"></a>02526                 two_phase_port<typename std::tuple_element<0,OutputTuple>::type>,
+<a name="l02527"></a>02527                 two_phase_port<typename std::tuple_element<1,OutputTuple>::type>,
+<a name="l02528"></a>02528                 two_phase_port<typename std::tuple_element<2,OutputTuple>::type>,
+<a name="l02529"></a>02529                 two_phase_port<typename std::tuple_element<3,OutputTuple>::type>,
+<a name="l02530"></a>02530                 two_phase_port<typename std::tuple_element<4,OutputTuple>::type>,
+<a name="l02531"></a>02531                 two_phase_port<typename std::tuple_element<5,OutputTuple>::type>,
+<a name="l02532"></a>02532                 two_phase_port<typename std::tuple_element<6,OutputTuple>::type>,
+<a name="l02533"></a>02533                 two_phase_port<typename std::tuple_element<7,OutputTuple>::type> >,
+<a name="l02534"></a>02534         OutputTuple
+<a name="l02535"></a>02535                 > {
+<a name="l02536"></a>02536     <span class="keyword">private</span>:
+<a name="l02537"></a>02537         <span class="keyword">typedef</span> <span class="keyword">typename</span> std::tuple<
+<a name="l02538"></a>02538                 two_phase_port<typename std::tuple_element<0,OutputTuple>::type>, 
+<a name="l02539"></a>02539                 two_phase_port<typename std::tuple_element<1,OutputTuple>::type>, 
+<a name="l02540"></a>02540                 two_phase_port<typename std::tuple_element<2,OutputTuple>::type>, 
+<a name="l02541"></a>02541                 two_phase_port<typename std::tuple_element<3,OutputTuple>::type>, 
+<a name="l02542"></a>02542                 two_phase_port<typename std::tuple_element<4,OutputTuple>::type>, 
+<a name="l02543"></a>02543                 two_phase_port<typename std::tuple_element<5,OutputTuple>::type>, 
+<a name="l02544"></a>02544                 two_phase_port<typename std::tuple_element<6,OutputTuple>::type>, 
+<a name="l02545"></a>02545                 two_phase_port<typename std::tuple_element<7,OutputTuple>::type> > port_tuple_type;
+<a name="l02546"></a>02546     <span class="keyword">public</span>:
+<a name="l02547"></a>02547         <span class="keyword">typedef</span> OutputTuple output_type;
+<a name="l02548"></a>02548     <span class="keyword">private</span>:
+<a name="l02549"></a>02549         <span class="keyword">typedef</span> join_node_base<two_phase, port_tuple_type, output_type > base_type;
+<a name="l02550"></a>02550     <span class="keyword">public</span>:
+<a name="l02551"></a>02551         unfolded_join_node(graph &g) : base_type(g) {}
+<a name="l02552"></a>02552     };
+<a name="l02553"></a>02553 
+<a name="l02554"></a>02554     <span class="keyword">template</span><<span class="keyword">typename</span> OutputTuple>
+<a name="l02555"></a>02555     <span class="keyword">class </span>unfolded_join_node<9,OutputTuple,two_phase> : <span class="keyword">public</span> internal::join_node_base<two_phase,
+<a name="l02556"></a>02556         std::tuple<
+<a name="l02557"></a>02557                 two_phase_port<typename std::tuple_element<0,OutputTuple>::type>,
+<a name="l02558"></a>02558                 two_phase_port<typename std::tuple_element<1,OutputTuple>::type>,
+<a name="l02559"></a>02559                 two_phase_port<typename std::tuple_element<2,OutputTuple>::type>,
+<a name="l02560"></a>02560                 two_phase_port<typename std::tuple_element<3,OutputTuple>::type>,
+<a name="l02561"></a>02561                 two_phase_port<typename std::tuple_element<4,OutputTuple>::type>,
+<a name="l02562"></a>02562                 two_phase_port<typename std::tuple_element<5,OutputTuple>::type>,
+<a name="l02563"></a>02563                 two_phase_port<typename std::tuple_element<6,OutputTuple>::type>,
+<a name="l02564"></a>02564                 two_phase_port<typename std::tuple_element<7,OutputTuple>::type>,
+<a name="l02565"></a>02565                 two_phase_port<typename std::tuple_element<8,OutputTuple>::type> >,
+<a name="l02566"></a>02566         OutputTuple
+<a name="l02567"></a>02567                 > {
+<a name="l02568"></a>02568     <span class="keyword">private</span>:
+<a name="l02569"></a>02569         <span class="keyword">typedef</span> <span class="keyword">typename</span> std::tuple<
+<a name="l02570"></a>02570                 two_phase_port<typename std::tuple_element<0,OutputTuple>::type>, 
+<a name="l02571"></a>02571                 two_phase_port<typename std::tuple_element<1,OutputTuple>::type>, 
+<a name="l02572"></a>02572                 two_phase_port<typename std::tuple_element<2,OutputTuple>::type>, 
+<a name="l02573"></a>02573                 two_phase_port<typename std::tuple_element<3,OutputTuple>::type>, 
+<a name="l02574"></a>02574                 two_phase_port<typename std::tuple_element<4,OutputTuple>::type>, 
+<a name="l02575"></a>02575                 two_phase_port<typename std::tuple_element<5,OutputTuple>::type>, 
+<a name="l02576"></a>02576                 two_phase_port<typename std::tuple_element<6,OutputTuple>::type>, 
+<a name="l02577"></a>02577                 two_phase_port<typename std::tuple_element<7,OutputTuple>::type>, 
+<a name="l02578"></a>02578                 two_phase_port<typename std::tuple_element<8,OutputTuple>::type> > port_tuple_type;
+<a name="l02579"></a>02579     <span class="keyword">public</span>:
+<a name="l02580"></a>02580         <span class="keyword">typedef</span> OutputTuple output_type;
+<a name="l02581"></a>02581     <span class="keyword">private</span>:
+<a name="l02582"></a>02582         <span class="keyword">typedef</span> join_node_base<two_phase, port_tuple_type, output_type > base_type;
+<a name="l02583"></a>02583     <span class="keyword">public</span>:
+<a name="l02584"></a>02584         unfolded_join_node(graph &g) : base_type(g) {}
+<a name="l02585"></a>02585     };
+<a name="l02586"></a>02586 
+<a name="l02587"></a>02587     <span class="keyword">template</span><<span class="keyword">typename</span> OutputTuple>
+<a name="l02588"></a>02588     <span class="keyword">class </span>unfolded_join_node<10,OutputTuple,two_phase> : <span class="keyword">public</span> internal::join_node_base<two_phase,
+<a name="l02589"></a>02589         std::tuple<
+<a name="l02590"></a>02590                 two_phase_port<typename std::tuple_element<0,OutputTuple>::type>,
+<a name="l02591"></a>02591                 two_phase_port<typename std::tuple_element<1,OutputTuple>::type>,
+<a name="l02592"></a>02592                 two_phase_port<typename std::tuple_element<2,OutputTuple>::type>,
+<a name="l02593"></a>02593                 two_phase_port<typename std::tuple_element<3,OutputTuple>::type>,
+<a name="l02594"></a>02594                 two_phase_port<typename std::tuple_element<4,OutputTuple>::type>,
+<a name="l02595"></a>02595                 two_phase_port<typename std::tuple_element<5,OutputTuple>::type>,
+<a name="l02596"></a>02596                 two_phase_port<typename std::tuple_element<6,OutputTuple>::type>,
+<a name="l02597"></a>02597                 two_phase_port<typename std::tuple_element<7,OutputTuple>::type>,
+<a name="l02598"></a>02598                 two_phase_port<typename std::tuple_element<8,OutputTuple>::type>,
+<a name="l02599"></a>02599                 two_phase_port<typename std::tuple_element<9,OutputTuple>::type> >,
+<a name="l02600"></a>02600         OutputTuple
+<a name="l02601"></a>02601                 > {
+<a name="l02602"></a>02602     <span class="keyword">private</span>:
+<a name="l02603"></a>02603         <span class="keyword">typedef</span> <span class="keyword">typename</span> std::tuple<
+<a name="l02604"></a>02604                 two_phase_port<typename std::tuple_element<0,OutputTuple>::type>, 
+<a name="l02605"></a>02605                 two_phase_port<typename std::tuple_element<1,OutputTuple>::type>, 
+<a name="l02606"></a>02606                 two_phase_port<typename std::tuple_element<2,OutputTuple>::type>, 
+<a name="l02607"></a>02607                 two_phase_port<typename std::tuple_element<3,OutputTuple>::type>, 
+<a name="l02608"></a>02608                 two_phase_port<typename std::tuple_element<4,OutputTuple>::type>, 
+<a name="l02609"></a>02609                 two_phase_port<typename std::tuple_element<5,OutputTuple>::type>, 
+<a name="l02610"></a>02610                 two_phase_port<typename std::tuple_element<6,OutputTuple>::type>, 
+<a name="l02611"></a>02611                 two_phase_port<typename std::tuple_element<7,OutputTuple>::type>, 
+<a name="l02612"></a>02612                 two_phase_port<typename std::tuple_element<8,OutputTuple>::type>, 
+<a name="l02613"></a>02613                 two_phase_port<typename std::tuple_element<9,OutputTuple>::type> > port_tuple_type;
+<a name="l02614"></a>02614     <span class="keyword">public</span>:
+<a name="l02615"></a>02615         <span class="keyword">typedef</span> OutputTuple output_type;
+<a name="l02616"></a>02616     <span class="keyword">private</span>:
+<a name="l02617"></a>02617         <span class="keyword">typedef</span> join_node_base<two_phase, port_tuple_type, output_type > base_type;
+<a name="l02618"></a>02618     <span class="keyword">public</span>:
+<a name="l02619"></a>02619         unfolded_join_node(graph &g) : base_type(g) {}
+<a name="l02620"></a>02620     };
+<a name="l02621"></a>02621 
+<a name="l02622"></a>02622     } <span class="comment">// namespace internal</span>
+<a name="l02623"></a>02623 
+<a name="l02624"></a>02624 <span class="keyword">using namespace </span>internal::join_policy_namespace;
+<a name="l02625"></a>02625 
+<a name="l02626"></a>02626 <span class="keyword">template</span><<span class="keyword">typename</span> OutputTuple, join_policy JP=two_phase>
+<a name="l02627"></a>02627 <span class="keyword">class </span>join_node: <span class="keyword">public</span> internal::unfolded_join_node<std::tuple_size<OutputTuple>::value, OutputTuple, JP> {
+<a name="l02628"></a>02628 <span class="keyword">private</span>:
+<a name="l02629"></a>02629     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> N = std::tuple_size<OutputTuple>::value;
+<a name="l02630"></a>02630     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::unfolded_join_node<N, OutputTuple, JP> unfolded_type;
+<a name="l02631"></a>02631 <span class="keyword">public</span>:
+<a name="l02632"></a>02632     <span class="keyword">typedef</span> OutputTuple output_type;
+<a name="l02633"></a>02633     join_node(graph &g) : unfolded_type(g) { }
+<a name="l02634"></a>02634 };
+<a name="l02635"></a>02635 
+<a name="l02636"></a>02636     <span class="comment">//</span>
+<a name="l02637"></a>02637     <span class="comment">// Making edges</span>
+<a name="l02638"></a>02638     <span class="comment">//</span>
+<a name="l02639"></a>02639   
+<a name="l02641"></a>02641     <span class="keyword">template</span>< <span class="keyword">typename</span> T >
+<a name="l02642"></a><a class="code" href="a00362.html#0a5a2559e7d28a9bf8f9e5e60d745e86">02642</a>     <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00362.html#0a5a2559e7d28a9bf8f9e5e60d745e86">make_edge</a>( <a class="code" href="a00282.html">sender<T></a> &p, <a class="code" href="a00277.html">receiver<T></a> &s ) {
+<a name="l02643"></a>02643         p.<a class="code" href="a00282.html#be48ac70174cf8e08e2b0279cd6343d3">register_successor</a>( s );
+<a name="l02644"></a>02644     }
+<a name="l02645"></a>02645 
+<a name="l02647"></a>02647     <span class="keyword">template</span>< <span class="keyword">typename</span> T, <span class="keyword">typename</span> SIterator >
+<a name="l02648"></a><a class="code" href="a00362.html#ac6def751039959ab7ab1e52c8535fd3">02648</a>     <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00362.html#ac6def751039959ab7ab1e52c8535fd3">make_edges</a>( <a class="code" href="a00282.html">sender<T></a> &p, SIterator s_begin, SIterator s_end ) {
+<a name="l02649"></a>02649         <span class="keywordflow">for</span> ( SIterator i = s_begin; i != s_end; ++i ) {
+<a name="l02650"></a>02650             <a class="code" href="a00362.html#0a5a2559e7d28a9bf8f9e5e60d745e86">make_edge</a>( p, **i );
+<a name="l02651"></a>02651         }
+<a name="l02652"></a>02652     }
+<a name="l02653"></a>02653 
+<a name="l02655"></a>02655     <span class="keyword">template</span>< <span class="keyword">typename</span> T, <span class="keyword">typename</span> PIterator >
+<a name="l02656"></a><a class="code" href="a00362.html#9368d2f689961f790bf7aa4a8cc1135e">02656</a>     <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00362.html#ac6def751039959ab7ab1e52c8535fd3">make_edges</a>( PIterator p_begin, PIterator p_end, <a class="code" href="a00277.html">receiver<T></a> &s ) {
+<a name="l02657"></a>02657         <span class="keywordflow">for</span> ( PIterator i = p_begin; i != p_end; ++i ) {
+<a name="l02658"></a>02658             <a class="code" href="a00362.html#0a5a2559e7d28a9bf8f9e5e60d745e86">make_edge</a>( **i, s );
+<a name="l02659"></a>02659         }
+<a name="l02660"></a>02660     }
+<a name="l02661"></a>02661 
+<a name="l02662"></a>02662 }
+<a name="l02663"></a>02663 
+<a name="l02664"></a>02664 <span class="preprocessor">#endif</span>
+<a name="l02665"></a>02665 <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/a00472.html b/doc/html/a00472.html
deleted file mode 100644
index 93b10cb..0000000
--- a/doc/html/a00472.html
+++ /dev/null
@@ -1,310 +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_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-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_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 <windows.h></span>
-<a name="l00026"></a>00026 <span class="preprocessor">#define __TBB_NATIVE_THREAD_ROUTINE unsigned WINAPI</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_NATIVE_THREAD_ROUTINE_PTR(r) unsigned (WINAPI* r)( void* )</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_NATIVE_THREAD_ROUTINE void*</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_NATIVE_THREAD_ROUTINE_PTR(r) void* (*r)( void* )</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#include <pthread.h></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "tbb_stddef.h"</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "tick_count.h"</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include <exception></span>             <span class="comment">// Need std::terminate from here.</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="comment">// Suppress "C++ exception handler used, but unwind semantics are not enabled" warning in STL headers</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: 4530)</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="preprocessor">#include <iosfwd></span>
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
-<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</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="keyword">namespace </span>tbb {
-<a name="l00051"></a>00051 
-<a name="l00053"></a>00053 <span class="keyword">namespace </span>internal {
-<a name="l00054"></a>00054     
-<a name="l00055"></a>00055     <span class="keyword">class </span>tbb_thread_v3;
-<a name="l00056"></a>00056 
-<a name="l00057"></a>00057 } <span class="comment">// namespace internal</span>
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059 <span class="keywordtype">void</span> swap( internal::tbb_thread_v3& t1, internal::tbb_thread_v3& t2 ); 
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061 <span class="keyword">namespace </span>internal {
-<a name="l00062"></a>00062 
-<a name="l00064"></a>00064     <span class="keywordtype">void</span>* __TBB_EXPORTED_FUNC allocate_closure_v3( size_t size );
-<a name="l00066"></a>00066     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC free_closure_v3( <span class="keywordtype">void</span>* );
-<a name="l00067"></a>00067    
-<a name="l00068"></a>00068     <span class="keyword">struct </span>thread_closure_base {
-<a name="l00069"></a>00069         <span class="keywordtype">void</span>* operator new( size_t size ) {<span class="keywordflow">return</span> allocate_closure_v3(size);}
-<a name="l00070"></a>00070         <span class="keywordtype">void</span> operator delete( <span class="keywordtype">void</span>* ptr ) {free_closure_v3(ptr);}
-<a name="l00071"></a>00071     };
-<a name="l00072"></a>00072 
-<a name="l00073"></a>00073     <span class="keyword">template</span><<span class="keyword">class</span> F> <span class="keyword">struct </span>thread_closure_0: thread_closure_base {
-<a name="l00074"></a>00074         F function;
-<a name="l00075"></a>00075 
-<a name="l00076"></a>00076         <span class="keyword">static</span> __TBB_NATIVE_THREAD_ROUTINE start_routine( <span class="keywordtype">void</span>* c ) {
-<a name="l00077"></a>00077             thread_closure_0 *<span class="keyword">self</span> = static_cast<thread_closure_0*>(c);
-<a name="l00078"></a>00078             __TBB_TRY {
-<a name="l00079"></a>00079                 <span class="keyword">self</span>->function();
-<a name="l00080"></a>00080             } __TBB_CATCH( ... ) {
-<a name="l00081"></a>00081                 std::terminate();
-<a name="l00082"></a>00082             }
-<a name="l00083"></a>00083             <span class="keyword">delete</span> <span class="keyword">self</span>;
-<a name="l00084"></a>00084             <span class="keywordflow">return</span> 0;
-<a name="l00085"></a>00085         }
-<a name="l00086"></a>00086         thread_closure_0( <span class="keyword">const</span> F& f ) : function(f) {}
-<a name="l00087"></a>00087     };
-<a name="l00089"></a>00089     <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="l00090"></a>00090         F function;
-<a name="l00091"></a>00091         X arg1;
-<a name="l00093"></a>00093         <span class="keyword">static</span> __TBB_NATIVE_THREAD_ROUTINE start_routine( <span class="keywordtype">void</span>* c ) {
-<a name="l00094"></a>00094             thread_closure_1 *<span class="keyword">self</span> = static_cast<thread_closure_1*>(c);
-<a name="l00095"></a>00095             __TBB_TRY {
-<a name="l00096"></a>00096                 <span class="keyword">self</span>->function(self->arg1);
-<a name="l00097"></a>00097             } __TBB_CATCH( ... ) {
-<a name="l00098"></a>00098                 std::terminate();
-<a name="l00099"></a>00099             }
-<a name="l00100"></a>00100             <span class="keyword">delete</span> <span class="keyword">self</span>;
-<a name="l00101"></a>00101             <span class="keywordflow">return</span> 0;
-<a name="l00102"></a>00102         }
-<a name="l00103"></a>00103         thread_closure_1( <span class="keyword">const</span> F& f, <span class="keyword">const</span> X& x ) : function(f), arg1(x) {}
-<a name="l00104"></a>00104     };
-<a name="l00105"></a>00105     <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="l00106"></a>00106         F function;
-<a name="l00107"></a>00107         X arg1;
-<a name="l00108"></a>00108         Y arg2;
-<a name="l00110"></a>00110         <span class="keyword">static</span> __TBB_NATIVE_THREAD_ROUTINE start_routine( <span class="keywordtype">void</span>* c ) {
-<a name="l00111"></a>00111             thread_closure_2 *<span class="keyword">self</span> = static_cast<thread_closure_2*>(c);
-<a name="l00112"></a>00112             __TBB_TRY {
-<a name="l00113"></a>00113                 <span class="keyword">self</span>->function(self->arg1, self->arg2);
-<a name="l00114"></a>00114             } __TBB_CATCH( ... ) {
-<a name="l00115"></a>00115                 std::terminate();
-<a name="l00116"></a>00116             }
-<a name="l00117"></a>00117             <span class="keyword">delete</span> <span class="keyword">self</span>;
-<a name="l00118"></a>00118             <span class="keywordflow">return</span> 0;
-<a name="l00119"></a>00119         }
-<a name="l00120"></a>00120         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="l00121"></a>00121     };
-<a name="l00122"></a>00122 
-<a name="l00124"></a>00124     <span class="keyword">class </span>tbb_thread_v3 {
-<a name="l00125"></a>00125         tbb_thread_v3(<span class="keyword">const</span> tbb_thread_v3&); <span class="comment">// = delete;   // Deny access</span>
-<a name="l00126"></a>00126     <span class="keyword">public</span>:
-<a name="l00127"></a>00127 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00128"></a>00128 <span class="preprocessor"></span>        <span class="keyword">typedef</span> HANDLE native_handle_type; 
-<a name="l00129"></a>00129 <span class="preprocessor">#else</span>
-<a name="l00130"></a>00130 <span class="preprocessor"></span>        <span class="keyword">typedef</span> pthread_t native_handle_type; 
-<a name="l00131"></a>00131 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
-<a name="l00132"></a>00132 <span class="preprocessor"></span>
-<a name="l00133"></a>00133         <span class="keyword">class </span>id;
-<a name="l00135"></a>00135         tbb_thread_v3() : my_handle(0)
-<a name="l00136"></a>00136 #if _WIN32||_WIN64
-<a name="l00137"></a>00137             , my_thread_id(0)
-<a name="l00138"></a>00138 #endif <span class="comment">// _WIN32||_WIN64</span>
-<a name="l00139"></a>00139         {}
-<a name="l00140"></a>00140         
-<a name="l00142"></a>00142         <span class="keyword">template</span> <<span class="keyword">class</span> F> <span class="keyword">explicit</span> tbb_thread_v3(F f) {
-<a name="l00143"></a>00143             <span class="keyword">typedef</span> internal::thread_closure_0<F> closure_type;
-<a name="l00144"></a>00144             internal_start(closure_type::start_routine, <span class="keyword">new</span> closure_type(f));
-<a name="l00145"></a>00145         }
-<a name="l00147"></a>00147         <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="l00148"></a>00148             <span class="keyword">typedef</span> internal::thread_closure_1<F,X> closure_type;
-<a name="l00149"></a>00149             internal_start(closure_type::start_routine, <span class="keyword">new</span> closure_type(f,x));
-<a name="l00150"></a>00150         }
-<a name="l00152"></a>00152         <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="l00153"></a>00153             <span class="keyword">typedef</span> internal::thread_closure_2<F,X,Y> closure_type;
-<a name="l00154"></a>00154             internal_start(closure_type::start_routine, <span class="keyword">new</span> closure_type(f,x,y));
-<a name="l00155"></a>00155         }
-<a name="l00156"></a>00156 
-<a name="l00157"></a>00157         tbb_thread_v3& operator=(tbb_thread_v3& x) {
-<a name="l00158"></a>00158             <span class="keywordflow">if</span> (joinable()) detach();
-<a name="l00159"></a>00159             my_handle = x.my_handle;
-<a name="l00160"></a>00160             x.my_handle = 0;
-<a name="l00161"></a>00161 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00162"></a>00162 <span class="preprocessor"></span>            my_thread_id = x.my_thread_id;
-<a name="l00163"></a>00163             x.my_thread_id = 0;
-<a name="l00164"></a>00164 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
-<a name="l00165"></a>00165 <span class="preprocessor"></span>            <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00166"></a>00166         }
-<a name="l00167"></a>00167         <span class="keywordtype">void</span> swap( tbb_thread_v3& t ) {tbb::swap( *<span class="keyword">this</span>, t );}
-<a name="l00168"></a>00168         <span class="keywordtype">bool</span> joinable()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_handle!=0; }
-<a name="l00170"></a>00170         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD join();
-<a name="l00172"></a>00172         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD detach();
-<a name="l00173"></a>00173         ~tbb_thread_v3() {<span class="keywordflow">if</span>( joinable() ) detach();}
-<a name="l00174"></a>00174         <span class="keyword">inline</span> <span class="keywordtype">id</span> get_id() <span class="keyword">const</span>;
-<a name="l00175"></a>00175         native_handle_type native_handle() { <span class="keywordflow">return</span> my_handle; }
-<a name="l00176"></a>00176     
-<a name="l00178"></a>00178         <span class="keyword">static</span> <span class="keywordtype">unsigned</span> __TBB_EXPORTED_FUNC hardware_concurrency();
-<a name="l00179"></a>00179     <span class="keyword">private</span>:
-<a name="l00180"></a>00180         native_handle_type my_handle; 
-<a name="l00181"></a>00181 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00182"></a>00182 <span class="preprocessor"></span>        DWORD my_thread_id;
-<a name="l00183"></a>00183 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
-<a name="l00184"></a>00184 <span class="preprocessor"></span>
-<a name="l00186"></a>00186         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_start( __TBB_NATIVE_THREAD_ROUTINE_PTR(start_routine), 
-<a name="l00187"></a>00187                              <span class="keywordtype">void</span>* closure );
-<a name="l00188"></a>00188         <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="l00189"></a>00189         <span class="keyword">friend</span> <span class="keywordtype">void</span> tbb::swap( tbb_thread_v3& t1, tbb_thread_v3& t2 ); 
-<a name="l00190"></a>00190     };
-<a name="l00191"></a>00191         
-<a name="l00192"></a>00192     <span class="keyword">class </span>tbb_thread_v3::id { 
-<a name="l00193"></a>00193 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00194"></a>00194 <span class="preprocessor"></span>        DWORD my_id;
-<a name="l00195"></a>00195         id( DWORD id_ ) : my_id(id_) {}
-<a name="l00196"></a>00196 <span class="preprocessor">#else</span>
-<a name="l00197"></a>00197 <span class="preprocessor"></span>        pthread_t my_id;
-<a name="l00198"></a>00198         id( pthread_t id_ ) : my_id(id_) {}
-<a name="l00199"></a>00199 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
-<a name="l00200"></a>00200 <span class="preprocessor"></span>        <span class="keyword">friend</span> <span class="keyword">class </span>tbb_thread_v3;
-<a name="l00201"></a>00201     <span class="keyword">public</span>:
-<a name="l00202"></a>00202         id() : my_id(0) {}
-<a name="l00203"></a>00203 
-<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         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator<( tbb_thread_v3::id x, tbb_thread_v3::id y );
-<a name="l00207"></a>00207         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator<=( tbb_thread_v3::id x, tbb_thread_v3::id y );
-<a name="l00208"></a>00208         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator>( tbb_thread_v3::id x, tbb_thread_v3::id y );
-<a name="l00209"></a>00209         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator>=( tbb_thread_v3::id x, tbb_thread_v3::id y );
-<a name="l00210"></a>00210         
-<a name="l00211"></a>00211         <span class="keyword">template</span><<span class="keyword">class</span> <span class="keywordtype">char</span>T, <span class="keyword">class</span> traits>
-<a name="l00212"></a>00212         <span class="keyword">friend</span> std::basic_ostream<charT, traits>&
-<a name="l00213"></a>00213         operator<< (std::basic_ostream<charT, traits> &out, 
-<a name="l00214"></a>00214                     tbb_thread_v3::id id)
-<a name="l00215"></a>00215         {
-<a name="l00216"></a>00216             out << <span class="keywordtype">id</span>.my_id;
-<a name="l00217"></a>00217             <span class="keywordflow">return</span> out;
-<a name="l00218"></a>00218         }
-<a name="l00219"></a>00219         <span class="keyword">friend</span> tbb_thread_v3::id __TBB_EXPORTED_FUNC thread_get_id_v3();
-<a name="l00220"></a>00220     }; <span class="comment">// tbb_thread_v3::id</span>
-<a name="l00221"></a>00221 
-<a name="l00222"></a>00222     tbb_thread_v3::id tbb_thread_v3::get_id()<span class="keyword"> const </span>{
-<a name="l00223"></a>00223 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00224"></a>00224 <span class="preprocessor"></span>        <span class="keywordflow">return</span> id(my_thread_id);
-<a name="l00225"></a>00225 <span class="preprocessor">#else</span>
-<a name="l00226"></a>00226 <span class="preprocessor"></span>        <span class="keywordflow">return</span> id(my_handle);
-<a name="l00227"></a>00227 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
-<a name="l00228"></a>00228 <span class="preprocessor"></span>    }
-<a name="l00229"></a>00229     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC move_v3( tbb_thread_v3& t1, tbb_thread_v3& t2 );
-<a name="l00230"></a>00230     tbb_thread_v3::id __TBB_EXPORTED_FUNC thread_get_id_v3();
-<a name="l00231"></a>00231     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC thread_yield_v3();
-<a name="l00232"></a>00232     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC thread_sleep_v3(<span class="keyword">const</span> tick_count::interval_t &i);
-<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     <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator>=(tbb_thread_v3::id x, tbb_thread_v3::id y)
-<a name="l00255"></a>00255     {
-<a name="l00256"></a>00256         <span class="keywordflow">return</span> x.my_id >= y.my_id;
-<a name="l00257"></a>00257     }
-<a name="l00258"></a>00258 
-<a name="l00259"></a>00259 } <span class="comment">// namespace internal;</span>
-<a name="l00260"></a>00260 
-<a name="l00262"></a>00262 <span class="keyword">typedef</span> internal::tbb_thread_v3 tbb_thread;
-<a name="l00263"></a>00263 
-<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 <span class="keyword">using</span> internal::operator<;
-<a name="l00267"></a>00267 <span class="keyword">using</span> internal::operator>;
-<a name="l00268"></a>00268 <span class="keyword">using</span> internal::operator<=;
-<a name="l00269"></a>00269 <span class="keyword">using</span> internal::operator>=;
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271 <span class="keyword">inline</span> <span class="keywordtype">void</span> move( tbb_thread& t1, tbb_thread& t2 ) {
-<a name="l00272"></a>00272     internal::move_v3(t1, t2);
-<a name="l00273"></a>00273 }
-<a name="l00274"></a>00274 
-<a name="l00275"></a>00275 <span class="keyword">inline</span> <span class="keywordtype">void</span> swap( internal::tbb_thread_v3& t1, internal::tbb_thread_v3& t2 ) {
-<a name="l00276"></a>00276     tbb::tbb_thread::native_handle_type h = t1.my_handle;
-<a name="l00277"></a>00277     t1.my_handle = t2.my_handle;
-<a name="l00278"></a>00278     t2.my_handle = h;
-<a name="l00279"></a>00279 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00280"></a>00280 <span class="preprocessor"></span>    DWORD i = t1.my_thread_id;
-<a name="l00281"></a>00281     t1.my_thread_id = t2.my_thread_id;
-<a name="l00282"></a>00282     t2.my_thread_id = i;
-<a name="l00283"></a>00283 <span class="preprocessor">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00284"></a>00284 }
-<a name="l00285"></a>00285 
-<a name="l00286"></a>00286 <span class="keyword">namespace </span>this_tbb_thread {
-<a name="l00287"></a>00287     <span class="keyword">inline</span> tbb_thread::id get_id() { <span class="keywordflow">return</span> internal::thread_get_id_v3(); }
-<a name="l00289"></a>00289     <span class="keyword">inline</span> <span class="keywordtype">void</span> yield() { internal::thread_yield_v3(); }
-<a name="l00291"></a>00291     <span class="keyword">inline</span> <span class="keywordtype">void</span> sleep(<span class="keyword">const</span> tick_count::interval_t &i) { 
-<a name="l00292"></a>00292         internal::thread_sleep_v3(i);  
-<a name="l00293"></a>00293     }
-<a name="l00294"></a>00294 }  <span class="comment">// namespace this_tbb_thread</span>
-<a name="l00295"></a>00295 
-<a name="l00296"></a>00296 } <span class="comment">// namespace tbb</span>
-<a name="l00297"></a>00297 
-<a name="l00298"></a>00298 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_thread_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the 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
deleted file mode 100644
index 4fc22f9..0000000
--- a/doc/html/a00480.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-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="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-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00482.html b/doc/html/a00482.html
deleted file mode 100644
index 809b56b..0000000
--- a/doc/html/a00482.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-2010 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_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 <windows.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="a00210.html">00038</a> <span class="keyword">class </span><a class="code" href="a00210.html">tick_count</a> {
-<a name="l00039"></a>00039 <span class="keyword">public</span>:
-<a name="l00041"></a><a class="code" href="a00211.html">00041</a>     <span class="keyword">class </span><a class="code" href="a00211.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="a00211.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="a00211.html#75a9a0949f8a8a84d6758835f1b48dad">00046</a>         <a class="code" href="a00211.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="a00211.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="a00211.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="a00210.html">tbb::tick_count</a>;
-<a name="l00055"></a>00055 
-<a name="l00057"></a>00057         <span class="keyword">friend</span> <a class="code" href="a00211.html">interval_t</a> <a class="code" href="a00211.html#09dde78a4100800c11bb883d6204b586">operator-</a>( <span class="keyword">const</span> <a class="code" href="a00210.html">tick_count</a>& t1, <span class="keyword">const</span> <a class="code" href="a00210.html">tick_count</a>& t0 );
-<a name="l00058"></a>00058 
-<a name="l00060"></a><a class="code" href="a00211.html#5871ead1ca230efbe52a5008470e6428">00060</a>         <span class="keyword">friend</span> <a class="code" href="a00211.html">interval_t</a> <a class="code" href="a00211.html#5871ead1ca230efbe52a5008470e6428">operator+</a>( <span class="keyword">const</span> <a class="code" href="a00211.html">interval_t</a>& i, <span class="keyword">const</span> <a class="code" href="a00211.html">interval_t</a>& j ) {
-<a name="l00061"></a>00061             <span class="keywordflow">return</span> <a class="code" href="a00211.html#75a9a0949f8a8a84d6758835f1b48dad">interval_t</a>(i.<a class="code" href="a00211.html#beea71acda120af3e3e29f10e8cb5c10">value</a>+j.<a class="code" href="a00211.html#beea71acda120af3e3e29f10e8cb5c10">value</a>);
-<a name="l00062"></a>00062         }
-<a name="l00063"></a>00063 
-<a name="l00065"></a><a class="code" href="a00211.html#fa509691e1d689830931e36edd274f76">00065</a>         <span class="keyword">friend</span> <a class="code" href="a00211.html">interval_t</a> <a class="code" href="a00211.html#09dde78a4100800c11bb883d6204b586">operator-</a>( <span class="keyword">const</span> <a class="code" href="a00211.html">interval_t</a>& i, <span class="keyword">const</span> <a class="code" href="a00211.html">interval_t</a>& j ) {
-<a name="l00066"></a>00066             <span class="keywordflow">return</span> <a class="code" href="a00211.html#75a9a0949f8a8a84d6758835f1b48dad">interval_t</a>(i.<a class="code" href="a00211.html#beea71acda120af3e3e29f10e8cb5c10">value</a>-j.<a class="code" href="a00211.html#beea71acda120af3e3e29f10e8cb5c10">value</a>);
-<a name="l00067"></a>00067         }
-<a name="l00068"></a>00068 
-<a name="l00070"></a><a class="code" href="a00211.html#cd9814947902e26463a69a111530f81b">00070</a>         <a class="code" href="a00211.html">interval_t</a>& <a class="code" href="a00211.html#cd9814947902e26463a69a111530f81b">operator+=</a>( <span class="keyword">const</span> <a class="code" href="a00211.html">interval_t</a>& i ) {value += i.<a class="code" href="a00211.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="a00211.html#35ff7eaf7c2031b4a991402ac9ecb940">00073</a>         <a class="code" href="a00211.html">interval_t</a>& <a class="code" href="a00211.html#35ff7eaf7c2031b4a991402ac9ecb940">operator-=</a>( <span class="keyword">const</span> <a class="code" href="a00211.html">interval_t</a>& i ) {value -= i.<a class="code" href="a00211.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="a00210.html#34593326ae4191e02a13c7cbdab9de4c">00077</a>     <a class="code" href="a00210.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="a00210.html">tick_count</a> <a class="code" href="a00210.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="a00210.html#09dde78a4100800c11bb883d6204b586">operator-</a>( <span class="keyword">const</span> <a class="code" href="a00210.html">tick_count</a>& t1, <span class="keyword">const</span> <a class="code" href="a00210.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="a00210.html#fb7f78ca61cf28398645ace66e284473">00089</a> <span class="keyword">inline</span> <a class="code" href="a00210.html">tick_count</a> <a class="code" href="a00210.html#fb7f78ca61cf28398645ace66e284473">tick_count::now</a>() {
-<a name="l00090"></a>00090     <a class="code" href="a00210.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="a00210.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="a00210.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="a00210.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="a00211.html#1a21a428e00cced2e6a49e0f5f2258bf">00115</a> <span class="keyword">inline</span> <a class="code" href="a00211.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="a00210.html#09dde78a4100800c11bb883d6204b586">00128</a> <span class="keyword">inline</span> <a class="code" href="a00211.html">tick_count::interval_t</a> <a class="code" href="a00210.html#09dde78a4100800c11bb883d6204b586">operator-</a>( <span class="keyword">const</span> <a class="code" href="a00210.html">tick_count</a>& t1, <span class="keyword">const</span> <a class="code" href="a00210.html">tick_count</a>& t0 ) {
-<a name="l00129"></a>00129     <span class="keywordflow">return</span> <a class="code" href="a00211.html">tick_count::interval_t</a>( t1.<a class="code" href="a00210.html#1ba05ad46dc08bc1bf34bd6cc94e36ec">my_count</a>-t0.<a class="code" href="a00210.html#1ba05ad46dc08bc1bf34bd6cc94e36ec">my_count</a> );
-<a name="l00130"></a>00130 }
-<a name="l00131"></a>00131 
-<a name="l00132"></a><a class="code" href="a00211.html#d5d8429c0bc59cf6131b2abc7929fa59">00132</a> <span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code" href="a00211.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-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the 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..d92f103
--- /dev/null
+++ b/doc/html/a00499.html
@@ -0,0 +1,240 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>mutex.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File List</span></a></li>
+    <li><a href="globals.html"><span>File Members</span></a></li>
+  </ul></div>
+<h1>mutex.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-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_mutex_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_mutex_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#include "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="a00258.html">00040</a> <span class="keyword">class </span><a class="code" href="a00258.html">mutex</a> {
+<a name="l00041"></a>00041 <span class="keyword">public</span>:
+<a name="l00043"></a><a class="code" href="a00258.html#05313cb77d4f85213103d4dab74ed454">00043</a>     <a class="code" href="a00258.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="a00258.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="a00259.html">00076</a>     <span class="keyword">class </span><a class="code" href="a00259.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="a00259.html#1d403ae51b484df5d86d85ae38f11e6e">00079</a>         <a class="code" href="a00259.html#1d403ae51b484df5d86d85ae38f11e6e">scoped_lock</a>() : my_mutex(NULL) {};
+<a name="l00080"></a>00080 
+<a name="l00082"></a><a class="code" href="a00259.html#605a6b9af0f8cdabdf81825e0de99600">00082</a>         <a class="code" href="a00259.html#1d403ae51b484df5d86d85ae38f11e6e">scoped_lock</a>( <a class="code" href="a00258.html">mutex</a>& <a class="code" href="a00258.html">mutex</a> ) {
+<a name="l00083"></a>00083             <a class="code" href="a00259.html#862e022841cdc522e4296a5533b22efd">acquire</a>( mutex );
+<a name="l00084"></a>00084         }
+<a name="l00085"></a>00085 
+<a name="l00087"></a><a class="code" href="a00259.html#0ebbbecaf4311e9df7362cb76ceaa368">00087</a>         <a class="code" href="a00259.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="a00259.html#0d51d18cd99df3b2e93bf07378d0992c">release</a>();
+<a name="l00090"></a>00090         }
+<a name="l00091"></a>00091 
+<a name="l00093"></a><a class="code" href="a00259.html#862e022841cdc522e4296a5533b22efd">00093</a>         <span class="keywordtype">void</span> <a class="code" href="a00259.html#862e022841cdc522e4296a5533b22efd">acquire</a>( <a class="code" href="a00258.html">mutex</a>& <a class="code" href="a00258.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="a00258.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="a00259.html#591e0c49b82bcedffcbe0923f1b915ec">00103</a>         <span class="keywordtype">bool</span> <a class="code" href="a00259.html#591e0c49b82bcedffcbe0923f1b915ec">try_acquire</a>( <a class="code" href="a00258.html">mutex</a>& <a class="code" href="a00258.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="a00258.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="a00259.html#0d51d18cd99df3b2e93bf07378d0992c">00115</a>         <span class="keywordtype">void</span> <a class="code" href="a00259.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="a00258.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="a00258.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="a00258.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="a00258.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="a00258.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="a00258.html#4470e61c24c129a0299ca6c17240adbb">00148</a>     <span class="keywordtype">void</span> <a class="code" href="a00258.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="a00215.html">aligned_space<scoped_lock,1></a> tmp;
+<a name="l00151"></a>00151         <span class="keyword">new</span>(tmp.<a class="code" href="a00215.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00259.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="a00258.html#4331652c79dea1c1131bd59ab161b234">00163</a>     <span class="keywordtype">bool</span> <a class="code" href="a00258.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="a00215.html">aligned_space<scoped_lock,1></a> tmp;
+<a name="l00166"></a>00166         <a class="code" href="a00259.html">scoped_lock</a>& s = *tmp.<a class="code" href="a00215.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>();
+<a name="l00167"></a>00167         s.<a class="code" href="a00259.html#be42c8fe11cce1af4fe1e9eaab717567">my_mutex</a> = NULL;
+<a name="l00168"></a>00168         <span class="keywordflow">return</span> s.<a class="code" href="a00259.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="a00258.html#5fc9ef443ae75d966695546be399cc6b">00179</a>     <span class="keywordtype">void</span> <a class="code" href="a00258.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="a00215.html">aligned_space<scoped_lock,1></a> tmp;
+<a name="l00182"></a>00182         <a class="code" href="a00259.html">scoped_lock</a>& s = *tmp.<a class="code" href="a00215.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>();
+<a name="l00183"></a>00183         s.<a class="code" href="a00259.html#be42c8fe11cce1af4fe1e9eaab717567">my_mutex</a> = <span class="keyword">this</span>;
+<a name="l00184"></a>00184         s.<a class="code" href="a00259.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="a00258.html#9f1ec84d5815263ceae853f06ddb4cac">00196</a> <span class="preprocessor"></span>    <span class="keyword">typedef</span> LPCRITICAL_SECTION <a class="code" href="a00258.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="a00258.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="a00258.html#9f1ec84d5815263ceae853f06ddb4cac">native_handle_type</a> native_handle() { <span class="keywordflow">return</span> (<a class="code" href="a00258.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="a00258.html#795649a185b0d6af6dc81c5f378616dd">00224</a>     <span class="keywordtype">void</span> <a class="code" href="a00258.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.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00501.html b/doc/html/a00501.html
new file mode 100644
index 0000000..ca1902a
--- /dev/null
+++ b/doc/html/a00501.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-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="a00260.html">00029</a> <span class="keyword">class </span><a class="code" href="a00260.html">null_mutex</a> {   
+<a name="l00031"></a>00031     <a class="code" href="a00260.html">null_mutex</a>( <span class="keyword">const</span> <a class="code" href="a00260.html">null_mutex</a>& );   
+<a name="l00032"></a>00032     <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> <a class="code" href="a00260.html">null_mutex</a>& );   
+<a name="l00033"></a>00033 <span class="keyword">public</span>:   
+<a name="l00035"></a><a class="code" href="a00261.html">00035</a>     <span class="keyword">class </span><a class="code" href="a00261.html">scoped_lock</a> {   
+<a name="l00036"></a>00036     <span class="keyword">public</span>:   
+<a name="l00037"></a>00037         <a class="code" href="a00261.html">scoped_lock</a>() {}
+<a name="l00038"></a>00038         <a class="code" href="a00261.html">scoped_lock</a>( <a class="code" href="a00260.html">null_mutex</a>& ) {}   
+<a name="l00039"></a>00039         ~<a class="code" href="a00261.html">scoped_lock</a>() {}
+<a name="l00040"></a>00040         <span class="keywordtype">void</span> acquire( <a class="code" href="a00260.html">null_mutex</a>& ) {}
+<a name="l00041"></a>00041         <span class="keywordtype">bool</span> try_acquire( <a class="code" href="a00260.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="a00260.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/a00502.html b/doc/html/a00502.html
new file mode 100644
index 0000000..c9dd694
--- /dev/null
+++ b/doc/html/a00502.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-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="a00262.html">00029</a> <span class="keyword">class </span><a class="code" href="a00262.html">null_rw_mutex</a> {
+<a name="l00031"></a>00031     <a class="code" href="a00262.html">null_rw_mutex</a>( <span class="keyword">const</span> <a class="code" href="a00262.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="a00262.html">null_rw_mutex</a>& );   
+<a name="l00033"></a>00033 <span class="keyword">public</span>:   
+<a name="l00035"></a><a class="code" href="a00263.html">00035</a>     <span class="keyword">class </span><a class="code" href="a00263.html">scoped_lock</a> {   
+<a name="l00036"></a>00036     <span class="keyword">public</span>:   
+<a name="l00037"></a>00037         <a class="code" href="a00263.html">scoped_lock</a>() {}
+<a name="l00038"></a>00038         <a class="code" href="a00263.html">scoped_lock</a>( <a class="code" href="a00262.html">null_rw_mutex</a>& , <span class="keywordtype">bool</span> = <span class="keyword">true</span> ) {}
+<a name="l00039"></a>00039         ~<a class="code" href="a00263.html">scoped_lock</a>() {}
+<a name="l00040"></a>00040         <span class="keywordtype">void</span> acquire( <a class="code" href="a00262.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="a00262.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="a00262.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/a00503.html b/doc/html/a00503.html
new file mode 100644
index 0000000..0d38b3d
--- /dev/null
+++ b/doc/html/a00503.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-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="a00264.html">00060</a> <span class="keyword">class </span><a class="code" href="a00264.html">parallel_do_feeder</a>: internal::no_copy
+<a name="l00061"></a>00061 {
+<a name="l00062"></a>00062     <a class="code" href="a00264.html">parallel_do_feeder</a>() {}
+<a name="l00063"></a>00063     <span class="keyword">virtual</span> ~<a class="code" href="a00264.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="a00264.html#40baaf0f6856f4491dd0adf896c93516">00068</a>     <span class="keywordtype">void</span> <a class="code" href="a00264.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="a00291.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="a00293.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="a00291.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="a00371.html#g3383e2703977012b6f384d673410f1f7">00470</a> <span class="keywordtype">void</span> <a class="code" href="a00371.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="a00293.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="a00371.html#g2617dc9b88b3285a7212599d49f74228">00488</a> <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="a00371.html#g3383e2703977012b6f384d673410f1f7">parallel_do</a>( Iterator first, Iterator last, <span class="keyword">const</span> Body& body, <a class="code" href="a00293.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/a00512.html b/doc/html/a00512.html
new file mode 100644
index 0000000..05b4eeb
--- /dev/null
+++ b/doc/html/a00512.html
@@ -0,0 +1,234 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>parallel_for.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File List</span></a></li>
+    <li><a href="globals.html"><span>File Members</span></a></li>
+  </ul></div>
+<h1>parallel_for.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-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 "task.h"</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "partitioner.h"</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include "blocked_range.h"</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include <new></span>
+<a name="l00028"></a>00028 <span class="preprocessor">#include "tbb_exception.h"</span>
+<a name="l00029"></a>00029 
+<a name="l00030"></a>00030 <span class="keyword">namespace </span>tbb {
+<a name="l00031"></a>00031 
+<a name="l00033"></a>00033 <span class="keyword">namespace </span>internal {
+<a name="l00034"></a>00034 
+<a name="l00036"></a>00036 
+<a name="l00037"></a>00037     <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner>
+<a name="l00038"></a>00038     <span class="keyword">class </span>start_for: <span class="keyword">public</span> task {
+<a name="l00039"></a>00039         Range my_range;
+<a name="l00040"></a>00040         <span class="keyword">const</span> Body my_body;
+<a name="l00041"></a>00041         <span class="keyword">typename</span> Partitioner::partition_type my_partition;
+<a name="l00042"></a>00042         <span class="comment">/*override*/</span> task* execute();
+<a name="l00043"></a>00043 
+<a name="l00045"></a>00045         start_for( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, Partitioner& partitioner ) :
+<a name="l00046"></a>00046             my_range(range),    
+<a name="l00047"></a>00047             my_body(body),
+<a name="l00048"></a>00048             my_partition(partitioner)
+<a name="l00049"></a>00049         {
+<a name="l00050"></a>00050         }
+<a name="l00052"></a>00052 
+<a name="l00053"></a>00053         start_for( start_for& parent_, split ) :
+<a name="l00054"></a>00054             my_range(parent_.my_range,split()),    
+<a name="l00055"></a>00055             my_body(parent_.my_body),
+<a name="l00056"></a>00056             my_partition(parent_.my_partition,split())
+<a name="l00057"></a>00057         {
+<a name="l00058"></a>00058             my_partition.set_affinity(*<span class="keyword">this</span>);
+<a name="l00059"></a>00059         }
+<a name="l00061"></a>00061         <span class="comment">/*override*/</span> <span class="keywordtype">void</span> note_affinity( affinity_id <span class="keywordtype">id</span> ) {
+<a name="l00062"></a>00062             my_partition.note_affinity( <span class="keywordtype">id</span> );
+<a name="l00063"></a>00063         }
+<a name="l00064"></a>00064     <span class="keyword">public</span>:
+<a name="l00065"></a>00065         <span class="keyword">static</span> <span class="keywordtype">void</span> run(  <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <span class="keyword">const</span> Partitioner& partitioner ) {
+<a name="l00066"></a>00066             <span class="keywordflow">if</span>( !range.empty() ) {
+<a name="l00067"></a>00067 #<span class="keywordflow">if</span> !__TBB_TASK_GROUP_CONTEXT || TBB_JOIN_OUTER_TASK_GROUP
+<a name="l00068"></a>00068                 start_for& a = *<span class="keyword">new</span>(<a class="code" href="a00291.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>()) start_for(range,body,const_cast<Partitioner&>(partitioner));
+<a name="l00069"></a>00069 <span class="preprocessor">#else</span>
+<a name="l00070"></a>00070 <span class="preprocessor"></span>                <span class="comment">// Bound context prevents exceptions from body to affect nesting or sibling algorithms,</span>
+<a name="l00071"></a>00071                 <span class="comment">// and allows users to handle exceptions safely by wrapping parallel_for in the try-block.</span>
+<a name="l00072"></a>00072                 task_group_context context;
+<a name="l00073"></a>00073                 start_for& a = *<span class="keyword">new</span>(task::allocate_root(context)) start_for(range,body,const_cast<Partitioner&>(partitioner));
+<a name="l00074"></a>00074 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT && !TBB_JOIN_OUTER_TASK_GROUP */</span>
+<a name="l00075"></a>00075                 <a class="code" href="a00291.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>(a);
+<a name="l00076"></a>00076             }
+<a name="l00077"></a>00077         }
+<a name="l00078"></a>00078 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00079"></a>00079 <span class="preprocessor"></span>        <span class="keyword">static</span> <span class="keywordtype">void</span> run(  <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <span class="keyword">const</span> Partitioner& partitioner, task_group_context& context ) {
+<a name="l00080"></a>00080             <span class="keywordflow">if</span>( !range.empty() ) {
+<a name="l00081"></a>00081                 start_for& a = *<span class="keyword">new</span>(task::allocate_root(context)) start_for(range,body,const_cast<Partitioner&>(partitioner));
+<a name="l00082"></a>00082                 <a class="code" href="a00291.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>(a);
+<a name="l00083"></a>00083             }
+<a name="l00084"></a>00084         }
+<a name="l00085"></a>00085 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00086"></a>00086     };
+<a name="l00087"></a>00087 
+<a name="l00088"></a>00088     <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner>
+<a name="l00089"></a>00089     task* start_for<Range,Body,Partitioner>::execute() {
+<a name="l00090"></a>00090         <span class="keywordflow">if</span>( !my_range.is_divisible() || my_partition.should_execute_range(*<span class="keyword">this</span>) ) {
+<a name="l00091"></a>00091             my_body( my_range );
+<a name="l00092"></a>00092             <span class="keywordflow">return</span> my_partition.continue_after_execute_range(); 
+<a name="l00093"></a>00093         } <span class="keywordflow">else</span> {
+<a name="l00094"></a>00094             empty_task& c = *<span class="keyword">new</span>( this->allocate_continuation() ) empty_task;
+<a name="l00095"></a>00095             recycle_as_child_of(c);
+<a name="l00096"></a>00096             c.set_ref_count(2);
+<a name="l00097"></a>00097             <span class="keywordtype">bool</span> delay = my_partition.decide_whether_to_delay();
+<a name="l00098"></a>00098             start_for& b = *<span class="keyword">new</span>( c.allocate_child() ) start_for(*<span class="keyword">this</span>,split());
+<a name="l00099"></a>00099             my_partition.spawn_or_delay(delay,b);
+<a name="l00100"></a>00100             <span class="keywordflow">return</span> <span class="keyword">this</span>;
+<a name="l00101"></a>00101         }
+<a name="l00102"></a>00102     } 
+<a name="l00103"></a>00103 } <span class="comment">// namespace internal</span>
+<a name="l00105"></a>00105 <span class="comment"></span>
+<a name="l00106"></a>00106 
+<a name="l00107"></a>00107 <span class="comment">// Requirements on Range concept are documented in blocked_range.h</span>
+<a name="l00108"></a>00108 
+<a name="l00119"></a>00119 
+<a name="l00121"></a>00121 
+<a name="l00122"></a>00122 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00123"></a><a class="code" href="a00371.html#g68cc046ef72c42ce205fccbc435a0d81">00123</a> <span class="keywordtype">void</span> <a class="code" href="a00371.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body ) {
+<a name="l00124"></a>00124     internal::start_for<Range,Body,__TBB_DEFAULT_PARTITIONER>::run(range,body,__TBB_DEFAULT_PARTITIONER());
+<a name="l00125"></a>00125 }
+<a name="l00126"></a>00126 
+<a name="l00128"></a>00128 
+<a name="l00129"></a>00129 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00130"></a><a class="code" href="a00371.html#g13cac5dd55c7533bccea43a51c33d0e5">00130</a> <span class="keywordtype">void</span> <a class="code" href="a00371.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="a00284.html">simple_partitioner</a>& partitioner ) {
+<a name="l00131"></a>00131     internal::start_for<Range,Body,simple_partitioner>::run(range,body,partitioner);
+<a name="l00132"></a>00132 }
+<a name="l00133"></a>00133 
+<a name="l00135"></a>00135 
+<a name="l00136"></a>00136 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00137"></a><a class="code" href="a00371.html#ga7ac75d532389b55b9247f3fdb0b00d1">00137</a> <span class="keywordtype">void</span> <a class="code" href="a00371.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="a00219.html">auto_partitioner</a>& partitioner ) {
+<a name="l00138"></a>00138     internal::start_for<Range,Body,auto_partitioner>::run(range,body,partitioner);
+<a name="l00139"></a>00139 }
+<a name="l00140"></a>00140 
+<a name="l00142"></a>00142 
+<a name="l00143"></a>00143 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00144"></a><a class="code" href="a00371.html#g9cd1b210ceb1c040f30e390b4a21bde8">00144</a> <span class="keywordtype">void</span> <a class="code" href="a00371.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <a class="code" href="a00212.html">affinity_partitioner</a>& partitioner ) {
+<a name="l00145"></a>00145     internal::start_for<Range,Body,affinity_partitioner>::run(range,body,partitioner);
+<a name="l00146"></a>00146 }
+<a name="l00147"></a>00147 
+<a name="l00148"></a>00148 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00150"></a>00150 <span class="preprocessor"></span>
+<a name="l00151"></a>00151 <span class="preprocessor">template<typename Range, typename Body></span>
+<a name="l00152"></a><a class="code" href="a00371.html#g2d317a5e0078cd193125439fed60dfdc">00152</a> <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="a00371.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="a00284.html">simple_partitioner</a>& partitioner, <a class="code" hr [...]
+<a name="l00153"></a>00153     internal::start_for<Range,Body,simple_partitioner>::run(range, body, partitioner, context);
+<a name="l00154"></a>00154 }
+<a name="l00155"></a>00155 
+<a name="l00157"></a>00157 
+<a name="l00158"></a>00158 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00159"></a><a class="code" href="a00371.html#g1c0700e3f85e83a788ff3ede88ebb7e9">00159</a> <span class="keywordtype">void</span> <a class="code" href="a00371.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="a00219.html">auto_partitioner</a>& partitioner, <a class="code" href="a00293.html">task_group_context< [...]
+<a name="l00160"></a>00160     internal::start_for<Range,Body,auto_partitioner>::run(range, body, partitioner, context);
+<a name="l00161"></a>00161 }
+<a name="l00162"></a>00162 
+<a name="l00164"></a>00164 
+<a name="l00165"></a>00165 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00166"></a><a class="code" href="a00371.html#g04b4696b67370c01353ff5974c8f1196">00166</a> <span class="keywordtype">void</span> <a class="code" href="a00371.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <a class="code" href="a00212.html">affinity_partitioner</a>& partitioner, <a class="code" href="a00293.html">task_group_context</a>& context ) {
+<a name="l00167"></a>00167     internal::start_for<Range,Body,affinity_partitioner>::run(range,body,partitioner, context);
+<a name="l00168"></a>00168 }
+<a name="l00169"></a>00169 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00170"></a>00170 
+<a name="l00171"></a>00171 
+<a name="l00173"></a>00173 <span class="keyword">namespace </span>internal {
+<a name="l00175"></a>00175 <span class="keyword">template</span><<span class="keyword">typename</span> Function, <span class="keyword">typename</span> Index>
+<a name="l00176"></a>00176 <span class="keyword">class </span>parallel_for_body : internal::no_assign {
+<a name="l00177"></a>00177     <span class="keyword">const</span> Function &my_func;
+<a name="l00178"></a>00178     <span class="keyword">const</span> Index my_begin;
+<a name="l00179"></a>00179     <span class="keyword">const</span> Index my_step; 
+<a name="l00180"></a>00180 <span class="keyword">public</span>:
+<a name="l00181"></a>00181     parallel_for_body( <span class="keyword">const</span> Function& _func, Index& _begin, Index& _step) 
+<a name="l00182"></a>00182         : my_func(_func), my_begin(_begin), my_step(_step) {}
+<a name="l00183"></a>00183     
+<a name="l00184"></a>00184     <span class="keywordtype">void</span> operator()( <a class="code" href="a00221.html">tbb::blocked_range<Index></a>& r )<span class="keyword"> const </span>{
+<a name="l00185"></a>00185         <span class="keywordflow">for</span>( Index i = r.<a class="code" href="a00221.html#18d2258400756ac1446dac7676b18df3">begin</a>(),  k = my_begin + i * my_step; i < r.<a class="code" href="a00221.html#8b929d93ddc13f148b11bceef3a3bdf8">end</a>(); i++, k = k + my_step)
+<a name="l00186"></a>00186             my_func( k );
+<a name="l00187"></a>00187     }
+<a name="l00188"></a>00188 };
+<a name="l00189"></a>00189 } <span class="comment">// namespace internal</span>
+<a name="l00191"></a>00191 <span class="comment"></span>
+<a name="l00192"></a>00192 <span class="keyword">namespace </span>strict_ppl {
+<a name="l00193"></a>00193 
+<a name="l00195"></a>00195 
+<a name="l00196"></a>00196 <span class="keyword">template</span> <<span class="keyword">typename</span> Index, <span class="keyword">typename</span> Function>
+<a name="l00197"></a><a class="code" href="a00370.html#15c764c70c8a32e7a4b8c291d0cc8dde">00197</a> <span class="keywordtype">void</span> <a class="code" href="a00371.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(Index first, Index last, Index step, <span class="keyword">const</span> Function& f) {
+<a name="l00198"></a>00198     <a class="code" href="a00293.html">tbb::task_group_context</a> context;
+<a name="l00199"></a>00199     <a class="code" href="a00371.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(first, last, step, f, context);
+<a name="l00200"></a>00200 }
+<a name="l00201"></a>00201 <span class="keyword">template</span> <<span class="keyword">typename</span> Index, <span class="keyword">typename</span> Function>
+<a name="l00202"></a>00202 <span class="keywordtype">void</span> <a class="code" href="a00371.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(Index first, Index last, Index step, <span class="keyword">const</span> Function& f, <a class="code" href="a00293.html">tbb::task_group_context</a> &context) {
+<a name="l00203"></a>00203     <span class="keywordflow">if</span> (step <= 0 )
+<a name="l00204"></a>00204         internal::throw_exception(internal::eid_nonpositive_step); <span class="comment">// throws std::invalid_argument</span>
+<a name="l00205"></a>00205     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (last > first) {
+<a name="l00206"></a>00206         <span class="comment">// Above "else" avoids "potential divide by zero" warning on some platforms</span>
+<a name="l00207"></a>00207         Index end = (last - first - Index(1)) / step + Index(1);
+<a name="l00208"></a>00208         <a class="code" href="a00221.html">tbb::blocked_range<Index></a> range(static_cast<Index>(0), end);
+<a name="l00209"></a>00209         internal::parallel_for_body<Function, Index> body(f, first, step);
+<a name="l00210"></a>00210         <a class="code" href="a00371.html#g68cc046ef72c42ce205fccbc435a0d81">tbb::parallel_for</a>(range, body, <a class="code" href="a00219.html">tbb::auto_partitioner</a>(), context);
+<a name="l00211"></a>00211     }
+<a name="l00212"></a>00212 }
+<a name="l00214"></a>00214 <span class="keyword">template</span> <<span class="keyword">typename</span> Index, <span class="keyword">typename</span> Function>
+<a name="l00215"></a><a class="code" href="a00370.html#490399525b1e690ec31d6db964c6b272">00215</a> <span class="keywordtype">void</span> <a class="code" href="a00371.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(Index first, Index last, <span class="keyword">const</span> Function& f) {
+<a name="l00216"></a>00216     <a class="code" href="a00293.html">tbb::task_group_context</a> context;
+<a name="l00217"></a>00217     <a class="code" href="a00371.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(first, last, static_cast<Index>(1), f, context);
+<a name="l00218"></a>00218 }
+<a name="l00219"></a>00219 <span class="keyword">template</span> <<span class="keyword">typename</span> Index, <span class="keyword">typename</span> Function>
+<a name="l00220"></a>00220 <span class="keywordtype">void</span> <a class="code" href="a00371.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(Index first, Index last, <span class="keyword">const</span> Function& f, <a class="code" href="a00293.html">tbb::task_group_context</a> &context) {
+<a name="l00221"></a>00221     <a class="code" href="a00371.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(first, last, static_cast<Index>(1), f, context);
+<a name="l00222"></a>00222 }
+<a name="l00223"></a>00223 
+<a name="l00225"></a>00225 
+<a name="l00226"></a>00226 } <span class="comment">// namespace strict_ppl</span>
+<a name="l00227"></a>00227 
+<a name="l00228"></a>00228 <span class="keyword">using</span> <a class="code" href="a00371.html#g68cc046ef72c42ce205fccbc435a0d81">strict_ppl::parallel_for</a>;
+<a name="l00229"></a>00229 
+<a name="l00230"></a>00230 } <span class="comment">// namespace tbb</span>
+<a name="l00231"></a>00231 
+<a name="l00232"></a>00232 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_for_H */</span>
+<a name="l00233"></a>00233 
+</pre></div><hr>
+<p></p>
+Copyright © 2005-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/a00516.html b/doc/html/a00516.html
new file mode 100644
index 0000000..c77c0cb
--- /dev/null
+++ b/doc/html/a00516.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-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>::value_type& value )<span class="keyword"> const </span>{
+<a name="l00039"></a>00039             my_func(value);
+<a name="l00040"></a>00040         }
+<a name="l00041"></a>00041     };
+<a name="l00042"></a>00042 } <span class="comment">// namespace internal</span>
+<a name="l00044"></a>00044 <span class="comment"></span>
+<a name="l00048"></a>00048 
+<a name="l00049"></a>00049 
+<a name="l00050"></a>00050 <span class="keyword">template</span><<span class="keyword">typename</span> InputIterator, <span class="keyword">typename</span> Function>
+<a name="l00051"></a><a class="code" href="a00371.html#gcd40c32f319747e61a8f73fcfc452001">00051</a> <span class="keywordtype">void</span> <a class="code" href="a00371.html#gcd40c32f319747e61a8f73fcfc452001">parallel_for_each</a>(InputIterator first, InputIterator last, <span class="keyword">const</span> Function& f, <a class="code" href="a00293.html">task_group_context</a> &context) {
+<a name="l00052"></a>00052     internal::parallel_for_each_body<Function, InputIterator> body(f);
+<a name="l00053"></a>00053 
+<a name="l00054"></a>00054     <a class="code" href="a00371.html#g3383e2703977012b6f384d673410f1f7">tbb::parallel_do</a> (first, last, body, context);
+<a name="l00055"></a>00055 }
+<a name="l00056"></a>00056 
+<a name="l00058"></a>00058 <span class="keyword">template</span><<span class="keyword">typename</span> InputIterator, <span class="keyword">typename</span> Function>
+<a name="l00059"></a><a class="code" href="a00371.html#gc2d710ca573f0a9bd94379cba3772def">00059</a> <span class="keywordtype">void</span> <a class="code" href="a00371.html#gcd40c32f319747e61a8f73fcfc452001">parallel_for_each</a>(InputIterator first, InputIterator last, <span class="keyword">const</span> Function& f) {
+<a name="l00060"></a>00060     internal::parallel_for_each_body<Function, InputIterator> body(f);
+<a name="l00061"></a>00061 
+<a name="l00062"></a>00062     <a class="code" href="a00371.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/a00518.html b/doc/html/a00518.html
new file mode 100644
index 0000000..9f8f271
--- /dev/null
+++ b/doc/html/a00518.html
@@ -0,0 +1,374 @@
+<!DOCTYPE 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="l00029"></a>00029 <span class="keyword">namespace </span>internal {
+<a name="l00030"></a>00030     <span class="comment">// Simple task object, executing user method</span>
+<a name="l00031"></a>00031     <span class="keyword">template</span><<span class="keyword">typename</span> function>
+<a name="l00032"></a>00032     <span class="keyword">class </span>function_invoker : <span class="keyword">public</span> task{
+<a name="l00033"></a>00033     <span class="keyword">public</span>:
+<a name="l00034"></a>00034         function_invoker(<span class="keyword">const</span> function& _function) : my_function(_function) {}
+<a name="l00035"></a>00035     <span class="keyword">private</span>:
+<a name="l00036"></a>00036         <span class="keyword">const</span> function &my_function;
+<a name="l00037"></a>00037         <span class="comment">/*override*/</span>
+<a name="l00038"></a>00038         task* execute()
+<a name="l00039"></a>00039         {
+<a name="l00040"></a>00040             my_function();
+<a name="l00041"></a>00041             <span class="keywordflow">return</span> NULL;
+<a name="l00042"></a>00042         }
+<a name="l00043"></a>00043     };
+<a name="l00044"></a>00044 
+<a name="l00045"></a>00045     <span class="comment">// The class spawns two or three child tasks</span>
+<a name="l00046"></a>00046     <span class="keyword">template</span> <size_t N, <span class="keyword">typename</span> function1, <span class="keyword">typename</span> function2, <span class="keyword">typename</span> function3>
+<a name="l00047"></a>00047     <span class="keyword">class </span>spawner : <span class="keyword">public</span> task {
+<a name="l00048"></a>00048     <span class="keyword">private</span>:
+<a name="l00049"></a>00049         <span class="keyword">const</span> function1& my_func1;
+<a name="l00050"></a>00050         <span class="keyword">const</span> function2& my_func2;
+<a name="l00051"></a>00051         <span class="keyword">const</span> function3& my_func3;
+<a name="l00052"></a>00052         <span class="keywordtype">bool</span> is_recycled;
+<a name="l00053"></a>00053 
+<a name="l00054"></a>00054         task* execute (){
+<a name="l00055"></a>00055             <span class="keywordflow">if</span>(is_recycled){
+<a name="l00056"></a>00056                 <span class="keywordflow">return</span> NULL;
+<a name="l00057"></a>00057             }<span class="keywordflow">else</span>{
+<a name="l00058"></a>00058                 __TBB_ASSERT(N==2 || N==3, <span class="stringliteral">"Number of arguments passed to spawner is wrong"</span>);
+<a name="l00059"></a>00059                 set_ref_count(N);
+<a name="l00060"></a>00060                 recycle_as_safe_continuation();
+<a name="l00061"></a>00061                 internal::function_invoker<function2>* invoker2 = <span class="keyword">new</span> (allocate_child()) internal::function_invoker<function2>(my_func2);
+<a name="l00062"></a>00062                 __TBB_ASSERT(invoker2, <span class="stringliteral">"Child task allocation failed"</span>);
+<a name="l00063"></a>00063                 spawn(*invoker2);
+<a name="l00064"></a>00064                 size_t n = N; <span class="comment">// To prevent compiler warnings</span>
+<a name="l00065"></a>00065                 <span class="keywordflow">if</span> (n>2) {
+<a name="l00066"></a>00066                     internal::function_invoker<function3>* invoker3 = <span class="keyword">new</span> (allocate_child()) internal::function_invoker<function3>(my_func3);
+<a name="l00067"></a>00067                     __TBB_ASSERT(invoker3, <span class="stringliteral">"Child task allocation failed"</span>);
+<a name="l00068"></a>00068                     spawn(*invoker3);
+<a name="l00069"></a>00069                 }
+<a name="l00070"></a>00070                 my_func1();
+<a name="l00071"></a>00071                 is_recycled = <span class="keyword">true</span>;
+<a name="l00072"></a>00072                 <span class="keywordflow">return</span> NULL;
+<a name="l00073"></a>00073             }
+<a name="l00074"></a>00074         } <span class="comment">// execute</span>
+<a name="l00075"></a>00075 
+<a name="l00076"></a>00076     <span class="keyword">public</span>:
+<a name="l00077"></a>00077         spawner(<span class="keyword">const</span> function1& _func1, <span class="keyword">const</span> function2& _func2, <span class="keyword">const</span> function3& _func3) : my_func1(_func1), my_func2(_func2), my_func3(_func3), is_recycled(false) {}
+<a name="l00078"></a>00078     };
+<a name="l00079"></a>00079 
+<a name="l00080"></a>00080     <span class="comment">// Creates and spawns child tasks</span>
+<a name="l00081"></a>00081     <span class="keyword">class </span>parallel_invoke_helper : <span class="keyword">public</span> empty_task {
+<a name="l00082"></a>00082     <span class="keyword">public</span>:
+<a name="l00083"></a>00083         <span class="comment">// Dummy functor class</span>
+<a name="l00084"></a>00084         <span class="keyword">class </span>parallel_invoke_noop {
+<a name="l00085"></a>00085         <span class="keyword">public</span>:
+<a name="l00086"></a>00086             <span class="keywordtype">void</span> operator() ()<span class="keyword"> const </span>{}
+<a name="l00087"></a>00087         };
+<a name="l00088"></a>00088         <span class="comment">// Creates a helper object with user-defined number of children expected</span>
+<a name="l00089"></a>00089         parallel_invoke_helper(<span class="keywordtype">int</span> number_of_children)
+<a name="l00090"></a>00090         {
+<a name="l00091"></a>00091             set_ref_count(number_of_children + 1);
+<a name="l00092"></a>00092         }
+<a name="l00093"></a>00093         <span class="comment">// Adds child task and spawns it</span>
+<a name="l00094"></a>00094         <span class="keyword">template</span> <<span class="keyword">typename</span> function>
+<a name="l00095"></a>00095         <span class="keywordtype">void</span> add_child (<span class="keyword">const</span> function &_func)
+<a name="l00096"></a>00096         {
+<a name="l00097"></a>00097             internal::function_invoker<function>* invoker = <span class="keyword">new</span> (allocate_child()) internal::function_invoker<function>(_func);
+<a name="l00098"></a>00098             __TBB_ASSERT(invoker, <span class="stringliteral">"Child task allocation failed"</span>);
+<a name="l00099"></a>00099             spawn(*invoker);
+<a name="l00100"></a>00100         }
+<a name="l00101"></a>00101 
+<a name="l00102"></a>00102         <span class="comment">// Adds a task with multiple child tasks and spawns it</span>
+<a name="l00103"></a>00103         <span class="comment">// two arguments</span>
+<a name="l00104"></a>00104         <span class="keyword">template</span> <<span class="keyword">typename</span> function1, <span class="keyword">typename</span> function2>
+<a name="l00105"></a>00105         <span class="keywordtype">void</span> add_children (<span class="keyword">const</span> function1& _func1, <span class="keyword">const</span> function2& _func2)
+<a name="l00106"></a>00106         {
+<a name="l00107"></a>00107             <span class="comment">// The third argument is dummy, it is ignored actually.</span>
+<a name="l00108"></a>00108             parallel_invoke_noop noop;
+<a name="l00109"></a>00109             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="l00110"></a>00110             spawn(sub_root);
+<a name="l00111"></a>00111         }
+<a name="l00112"></a>00112         <span class="comment">// three arguments</span>
+<a name="l00113"></a>00113         <span class="keyword">template</span> <<span class="keyword">typename</span> function1, <span class="keyword">typename</span> function2, <span class="keyword">typename</span> function3>
+<a name="l00114"></a>00114         <span class="keywordtype">void</span> add_children (<span class="keyword">const</span> function1& _func1, <span class="keyword">const</span> function2& _func2, <span class="keyword">const</span> function3& _func3)
+<a name="l00115"></a>00115         {
+<a name="l00116"></a>00116             internal::spawner<3, function1, function2, function3>& sub_root = *<span class="keyword">new</span>(allocate_child())internal::spawner<3, function1, function2, function3>(_func1, _func2, _func3);
+<a name="l00117"></a>00117             spawn(sub_root);
+<a name="l00118"></a>00118         }
+<a name="l00119"></a>00119 
+<a name="l00120"></a>00120         <span class="comment">// Waits for all child tasks</span>
+<a name="l00121"></a>00121         <span class="keyword">template</span> <<span class="keyword">typename</span> F0>
+<a name="l00122"></a>00122         <span class="keywordtype">void</span> run_and_finish(<span class="keyword">const</span> F0& f0)
+<a name="l00123"></a>00123         {
+<a name="l00124"></a>00124             internal::function_invoker<F0>* invoker = <span class="keyword">new</span> (allocate_child()) internal::function_invoker<F0>(f0);
+<a name="l00125"></a>00125             __TBB_ASSERT(invoker, <span class="stringliteral">"Child task allocation failed"</span>);
+<a name="l00126"></a>00126             spawn_and_wait_for_all(*invoker);
+<a name="l00127"></a>00127         }
+<a name="l00128"></a>00128     };
+<a name="l00129"></a>00129     <span class="comment">// The class destroys root if exception occured as well as in normal case</span>
+<a name="l00130"></a>00130     <span class="keyword">class </span>parallel_invoke_cleaner: internal::no_copy { 
+<a name="l00131"></a>00131     <span class="keyword">public</span>:
+<a name="l00132"></a>00132         parallel_invoke_cleaner(<span class="keywordtype">int</span> number_of_children, <a class="code" href="a00293.html">tbb::task_group_context</a>& context) : root(*new(task::allocate_root(context)) internal::parallel_invoke_helper(number_of_children))
+<a name="l00133"></a>00133         {}
+<a name="l00134"></a>00134         ~parallel_invoke_cleaner(){
+<a name="l00135"></a>00135             root.destroy(root);
+<a name="l00136"></a>00136         }
+<a name="l00137"></a>00137         internal::parallel_invoke_helper& root;
+<a name="l00138"></a>00138     };
+<a name="l00139"></a>00139 } <span class="comment">// namespace internal</span>
+<a name="l00141"></a>00141 <span class="comment"></span>
+<a name="l00145"></a>00145 
+<a name="l00146"></a>00146 
+<a name="l00148"></a>00148 <span class="comment">// parallel_invoke with user-defined context</span>
+<a name="l00149"></a>00149 <span class="comment">// two arguments</span>
+<a name="l00150"></a>00150 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1 >
+<a name="l00151"></a><a class="code" href="a00371.html#gd3e2998f171494f94c2103f4eb924084">00151</a> <span class="keywordtype">void</span> <a class="code" href="a00371.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <a class="code" href="a00293.html">tbb::task_group_context</a>& context) {
+<a name="l00152"></a>00152     internal::parallel_invoke_cleaner cleaner(2, context);
+<a name="l00153"></a>00153     internal::parallel_invoke_helper& root = cleaner.root;
+<a name="l00154"></a>00154 
+<a name="l00155"></a>00155     root.add_child(f1);
+<a name="l00156"></a>00156 
+<a name="l00157"></a>00157     root.run_and_finish(f0);
+<a name="l00158"></a>00158 }
+<a name="l00159"></a>00159 
+<a name="l00160"></a>00160 <span class="comment">// three arguments</span>
+<a name="l00161"></a>00161 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2 >
+<a name="l00162"></a>00162 <span class="keywordtype">void</span> <a class="code" href="a00371.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="a00293.html">tbb::task_group_context</a>& context) {
+<a name="l00163"></a>00163     internal::parallel_invoke_cleaner cleaner(3, context);
+<a name="l00164"></a>00164     internal::parallel_invoke_helper& root = cleaner.root;
+<a name="l00165"></a>00165 
+<a name="l00166"></a>00166     root.add_child(f2);
+<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">// four arguments</span>
+<a name="l00173"></a>00173 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3>
+<a name="l00174"></a>00174 <span class="keywordtype">void</span> <a class="code" href="a00371.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3,
+<a name="l00175"></a>00175                      <a class="code" href="a00293.html">tbb::task_group_context</a>& context)
+<a name="l00176"></a>00176 {
+<a name="l00177"></a>00177     internal::parallel_invoke_cleaner cleaner(4, context);
+<a name="l00178"></a>00178     internal::parallel_invoke_helper& root = cleaner.root;
+<a name="l00179"></a>00179 
+<a name="l00180"></a>00180     root.add_child(f3);
+<a name="l00181"></a>00181     root.add_child(f2);
+<a name="l00182"></a>00182     root.add_child(f1);
+<a name="l00183"></a>00183 
+<a name="l00184"></a>00184     root.run_and_finish(f0);
+<a name="l00185"></a>00185 }
+<a name="l00186"></a>00186 
+<a name="l00187"></a>00187 <span class="comment">// five arguments</span>
+<a name="l00188"></a>00188 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4 >
+<a name="l00189"></a>00189 <span class="keywordtype">void</span> <a class="code" href="a00371.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3, <span class="keyword">const</span> F4& f4,
+<a name="l00190"></a>00190                      <a class="code" href="a00293.html">tbb::task_group_context</a>& context)
+<a name="l00191"></a>00191 {
+<a name="l00192"></a>00192     internal::parallel_invoke_cleaner cleaner(3, context);
+<a name="l00193"></a>00193     internal::parallel_invoke_helper& root = cleaner.root;
+<a name="l00194"></a>00194 
+<a name="l00195"></a>00195     root.add_children(f4, f3);
+<a name="l00196"></a>00196     root.add_children(f2, f1);
+<a name="l00197"></a>00197 
+<a name="l00198"></a>00198     root.run_and_finish(f0);
+<a name="l00199"></a>00199 }
+<a name="l00200"></a>00200 
+<a name="l00201"></a>00201 <span class="comment">// six arguments</span>
+<a name="l00202"></a>00202 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4, <span class="keyword">typename</span> F5>
+<a name="l00203"></a>00203 <span class="keywordtype">void</span> <a class="code" href="a00371.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3, <span class="keyword">const</span> F4& f4, <span class="keyword">const</span> F5& f5,
+<a name="l00204"></a>00204                      <a class="code" href="a00293.html">tbb::task_group_context</a>& context)
+<a name="l00205"></a>00205 {
+<a name="l00206"></a>00206     internal::parallel_invoke_cleaner cleaner(3, context);
+<a name="l00207"></a>00207     internal::parallel_invoke_helper& root = cleaner.root;
+<a name="l00208"></a>00208 
+<a name="l00209"></a>00209     root.add_children(f5, f4, f3);
+<a name="l00210"></a>00210     root.add_children(f2, f1);
+<a name="l00211"></a>00211 
+<a name="l00212"></a>00212     root.run_and_finish(f0);
+<a name="l00213"></a>00213 }
+<a name="l00214"></a>00214 
+<a name="l00215"></a>00215 <span class="comment">// seven arguments</span>
+<a name="l00216"></a>00216 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4, <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6>
+<a name="l00217"></a>00217 <span class="keywordtype">void</span> <a class="code" href="a00371.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3, <span class="keyword">const</span> F4& f4,
+<a name="l00218"></a>00218                      <span class="keyword">const</span> F5& f5, <span class="keyword">const</span> F6& f6,
+<a name="l00219"></a>00219                      <a class="code" href="a00293.html">tbb::task_group_context</a>& context)
+<a name="l00220"></a>00220 {
+<a name="l00221"></a>00221     internal::parallel_invoke_cleaner cleaner(3, context);
+<a name="l00222"></a>00222     internal::parallel_invoke_helper& root = cleaner.root;
+<a name="l00223"></a>00223 
+<a name="l00224"></a>00224     root.add_children(f6, f5, f4);
+<a name="l00225"></a>00225     root.add_children(f3, f2, f1);
+<a name="l00226"></a>00226 
+<a name="l00227"></a>00227     root.run_and_finish(f0);
+<a name="l00228"></a>00228 }
+<a name="l00229"></a>00229 
+<a name="l00230"></a>00230 <span class="comment">// eight arguments</span>
+<a name="l00231"></a>00231 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4,
+<a name="l00232"></a>00232          <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6, <span class="keyword">typename</span> F7>
+<a name="l00233"></a>00233 <span class="keywordtype">void</span> <a class="code" href="a00371.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3, <span class="keyword">const</span> F4& f4,
+<a name="l00234"></a>00234                      <span class="keyword">const</span> F5& f5, <span class="keyword">const</span> F6& f6, <span class="keyword">const</span> F7& f7,
+<a name="l00235"></a>00235                      <a class="code" href="a00293.html">tbb::task_group_context</a>& context)
+<a name="l00236"></a>00236 {
+<a name="l00237"></a>00237     internal::parallel_invoke_cleaner cleaner(4, context);
+<a name="l00238"></a>00238     internal::parallel_invoke_helper& root = cleaner.root;
+<a name="l00239"></a>00239 
+<a name="l00240"></a>00240     root.add_children(f7, f6, f5);
+<a name="l00241"></a>00241     root.add_children(f4, f3);
+<a name="l00242"></a>00242     root.add_children(f2, f1);
+<a name="l00243"></a>00243 
+<a name="l00244"></a>00244     root.run_and_finish(f0);
+<a name="l00245"></a>00245 }
+<a name="l00246"></a>00246 
+<a name="l00247"></a>00247 <span class="comment">// nine arguments</span>
+<a name="l00248"></a>00248 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4,
+<a name="l00249"></a>00249          <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6, <span class="keyword">typename</span> F7, <span class="keyword">typename</span> F8>
+<a name="l00250"></a>00250 <span class="keywordtype">void</span> <a class="code" href="a00371.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3, <span class="keyword">const</span> F4& f4,
+<a name="l00251"></a>00251                      <span class="keyword">const</span> F5& f5, <span class="keyword">const</span> F6& f6, <span class="keyword">const</span> F7& f7, <span class="keyword">const</span> F8& f8,
+<a name="l00252"></a>00252                      <a class="code" href="a00293.html">tbb::task_group_context</a>& context)
+<a name="l00253"></a>00253 {
+<a name="l00254"></a>00254     internal::parallel_invoke_cleaner cleaner(4, context);
+<a name="l00255"></a>00255     internal::parallel_invoke_helper& root = cleaner.root;
+<a name="l00256"></a>00256 
+<a name="l00257"></a>00257     root.add_children(f8, f7, f6);
+<a name="l00258"></a>00258     root.add_children(f5, f4, f3);
+<a name="l00259"></a>00259     root.add_children(f2, f1);
+<a name="l00260"></a>00260 
+<a name="l00261"></a>00261     root.run_and_finish(f0);
+<a name="l00262"></a>00262 }
+<a name="l00263"></a>00263 
+<a name="l00264"></a>00264 <span class="comment">// ten arguments</span>
+<a name="l00265"></a>00265 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4,
+<a name="l00266"></a>00266          <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6, <span class="keyword">typename</span> F7, <span class="keyword">typename</span> F8, <span class="keyword">typename</span> F9>
+<a name="l00267"></a>00267 <span class="keywordtype">void</span> <a class="code" href="a00371.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3, <span class="keyword">const</span> F4& f4,
+<a name="l00268"></a>00268                      <span class="keyword">const</span> F5& f5, <span class="keyword">const</span> F6& f6, <span class="keyword">const</span> F7& f7, <span class="keyword">const</span> F8& f8, <span class="keyword">const</span> F9& f9,
+<a name="l00269"></a>00269                      <a class="code" href="a00293.html">tbb::task_group_context</a>& context)
+<a name="l00270"></a>00270 {
+<a name="l00271"></a>00271     internal::parallel_invoke_cleaner cleaner(4, context);
+<a name="l00272"></a>00272     internal::parallel_invoke_helper& root = cleaner.root;
+<a name="l00273"></a>00273 
+<a name="l00274"></a>00274     root.add_children(f9, f8, f7);
+<a name="l00275"></a>00275     root.add_children(f6, f5, f4);
+<a name="l00276"></a>00276     root.add_children(f3, f2, f1);
+<a name="l00277"></a>00277 
+<a name="l00278"></a>00278     root.run_and_finish(f0);
+<a name="l00279"></a>00279 }
+<a name="l00280"></a>00280 
+<a name="l00281"></a>00281 <span class="comment">// two arguments</span>
+<a name="l00282"></a>00282 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1>
+<a name="l00283"></a>00283 <span class="keywordtype">void</span> <a class="code" href="a00371.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1) {
+<a name="l00284"></a>00284     task_group_context context;
+<a name="l00285"></a>00285     parallel_invoke<F0, F1>(f0, f1, context);
+<a name="l00286"></a>00286 }
+<a name="l00287"></a>00287 <span class="comment">// three arguments</span>
+<a name="l00288"></a>00288 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2>
+<a name="l00289"></a>00289 <span class="keywordtype">void</span> <a class="code" href="a00371.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2) {
+<a name="l00290"></a>00290     task_group_context context;
+<a name="l00291"></a>00291     parallel_invoke<F0, F1, F2>(f0, f1, f2, context);
+<a name="l00292"></a>00292 }
+<a name="l00293"></a>00293 <span class="comment">// four arguments</span>
+<a name="l00294"></a>00294 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3 >
+<a name="l00295"></a>00295 <span class="keywordtype">void</span> <a class="code" href="a00371.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3) {
+<a name="l00296"></a>00296     task_group_context context;
+<a name="l00297"></a>00297     parallel_invoke<F0, F1, F2, F3>(f0, f1, f2, f3, context);
+<a name="l00298"></a>00298 }
+<a name="l00299"></a>00299 <span class="comment">// five arguments</span>
+<a name="l00300"></a>00300 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4>
+<a name="l00301"></a>00301 <span class="keywordtype">void</span> <a class="code" href="a00371.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3, <span class="keyword">const</span> F4& f4) {
+<a name="l00302"></a>00302     task_group_context context;
+<a name="l00303"></a>00303     parallel_invoke<F0, F1, F2, F3, F4>(f0, f1, f2, f3, f4, context);
+<a name="l00304"></a>00304 }
+<a name="l00305"></a>00305 <span class="comment">// six arguments</span>
+<a name="l00306"></a>00306 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4, <span class="keyword">typename</span> F5>
+<a name="l00307"></a>00307 <span class="keywordtype">void</span> <a class="code" href="a00371.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3, <span class="keyword">const</span> F4& f4, <span class="keyword">const</span> F5& f5) {
+<a name="l00308"></a>00308     task_group_context context;
+<a name="l00309"></a>00309     parallel_invoke<F0, F1, F2, F3, F4, F5>(f0, f1, f2, f3, f4, f5, context);
+<a name="l00310"></a>00310 }
+<a name="l00311"></a>00311 <span class="comment">// seven arguments</span>
+<a name="l00312"></a>00312 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4, <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6>
+<a name="l00313"></a>00313 <span class="keywordtype">void</span> <a class="code" href="a00371.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3, <span class="keyword">const</span> F4& f4,
+<a name="l00314"></a>00314                      <span class="keyword">const</span> F5& f5, <span class="keyword">const</span> F6& f6)
+<a name="l00315"></a>00315 {
+<a name="l00316"></a>00316     task_group_context context;
+<a name="l00317"></a>00317     parallel_invoke<F0, F1, F2, F3, F4, F5, F6>(f0, f1, f2, f3, f4, f5, f6, context);
+<a name="l00318"></a>00318 }
+<a name="l00319"></a>00319 <span class="comment">// eigth arguments</span>
+<a name="l00320"></a>00320 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4, 
+<a name="l00321"></a>00321          <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6, <span class="keyword">typename</span> F7>
+<a name="l00322"></a>00322 <span class="keywordtype">void</span> <a class="code" href="a00371.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3, <span class="keyword">const</span> F4& f4,
+<a name="l00323"></a>00323                      <span class="keyword">const</span> F5& f5, <span class="keyword">const</span> F6& f6, <span class="keyword">const</span> F7& f7)
+<a name="l00324"></a>00324 {
+<a name="l00325"></a>00325     task_group_context context;
+<a name="l00326"></a>00326     parallel_invoke<F0, F1, F2, F3, F4, F5, F6, F7>(f0, f1, f2, f3, f4, f5, f6, f7, context);
+<a name="l00327"></a>00327 }
+<a name="l00328"></a>00328 <span class="comment">// nine arguments</span>
+<a name="l00329"></a>00329 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4,
+<a name="l00330"></a>00330          <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6, <span class="keyword">typename</span> F7, <span class="keyword">typename</span> F8>
+<a name="l00331"></a>00331 <span class="keywordtype">void</span> <a class="code" href="a00371.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3, <span class="keyword">const</span> F4& f4,
+<a name="l00332"></a>00332                      <span class="keyword">const</span> F5& f5, <span class="keyword">const</span> F6& f6, <span class="keyword">const</span> F7& f7, <span class="keyword">const</span> F8& f8)
+<a name="l00333"></a>00333 {
+<a name="l00334"></a>00334     task_group_context context;
+<a name="l00335"></a>00335     parallel_invoke<F0, F1, F2, F3, F4, F5, F6, F7, F8>(f0, f1, f2, f3, f4, f5, f6, f7, f8, context);
+<a name="l00336"></a>00336 }
+<a name="l00337"></a>00337 <span class="comment">// ten arguments</span>
+<a name="l00338"></a>00338 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4,
+<a name="l00339"></a>00339          <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6, <span class="keyword">typename</span> F7, <span class="keyword">typename</span> F8, <span class="keyword">typename</span> F9>
+<a name="l00340"></a>00340 <span class="keywordtype">void</span> <a class="code" href="a00371.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3, <span class="keyword">const</span> F4& f4,
+<a name="l00341"></a>00341                      <span class="keyword">const</span> F5& f5, <span class="keyword">const</span> F6& f6, <span class="keyword">const</span> F7& f7, <span class="keyword">const</span> F8& f8, <span class="keyword">const</span> F9& f9)
+<a name="l00342"></a>00342 {
+<a name="l00343"></a>00343     task_group_context context;
+<a name="l00344"></a>00344     parallel_invoke<F0, F1, F2, F3, F4, F5, F6, F7, F8, F9>(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, context);
+<a name="l00345"></a>00345 }
+<a name="l00346"></a>00346 
+<a name="l00348"></a>00348 
+<a name="l00349"></a>00349 } <span class="comment">// namespace</span>
+<a name="l00350"></a>00350 
+<a name="l00351"></a>00351 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_invoke_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-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..55c0bdd
--- /dev/null
+++ b/doc/html/a00524.html
@@ -0,0 +1,340 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>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 "task.h"</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "aligned_space.h"</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include "partitioner.h"</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include "tbb_profiling.h"</span>
+<a name="l00028"></a>00028 <span class="preprocessor">#include <new></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="l00035"></a>00035 
+<a name="l00036"></a>00036     <span class="keyword">typedef</span> <span class="keywordtype">char</span> reduction_context;
+<a name="l00037"></a>00037 
+<a name="l00039"></a>00039 
+<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>finish_reduce: <span class="keyword">public</span> task {
+<a name="l00043"></a>00043         Body* my_body;
+<a name="l00044"></a>00044         <span class="keywordtype">bool</span> has_right_zombie;
+<a name="l00045"></a>00045         <span class="keyword">const</span> reduction_context my_context;
+<a name="l00046"></a>00046         aligned_space<Body,1> zombie_space;
+<a name="l00047"></a>00047         finish_reduce( reduction_context context_ ) : 
+<a name="l00048"></a>00048             my_body(NULL),
+<a name="l00049"></a>00049             has_right_zombie(false),
+<a name="l00050"></a>00050             my_context(context_)
+<a name="l00051"></a>00051         {
+<a name="l00052"></a>00052         }
+<a name="l00053"></a>00053         task* execute() {
+<a name="l00054"></a>00054             <span class="keywordflow">if</span>( has_right_zombie ) {
+<a name="l00055"></a>00055                 <span class="comment">// Right child was stolen.</span>
+<a name="l00056"></a>00056                 Body* s = zombie_space.begin();
+<a name="l00057"></a>00057                 my_body->join( *s );
+<a name="l00058"></a>00058                 s->~Body();
+<a name="l00059"></a>00059             }
+<a name="l00060"></a>00060             <span class="keywordflow">if</span>( my_context==1 )  <span class="comment">// left child</span>
+<a name="l00061"></a>00061                 itt_store_word_with_release( static_cast<finish_reduce*>(parent())->my_body, my_body );
+<a name="l00062"></a>00062             <span class="keywordflow">return</span> NULL;
+<a name="l00063"></a>00063         }
+<a name="l00064"></a>00064         <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="l00065"></a>00065         <span class="keyword">friend</span> <span class="keyword">class </span>start_reduce;
+<a name="l00066"></a>00066     };
+<a name="l00067"></a>00067 
+<a name="l00069"></a>00069 
+<a name="l00070"></a>00070     <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="l00071"></a>00071     <span class="keyword">class </span>start_reduce: <span class="keyword">public</span> task {
+<a name="l00072"></a>00072         <span class="keyword">typedef</span> finish_reduce<Body> finish_type;
+<a name="l00073"></a>00073         Body* my_body;
+<a name="l00074"></a>00074         Range my_range;
+<a name="l00075"></a>00075         <span class="keyword">typename</span> Partitioner::partition_type my_partition;
+<a name="l00076"></a>00076         reduction_context my_context;
+<a name="l00077"></a>00077         <span class="comment">/*override*/</span> task* execute();
+<a name="l00078"></a>00078         <span class="keyword">template</span><<span class="keyword">typename</span> Body_>
+<a name="l00079"></a>00079         <span class="keyword">friend</span> <span class="keyword">class </span>finish_reduce;
+<a name="l00080"></a>00080     
+<a name="l00082"></a>00082         start_reduce( <span class="keyword">const</span> Range& range, Body* body, Partitioner& partitioner ) :
+<a name="l00083"></a>00083             my_body(body),
+<a name="l00084"></a>00084             my_range(range),
+<a name="l00085"></a>00085             my_partition(partitioner),
+<a name="l00086"></a>00086             my_context(0)
+<a name="l00087"></a>00087         {
+<a name="l00088"></a>00088         }
+<a name="l00090"></a>00090 
+<a name="l00091"></a>00091         start_reduce( start_reduce& parent_, split ) :
+<a name="l00092"></a>00092             my_body(parent_.my_body),
+<a name="l00093"></a>00093             my_range(parent_.my_range,split()),
+<a name="l00094"></a>00094             my_partition(parent_.my_partition,split()),
+<a name="l00095"></a>00095             my_context(2)
+<a name="l00096"></a>00096         {
+<a name="l00097"></a>00097             my_partition.set_affinity(*<span class="keyword">this</span>);
+<a name="l00098"></a>00098             parent_.my_context = 1;
+<a name="l00099"></a>00099         }
+<a name="l00101"></a>00101         <span class="comment">/*override*/</span> <span class="keywordtype">void</span> note_affinity( affinity_id <span class="keywordtype">id</span> ) {
+<a name="l00102"></a>00102             my_partition.note_affinity( <span class="keywordtype">id</span> );
+<a name="l00103"></a>00103         }
+<a name="l00104"></a>00104 
+<a name="l00105"></a>00105 <span class="keyword">public</span>:
+<a name="l00106"></a>00106         <span class="keyword">static</span> <span class="keywordtype">void</span> run( <span class="keyword">const</span> Range& range, Body& body, Partitioner& partitioner ) {
+<a name="l00107"></a>00107             <span class="keywordflow">if</span>( !range.empty() ) {
+<a name="l00108"></a>00108 #<span class="keywordflow">if</span> !__TBB_TASK_GROUP_CONTEXT || TBB_JOIN_OUTER_TASK_GROUP
+<a name="l00109"></a>00109                 <a class="code" href="a00291.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>( *<span class="keyword">new</span>(<a class="code" href="a00291.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>()) start_reduce(range,&body,partitioner) );
+<a name="l00110"></a>00110 <span class="preprocessor">#else</span>
+<a name="l00111"></a>00111 <span class="preprocessor"></span>                <span class="comment">// Bound context prevents exceptions from body to affect nesting or sibling algorithms,</span>
+<a name="l00112"></a>00112                 <span class="comment">// and allows users to handle exceptions safely by wrapping parallel_for in the try-block.</span>
+<a name="l00113"></a>00113                 task_group_context context;
+<a name="l00114"></a>00114                 <a class="code" href="a00291.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>( *<span class="keyword">new</span>(task::allocate_root(context)) start_reduce(range,&body,partitioner) );
+<a name="l00115"></a>00115 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT && !TBB_JOIN_OUTER_TASK_GROUP */</span>
+<a name="l00116"></a>00116             }
+<a name="l00117"></a>00117         }
+<a name="l00118"></a>00118 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00119"></a>00119 <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="l00120"></a>00120             <span class="keywordflow">if</span>( !range.empty() ) 
+<a name="l00121"></a>00121                 <a class="code" href="a00291.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>( *<span class="keyword">new</span>(task::allocate_root(context)) start_reduce(range,&body,partitioner) );
+<a name="l00122"></a>00122         }
+<a name="l00123"></a>00123 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00124"></a>00124     };
+<a name="l00125"></a>00125 
+<a name="l00126"></a>00126     <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="l00127"></a>00127     task* start_reduce<Range,Body,Partitioner>::execute() {
+<a name="l00128"></a>00128         <span class="keywordflow">if</span>( my_context==2 ) { <span class="comment">// right child</span>
+<a name="l00129"></a>00129             finish_type* p = static_cast<finish_type*>(parent());
+<a name="l00130"></a>00130             <span class="keywordflow">if</span>( !itt_load_word_with_acquire(p->my_body) ) {
+<a name="l00131"></a>00131                 my_body = <span class="keyword">new</span>( p->zombie_space.begin() ) Body(*my_body,split());
+<a name="l00132"></a>00132                 p->has_right_zombie = <span class="keyword">true</span>;
+<a name="l00133"></a>00133             }
+<a name="l00134"></a>00134         }
+<a name="l00135"></a>00135         <span class="keywordflow">if</span>( !my_range.is_divisible() || my_partition.should_execute_range(*<span class="keyword">this</span>) ) {
+<a name="l00136"></a>00136             (*my_body)( my_range );
+<a name="l00137"></a>00137             <span class="keywordflow">if</span>( my_context==1 ) 
+<a name="l00138"></a>00138                 itt_store_word_with_release(static_cast<finish_type*>(parent())->my_body, my_body );
+<a name="l00139"></a>00139             <span class="keywordflow">return</span> my_partition.continue_after_execute_range();
+<a name="l00140"></a>00140         } <span class="keywordflow">else</span> {
+<a name="l00141"></a>00141             finish_type& c = *<span class="keyword">new</span>( allocate_continuation()) finish_type(my_context);
+<a name="l00142"></a>00142             recycle_as_child_of(c);
+<a name="l00143"></a>00143             c.set_ref_count(2);    
+<a name="l00144"></a>00144             <span class="keywordtype">bool</span> delay = my_partition.decide_whether_to_delay();
+<a name="l00145"></a>00145             start_reduce& b = *<span class="keyword">new</span>( c.allocate_child() ) start_reduce(*<span class="keyword">this</span>,split());
+<a name="l00146"></a>00146             my_partition.spawn_or_delay(delay,b);
+<a name="l00147"></a>00147             <span class="keywordflow">return</span> <span class="keyword">this</span>;
+<a name="l00148"></a>00148         }
+<a name="l00149"></a>00149     }
+<a name="l00150"></a>00150 
+<a name="l00152"></a>00152 
+<a name="l00156"></a>00156     <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="l00157"></a>00157     <span class="keyword">class </span>lambda_reduce_body {
+<a name="l00158"></a>00158 
+<a name="l00159"></a>00159 <span class="comment">//FIXME: decide if my_real_body, my_reduction, and identity_element should be copied or referenced</span>
+<a name="l00160"></a>00160 <span class="comment">//       (might require some performance measurements)</span>
+<a name="l00161"></a>00161 
+<a name="l00162"></a>00162         <span class="keyword">const</span> Value&     identity_element;
+<a name="l00163"></a>00163         <span class="keyword">const</span> RealBody&  my_real_body;
+<a name="l00164"></a>00164         <span class="keyword">const</span> Reduction& my_reduction;
+<a name="l00165"></a>00165         Value            my_value;
+<a name="l00166"></a>00166         lambda_reduce_body& operator= ( <span class="keyword">const</span> lambda_reduce_body& other );
+<a name="l00167"></a>00167     <span class="keyword">public</span>:
+<a name="l00168"></a>00168         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="l00169"></a>00169             : identity_element(identity)
+<a name="l00170"></a>00170             , my_real_body(body)
+<a name="l00171"></a>00171             , my_reduction(reduction)
+<a name="l00172"></a>00172             , my_value(identity)
+<a name="l00173"></a>00173         { }
+<a name="l00174"></a>00174         lambda_reduce_body( <span class="keyword">const</span> lambda_reduce_body& other )
+<a name="l00175"></a>00175             : identity_element(other.identity_element)
+<a name="l00176"></a>00176             , my_real_body(other.my_real_body)
+<a name="l00177"></a>00177             , my_reduction(other.my_reduction)
+<a name="l00178"></a>00178             , my_value(other.my_value)
+<a name="l00179"></a>00179         { }
+<a name="l00180"></a>00180         lambda_reduce_body( lambda_reduce_body& other, <a class="code" href="a00290.html">tbb::split</a> )
+<a name="l00181"></a>00181             : identity_element(other.identity_element)
+<a name="l00182"></a>00182             , my_real_body(other.my_real_body)
+<a name="l00183"></a>00183             , my_reduction(other.my_reduction)
+<a name="l00184"></a>00184             , my_value(other.identity_element)
+<a name="l00185"></a>00185         { }
+<a name="l00186"></a>00186         <span class="keywordtype">void</span> operator()(Range& range) {
+<a name="l00187"></a>00187             my_value = my_real_body(range, const_cast<const Value&>(my_value));
+<a name="l00188"></a>00188         }
+<a name="l00189"></a>00189         <span class="keywordtype">void</span> join( lambda_reduce_body& rhs ) {
+<a name="l00190"></a>00190             my_value = my_reduction(const_cast<const Value&>(my_value), const_cast<const Value&>(rhs.my_value));
+<a name="l00191"></a>00191         }
+<a name="l00192"></a>00192         Value result()<span class="keyword"> const </span>{
+<a name="l00193"></a>00193             <span class="keywordflow">return</span> my_value;
+<a name="l00194"></a>00194         }
+<a name="l00195"></a>00195     };
+<a name="l00196"></a>00196 
+<a name="l00197"></a>00197 } <span class="comment">// namespace internal</span>
+<a name="l00199"></a>00199 <span class="comment"></span>
+<a name="l00200"></a>00200 <span class="comment">// Requirements on Range concept are documented in blocked_range.h</span>
+<a name="l00201"></a>00201 
+<a name="l00220"></a>00220 
+<a name="l00222"></a>00222 
+<a name="l00223"></a>00223 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00224"></a><a class="code" href="a00371.html#g1b3d59c5eb62683c5754db6970392fa3">00224</a> <span class="keywordtype">void</span> <a class="code" href="a00371.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body ) {
+<a name="l00225"></a>00225     internal::start_reduce<Range,Body, const __TBB_DEFAULT_PARTITIONER>::run( range, body, __TBB_DEFAULT_PARTITIONER() );
+<a name="l00226"></a>00226 }
+<a name="l00227"></a>00227 
+<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><a class="code" href="a00371.html#gec1b7c03f9da909bef5db12e3d41bed3">00231</a> <span class="keywordtype">void</span> <a class="code" href="a00371.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00284.html">simple_partitioner</a>& partitioner ) {
+<a name="l00232"></a>00232     internal::start_reduce<Range,Body,const simple_partitioner>::run( range, body, partitioner );
+<a name="l00233"></a>00233 }
+<a name="l00234"></a>00234 
+<a name="l00236"></a>00236 
+<a name="l00237"></a>00237 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00238"></a><a class="code" href="a00371.html#g18a19157e6245992fc00ca0adeb7dd37">00238</a> <span class="keywordtype">void</span> <a class="code" href="a00371.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00219.html">auto_partitioner</a>& partitioner ) {
+<a name="l00239"></a>00239     internal::start_reduce<Range,Body,const auto_partitioner>::run( range, body, partitioner );
+<a name="l00240"></a>00240 }
+<a name="l00241"></a>00241 
+<a name="l00243"></a>00243 
+<a name="l00244"></a>00244 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00245"></a><a class="code" href="a00371.html#gc61e73fcc36c92d79a217fc355ff4a6b">00245</a> <span class="keywordtype">void</span> <a class="code" href="a00371.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <a class="code" href="a00212.html">affinity_partitioner</a>& partitioner ) {
+<a name="l00246"></a>00246     internal::start_reduce<Range,Body,affinity_partitioner>::run( range, body, partitioner );
+<a name="l00247"></a>00247 }
+<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"></span>
+<a name="l00252"></a>00252 <span class="preprocessor">template<typename Range, typename Body></span>
+<a name="l00253"></a><a class="code" href="a00371.html#g45cb00c42a18e334bbde8b7535afe460">00253</a> <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="a00371.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00284.html">simple_partitioner</a>& partitioner, <a class="code" href="a00293.html">task_group_cont [...]
+<a name="l00254"></a>00254     internal::start_reduce<Range,Body,const simple_partitioner>::run( range, body, partitioner, context );
+<a name="l00255"></a>00255 }
+<a name="l00256"></a>00256 
+<a name="l00258"></a>00258 
+<a name="l00259"></a>00259 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00260"></a><a class="code" href="a00371.html#g1c1ea1d7c61b3c225e92c70d669a53a5">00260</a> <span class="keywordtype">void</span> <a class="code" href="a00371.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00219.html">auto_partitioner</a>& partitioner, <a class="code" href="a00293.html">task_group_context</a>& context ) {
+<a name="l00261"></a>00261     internal::start_reduce<Range,Body,const auto_partitioner>::run( range, body, partitioner, context );
+<a name="l00262"></a>00262 }
+<a name="l00263"></a>00263 
+<a name="l00265"></a>00265 
+<a name="l00266"></a>00266 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00267"></a><a class="code" href="a00371.html#gd9ac3a3811060314695f33b703c6e11b">00267</a> <span class="keywordtype">void</span> <a class="code" href="a00371.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <a class="code" href="a00212.html">affinity_partitioner</a>& partitioner, <a class="code" href="a00293.html">task_group_context</a>& context ) {
+<a name="l00268"></a>00268     internal::start_reduce<Range,Body,affinity_partitioner>::run( range, body, partitioner, context );
+<a name="l00269"></a>00269 }
+<a name="l00270"></a>00270 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00271"></a>00271 
+<a name="l00275"></a>00275 
+<a name="l00276"></a>00276 
+<a name="l00277"></a>00277 <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="l00278"></a><a class="code" href="a00371.html#gc9412e09fb01fcad8c018ea9cffb28ef">00278</a> Value <a class="code" href="a00371.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="l00279"></a>00279     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+<a name="l00280"></a>00280     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<span class="keyword">const</span> __TBB_DEFAULT_PARTITIONER>
+<a name="l00281"></a>00281                           ::run(range, body, __TBB_DEFAULT_PARTITIONER() );
+<a name="l00282"></a>00282     <span class="keywordflow">return</span> body.result();
+<a name="l00283"></a>00283 }
+<a name="l00284"></a>00284 
+<a name="l00286"></a>00286 
+<a name="l00287"></a>00287 <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="l00288"></a><a class="code" href="a00371.html#gaddffeec0e892ac3d6fc7fc2053e1eca">00288</a> Value <a class="code" href="a00371.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="l00289"></a>00289                        <span class="keyword">const</span> <a class="code" href="a00284.html">simple_partitioner</a>& partitioner ) {
+<a name="l00290"></a>00290     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+<a name="l00291"></a>00291     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<span class="keyword">const</span> <a class="code" href="a00284.html">simple_partitioner</a>>
+<a name="l00292"></a>00292                           ::run(range, body, partitioner );
+<a name="l00293"></a>00293     <span class="keywordflow">return</span> body.result();
+<a name="l00294"></a>00294 }
+<a name="l00295"></a>00295 
+<a name="l00297"></a>00297 
+<a name="l00298"></a>00298 <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="l00299"></a><a class="code" href="a00371.html#gb175401f0729e40dd2c5860a17c14385">00299</a> Value <a class="code" href="a00371.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="l00300"></a>00300                        <span class="keyword">const</span> <a class="code" href="a00219.html">auto_partitioner</a>& partitioner ) {
+<a name="l00301"></a>00301     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+<a name="l00302"></a>00302     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<span class="keyword">const</span> <a class="code" href="a00219.html">auto_partitioner</a>>
+<a name="l00303"></a>00303                           ::run( range, body, partitioner );
+<a name="l00304"></a>00304     <span class="keywordflow">return</span> body.result();
+<a name="l00305"></a>00305 }
+<a name="l00306"></a>00306 
+<a name="l00308"></a>00308 
+<a name="l00309"></a>00309 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Value, <span class="keyword">typename</span> RealBody, <span class="keyword">typename</span> Reduction>
+<a name="l00310"></a><a class="code" href="a00371.html#gb7f1f1828ae2b330ce05b8513a495154">00310</a> Value <a class="code" href="a00371.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Value& identity, <span class="keyword">const</span> RealBody& real_body, <span class="keyword">const</span> Reduction& reduction,
+<a name="l00311"></a>00311                        <a class="code" href="a00212.html">affinity_partitioner</a>& partitioner ) {
+<a name="l00312"></a>00312     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+<a name="l00313"></a>00313     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<a class="code" href="a00212.html">affinity_partitioner</a>>
+<a name="l00314"></a>00314                                         ::run( range, body, partitioner );
+<a name="l00315"></a>00315     <span class="keywordflow">return</span> body.result();
+<a name="l00316"></a>00316 }
+<a name="l00317"></a>00317 
+<a name="l00318"></a>00318 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00320"></a>00320 <span class="preprocessor"></span>
+<a name="l00321"></a>00321 <span class="preprocessor">template<typename Range, typename Value, typename RealBody, typename Reduction></span>
+<a name="l00322"></a><a class="code" href="a00371.html#gfbc0cc2026d87f11a96bcd62788f5bb5">00322</a> <span class="preprocessor"></span>Value <a class="code" href="a00371.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="l00323"></a>00323                        <span class="keyword">const</span> <a class="code" href="a00284.html">simple_partitioner</a>& partitioner, <a class="code" href="a00293.html">task_group_context</a>& context ) {
+<a name="l00324"></a>00324     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+<a name="l00325"></a>00325     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<span class="keyword">const</span> <a class="code" href="a00284.html">simple_partitioner</a>>
+<a name="l00326"></a>00326                           ::run( range, body, partitioner, context );
+<a name="l00327"></a>00327     <span class="keywordflow">return</span> body.result();
+<a name="l00328"></a>00328 }
+<a name="l00329"></a>00329 
+<a name="l00331"></a>00331 
+<a name="l00332"></a>00332 <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="l00333"></a><a class="code" href="a00371.html#g630c90a399937d9d4ae70ff883186dfd">00333</a> Value <a class="code" href="a00371.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="l00334"></a>00334                        <span class="keyword">const</span> <a class="code" href="a00219.html">auto_partitioner</a>& partitioner, <a class="code" href="a00293.html">task_group_context</a>& context ) {
+<a name="l00335"></a>00335     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+<a name="l00336"></a>00336     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<span class="keyword">const</span> <a class="code" href="a00219.html">auto_partitioner</a>>
+<a name="l00337"></a>00337                           ::run( range, body, partitioner, context );
+<a name="l00338"></a>00338     <span class="keywordflow">return</span> body.result();
+<a name="l00339"></a>00339 }
+<a name="l00340"></a>00340 
+<a name="l00342"></a>00342 
+<a name="l00343"></a>00343 <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="l00344"></a><a class="code" href="a00371.html#g496bd7eadb3b97495ccb5655ef90319e">00344</a> Value <a class="code" href="a00371.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Value& identity, <span class="keyword">const</span> RealBody& real_body, <span class="keyword">const</span> Reduction& reduction,
+<a name="l00345"></a>00345                        <a class="code" href="a00212.html">affinity_partitioner</a>& partitioner, <a class="code" href="a00293.html">task_group_context</a>& context ) {
+<a name="l00346"></a>00346     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+<a name="l00347"></a>00347     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<a class="code" href="a00212.html">affinity_partitioner</a>>
+<a name="l00348"></a>00348                                         ::run( range, body, partitioner, context );
+<a name="l00349"></a>00349     <span class="keywordflow">return</span> body.result();
+<a name="l00350"></a>00350 }
+<a name="l00351"></a>00351 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00352"></a>00352 
+<a name="l00353"></a>00353 
+<a name="l00354"></a>00354 } <span class="comment">// namespace tbb</span>
+<a name="l00355"></a>00355 
+<a name="l00356"></a>00356 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_reduce_H */</span>
+<a name="l00357"></a>00357 
+</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/a00528.html b/doc/html/a00528.html
new file mode 100644
index 0000000..b8c18db
--- /dev/null
+++ b/doc/html/a00528.html
@@ -0,0 +1,341 @@
+<!DOCTYPE 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="a00267.html">00033</a> <span class="keyword">struct </span><a class="code" href="a00267.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="a00247.html">00039</a> <span class="keyword">struct </span><a class="code" href="a00247.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="a00291.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="a00215.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="a00290.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="a00291.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="a00291.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="a00291.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="a00291.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="a00291.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="a00371.html#ged143f31dd3d96ded02ab3db915b91c7">00321</a> <span class="keywordtype">void</span> <a class="code" href="a00371.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="a00371.html#gc9fac8870b2e6365fb337014404529df">00328</a> <span class="keywordtype">void</span> <a class="code" href="a00371.html#ged143f31dd3d96ded02ab3db915b91c7">parallel_scan</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00284.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="a00371.html#g62fde400a37bbca1a2fddc8e3d22f556">00335</a> <span class="keywordtype">void</span> <a class="code" href="a00371.html#ged143f31dd3d96ded02ab3db915b91c7">parallel_scan</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00219.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/a00533.html b/doc/html/a00533.html
new file mode 100644
index 0000000..4867322
--- /dev/null
+++ b/doc/html/a00533.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>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="l00107"></a>00107 
+<a name="l00108"></a>00108 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator, <span class="keyword">typename</span> Compare>
+<a name="l00109"></a>00109 <span class="keyword">class </span>quick_sort_pretest_body : internal::no_assign {
+<a name="l00110"></a>00110     <span class="keyword">const</span> Compare &comp;
+<a name="l00111"></a>00111 
+<a name="l00112"></a>00112 <span class="keyword">public</span>:
+<a name="l00113"></a>00113     quick_sort_pretest_body(<span class="keyword">const</span> Compare &_comp) : comp(_comp) {}
+<a name="l00114"></a>00114 
+<a name="l00115"></a>00115     <span class="keywordtype">void</span> operator()( <span class="keyword">const</span> blocked_range<RandomAccessIterator>& range )<span class="keyword"> const </span>{
+<a name="l00116"></a>00116         task &my_task = <a class="code" href="a00291.html#bd43e8d6249738efafd12d6a4c72c5e3">task::self</a>();
+<a name="l00117"></a>00117         RandomAccessIterator my_end = range.end();
+<a name="l00118"></a>00118 
+<a name="l00119"></a>00119         <span class="keywordtype">int</span> i = 0;
+<a name="l00120"></a>00120         <span class="keywordflow">for</span> (RandomAccessIterator k = range.begin(); k != my_end; ++k, ++i) {
+<a name="l00121"></a>00121             <span class="keywordflow">if</span> ( i%64 == 0 && my_task.is_cancelled() ) <span class="keywordflow">break</span>;
+<a name="l00122"></a>00122           
+<a name="l00123"></a>00123             <span class="comment">// The k-1 is never out-of-range because the first chunk starts at begin+serial_cutoff+1</span>
+<a name="l00124"></a>00124             <span class="keywordflow">if</span> ( comp( *(k), *(k-1) ) ) {
+<a name="l00125"></a>00125                 my_task.cancel_group_execution();
+<a name="l00126"></a>00126                 <span class="keywordflow">break</span>;
+<a name="l00127"></a>00127             }
+<a name="l00128"></a>00128         }
+<a name="l00129"></a>00129     }
+<a name="l00130"></a>00130 
+<a name="l00131"></a>00131 };
+<a name="l00132"></a>00132 
+<a name="l00134"></a>00134 
+<a name="l00135"></a>00135 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator, <span class="keyword">typename</span> Compare>
+<a name="l00136"></a>00136 <span class="keyword">struct </span>quick_sort_body {
+<a name="l00137"></a>00137     <span class="keywordtype">void</span> operator()( <span class="keyword">const</span> quick_sort_range<RandomAccessIterator,Compare>& range )<span class="keyword"> const </span>{
+<a name="l00138"></a>00138         <span class="comment">//SerialQuickSort( range.begin, range.size, range.comp );</span>
+<a name="l00139"></a>00139         std::sort( range.begin, range.begin + range.size, range.comp );
+<a name="l00140"></a>00140     }
+<a name="l00141"></a>00141 };
+<a name="l00142"></a>00142 
+<a name="l00144"></a>00144 
+<a name="l00145"></a>00145 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator, <span class="keyword">typename</span> Compare>
+<a name="l00146"></a>00146 <span class="keywordtype">void</span> parallel_quick_sort( RandomAccessIterator begin, RandomAccessIterator end, <span class="keyword">const</span> Compare& comp ) {
+<a name="l00147"></a>00147     task_group_context my_context;
+<a name="l00148"></a>00148     <span class="keyword">const</span> <span class="keywordtype">int</span> serial_cutoff = 9;
+<a name="l00149"></a>00149 
+<a name="l00150"></a>00150     __TBB_ASSERT( begin + serial_cutoff < end, <span class="stringliteral">"min_parallel_size is smaller than serial cutoff?"</span> );
+<a name="l00151"></a>00151     RandomAccessIterator k;
+<a name="l00152"></a>00152     <span class="keywordflow">for</span> ( k = begin ; k != begin + serial_cutoff; ++k ) {
+<a name="l00153"></a>00153         <span class="keywordflow">if</span> ( comp( *(k+1), *k ) ) {
+<a name="l00154"></a>00154             <span class="keywordflow">goto</span> do_parallel_quick_sort;
+<a name="l00155"></a>00155         }
+<a name="l00156"></a>00156     }
+<a name="l00157"></a>00157 
+<a name="l00158"></a>00158     <a class="code" href="a00371.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( blocked_range<RandomAccessIterator>(k+1, end),
+<a name="l00159"></a>00159                   quick_sort_pretest_body<RandomAccessIterator,Compare>(comp),
+<a name="l00160"></a>00160                   auto_partitioner(),
+<a name="l00161"></a>00161                   my_context);
+<a name="l00162"></a>00162 
+<a name="l00163"></a>00163     <span class="keywordflow">if</span> (my_context.is_group_execution_cancelled())
+<a name="l00164"></a>00164 do_parallel_quick_sort:
+<a name="l00165"></a>00165         <a class="code" href="a00371.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( quick_sort_range<RandomAccessIterator,Compare>(begin, end-begin, comp ), 
+<a name="l00166"></a>00166                       quick_sort_body<RandomAccessIterator,Compare>(),
+<a name="l00167"></a>00167                       auto_partitioner() );
+<a name="l00168"></a>00168 }
+<a name="l00169"></a>00169 
+<a name="l00170"></a>00170 } <span class="comment">// namespace internal</span>
+<a name="l00172"></a>00172 <span class="comment"></span>
+<a name="l00183"></a>00183 
+<a name="l00185"></a>00185 
+<a name="l00188"></a>00188 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator, <span class="keyword">typename</span> Compare>
+<a name="l00189"></a><a class="code" href="a00371.html#g49edcf9447cd91a9527a3f8e8512b7aa">00189</a> <span class="keywordtype">void</span> <a class="code" href="a00371.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( RandomAccessIterator begin, RandomAccessIterator end, <span class="keyword">const</span> Compare& comp) { 
+<a name="l00190"></a>00190     <span class="keyword">const</span> <span class="keywordtype">int</span> min_parallel_size = 500; 
+<a name="l00191"></a>00191     <span class="keywordflow">if</span>( end > begin ) {
+<a name="l00192"></a>00192         <span class="keywordflow">if</span> (end - begin < min_parallel_size) { 
+<a name="l00193"></a>00193             std::sort(begin, end, comp);
+<a name="l00194"></a>00194         } <span class="keywordflow">else</span> {
+<a name="l00195"></a>00195             internal::parallel_quick_sort(begin, end, comp);
+<a name="l00196"></a>00196         }
+<a name="l00197"></a>00197     }
+<a name="l00198"></a>00198 }
+<a name="l00199"></a>00199 
+<a name="l00201"></a>00201 
+<a name="l00202"></a>00202 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator>
+<a name="l00203"></a><a class="code" href="a00371.html#g16c3eb77d0e530834c51ce3857f01012">00203</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00371.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( RandomAccessIterator begin, RandomAccessIterator end ) { 
+<a name="l00204"></a>00204     <a class="code" href="a00371.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( begin, end, std::less< <span class="keyword">typename</span> std::iterator_traits<RandomAccessIterator>::value_type >() );
+<a name="l00205"></a>00205 }
+<a name="l00206"></a>00206 
+<a name="l00208"></a>00208 
+<a name="l00209"></a>00209 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00210"></a><a class="code" href="a00371.html#gc7576f82fdedc8a701a6c17ad9415926">00210</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00371.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( T * begin, T * end ) {
+<a name="l00211"></a>00211     <a class="code" href="a00371.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( begin, end, std::less< T >() );
+<a name="l00212"></a>00212 }   
+<a name="l00214"></a>00214 
+<a name="l00215"></a>00215 
+<a name="l00216"></a>00216 } <span class="comment">// namespace tbb</span>
+<a name="l00217"></a>00217 
+<a name="l00218"></a>00218 <span class="preprocessor">#endif</span>
+<a name="l00219"></a>00219 <span class="preprocessor"></span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-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/a00537.html b/doc/html/a00537.html
new file mode 100644
index 0000000..0285ca3
--- /dev/null
+++ b/doc/html/a00537.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-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="a00265.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="a00265.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="a00265.html">00129</a> <span class="keyword">class </span><a class="code" href="a00265.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="a00265.html#36e26ba3880c7bcf804a97ba0cbe133f">00132</a>     <a class="code" href="a00265.html#36e26ba3880c7bcf804a97ba0cbe133f">parallel_while</a>() : my_body(NULL), my_barrier(NULL) {}
+<a name="l00133"></a>00133 
+<a name="l00135"></a><a class="code" href="a00265.html#6fcfc973cc56b79c6d0fbb8a31be7e84">00135</a>     <a class="code" href="a00265.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="a00291.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="a00265.html#fa297e53d3af2a101e712bc200233e9c">00143</a>     <span class="keyword">typedef</span> <span class="keyword">typename</span> Body::argument_type <a class="code" href="a00265.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="a00265.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="a00265.html#e131c560057a58229992b61eb8dba4c6">add</a>( <span class="keyword">const</span> <a class="code" href="a00265.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="a00242.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="a00265.html#b32a0a6e5e09ebb7fad3e6652c19afe5">00163</a> <span class="keywordtype">void</span> <a class="code" href="a00265.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="a00242.html">empty_task</a>& barrier = *<span class="keyword">new</span>( <a class="code" href="a00291.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>() ) <a class="code" href="a00242.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="a00291.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="a00291.html#1ff794f7053cd9148d5f280fbf07377f">allocate_child</a>() ) while_task<Stream,Body>( stream, body, barrier );
+<a name="l00170"></a>00170     my_barrier-><a class="code" href="a00291.html#3ce28ca9baa771cfc37ecd72e69c4f3c">spawn_and_wait_for_all</a>(w);
+<a name="l00171"></a>00171     my_barrier-><a class="code" href="a00291.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="a00265.html#e131c560057a58229992b61eb8dba4c6">00177</a> <span class="keywordtype">void</span> <a class="code" href="a00265.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="a00291.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/a00541.html b/doc/html/a00541.html
new file mode 100644
index 0000000..76fd8ca
--- /dev/null
+++ b/doc/html/a00541.html
@@ -0,0 +1,230 @@
+<!DOCTYPE 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-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_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">#include "task.h"</span>
+<a name="l00025"></a>00025 
+<a name="l00026"></a>00026 <span class="keyword">namespace </span>tbb {
+<a name="l00027"></a>00027 <span class="keyword">class </span>affinity_partitioner;
+<a name="l00028"></a>00028 
+<a name="l00030"></a>00030 <span class="keyword">namespace </span>internal {
+<a name="l00031"></a>00031 size_t __TBB_EXPORTED_FUNC get_initial_auto_partitioner_divisor();
+<a name="l00032"></a>00032 
+<a name="l00034"></a>00034 
+<a name="l00035"></a>00035 <span class="keyword">class </span>affinity_partitioner_base_v3: no_copy {
+<a name="l00036"></a>00036     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00212.html">tbb::affinity_partitioner</a>;
+<a name="l00038"></a>00038 
+<a name="l00039"></a>00039     affinity_id* my_array;
+<a name="l00041"></a>00041     size_t my_size;
+<a name="l00043"></a>00043     affinity_partitioner_base_v3() : my_array(NULL), my_size(0) {}
+<a name="l00045"></a>00045     ~affinity_partitioner_base_v3() {resize(0);}
+<a name="l00047"></a>00047 
+<a name="l00048"></a>00048     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD resize( <span class="keywordtype">unsigned</span> factor );
+<a name="l00049"></a>00049     <span class="keyword">friend</span> <span class="keyword">class </span>affinity_partition_type;
+<a name="l00050"></a>00050 };
+<a name="l00051"></a>00051 
+<a name="l00053"></a>00053 <span class="keyword">class </span>partition_type_base {
+<a name="l00054"></a>00054 <span class="keyword">public</span>:
+<a name="l00055"></a>00055     <span class="keywordtype">void</span> set_affinity( task & ) {}
+<a name="l00056"></a>00056     <span class="keywordtype">void</span> note_affinity( <a class="code" href="a00291.html#d61bb32389d3857bf7511d69beaafb76">task::affinity_id</a> ) {}
+<a name="l00057"></a>00057     task* continue_after_execute_range() {<span class="keywordflow">return</span> NULL;}
+<a name="l00058"></a>00058     <span class="keywordtype">bool</span> decide_whether_to_delay() {<span class="keywordflow">return</span> <span class="keyword">false</span>;}
+<a name="l00059"></a>00059     <span class="keywordtype">void</span> spawn_or_delay( <span class="keywordtype">bool</span>, task& b ) {
+<a name="l00060"></a>00060         task::spawn(b);
+<a name="l00061"></a>00061     }
+<a name="l00062"></a>00062 };
+<a name="l00063"></a>00063 
+<a name="l00064"></a>00064 <span class="keyword">class </span>affinity_partition_type;
+<a name="l00065"></a>00065 
+<a name="l00066"></a>00066 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">class </span>start_for;
+<a name="l00067"></a>00067 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">class </span>start_reduce;
+<a name="l00068"></a>00068 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">class </span>start_scan;
+<a name="l00069"></a>00069 
+<a name="l00070"></a>00070 } <span class="comment">// namespace internal</span>
+<a name="l00072"></a>00072 <span class="comment"></span>
+<a name="l00074"></a>00074 
+<a name="l00076"></a><a class="code" href="a00284.html">00076</a> <span class="keyword">class </span><a class="code" href="a00284.html">simple_partitioner</a> {
+<a name="l00077"></a>00077 <span class="keyword">public</span>:
+<a name="l00078"></a>00078     <a class="code" href="a00284.html">simple_partitioner</a>() {}
+<a name="l00079"></a>00079 <span class="keyword">private</span>:
+<a name="l00080"></a>00080     <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">friend</span> <span class="keyword">class </span>internal::start_for;
+<a name="l00081"></a>00081     <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">friend</span> <span class="keyword">class </span>internal::start_reduce;
+<a name="l00082"></a>00082     <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">friend</span> <span class="keyword">class </span>internal::start_scan;
+<a name="l00083"></a>00083 
+<a name="l00084"></a>00084     <span class="keyword">class </span>partition_type: <span class="keyword">public</span> internal::partition_type_base {
+<a name="l00085"></a>00085     <span class="keyword">public</span>:
+<a name="l00086"></a>00086         <span class="keywordtype">bool</span> should_execute_range(<span class="keyword">const</span> <a class="code" href="a00291.html">task</a>& ) {<span class="keywordflow">return</span> <span class="keyword">false</span>;}
+<a name="l00087"></a>00087         partition_type( <span class="keyword">const</span> <a class="code" href="a00284.html">simple_partitioner</a>& ) {}
+<a name="l00088"></a>00088         partition_type( <span class="keyword">const</span> partition_type&, <a class="code" href="a00290.html">split</a> ) {}
+<a name="l00089"></a>00089     };
+<a name="l00090"></a>00090 };
+<a name="l00091"></a>00091 
+<a name="l00093"></a>00093 
+<a name="l00096"></a><a class="code" href="a00219.html">00096</a> <span class="keyword">class </span><a class="code" href="a00219.html">auto_partitioner</a> {
+<a name="l00097"></a>00097 <span class="keyword">public</span>:
+<a name="l00098"></a>00098     <a class="code" href="a00219.html">auto_partitioner</a>() {}
+<a name="l00099"></a>00099 
+<a name="l00100"></a>00100 <span class="keyword">private</span>:
+<a name="l00101"></a>00101     <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">friend</span> <span class="keyword">class </span>internal::start_for;
+<a name="l00102"></a>00102     <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">friend</span> <span class="keyword">class </span>internal::start_reduce;
+<a name="l00103"></a>00103     <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">friend</span> <span class="keyword">class </span>internal::start_scan;
+<a name="l00104"></a>00104 
+<a name="l00105"></a>00105     <span class="keyword">class </span>partition_type: <span class="keyword">public</span> internal::partition_type_base {
+<a name="l00106"></a>00106         size_t num_chunks;
+<a name="l00107"></a>00107         <span class="keyword">static</span> <span class="keyword">const</span> size_t VICTIM_CHUNKS = 4;
+<a name="l00108"></a>00108 <span class="keyword">public</span>:
+<a name="l00109"></a>00109         <span class="keywordtype">bool</span> should_execute_range(<span class="keyword">const</span> <a class="code" href="a00291.html">task</a> &t) {
+<a name="l00110"></a>00110             <span class="keywordflow">if</span>( num_chunks<VICTIM_CHUNKS && t.<a class="code" href="a00291.html#f9169402702f56bf519448aaf34450aa">is_stolen_task</a>() )
+<a name="l00111"></a>00111                 num_chunks = VICTIM_CHUNKS;
+<a name="l00112"></a>00112             <span class="keywordflow">return</span> num_chunks==1;
+<a name="l00113"></a>00113         }
+<a name="l00114"></a>00114         partition_type( <span class="keyword">const</span> <a class="code" href="a00219.html">auto_partitioner</a>& ) : num_chunks(internal::get_initial_auto_partitioner_divisor()) {}
+<a name="l00115"></a>00115         partition_type( partition_type& pt, <a class="code" href="a00290.html">split</a> ) {
+<a name="l00116"></a>00116             num_chunks = pt.num_chunks /= 2u;
+<a name="l00117"></a>00117         }
+<a name="l00118"></a>00118     };
+<a name="l00119"></a>00119 };
+<a name="l00120"></a>00120 
+<a name="l00122"></a><a class="code" href="a00212.html">00122</a> <span class="keyword">class </span><a class="code" href="a00212.html">affinity_partitioner</a>: internal::affinity_partitioner_base_v3 {
+<a name="l00123"></a>00123 <span class="keyword">public</span>:
+<a name="l00124"></a>00124     <a class="code" href="a00212.html">affinity_partitioner</a>() {}
+<a name="l00125"></a>00125 
+<a name="l00126"></a>00126 <span class="keyword">private</span>:
+<a name="l00127"></a>00127     <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">friend</span> <span class="keyword">class </span>internal::start_for;
+<a name="l00128"></a>00128     <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">friend</span> <span class="keyword">class </span>internal::start_reduce;
+<a name="l00129"></a>00129     <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">friend</span> <span class="keyword">class </span>internal::start_scan;
+<a name="l00130"></a>00130 
+<a name="l00131"></a>00131     <span class="keyword">typedef</span> internal::affinity_partition_type partition_type;
+<a name="l00132"></a>00132     <span class="keyword">friend</span> <span class="keyword">class </span>internal::affinity_partition_type;
+<a name="l00133"></a>00133 };
+<a name="l00134"></a>00134 
+<a name="l00136"></a>00136 <span class="keyword">namespace </span>internal {
+<a name="l00137"></a>00137 
+<a name="l00138"></a>00138 <span class="keyword">class </span>affinity_partition_type: <span class="keyword">public</span> no_copy {
+<a name="l00140"></a>00140     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> factor = 16;
+<a name="l00141"></a>00141     <span class="keyword">static</span> <span class="keyword">const</span> size_t VICTIM_CHUNKS = 4;
+<a name="l00142"></a>00142 
+<a name="l00143"></a>00143     internal::affinity_id* my_array;
+<a name="l00144"></a>00144     <a class="code" href="a00294.html">task_list</a> delay_list;
+<a name="l00145"></a>00145     <span class="keywordtype">unsigned</span> map_begin, map_end;
+<a name="l00146"></a>00146     size_t num_chunks;
+<a name="l00147"></a>00147 <span class="keyword">public</span>:
+<a name="l00148"></a>00148     affinity_partition_type( <a class="code" href="a00212.html">affinity_partitioner</a>& ap ) {
+<a name="l00149"></a>00149         __TBB_ASSERT( (factor&(factor-1))==0, <span class="stringliteral">"factor must be power of two"</span> ); 
+<a name="l00150"></a>00150         ap.resize(factor);
+<a name="l00151"></a>00151         my_array = ap.my_array;
+<a name="l00152"></a>00152         map_begin = 0;
+<a name="l00153"></a>00153         map_end = unsigned(ap.my_size);
+<a name="l00154"></a>00154         num_chunks = internal::get_initial_auto_partitioner_divisor();
+<a name="l00155"></a>00155     }
+<a name="l00156"></a>00156     affinity_partition_type(affinity_partition_type& p, split) : my_array(p.my_array) {
+<a name="l00157"></a>00157         __TBB_ASSERT( p.map_end-p.map_begin<factor || (p.map_end-p.map_begin)%factor==0, NULL );
+<a name="l00158"></a>00158         num_chunks = p.num_chunks /= 2;
+<a name="l00159"></a>00159         <span class="keywordtype">unsigned</span> e = p.map_end;
+<a name="l00160"></a>00160         <span class="keywordtype">unsigned</span> d = (e - p.map_begin)/2;
+<a name="l00161"></a>00161         <span class="keywordflow">if</span>( d>factor ) 
+<a name="l00162"></a>00162             d &= 0u-factor;
+<a name="l00163"></a>00163         map_end = e;
+<a name="l00164"></a>00164         map_begin = p.map_end = e-d;
+<a name="l00165"></a>00165     }
+<a name="l00166"></a>00166 
+<a name="l00167"></a>00167     <span class="keywordtype">bool</span> should_execute_range(<span class="keyword">const</span> task &t) {
+<a name="l00168"></a>00168         <span class="keywordflow">if</span>( num_chunks < VICTIM_CHUNKS && t.is_stolen_task() )
+<a name="l00169"></a>00169             num_chunks = VICTIM_CHUNKS;
+<a name="l00170"></a>00170         <span class="keywordflow">return</span> num_chunks == 1;
+<a name="l00171"></a>00171     }
+<a name="l00172"></a>00172 
+<a name="l00173"></a>00173     <span class="keywordtype">void</span> set_affinity( task &t ) {
+<a name="l00174"></a>00174         <span class="keywordflow">if</span>( map_begin<map_end )
+<a name="l00175"></a>00175             t.set_affinity( my_array[map_begin] );
+<a name="l00176"></a>00176     }
+<a name="l00177"></a>00177     <span class="keywordtype">void</span> note_affinity( <a class="code" href="a00291.html#d61bb32389d3857bf7511d69beaafb76">task::affinity_id</a> <span class="keywordtype">id</span> ) {
+<a name="l00178"></a>00178         <span class="keywordflow">if</span>( map_begin<map_end ) 
+<a name="l00179"></a>00179             my_array[map_begin] = id;
+<a name="l00180"></a>00180     }
+<a name="l00181"></a>00181     task* continue_after_execute_range() {
+<a name="l00182"></a>00182         task* first = NULL;
+<a name="l00183"></a>00183         <span class="keywordflow">if</span>( !delay_list.empty() ) {
+<a name="l00184"></a>00184             first = &delay_list.pop_front();
+<a name="l00185"></a>00185             <span class="keywordflow">while</span>( !delay_list.empty() ) {
+<a name="l00186"></a>00186                 task::spawn(*first);
+<a name="l00187"></a>00187                 first = &delay_list.pop_front();
+<a name="l00188"></a>00188             }
+<a name="l00189"></a>00189         }
+<a name="l00190"></a>00190         <span class="keywordflow">return</span> first;
+<a name="l00191"></a>00191     }
+<a name="l00192"></a>00192     <span class="keywordtype">bool</span> decide_whether_to_delay() {
+<a name="l00193"></a>00193         <span class="comment">// The possible underflow caused by "-1u" is deliberate</span>
+<a name="l00194"></a>00194         <span class="keywordflow">return</span> (map_begin&(factor-1))==0 && map_end-map_begin-1u<factor;
+<a name="l00195"></a>00195     }
+<a name="l00196"></a>00196     <span class="keywordtype">void</span> spawn_or_delay( <span class="keywordtype">bool</span> delay, task& b ) {
+<a name="l00197"></a>00197         <span class="keywordflow">if</span>( delay )  
+<a name="l00198"></a>00198             delay_list.push_back(b);
+<a name="l00199"></a>00199         <span class="keywordflow">else</span> 
+<a name="l00200"></a>00200             task::spawn(b);
+<a name="l00201"></a>00201     }
+<a name="l00202"></a>00202 
+<a name="l00203"></a>00203     ~affinity_partition_type() {
+<a name="l00204"></a>00204         <span class="comment">// The delay_list can be non-empty if an exception is thrown.</span>
+<a name="l00205"></a>00205         <span class="keywordflow">while</span>( !delay_list.empty() ) {
+<a name="l00206"></a>00206             task& t = delay_list.pop_front();
+<a name="l00207"></a>00207             t.destroy(t);
+<a name="l00208"></a>00208         } 
+<a name="l00209"></a>00209     }
+<a name="l00210"></a>00210 };
+<a name="l00211"></a>00211 
+<a name="l00212"></a>00212 } <span class="comment">// namespace internal</span>
+<a name="l00214"></a>00214 <span class="comment"></span>
+<a name="l00215"></a>00215 
+<a name="l00216"></a>00216 } <span class="comment">// namespace tbb</span>
+<a name="l00217"></a>00217 
+<a name="l00218"></a>00218 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_partitioner_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/a00546.html b/doc/html/a00546.html
new file mode 100644
index 0000000..a78de64
--- /dev/null
+++ b/doc/html/a00546.html
@@ -0,0 +1,585 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>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="a00245.html">00061</a> <span class="keyword">class </span><a class="code" href="a00245.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="a00245.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="a00245.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="a00245.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="a00245.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="a00245.html#2e5eb65f95d8050186278077e433c5b1">filter_is_out_of_order</a> = 0x1<<4;  
+<a name="l00073"></a>00073 
+<a name="l00075"></a><a class="code" href="a00245.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="a00245.html#dd6a6e7210efc9bcaf2c5e08767d92b5">filter_is_bound</a> = 0x1<<5;  
+<a name="l00076"></a>00076 
+<a name="l00078"></a><a class="code" href="a00245.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="a00245.html#bdd02a434a6e7499dd1e8f43aae96793">filter_may_emit_null</a> = 0x1<<6;
+<a name="l00079"></a>00079 
+<a name="l00081"></a><a class="code" href="a00245.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="a00245.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="a00245.html#2e5eb65f95d8050186278077e433c5b1">filter_is_out_of_order</a>, 
+<a name="l00095"></a>00095         serial_in_order = current_version | <a class="code" href="a00245.html#4b7de3a76e744f3d9c1bc5d437ea851d">filter_is_serial</a>,
+<a name="l00097"></a>00097         serial_out_of_order = current_version | <a class="code" href="a00245.html#4b7de3a76e744f3d9c1bc5d437ea851d">filter_is_serial</a> | <a class="code" href="a00245.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="a00245.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="a00245.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="a00245.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="a00245.html#fcfec27656a69ff2072802ac001e936f">00125</a>     <span class="keywordtype">bool</span> <a class="code" href="a00245.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="a00245.html#4b7de3a76e744f3d9c1bc5d437ea851d">filter_is_serial</a> );
+<a name="l00127"></a>00127     }  
+<a name="l00128"></a>00128     
+<a name="l00130"></a><a class="code" href="a00245.html#cd53206c4795ef2df5df26b795caf692">00130</a>     <span class="keywordtype">bool</span> <a class="code" href="a00245.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="a00245.html#2e5eb65f95d8050186278077e433c5b1">filter_is_out_of_order</a>|<a class="code" href="a00245.html#4b7de3a76e744f3d9c1bc5d437ea851d">filter_is_serial</a>))==<a class="code" href="a00245.html#4b7de3a76e744f3d9c1bc5d437ea851d">filter_is_serial</a>;
+<a name="l00132"></a>00132     }
+<a name="l00133"></a>00133 
+<a name="l00135"></a><a class="code" href="a00245.html#15c29cae5d237e6d63dbfe5c94af89d5">00135</a>     <span class="keywordtype">bool</span> <a class="code" href="a00245.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="a00245.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="a00245.html#8ec4dfe053e94a2349d56781ddea8477">00140</a>     <span class="keywordtype">bool</span> <a class="code" href="a00245.html#8ec4dfe053e94a2349d56781ddea8477">object_may_be_null</a>() { 
+<a name="l00141"></a>00141         <span class="keywordflow">return</span> ( my_filter_mode & <a class="code" href="a00245.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="a00245.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="a00245.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="a00245.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="a00245.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="a00266.html">pipeline</a>;
+<a name="l00175"></a>00175     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00301.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="a00245.html">filter</a>* prev_filter_in_pipeline;
+<a name="l00182"></a>00182 
+<a name="l00184"></a>00184     <a class="code" href="a00266.html">pipeline</a>* my_pipeline;
+<a name="l00185"></a>00185 
+<a name="l00187"></a>00187 
+<a name="l00188"></a>00188     <a class="code" href="a00245.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="a00301.html">00193</a> <span class="keyword">class </span><a class="code" href="a00301.html">thread_bound_filter</a>: <span class="keyword">public</span> <a class="code" href="a00245.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="a00301.html">thread_bound_filter</a>(mode filter_mode): 
+<a name="l00205"></a>00205          <a class="code" href="a00245.html">filter</a>(static_cast<mode>(filter_mode | <a class="code" href="a00245.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="a00301.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="a00301.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="a00266.html">00230</a> <span class="keyword">class </span><a class="code" href="a00266.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="a00266.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="a00266.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="a00266.html#38fb5c9c8395dd6f89a4ae2011a83e0d">add_filter</a>( <a class="code" href="a00245.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="a00266.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="a00266.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="a00245.html">filter</a>;
+<a name="l00257"></a>00257     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00301.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="a00245.html">filter</a>* filter_list;
+<a name="l00263"></a>00263 
+<a name="l00265"></a>00265     <a class="code" href="a00245.html">filter</a>* filter_end;
+<a name="l00266"></a>00266 
+<a name="l00268"></a>00268     <a class="code" href="a00291.html">task</a>* end_counter;
+<a name="l00269"></a>00269 
+<a name="l00271"></a>00271     <a class="code" href="a00216.html">atomic<internal::Token></a> input_tokens;
+<a name="l00272"></a>00272 
+<a name="l00274"></a>00274     <a class="code" href="a00216.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="a00245.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="a00291.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="a00248.html">00305</a> <span class="keyword">class </span><a class="code" href="a00248.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="a00248.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="a00296.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="a00266.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="a00266.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="a00216.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="a00246.html#85c2892eff1fddcd06e28911e75838bd">00536</a> <a class="code" href="a00246.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="a00246.html">filter_t<T,U></a> operator& (<span class="keyword">const</span> <a class="code" href="a00246.html">filter_t<T,V></a>& left, <span class="keyword">const</span> <a class="code" href="a00246.html">filter_t<V,U></a>& right) {
+<a name="l00542"></a>00542     __TBB_ASSERT(left.<a class="code" href="a00246.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="a00246.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="a00246.html#756d88b0cb01ed3cb9af741c1c4bed52">root</a>,*right.<a class="code" href="a00246.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="a00246.html">00549</a> <span class="keyword">class </span><a class="code" href="a00246.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="a00246.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="a00246.html">filter_t<T_,U_></a> <a class="code" href="a00246.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="a00246.html">filter_t<T_,U_></a> operator& (<span class="keyword">const</span> <a class="code" href="a00246.html">filter_t<T_,V_></a>& , <span class="keyword">const</span> <a class="code" href="a00246.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="a00246.html">filter_t</a>() : root(NULL) {}
+<a name="l00562"></a>00562     <a class="code" href="a00246.html">filter_t</a>( <span class="keyword">const</span> <a class="code" href="a00246.html">filter_t<T,U></a>& rhs ) : root(rhs.<a class="code" href="a00246.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="a00246.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="a00246.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="a00246.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="a00246.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="a00246.html">filter_t<void,void></a>& filter_chain ) : my_pipe() {
+<a name="l00593"></a>00593     __TBB_ASSERT( filter_chain.<a class="code" href="a00246.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="a00246.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="a00246.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="a00293.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="a00293.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/a00560.html b/doc/html/a00560.html
new file mode 100644
index 0000000..c0a44a9
--- /dev/null
+++ b/doc/html/a00560.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-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="a00270.html">00045</a> <span class="keyword">class </span><a class="code" href="a00270.html">queuing_mutex</a> {
+<a name="l00046"></a>00046 <span class="keyword">public</span>:
+<a name="l00048"></a><a class="code" href="a00270.html#b389ad9c4db7293e4bdb5b8cda69ec04">00048</a>     <a class="code" href="a00270.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="a00271.html">00058</a>     <span class="keyword">class </span><a class="code" href="a00271.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="a00258.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="a00271.html#db0fa3967491014572e24d6607bdc971">00069</a>         <a class="code" href="a00271.html#db0fa3967491014572e24d6607bdc971">scoped_lock</a>() {initialize();}
+<a name="l00070"></a>00070 
+<a name="l00072"></a><a class="code" href="a00271.html#9b51ef972f5618ac17caadb58841ab6d">00072</a>         <a class="code" href="a00271.html#db0fa3967491014572e24d6607bdc971">scoped_lock</a>( <a class="code" href="a00270.html">queuing_mutex</a>& m ) {
+<a name="l00073"></a>00073             initialize();
+<a name="l00074"></a>00074             <a class="code" href="a00271.html#533e4fc8355ee321206a0609c42d909d">acquire</a>(m);
+<a name="l00075"></a>00075         }
+<a name="l00076"></a>00076 
+<a name="l00078"></a><a class="code" href="a00271.html#ac2c576a93570957d694192a5f491443">00078</a>         <a class="code" href="a00271.html#ac2c576a93570957d694192a5f491443">~scoped_lock</a>() {
+<a name="l00079"></a>00079             <span class="keywordflow">if</span>( <a class="code" href="a00258.html">mutex</a> ) <a class="code" href="a00271.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="a00271.html#533e4fc8355ee321206a0609c42d909d">acquire</a>( <a class="code" href="a00270.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="a00271.html#e5a014fb817599386a87170cf2cf51a9">try_acquire</a>( <a class="code" href="a00270.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="a00271.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="a00270.html">queuing_mutex</a>* <a class="code" href="a00258.html">mutex</a>;
+<a name="l00094"></a>00094 
+<a name="l00096"></a>00096         <a class="code" href="a00271.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 
+<a name="l00112"></a>00112     <span class="keyword">friend</span> <span class="keyword">class </span>scoped_lock;
+<a name="l00113"></a>00113 <span class="keyword">private</span>:
+<a name="l00115"></a>00115     <a class="code" href="a00216.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-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
new file mode 100644
index 0000000..26c60be
--- /dev/null
+++ b/doc/html/a00561.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>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="a00272.html">00047</a> <span class="keyword">class </span><a class="code" href="a00272.html">queuing_rw_mutex</a> {
+<a name="l00048"></a>00048 <span class="keyword">public</span>:
+<a name="l00050"></a><a class="code" href="a00272.html#85c90877c3447690ac4e2ac4ff8dea5e">00050</a>     <a class="code" href="a00272.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="a00272.html#1ba73e3d95cfdf8323880bc623af9099">00058</a>     <a class="code" href="a00272.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="a00273.html">00070</a>     <span class="keyword">class </span><a class="code" href="a00273.html">scoped_lock</a>: internal::no_copy {
+<a name="l00072"></a>00072         <span class="keywordtype">void</span> initialize() {
+<a name="l00073"></a>00073             <a class="code" href="a00258.html">mutex</a> = NULL;
+<a name="l00074"></a>00074 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00075"></a>00075 <span class="preprocessor"></span>            state = 0xFF; <span class="comment">// Set to invalid state</span>
+<a name="l00076"></a>00076             internal::poison_pointer(next);
+<a name="l00077"></a>00077             internal::poison_pointer(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="a00273.html#c62e365be7bcbba091c9ea7454a4d22c">00083</a>         <a class="code" href="a00273.html#c62e365be7bcbba091c9ea7454a4d22c">scoped_lock</a>() {initialize();}
+<a name="l00084"></a>00084 
+<a name="l00086"></a><a class="code" href="a00273.html#fbb8798792d3aebb136c46fc63d2529e">00086</a>         <a class="code" href="a00273.html#c62e365be7bcbba091c9ea7454a4d22c">scoped_lock</a>( <a class="code" href="a00272.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="a00273.html#a8dd5ab8686e76de21587544dbb681e0">acquire</a>(m,write);
+<a name="l00089"></a>00089         }
+<a name="l00090"></a>00090 
+<a name="l00092"></a><a class="code" href="a00273.html#32c7d67a660d23ebbaab1a1d2826d31a">00092</a>         <a class="code" href="a00273.html#32c7d67a660d23ebbaab1a1d2826d31a">~scoped_lock</a>() {
+<a name="l00093"></a>00093             <span class="keywordflow">if</span>( <a class="code" href="a00258.html">mutex</a> ) <a class="code" href="a00273.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="a00273.html#a8dd5ab8686e76de21587544dbb681e0">acquire</a>( <a class="code" href="a00272.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="a00273.html#2e4ff6c9ec2fee6682f95290d1f42baa">try_acquire</a>( <a class="code" href="a00272.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="a00273.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="a00273.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="a00273.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="a00272.html">queuing_rw_mutex</a>* <a class="code" href="a00258.html">mutex</a>;
+<a name="l00115"></a>00115 
+<a name="l00117"></a>00117         <a class="code" href="a00273.html">scoped_lock</a> * prev, * 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="a00216.html">atomic<state_t></a> 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> going;
+<a name="l00127"></a>00127 
+<a name="l00129"></a>00129         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> 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="a00216.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/a00562.html b/doc/html/a00562.html
new file mode 100644
index 0000000..738d3ed
--- /dev/null
+++ b/doc/html/a00562.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-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="a00274.html">00034</a>     <span class="keyword">class </span><a class="code" href="a00274.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="a00275.html">scoped_lock</a>;
+<a name="l00037"></a>00037     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00276.html">scoped_lock_read</a>;
+<a name="l00039"></a>00039 
+<a name="l00074"></a><a class="code" href="a00274.html#6f921f0d7c1812ceb5674418c8b6ccaf">00074</a>     <span class="keyword">enum</span> <a class="code" href="a00274.html#6f921f0d7c1812ceb5674418c8b6ccaf">status_t</a> { waiting_nonblocking, waiting, active, invalid };
+<a name="l00075"></a>00075 
+<a name="l00077"></a><a class="code" href="a00274.html#c1431c4293e777efd9aab9a95c2a46e1">00077</a>     <a class="code" href="a00274.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="a00274.html#5135f64f7b7339017f33d956445edbee">00082</a>     <a class="code" href="a00274.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="a00275.html">00089</a>     <span class="keyword">class </span><a class="code" href="a00275.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="a00274.html">reader_writer_lock</a>;
+<a name="l00092"></a>00092  
+<a name="l00094"></a><a class="code" href="a00275.html#cf19f20e082887c1bb0ba6b0911c3583">00094</a>         <a class="code" href="a00275.html">scoped_lock</a>(<a class="code" href="a00274.html">reader_writer_lock</a>& <a class="code" href="a00274.html#2653d1a2d560059a51219a8ceab3ade9">lock</a>) {
+<a name="l00095"></a>00095             internal_construct(<a class="code" href="a00274.html#2653d1a2d560059a51219a8ceab3ade9">lock</a>);
+<a name="l00096"></a>00096         }
+<a name="l00097"></a>00097         
+<a name="l00099"></a><a class="code" href="a00275.html#70246e0260493625ff956fa5926fc71f">00099</a>         <a class="code" href="a00275.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="a00274.html">reader_writer_lock</a> *<a class="code" href="a00258.html">mutex</a>;
+<a name="l00114"></a>00114         scoped_lock* next;
+<a name="l00116"></a>00116         <a class="code" href="a00216.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="a00274.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="a00276.html">00126</a>     <span class="keyword">class </span><a class="code" href="a00276.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="a00274.html">reader_writer_lock</a>;
+<a name="l00129"></a>00129 
+<a name="l00131"></a><a class="code" href="a00276.html#87ab0dc8f7216e6ba0f7acd6aec33064">00131</a>         <a class="code" href="a00276.html">scoped_lock_read</a>(<a class="code" href="a00274.html">reader_writer_lock</a>& <a class="code" href="a00274.html#2653d1a2d560059a51219a8ceab3ade9">lock</a>) {
+<a name="l00132"></a>00132             internal_construct(<a class="code" href="a00274.html#2653d1a2d560059a51219a8ceab3ade9">lock</a>);
+<a name="l00133"></a>00133         }
+<a name="l00134"></a>00134 
+<a name="l00136"></a><a class="code" href="a00276.html#bd21c5f3d555d64d1de8658e15bf4966">00136</a>         <a class="code" href="a00276.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="a00274.html">reader_writer_lock</a> *<a class="code" href="a00258.html">mutex</a>;
+<a name="l00151"></a>00151         scoped_lock_read *next;
+<a name="l00153"></a>00153         <a class="code" href="a00216.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="a00274.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="a00274.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="a00274.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="a00274.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="a00274.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="a00274.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/a00563.html b/doc/html/a00563.html
new file mode 100644
index 0000000..bf595a7
--- /dev/null
+++ b/doc/html/a00563.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-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="a00278.html">00039</a> <span class="keyword">class </span><a class="code" href="a00278.html">recursive_mutex</a> {
+<a name="l00040"></a>00040 <span class="keyword">public</span>:
+<a name="l00042"></a><a class="code" href="a00278.html#d2fceb7f95c24a8cd1457d4527e4b8c6">00042</a>     <a class="code" href="a00278.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="a00278.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="a00279.html">00083</a>     <span class="keyword">class </span><a class="code" href="a00279.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="a00279.html#d82d4d36fbf9727a493d26ae50855fe7">00086</a>         <a class="code" href="a00279.html#d82d4d36fbf9727a493d26ae50855fe7">scoped_lock</a>() : my_mutex(NULL) {};
+<a name="l00087"></a>00087 
+<a name="l00089"></a><a class="code" href="a00279.html#dec17713c4c1321ac8fec66816d0c602">00089</a>         <a class="code" href="a00279.html#d82d4d36fbf9727a493d26ae50855fe7">scoped_lock</a>( <a class="code" href="a00278.html">recursive_mutex</a>& <a class="code" href="a00258.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="a00279.html#7fb04da37cccf8c99b1f9102d9074f9a">acquire</a>( mutex );
+<a name="l00094"></a>00094         }
+<a name="l00095"></a>00095 
+<a name="l00097"></a><a class="code" href="a00279.html#c1197ffb8f3cd9d4fed71d7e06265b7c">00097</a>         <a class="code" href="a00279.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="a00279.html#ac480ea0e9d5ea0345a67d57008b6263">release</a>();
+<a name="l00100"></a>00100         }
+<a name="l00101"></a>00101 
+<a name="l00103"></a><a class="code" href="a00279.html#7fb04da37cccf8c99b1f9102d9074f9a">00103</a>         <span class="keywordtype">void</span> <a class="code" href="a00279.html#7fb04da37cccf8c99b1f9102d9074f9a">acquire</a>( <a class="code" href="a00278.html">recursive_mutex</a>& <a class="code" href="a00258.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="a00278.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="a00279.html#36bfc3e93e3ef6340abef4901444d340">00113</a>         <span class="keywordtype">bool</span> <a class="code" href="a00279.html#36bfc3e93e3ef6340abef4901444d340">try_acquire</a>( <a class="code" href="a00278.html">recursive_mutex</a>& <a class="code" href="a00258.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="a00278.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="a00279.html#ac480ea0e9d5ea0345a67d57008b6263">00125</a>         <span class="keywordtype">void</span> <a class="code" href="a00279.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="a00278.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="a00278.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="a00278.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="a00278.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="a00278.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="a00278.html#4c342c69d47f4bb0b393535dee4015d6">00158</a>     <span class="keywordtype">void</span> <a class="code" href="a00278.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="a00215.html">aligned_space<scoped_lock,1></a> tmp;
+<a name="l00161"></a>00161         <span class="keyword">new</span>(tmp.<a class="code" href="a00215.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00279.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="a00278.html#86e719b0afee25704af11ab97694d240">00173</a>     <span class="keywordtype">bool</span> <a class="code" href="a00278.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="a00215.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="a00215.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00279.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="a00278.html#f0a96e26b7f074588dc31e32524856ae">00187</a>     <span class="keywordtype">void</span> <a class="code" href="a00278.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="a00215.html">aligned_space<scoped_lock,1></a> tmp;
+<a name="l00190"></a>00190         <a class="code" href="a00279.html">scoped_lock</a>& s = *tmp.<a class="code" href="a00215.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>();
+<a name="l00191"></a>00191         s.<a class="code" href="a00279.html#3efd10a49e2435ea5215b49907f93ba2">my_mutex</a> = <span class="keyword">this</span>;
+<a name="l00192"></a>00192         s.<a class="code" href="a00279.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="a00278.html#889fa8cc32dd707eef7c0f52dda09c0d">00204</a> <span class="preprocessor"></span>    <span class="keyword">typedef</span> LPCRITICAL_SECTION <a class="code" href="a00278.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="a00278.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="a00278.html#889fa8cc32dd707eef7c0f52dda09c0d">native_handle_type</a> native_handle() { <span class="keywordflow">return</span> (<a class="code" href="a00278.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/a00564.html b/doc/html/a00564.html
new file mode 100644
index 0000000..2401ba2
--- /dev/null
+++ b/doc/html/a00564.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>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>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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</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>
+<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_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="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 
+<a name="l00027"></a>00027 <span class="preprocessor">#if !defined(__cplusplus) && __ICC==1100</span>
+<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (push)</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 991)</span>
+<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00031"></a>00031 <span class="preprocessor"></span>
+<a name="l00032"></a>00032 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {
+<a name="l00034"></a>00034 <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span>
+<a name="l00035"></a>00035 
+<a name="l00036"></a>00036 <span class="preprocessor">#if _MSC_VER >= 1400</span>
+<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXPORTED_FUNC   __cdecl</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXPORTED_FUNC</span>
+<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00041"></a>00041 <span class="preprocessor"></span>
+<a name="l00044"></a>00044 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00373.html#gc25b8e6c76db0b346a8249796a7a2475">scalable_malloc</a> (size_t size);
+<a name="l00045"></a>00045 
+<a name="l00048"></a>00048 <span class="keywordtype">void</span>   __TBB_EXPORTED_FUNC <a class="code" href="a00373.html#gca3579c21244dba9f0c351e5984d4565">scalable_free</a> (<span class="keywordtype">void</span>* ptr);
+<a name="l00049"></a>00049 
+<a name="l00052"></a>00052 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00373.html#g951bbbbd2d041acb59ba5fa910b52543">scalable_realloc</a> (<span class="keywordtype">void</span>* ptr, size_t size);
+<a name="l00053"></a>00053 
+<a name="l00056"></a>00056 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00373.html#g3f5a2fde0bcaa3eda35be32c8658f444">scalable_calloc</a> (size_t nobj, size_t size);
+<a name="l00057"></a>00057 
+<a name="l00060"></a>00060 <span class="keywordtype">int</span> __TBB_EXPORTED_FUNC <a class="code" href="a00373.html#g05dcec987480bb2c82ecdead6a085899">scalable_posix_memalign</a> (<span class="keywordtype">void</span>** memptr, size_t alignment, size_t size);
+<a name="l00061"></a>00061 
+<a name="l00064"></a>00064 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00373.html#gc1c7aaa1fe85c17ba5a3a96f7e8d89e7">scalable_aligned_malloc</a> (size_t size, size_t alignment);
+<a name="l00065"></a>00065 
+<a name="l00068"></a>00068 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00373.html#gbaea91376be80dfabd7c93eaffd9abaa">scalable_aligned_realloc</a> (<span class="keywordtype">void</span>* ptr, size_t size, size_t alignment);
+<a name="l00069"></a>00069 
+<a name="l00072"></a>00072 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC <a class="code" href="a00373.html#g65a20e812012f15ec7442d5b45d0cba5">scalable_aligned_free</a> (<span class="keywordtype">void</span>* ptr);
+<a name="l00073"></a>00073 
+<a name="l00078"></a>00078 size_t __TBB_EXPORTED_FUNC <a class="code" href="a00373.html#g0965ce1b4b7835f92869c7fd867265f7">scalable_msize</a> (<span class="keywordtype">void</span>* ptr);
+<a name="l00079"></a>00079 
+<a name="l00080"></a>00080 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00081"></a>00081 <span class="preprocessor"></span>} <span class="comment">/* extern "C" */</span>
+<a name="l00082"></a>00082 <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span>
+<a name="l00083"></a>00083 
+<a name="l00084"></a>00084 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00085"></a>00085 <span class="preprocessor"></span>
+<a name="l00086"></a>00086 <span class="preprocessor">#include <new></span>      <span class="comment">/* To use new with the placement argument */</span>
+<a name="l00087"></a>00087 
+<a name="l00088"></a>00088 <span class="comment">/* Ensure that including this header does not cause implicit linkage with TBB */</span>
+<a name="l00089"></a>00089 <span class="preprocessor">#ifndef __TBB_NO_IMPLICIT_LINKAGE</span>
+<a name="l00090"></a>00090 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_NO_IMPLICIT_LINKAGE 1</span>
+<a name="l00091"></a>00091 <span class="preprocessor"></span><span class="preprocessor">    #include "tbb_stddef.h"</span>
+<a name="l00092"></a>00092 <span class="preprocessor">    #undef  __TBB_NO_IMPLICIT_LINKAGE</span>
+<a name="l00093"></a>00093 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00094"></a>00094 <span class="preprocessor"></span><span class="preprocessor">    #include "tbb_stddef.h"</span>
+<a name="l00095"></a>00095 <span class="preprocessor">#endif</span>
+<a name="l00096"></a>00096 <span class="preprocessor"></span>
+<a name="l00097"></a>00097 
+<a name="l00098"></a>00098 <span class="keyword">namespace </span>tbb {
+<a name="l00099"></a>00099 
+<a name="l00100"></a>00100 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
+<a name="l00101"></a>00101 <span class="preprocessor"></span>    <span class="comment">// Workaround for erroneous "unreferenced parameter" warning in method destroy.</span>
+<a name="l00102"></a>00102 <span class="preprocessor">    #pragma warning (push)</span>
+<a name="l00103"></a>00103 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4100)</span>
+<a name="l00104"></a>00104 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00105"></a>00105 <span class="preprocessor"></span>
+<a name="l00107"></a>00107 
+<a name="l00110"></a>00110 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00111"></a><a class="code" href="a00280.html">00111</a> <span class="keyword">class </span><a class="code" href="a00280.html">scalable_allocator</a> {
+<a name="l00112"></a>00112 <span class="keyword">public</span>:
+<a name="l00113"></a>00113     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::allocator_type<T>::value_type value_type;
+<a name="l00114"></a>00114     <span class="keyword">typedef</span> value_type* pointer;
+<a name="l00115"></a>00115     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type* const_pointer;
+<a name="l00116"></a>00116     <span class="keyword">typedef</span> value_type& reference;
+<a name="l00117"></a>00117     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type& const_reference;
+<a name="l00118"></a>00118     <span class="keyword">typedef</span> size_t size_type;
+<a name="l00119"></a>00119     <span class="keyword">typedef</span> ptrdiff_t difference_type;
+<a name="l00120"></a>00120     <span class="keyword">template</span><<span class="keyword">class</span> U> <span class="keyword">struct </span>rebind {
+<a name="l00121"></a>00121         <span class="keyword">typedef</span> <a class="code" href="a00280.html">scalable_allocator<U></a> other;
+<a name="l00122"></a>00122     };
+<a name="l00123"></a>00123 
+<a name="l00124"></a>00124     <a class="code" href="a00280.html">scalable_allocator</a>() <span class="keywordflow">throw</span>() {}
+<a name="l00125"></a>00125     <a class="code" href="a00280.html">scalable_allocator</a>( <span class="keyword">const</span> <a class="code" href="a00280.html">scalable_allocator</a>& ) <span class="keywordflow">throw</span>() {}
+<a name="l00126"></a>00126     <span class="keyword">template</span><<span class="keyword">typename</span> U> <a class="code" href="a00280.html">scalable_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00280.html">scalable_allocator<U></a>&) <span class="keywordflow">throw</span>() {}
+<a name="l00127"></a>00127 
+<a name="l00128"></a>00128     pointer address(reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &x;}
+<a name="l00129"></a>00129     const_pointer address(const_reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &x;}
+<a name="l00130"></a>00130 
+<a name="l00132"></a><a class="code" href="a00280.html#726b1586d05d44665a36e1c7b2699bfd">00132</a>     pointer <a class="code" href="a00280.html#726b1586d05d44665a36e1c7b2699bfd">allocate</a>( size_type n, <span class="keyword">const</span> <span class="keywordtype">void</span>* <span class="comment">/*hint*/</span> =0 ) {
+<a name="l00133"></a>00133         <span class="keywordflow">return</span> static_cast<pointer>( <a class="code" href="a00373.html#gc25b8e6c76db0b346a8249796a7a2475">scalable_malloc</a>( n * <span class="keyword">sizeof</span>(value_type) ) );
+<a name="l00134"></a>00134     }
+<a name="l00135"></a>00135 
+<a name="l00137"></a><a class="code" href="a00280.html#f806a238c18cbcfb531e1e0a0d2ec59d">00137</a>     <span class="keywordtype">void</span> <a class="code" href="a00280.html#f806a238c18cbcfb531e1e0a0d2ec59d">deallocate</a>( pointer p, size_type ) {
+<a name="l00138"></a>00138         <a class="code" href="a00373.html#gca3579c21244dba9f0c351e5984d4565">scalable_free</a>( p );
+<a name="l00139"></a>00139     }
+<a name="l00140"></a>00140 
+<a name="l00142"></a><a class="code" href="a00280.html#880e766f1d913988c21973dbdd874fd5">00142</a>     size_type <a class="code" href="a00280.html#880e766f1d913988c21973dbdd874fd5">max_size</a>() const throw() {
+<a name="l00143"></a>00143         size_type absolutemax = static_cast<size_type>(-1) / <span class="keyword">sizeof</span> (value_type);
+<a name="l00144"></a>00144         <span class="keywordflow">return</span> (absolutemax > 0 ? absolutemax : 1);
+<a name="l00145"></a>00145     }
+<a name="l00146"></a>00146     <span class="keywordtype">void</span> construct( pointer p, <span class="keyword">const</span> value_type& value ) {::new((<span class="keywordtype">void</span>*)(p)) value_type(value);}
+<a name="l00147"></a>00147     <span class="keywordtype">void</span> destroy( pointer p ) {p->~value_type();}
+<a name="l00148"></a>00148 };
+<a name="l00149"></a>00149 
+<a name="l00150"></a>00150 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
+<a name="l00151"></a>00151 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
+<a name="l00152"></a>00152 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4100 is back</span>
+<a name="l00153"></a>00153 <span class="preprocessor"></span>
+<a name="l00155"></a>00155 
+<a name="l00156"></a>00156 <span class="keyword">template</span><>
+<a name="l00157"></a><a class="code" href="a00281.html">00157</a> <span class="keyword">class </span><a class="code" href="a00280.html">scalable_allocator</a><void> {
+<a name="l00158"></a>00158 <span class="keyword">public</span>:
+<a name="l00159"></a>00159     <span class="keyword">typedef</span> <span class="keywordtype">void</span>* pointer;
+<a name="l00160"></a>00160     <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keywordtype">void</span>* const_pointer;
+<a name="l00161"></a>00161     <span class="keyword">typedef</span> <span class="keywordtype">void</span> value_type;
+<a name="l00162"></a>00162     <span class="keyword">template</span><<span class="keyword">class</span> U> <span class="keyword">struct </span>rebind {
+<a name="l00163"></a>00163         <span class="keyword">typedef</span> <a class="code" href="a00280.html">scalable_allocator<U></a> other;
+<a name="l00164"></a>00164     };
+<a name="l00165"></a>00165 };
+<a name="l00166"></a>00166 
+<a name="l00167"></a>00167 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00168"></a>00168 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00280.html">scalable_allocator<T></a>&, <span class="keyword">const</span> <a class="code" href="a00280.html">scalable_allocator<U></a>& ) {<span class="keywordflow">return</span> <span class="keyword">true</span>;}
+<a name="l00169"></a>00169 
+<a name="l00170"></a>00170 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00171"></a>00171 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> scalable_allocator<T>&, <span class="keyword">const</span> scalable_allocator<U>& ) {<span class="keywordflow">return</span> <span class="keyword">false</span>;}
+<a name="l00172"></a>00172 
+<a name="l00173"></a>00173 } <span class="comment">// namespace tbb</span>
+<a name="l00174"></a>00174 
+<a name="l00175"></a>00175 <span class="preprocessor">#if _MSC_VER</span>
+<a name="l00176"></a>00176 <span class="preprocessor"></span><span class="preprocessor">    #if __TBB_BUILD && !defined(__TBBMALLOC_NO_IMPLICIT_LINKAGE)</span>
+<a name="l00177"></a>00177 <span class="preprocessor"></span><span class="preprocessor">        #define __TBBMALLOC_NO_IMPLICIT_LINKAGE 1</span>
+<a name="l00178"></a>00178 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
+<a name="l00179"></a>00179 <span class="preprocessor"></span>
+<a name="l00180"></a>00180 <span class="preprocessor">    #if !__TBBMALLOC_NO_IMPLICIT_LINKAGE</span>
+<a name="l00181"></a>00181 <span class="preprocessor"></span><span class="preprocessor">        #ifdef _DEBUG</span>
+<a name="l00182"></a>00182 <span class="preprocessor"></span><span class="preprocessor">            #pragma comment(lib, "tbbmalloc_debug.lib")</span>
+<a name="l00183"></a>00183 <span class="preprocessor"></span><span class="preprocessor">        #else</span>
+<a name="l00184"></a>00184 <span class="preprocessor"></span><span class="preprocessor">            #pragma comment(lib, "tbbmalloc.lib")</span>
+<a name="l00185"></a>00185 <span class="preprocessor"></span><span class="preprocessor">        #endif</span>
+<a name="l00186"></a>00186 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
+<a name="l00187"></a>00187 <span class="preprocessor"></span>
+<a name="l00188"></a>00188 
+<a name="l00189"></a>00189 <span class="preprocessor">#endif</span>
+<a name="l00190"></a>00190 <span class="preprocessor"></span>
+<a name="l00191"></a>00191 <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span>
+<a name="l00192"></a>00192 
+<a name="l00193"></a>00193 <span class="preprocessor">#if !defined(__cplusplus) && __ICC==1100</span>
+<a name="l00194"></a>00194 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
+<a name="l00195"></a>00195 <span class="preprocessor"></span><span class="preprocessor">#endif // ICC 11.0 warning 991 is back</span>
+<a name="l00196"></a>00196 <span class="preprocessor"></span>
+<a name="l00197"></a>00197 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_scalable_allocator_H */</span>
+</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/a00565.html b/doc/html/a00565.html
new file mode 100644
index 0000000..c26624c
--- /dev/null
+++ b/doc/html/a00565.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-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="a00286.html">00039</a> <span class="keyword">class </span><a class="code" href="a00286.html">spin_mutex</a> {
+<a name="l00041"></a>00041     __TBB_Byte 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="a00286.html#3d8fb44644fd8d41ada1fbeba7409be3">00046</a>     <a class="code" href="a00286.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="a00287.html">00053</a>     <span class="keyword">class </span><a class="code" href="a00287.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="a00286.html">spin_mutex</a>* my_mutex; 
+<a name="l00057"></a>00057 
+<a name="l00059"></a>00059         uintptr_t 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="a00286.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="a00286.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="a00286.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="a00287.html#29ae680ae7f5e685c2e15535b9c855b3">00074</a>         <a class="code" href="a00287.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="a00287.html#5ce6807050a9e8f87bcb4a65dccb12ef">00077</a>         <a class="code" href="a00287.html#29ae680ae7f5e685c2e15535b9c855b3">scoped_lock</a>( <a class="code" href="a00286.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="a00286.html#6e46896ee0f1e342d5505deece72af66">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="a00287.html#3ee3c338732b1f64b0b32a757807a30d">00088</a>         <span class="keywordtype">void</span> <a class="code" href="a00287.html#3ee3c338732b1f64b0b32a757807a30d">acquire</a>( <a class="code" href="a00286.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="a00286.html#6e46896ee0f1e342d5505deece72af66">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="a00287.html#9297ec188534b45dc0ca48f2f39a0501">00099</a>         <span class="keywordtype">bool</span> <a class="code" href="a00287.html#9297ec188534b45dc0ca48f2f39a0501">try_acquire</a>( <a class="code" href="a00286.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="a00286.html#6e46896ee0f1e342d5505deece72af66">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="a00287.html#eeb615e68e963e6bf8d9c11402d0ce8e">00113</a>         <span class="keywordtype">void</span> <a class="code" href="a00287.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="a00286.html#6e46896ee0f1e342d5505deece72af66">flag</a>, static_cast<__TBB_Byte>(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="a00287.html#ac6fa425d1f06c56d8b70abc51aac844">00123</a>         <a class="code" href="a00287.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="a00286.html#6e46896ee0f1e342d5505deece72af66">flag</a>, static_cast<__TBB_Byte>(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="a00286.html#4f748989e19b6045e3a2d2ee73626a28">00144</a>     <span class="keywordtype">void</span> <a class="code" href="a00286.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="a00215.html">aligned_space<scoped_lock,1></a> tmp;
+<a name="l00147"></a>00147         <span class="keyword">new</span>(tmp.<a class="code" href="a00215.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00287.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="a00286.html#8f9a58fb56a2b4c5efe1a7f7c1ae2074">00155</a>     <span class="keywordtype">bool</span> <a class="code" href="a00286.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="a00215.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="a00215.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00287.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="a00286.html#0e843ee6265f57f27d228ba91e7308ef">00165</a>     <span class="keywordtype">void</span> <a class="code" href="a00286.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="a00215.html">aligned_space<scoped_lock,1></a> tmp;
+<a name="l00168"></a>00168         <a class="code" href="a00287.html">scoped_lock</a>& s = *tmp.<a class="code" href="a00215.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>();
+<a name="l00169"></a>00169         s.<a class="code" href="a00287.html#d968921bed018503214f36e09007ee7b">my_mutex</a> = <span class="keyword">this</span>;
+<a name="l00170"></a>00170         s.<a class="code" href="a00287.html#43a6f8977cd1ed2752f417f3ad9fc4af">my_unlock_value</a> = 0;
+<a name="l00171"></a>00171         s.<a class="code" href="a00287.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
new file mode 100644
index 0000000..f3fe59d
--- /dev/null
+++ b/doc/html/a00566.html
@@ -0,0 +1,217 @@
+<!DOCTYPE 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="a00288.html">00035</a> <span class="keyword">class </span><a class="code" href="a00288.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="a00288.html#61332b2756de89f3f5f69310cbb6e70c">00067</a>     <a class="code" href="a00288.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="a00288.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="a00289.html">00083</a>     <span class="keyword">class </span><a class="code" href="a00289.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="a00289.html#d6ea60dee5563f702379bf5e51aa8806">00087</a>         <a class="code" href="a00289.html">scoped_lock</a>() : <a class="code" href="a00258.html">mutex</a>(NULL), is_writer(false) {}
+<a name="l00088"></a>00088 
+<a name="l00090"></a><a class="code" href="a00289.html#42a92d4f8fdde425b111cfa8a9228071">00090</a>         <a class="code" href="a00289.html">scoped_lock</a>( <a class="code" href="a00288.html">spin_rw_mutex</a>& m, <span class="keywordtype">bool</span> write = <span class="keyword">true</span> ) : <a class="code" href="a00258.html">mutex</a>(NULL) {
+<a name="l00091"></a>00091             <a class="code" href="a00362.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>(m, write);
+<a name="l00092"></a>00092         }
+<a name="l00093"></a>00093 
+<a name="l00095"></a><a class="code" href="a00289.html#d7eaaa3f2e2c5dc11e7005811b1bdd04">00095</a>         <a class="code" href="a00275.html#70246e0260493625ff956fa5926fc71f">~scoped_lock</a>() {
+<a name="l00096"></a>00096             <span class="keywordflow">if</span>( <a class="code" href="a00258.html">mutex</a> ) <a class="code" href="a00362.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>();
+<a name="l00097"></a>00097         }
+<a name="l00098"></a>00098 
+<a name="l00100"></a><a class="code" href="a00289.html#b0b646ec5be02a127d159bbb7ca65353">00100</a>         <span class="keywordtype">void</span> <a class="code" href="a00362.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>( <a class="code" href="a00288.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="a00258.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="a00258.html">mutex</a> = &m;
+<a name="l00104"></a>00104             <span class="keywordflow">if</span>( write ) <a class="code" href="a00258.html">mutex</a>->internal_acquire_writer();
+<a name="l00105"></a>00105             <span class="keywordflow">else</span>        <a class="code" href="a00258.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="a00289.html#3f0b1e3f2efab63336400348bd070226">00110</a>         <span class="keywordtype">bool</span> upgrade_to_writer() {
+<a name="l00111"></a>00111             __TBB_ASSERT( <a class="code" href="a00258.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="a00258.html">mutex</a>->internal_upgrade();
+<a name="l00115"></a>00115         }
+<a name="l00116"></a>00116 
+<a name="l00118"></a><a class="code" href="a00289.html#61b14d00a78185c9b2d206ebfc379124">00118</a>         <span class="keywordtype">void</span> <a class="code" href="a00362.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>() {
+<a name="l00119"></a>00119             __TBB_ASSERT( <a class="code" href="a00258.html">mutex</a>, <span class="stringliteral">"lock is not acquired"</span> );
+<a name="l00120"></a>00120             <a class="code" href="a00288.html">spin_rw_mutex</a> *m = <a class="code" href="a00258.html">mutex</a>; 
+<a name="l00121"></a>00121             <a class="code" href="a00258.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="a00288.html#621b900d5fef23d2e401aabcbb777c76">state</a>, READERS ); 
+<a name="l00127"></a>00127             <span class="keywordflow">else</span>            __TBB_FetchAndAddWrelease( &m-><a class="code" href="a00288.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="a00289.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="a00258.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="a00258.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="a00258.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="a00289.html#9879626968d9b9a04cd2ec0fb2e84ae1">00146</a>         <span class="keywordtype">bool</span> try_acquire( <a class="code" href="a00288.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="a00258.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="a00258.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="a00289.html#d96d1a1fcc3d79ef3e5c06a53b8ffeaa">00159</a>         <a class="code" href="a00288.html">spin_rw_mutex</a>* <a class="code" href="a00258.html">mutex</a>;
+<a name="l00160"></a>00160 
+<a name="l00162"></a>00162 
+<a name="l00163"></a><a class="code" href="a00289.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="a00288.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="a00288.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="a00288.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="a00288.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="a00288.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
new file mode 100644
index 0000000..d15aefb
--- /dev/null
+++ b/doc/html/a00567.html
@@ -0,0 +1,726 @@
+<!DOCTYPE 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-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_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="a00292.html">00069</a>         <span class="keyword">class </span><a class="code" href="a00292.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="a00291.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="a00291.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="a00294.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="a00291.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="a00291.html#dfaacf92685e5f86393bf657b2853bf8">destroy</a>( <a class="code" href="a00291.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="a00291.html">task</a>& first, <a class="code" href="a00291.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="a00291.html">task</a>& parent, <a class="code" href="a00291.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="a00291.html">task</a>& first, <a class="code" href="a00291.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="a00291.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="l00166"></a>00166     <span class="keyword">class </span>task_prefix {
+<a name="l00167"></a>00167     <span class="keyword">private</span>:
+<a name="l00168"></a>00168         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00291.html">tbb::task</a>;
+<a name="l00169"></a>00169         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00292.html">tbb::interface5::internal::task_base</a>;
+<a name="l00170"></a>00170         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00294.html">tbb::task_list</a>;
+<a name="l00171"></a>00171         <span class="keyword">friend</span> <span class="keyword">class </span>internal::scheduler;
+<a name="l00172"></a>00172         <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_root_proxy;
+<a name="l00173"></a>00173         <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_child_proxy;
+<a name="l00174"></a>00174         <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_continuation_proxy;
+<a name="l00175"></a>00175         <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_additional_child_of_proxy;
+<a name="l00176"></a>00176 
+<a name="l00177"></a>00177 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00179"></a>00179 <span class="preprocessor"></span>
+<a name="l00182"></a>00182 <span class="preprocessor">        task_group_context  *context;</span>
+<a name="l00183"></a>00183 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00184"></a>00184         
+<a name="l00186"></a>00186 
+<a name="l00191"></a>00191         scheduler* origin;
+<a name="l00192"></a>00192 
+<a name="l00193"></a>00193 <span class="preprocessor">#if TBB_PREVIEW_TASK_PRIORITY</span>
+<a name="l00194"></a>00194 <span class="preprocessor"></span>        <span class="keyword">union </span>{
+<a name="l00195"></a>00195 <span class="preprocessor">#endif </span><span class="comment">/* TBB_PREVIEW_TASK_PRIORITY */</span>
+<a name="l00197"></a>00197 
+<a name="l00199"></a>00199         scheduler* owner;
+<a name="l00200"></a>00200 
+<a name="l00201"></a>00201 <span class="preprocessor">#if TBB_PREVIEW_TASK_PRIORITY</span>
+<a name="l00203"></a>00203 <span class="preprocessor"></span>
+<a name="l00204"></a>00204 <span class="preprocessor">        task* next_offloaded;</span>
+<a name="l00205"></a>00205 <span class="preprocessor"></span>        };
+<a name="l00206"></a>00206 <span class="preprocessor">#endif </span><span class="comment">/* TBB_PREVIEW_TASK_PRIORITY */</span>
+<a name="l00207"></a>00207 
+<a name="l00209"></a>00209 
+<a name="l00212"></a>00212         <a class="code" href="a00291.html">tbb::task</a>* parent;
+<a name="l00213"></a>00213 
+<a name="l00215"></a>00215 
+<a name="l00219"></a>00219         reference_count ref_count;
+<a name="l00220"></a>00220 
+<a name="l00222"></a>00222 
+<a name="l00224"></a>00224         <span class="keywordtype">int</span> depth;
+<a name="l00225"></a>00225 
+<a name="l00227"></a>00227 
+<a name="l00228"></a>00228         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> state;
+<a name="l00229"></a>00229 
+<a name="l00231"></a>00231 
+<a name="l00236"></a>00236         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> extra_state;
+<a name="l00237"></a>00237 
+<a name="l00238"></a>00238         affinity_id affinity;
+<a name="l00239"></a>00239 
+<a name="l00241"></a>00241         <a class="code" href="a00291.html">tbb::task</a>* next;
+<a name="l00242"></a>00242 
+<a name="l00244"></a>00244         <a class="code" href="a00291.html">tbb::task</a>& task() {<span class="keywordflow">return</span> *reinterpret_cast<tbb::task*>(<span class="keyword">this</span>+1);}
+<a name="l00245"></a>00245     };
+<a name="l00246"></a>00246 
+<a name="l00247"></a>00247 } <span class="comment">// namespace internal</span>
+<a name="l00249"></a>00249 <span class="comment"></span>
+<a name="l00250"></a>00250 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00251"></a>00251 <span class="preprocessor"></span>
+<a name="l00252"></a>00252 <span class="preprocessor">#if TBB_PREVIEW_TASK_PRIORITY</span>
+<a name="l00253"></a>00253 <span class="preprocessor"></span><span class="keyword">namespace </span>internal {
+<a name="l00254"></a>00254     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> priority_stride_v4 = INT_MAX / 4;
+<a name="l00255"></a>00255 }
+<a name="l00256"></a>00256 
+<a name="l00257"></a>00257 <span class="keyword">enum</span> priority_t {
+<a name="l00258"></a>00258     priority_normal = internal::priority_stride_v4 * 2,
+<a name="l00259"></a>00259     priority_low = priority_normal - internal::priority_stride_v4,
+<a name="l00260"></a>00260     priority_high = priority_normal + internal::priority_stride_v4
+<a name="l00261"></a>00261 };
+<a name="l00262"></a>00262 
+<a name="l00263"></a>00263 <span class="preprocessor">#endif </span><span class="comment">/* TBB_PREVIEW_TASK_PRIORITY */</span>
+<a name="l00264"></a>00264 
+<a name="l00265"></a>00265 <span class="preprocessor">#if TBB_USE_CAPTURED_EXCEPTION</span>
+<a name="l00266"></a>00266 <span class="preprocessor"></span>    <span class="keyword">class </span>tbb_exception;
+<a name="l00267"></a>00267 <span class="preprocessor">#else</span>
+<a name="l00268"></a>00268 <span class="preprocessor"></span>    <span class="keyword">namespace </span>internal {
+<a name="l00269"></a>00269         <span class="keyword">class </span>tbb_exception_ptr;
+<a name="l00270"></a>00270     }
+<a name="l00271"></a>00271 <span class="preprocessor">#endif </span><span class="comment">/* !TBB_USE_CAPTURED_EXCEPTION */</span>
+<a name="l00272"></a>00272 
+<a name="l00273"></a>00273 <span class="keyword">class </span>task_scheduler_init;
+<a name="l00274"></a>00274 
+<a name="l00276"></a>00276 
+<a name="l00296"></a><a class="code" href="a00293.html">00296</a> <span class="keyword">class </span><a class="code" href="a00293.html">task_group_context</a> : internal::no_copy {
+<a name="l00297"></a>00297 <span class="keyword">private</span>:
+<a name="l00298"></a>00298     <span class="keyword">friend</span> <span class="keyword">class </span>internal::generic_scheduler;
+<a name="l00299"></a>00299     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00295.html">task_scheduler_init</a>;
+<a name="l00300"></a>00300 
+<a name="l00301"></a>00301 <span class="preprocessor">#if TBB_USE_CAPTURED_EXCEPTION</span>
+<a name="l00302"></a>00302 <span class="preprocessor"></span>    <span class="keyword">typedef</span> <a class="code" href="a00298.html">tbb_exception</a> <a class="code" href="a00298.html">exception_container_type</a>;
+<a name="l00303"></a>00303 <span class="preprocessor">#else</span>
+<a name="l00304"></a>00304 <span class="preprocessor"></span>    <span class="keyword">typedef</span> <a class="code" href="a00299.html">internal::tbb_exception_ptr</a> <a class="code" href="a00298.html">exception_container_type</a>;
+<a name="l00305"></a>00305 <span class="preprocessor">#endif</span>
+<a name="l00306"></a>00306 <span class="preprocessor"></span>
+<a name="l00307"></a>00307     <span class="keyword">enum</span> version_traits_word_layout {
+<a name="l00308"></a>00308         traits_offset = 16,
+<a name="l00309"></a>00309         version_mask = 0xFFFF,
+<a name="l00310"></a>00310         traits_mask = 0xFFFFul << traits_offset
+<a name="l00311"></a>00311     };
+<a name="l00312"></a>00312 
+<a name="l00313"></a>00313 <span class="keyword">public</span>:
+<a name="l00314"></a>00314     <span class="keyword">enum</span> kind_type {
+<a name="l00315"></a>00315         isolated,
+<a name="l00316"></a>00316         bound
+<a name="l00317"></a>00317     };
+<a name="l00318"></a>00318 
+<a name="l00319"></a>00319     <span class="keyword">enum</span> traits_type {
+<a name="l00320"></a>00320         exact_exception = 0x0001ul << traits_offset,
+<a name="l00321"></a>00321         concurrent_wait = 0x0004ul << traits_offset,
+<a name="l00322"></a>00322 <span class="preprocessor">#if TBB_USE_CAPTURED_EXCEPTION</span>
+<a name="l00323"></a>00323 <span class="preprocessor"></span>        default_traits = 0
+<a name="l00324"></a>00324 <span class="preprocessor">#else</span>
+<a name="l00325"></a>00325 <span class="preprocessor"></span>        default_traits = exact_exception
+<a name="l00326"></a>00326 <span class="preprocessor">#endif </span><span class="comment">/* !TBB_USE_CAPTURED_EXCEPTION */</span>
+<a name="l00327"></a>00327     };
+<a name="l00328"></a>00328 
+<a name="l00329"></a>00329 <span class="keyword">private</span>:
+<a name="l00330"></a>00330     <span class="keyword">enum</span> state {
+<a name="l00331"></a>00331         may_have_children = 1
+<a name="l00332"></a>00332     };
+<a name="l00333"></a>00333 
+<a name="l00334"></a>00334     <span class="keyword">union </span>{
+<a name="l00336"></a>00336         kind_type my_kind;
+<a name="l00337"></a>00337         uintptr_t _my_kind_aligner;
+<a name="l00338"></a>00338     };
+<a name="l00339"></a>00339 
+<a name="l00341"></a>00341     <a class="code" href="a00293.html">task_group_context</a> *my_parent;
+<a name="l00342"></a>00342 
+<a name="l00344"></a>00344 
+<a name="l00346"></a>00346     internal::context_list_node_t my_node;
+<a name="l00347"></a>00347 
+<a name="l00349"></a>00349     __itt_caller itt_caller;
+<a name="l00350"></a>00350 
+<a name="l00352"></a>00352 
+<a name="l00355"></a>00355     <span class="keywordtype">char</span> _leading_padding[internal::NFS_MaxLineSize
+<a name="l00356"></a>00356                           - 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="l00357"></a>00357                           - <span class="keyword">sizeof</span>(__itt_caller)];
+<a name="l00358"></a>00358     
+<a name="l00360"></a>00360     uintptr_t my_cancellation_requested;
+<a name="l00361"></a>00361     
+<a name="l00363"></a>00363 
+<a name="l00366"></a>00366     uintptr_t  my_version_and_traits;
+<a name="l00367"></a>00367 
+<a name="l00369"></a>00369     <a class="code" href="a00298.html">exception_container_type</a> *my_exception;
+<a name="l00370"></a>00370 
+<a name="l00372"></a>00372     internal::generic_scheduler *my_owner;
+<a name="l00373"></a>00373 
+<a name="l00375"></a>00375     uintptr_t my_state;
+<a name="l00376"></a>00376 
+<a name="l00377"></a>00377 <span class="preprocessor">#if TBB_PREVIEW_TASK_PRIORITY</span>
+<a name="l00379"></a>00379 <span class="preprocessor">    intptr_t my_priority;</span>
+<a name="l00380"></a>00380 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_PREVIEW_TASK_PRIORITY */</span>
+<a name="l00381"></a>00381 
+<a name="l00383"></a>00383 
+<a name="l00384"></a>00384     <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="l00385"></a>00385 <span class="preprocessor">#if TBB_PREVIEW_TASK_PRIORITY</span>
+<a name="l00386"></a>00386 <span class="preprocessor"></span>                            - <span class="keyword">sizeof</span>(intptr_t)
+<a name="l00387"></a>00387 #endif <span class="comment">/* TBB_PREVIEW_TASK_PRIORITY */</span>
+<a name="l00388"></a>00388                           ];
+<a name="l00389"></a>00389 
+<a name="l00390"></a>00390 <span class="keyword">public</span>:
+<a name="l00392"></a>00392 
+<a name="l00420"></a><a class="code" href="a00293.html#19fee08fb8ac98adccfe69c1aa63c491">00420</a>     <a class="code" href="a00293.html">task_group_context</a> ( kind_type relation_with_parent = bound,
+<a name="l00421"></a>00421                          uintptr_t traits = default_traits )
+<a name="l00422"></a>00422         : my_kind(relation_with_parent)
+<a name="l00423"></a>00423         , my_version_and_traits(1 | traits)
+<a name="l00424"></a>00424     {
+<a name="l00425"></a>00425         init();
+<a name="l00426"></a>00426     }
+<a name="l00427"></a>00427 
+<a name="l00428"></a>00428     __TBB_EXPORTED_METHOD ~<a class="code" href="a00293.html">task_group_context</a> ();
+<a name="l00429"></a>00429 
+<a name="l00431"></a>00431 
+<a name="l00438"></a>00438     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD reset ();
+<a name="l00439"></a>00439 
+<a name="l00441"></a>00441 
+<a name="l00448"></a>00448     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD cancel_group_execution ();
+<a name="l00449"></a>00449 
+<a name="l00451"></a>00451     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD is_group_execution_cancelled () <span class="keyword">const</span>;
+<a name="l00452"></a>00452 
+<a name="l00454"></a>00454 
+<a name="l00460"></a>00460     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD register_pending_exception ();
+<a name="l00461"></a>00461 
+<a name="l00462"></a>00462 <span class="preprocessor">#if TBB_PREVIEW_TASK_PRIORITY</span>
+<a name="l00464"></a>00464 <span class="preprocessor">    void set_priority ( priority_t );</span>
+<a name="l00465"></a>00465 <span class="preprocessor"></span>
+<a name="l00467"></a>00467     priority_t priority () <span class="keyword">const</span>;
+<a name="l00468"></a>00468 <span class="preprocessor">#endif </span><span class="comment">/* TBB_PREVIEW_TASK_PRIORITY */</span>
+<a name="l00469"></a>00469 
+<a name="l00470"></a>00470 <span class="keyword">protected</span>:
+<a name="l00472"></a>00472 
+<a name="l00473"></a>00473     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD init ();
+<a name="l00474"></a>00474 
+<a name="l00475"></a>00475 <span class="keyword">private</span>:
+<a name="l00476"></a>00476     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00291.html">task</a>;
+<a name="l00477"></a>00477     <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_root_with_context_proxy;
+<a name="l00478"></a>00478 
+<a name="l00479"></a>00479     <span class="keyword">static</span> <span class="keyword">const</span> kind_type binding_required = bound;
+<a name="l00480"></a>00480     <span class="keyword">static</span> <span class="keyword">const</span> kind_type binding_completed = kind_type(bound+1);
+<a name="l00481"></a>00481     <span class="keyword">static</span> <span class="keyword">const</span> kind_type detached = kind_type(binding_completed+1);
+<a name="l00482"></a>00482     <span class="keyword">static</span> <span class="keyword">const</span> kind_type dying = kind_type(detached+1);
+<a name="l00483"></a>00483 
+<a name="l00485"></a>00485 
+<a name="l00487"></a>00487     <span class="keyword">template</span> <<span class="keyword">typename</span> T>
+<a name="l00488"></a>00488     <span class="keywordtype">void</span> propagate_state_from_ancestors ( T <a class="code" href="a00293.html">task_group_context</a>::*mptr_state, T new_state );
+<a name="l00489"></a>00489 
+<a name="l00491"></a>00491     <span class="keyword">inline</span> <span class="keywordtype">void</span> finish_initialization ( internal::generic_scheduler *local_sched );
+<a name="l00492"></a>00492 
+<a name="l00494"></a>00494     <span class="keywordtype">void</span> bind_to ( internal::generic_scheduler *local_sched );
+<a name="l00495"></a>00495 
+<a name="l00497"></a>00497     <span class="keywordtype">void</span> register_with ( internal::generic_scheduler *local_sched );
+<a name="l00498"></a>00498 
+<a name="l00499"></a>00499 }; <span class="comment">// class task_group_context</span>
+<a name="l00500"></a>00500 
+<a name="l00501"></a>00501 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00502"></a>00502 
+<a name="l00504"></a>00504 
+<a name="l00505"></a><a class="code" href="a00291.html">00505</a> <span class="keyword">class </span><a class="code" href="a00291.html">task</a>: __TBB_TASK_BASE_ACCESS interface5::internal::task_base {
+<a name="l00506"></a>00506 
+<a name="l00508"></a>00508     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_set_ref_count( <span class="keywordtype">int</span> count );
+<a name="l00509"></a>00509 
+<a name="l00511"></a>00511     internal::reference_count __TBB_EXPORTED_METHOD internal_decrement_ref_count();
+<a name="l00512"></a>00512 
+<a name="l00513"></a>00513 <span class="keyword">protected</span>:
+<a name="l00515"></a><a class="code" href="a00291.html#2bce8ec6e44706e70128f5cf91b76e67">00515</a>     <a class="code" href="a00291.html">task</a>() {prefix().extra_state=1;}
+<a name="l00516"></a>00516 
+<a name="l00517"></a>00517 <span class="keyword">public</span>:
+<a name="l00519"></a><a class="code" href="a00291.html#98245ee0473f84cb19dbbf8c81134908">00519</a>     <span class="keyword">virtual</span> ~<a class="code" href="a00291.html">task</a>() {}
+<a name="l00520"></a>00520 
+<a name="l00522"></a>00522     <span class="keyword">virtual</span> <a class="code" href="a00291.html">task</a>* execute() = 0;
+<a name="l00523"></a>00523 
+<a name="l00525"></a><a class="code" href="a00291.html#4a3c415562d17905390ea5b49d12293e">00525</a>     <span class="keyword">enum</span> <a class="code" href="a00291.html#4a3c415562d17905390ea5b49d12293e">state_type</a> {
+<a name="l00527"></a>00527         executing,
+<a name="l00529"></a>00529         reexecute,
+<a name="l00531"></a>00531         ready,
+<a name="l00533"></a>00533         allocated,
+<a name="l00535"></a>00535         freed,
+<a name="l00537"></a>00537         recycle 
+<a name="l00538"></a>00538     };
+<a name="l00539"></a>00539 
+<a name="l00540"></a>00540     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00541"></a>00541     <span class="comment">// Allocating tasks</span>
+<a name="l00542"></a>00542     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00543"></a>00543 
+<a name="l00545"></a><a class="code" href="a00291.html#23acb0da0afd690da797f9f882027d34">00545</a>     <span class="keyword">static</span> internal::allocate_root_proxy allocate_root() {
+<a name="l00546"></a>00546         <span class="keywordflow">return</span> internal::allocate_root_proxy();
+<a name="l00547"></a>00547     }
+<a name="l00548"></a>00548 
+<a name="l00549"></a>00549 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00551"></a><a class="code" href="a00291.html#8ccc518caf31075a3e073996d2d240a4">00551</a> <span class="preprocessor">    static internal::allocate_root_with_context_proxy allocate_root( task_group_context& ctx ) {</span>
+<a name="l00552"></a>00552 <span class="preprocessor"></span>        <span class="keywordflow">return</span> internal::allocate_root_with_context_proxy(ctx);
+<a name="l00553"></a>00553     }
+<a name="l00554"></a>00554 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00555"></a>00555 
+<a name="l00557"></a>00557 
+<a name="l00558"></a><a class="code" href="a00291.html#1434c79a5138993269d034008bff7329">00558</a>     internal::allocate_continuation_proxy& allocate_continuation() {
+<a name="l00559"></a>00559         <span class="keywordflow">return</span> *reinterpret_cast<internal::allocate_continuation_proxy*>(<span class="keyword">this</span>);
+<a name="l00560"></a>00560     }
+<a name="l00561"></a>00561 
+<a name="l00563"></a><a class="code" href="a00291.html#1ff794f7053cd9148d5f280fbf07377f">00563</a>     internal::allocate_child_proxy& allocate_child() {
+<a name="l00564"></a>00564         <span class="keywordflow">return</span> *reinterpret_cast<internal::allocate_child_proxy*>(<span class="keyword">this</span>);
+<a name="l00565"></a>00565     }
+<a name="l00566"></a>00566 
+<a name="l00568"></a>00568     <span class="keyword">using</span> task_base::allocate_additional_child_of;
+<a name="l00569"></a>00569 
+<a name="l00570"></a>00570 <span class="preprocessor">#if __TBB_DEPRECATED_TASK_INTERFACE</span>
+<a name="l00572"></a>00572 <span class="preprocessor"></span>
+<a name="l00576"></a>00576 <span class="preprocessor">    void __TBB_EXPORTED_METHOD destroy( task& t );</span>
+<a name="l00577"></a>00577 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* !__TBB_DEPRECATED_TASK_INTERFACE */</span>
+<a name="l00579"></a>00579     using task_base::destroy;
+<a name="l00580"></a>00580 <span class="preprocessor">#endif </span><span class="comment">/* !__TBB_DEPRECATED_TASK_INTERFACE */</span>
+<a name="l00581"></a>00581 
+<a name="l00582"></a>00582     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00583"></a>00583     <span class="comment">// Recycling of tasks</span>
+<a name="l00584"></a>00584     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00585"></a>00585 
+<a name="l00587"></a>00587 
+<a name="l00593"></a><a class="code" href="a00291.html#a67a79e18f62b43a623a00cfbd76db4c">00593</a>     <span class="keywordtype">void</span> recycle_as_continuation() {
+<a name="l00594"></a>00594         __TBB_ASSERT( prefix().state==executing, <span class="stringliteral">"execute not running?"</span> );
+<a name="l00595"></a>00595         prefix().state = allocated;
+<a name="l00596"></a>00596     }
+<a name="l00597"></a>00597 
+<a name="l00599"></a>00599 
+<a name="l00601"></a><a class="code" href="a00291.html#3b290d14109704e2b69dc1ac980a7a76">00601</a>     <span class="keywordtype">void</span> recycle_as_safe_continuation() {
+<a name="l00602"></a>00602         __TBB_ASSERT( prefix().state==executing, <span class="stringliteral">"execute not running?"</span> );
+<a name="l00603"></a>00603         prefix().state = recycle;
+<a name="l00604"></a>00604     }
+<a name="l00605"></a>00605 
+<a name="l00607"></a><a class="code" href="a00291.html#db399855177438bbc9cc61d508dae8d2">00607</a>     <span class="keywordtype">void</span> recycle_as_child_of( <a class="code" href="a00291.html">task</a>& new_parent ) {
+<a name="l00608"></a>00608         internal::task_prefix& p = prefix();
+<a name="l00609"></a>00609         __TBB_ASSERT( prefix().state==executing||prefix().state==allocated, <span class="stringliteral">"execute not running, or already recycled"</span> );
+<a name="l00610"></a>00610         __TBB_ASSERT( prefix().ref_count==0, <span class="stringliteral">"no child tasks allowed when recycled as a child"</span> );
+<a name="l00611"></a>00611         __TBB_ASSERT( p.parent==NULL, <span class="stringliteral">"parent must be null"</span> );
+<a name="l00612"></a>00612         __TBB_ASSERT( new_parent.<a class="code" href="a00291.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().state<=recycle, <span class="stringliteral">"corrupt parent's state"</span> );
+<a name="l00613"></a>00613         __TBB_ASSERT( new_parent.<a class="code" href="a00291.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().state!=freed, <span class="stringliteral">"parent already freed"</span> );
+<a name="l00614"></a>00614         p.state = allocated;
+<a name="l00615"></a>00615         p.parent = &new_parent;
+<a name="l00616"></a>00616 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00617"></a>00617 <span class="preprocessor"></span>        p.<a class="code" href="a00291.html#d8c36a93f3972590fbb65ff1cef3173b">context</a> = new_parent.<a class="code" href="a00291.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().context;
+<a name="l00618"></a>00618 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00619"></a>00619     }
+<a name="l00620"></a>00620 
+<a name="l00622"></a>00622 
+<a name="l00623"></a><a class="code" href="a00291.html#4f1be9bbcdb487830dbe298b68d85144">00623</a>     <span class="keywordtype">void</span> recycle_to_reexecute() {
+<a name="l00624"></a>00624         __TBB_ASSERT( prefix().state==executing, <span class="stringliteral">"execute not running, or already recycled"</span> );
+<a name="l00625"></a>00625         __TBB_ASSERT( prefix().ref_count==0, <span class="stringliteral">"no child tasks allowed when recycled for reexecution"</span> );
+<a name="l00626"></a>00626         prefix().state = reexecute;
+<a name="l00627"></a>00627     }
+<a name="l00628"></a>00628 
+<a name="l00629"></a>00629     <span class="comment">// All depth-related methods are obsolete, and are retained for the sake </span>
+<a name="l00630"></a>00630     <span class="comment">// of backward source compatibility only</span>
+<a name="l00631"></a>00631     intptr_t depth()<span class="keyword"> const </span>{<span class="keywordflow">return</span> 0;}
+<a name="l00632"></a>00632     <span class="keywordtype">void</span> set_depth( intptr_t ) {}
+<a name="l00633"></a>00633     <span class="keywordtype">void</span> add_to_depth( <span class="keywordtype">int</span> ) {}
+<a name="l00634"></a>00634 
+<a name="l00635"></a>00635 
+<a name="l00636"></a>00636     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00637"></a>00637     <span class="comment">// Spawning and blocking</span>
+<a name="l00638"></a>00638     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00639"></a>00639 
+<a name="l00641"></a><a class="code" href="a00291.html#06a4206a57e8e12a439b14d6d41cfd92">00641</a>     <span class="keywordtype">void</span> set_ref_count( <span class="keywordtype">int</span> count ) {
+<a name="l00642"></a>00642 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
+<a name="l00643"></a>00643 <span class="preprocessor"></span>        internal_set_ref_count(count);
+<a name="l00644"></a>00644 <span class="preprocessor">#else</span>
+<a name="l00645"></a>00645 <span class="preprocessor"></span>        prefix().ref_count = count;
+<a name="l00646"></a>00646 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */</span>
+<a name="l00647"></a>00647     }
+<a name="l00648"></a>00648 
+<a name="l00650"></a>00650 
+<a name="l00651"></a><a class="code" href="a00291.html#f5fb43c7ad0de5a4b95703cebc39e345">00651</a>     <span class="keywordtype">void</span> increment_ref_count() {
+<a name="l00652"></a>00652         __TBB_FetchAndIncrementWacquire( &prefix().ref_count );
+<a name="l00653"></a>00653     }
+<a name="l00654"></a>00654 
+<a name="l00656"></a>00656 
+<a name="l00657"></a><a class="code" href="a00291.html#ef4680f5c148020c5e7e43ddef44cd5d">00657</a>     <span class="keywordtype">int</span> decrement_ref_count() {
+<a name="l00658"></a>00658 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
+<a name="l00659"></a>00659 <span class="preprocessor"></span>        <span class="keywordflow">return</span> int(internal_decrement_ref_count());
+<a name="l00660"></a>00660 <span class="preprocessor">#else</span>
+<a name="l00661"></a>00661 <span class="preprocessor"></span>        <span class="keywordflow">return</span> int(__TBB_FetchAndDecrementWrelease( &prefix().ref_count ))-1;
+<a name="l00662"></a>00662 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */</span>
+<a name="l00663"></a>00663     }
+<a name="l00664"></a>00664 
+<a name="l00666"></a>00666     <span class="keyword">using</span> task_base::spawn;
+<a name="l00667"></a>00667 
+<a name="l00669"></a><a class="code" href="a00291.html#3ce28ca9baa771cfc37ecd72e69c4f3c">00669</a>     <span class="keywordtype">void</span> spawn_and_wait_for_all( <a class="code" href="a00291.html">task</a>& child ) {
+<a name="l00670"></a>00670         prefix().owner->wait_for_all( *<span class="keyword">this</span>, &child );
+<a name="l00671"></a>00671     }
+<a name="l00672"></a>00672 
+<a name="l00674"></a>00674     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD spawn_and_wait_for_all( <a class="code" href="a00294.html">task_list</a>& list );
+<a name="l00675"></a>00675 
+<a name="l00677"></a><a class="code" href="a00291.html#ce8ce689c26a4ddf343829bc3c73290a">00677</a>     <span class="keyword">static</span> <span class="keywordtype">void</span> spawn_root_and_wait( <a class="code" href="a00291.html">task</a>& root ) {
+<a name="l00678"></a>00678         root.<a class="code" href="a00291.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().owner->spawn_root_and_wait( root, root.<a class="code" href="a00291.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().next );
+<a name="l00679"></a>00679     }
+<a name="l00680"></a>00680 
+<a name="l00682"></a>00682 
+<a name="l00684"></a>00684     <span class="keyword">static</span> <span class="keywordtype">void</span> spawn_root_and_wait( <a class="code" href="a00294.html">task_list</a>& root_list );
+<a name="l00685"></a>00685 
+<a name="l00687"></a>00687 
+<a name="l00688"></a><a class="code" href="a00291.html#53d2615ad9c38859b4c8080936600283">00688</a>     <span class="keywordtype">void</span> wait_for_all() {
+<a name="l00689"></a>00689         prefix().owner->wait_for_all( *<span class="keyword">this</span>, NULL );
+<a name="l00690"></a>00690     }
+<a name="l00691"></a>00691 
+<a name="l00693"></a>00693 <span class="preprocessor">#if TBB_PREVIEW_TASK_PRIORITY</span>
+<a name="l00694"></a>00694 <span class="preprocessor"></span>
+<a name="l00704"></a>00704 <span class="preprocessor">#endif </span><span class="comment">/* TBB_PREVIEW_TASK_PRIORITY */</span>
+<a name="l00705"></a><a class="code" href="a00291.html#8365d063c0cc9d7bd616bca47256b93c">00705</a>     <span class="keyword">static</span> <span class="keywordtype">void</span> enqueue( <a class="code" href="a00291.html">task</a>& t ) {
+<a name="l00706"></a>00706         t.<a class="code" href="a00291.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().owner->enqueue( t, NULL );
+<a name="l00707"></a>00707     }
+<a name="l00708"></a>00708 
+<a name="l00709"></a>00709 <span class="preprocessor">#if TBB_PREVIEW_TASK_PRIORITY</span>
+<a name="l00711"></a><a class="code" href="a00291.html#fe6bf6aaf84e664134fabb6c4f409ea9">00711</a> <span class="preprocessor">    static void enqueue( task& t, priority_t p ) {</span>
+<a name="l00712"></a>00712 <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="l00713"></a>00713         t.prefix().owner->enqueue( t, (<span class="keywordtype">void</span>*)p );
+<a name="l00714"></a>00714     }
+<a name="l00715"></a>00715 <span class="preprocessor">#endif </span><span class="comment">/* TBB_PREVIEW_TASK_PRIORITY */</span>
+<a name="l00716"></a>00716 
+<a name="l00718"></a>00718     <span class="keyword">static</span> <a class="code" href="a00291.html">task</a>& __TBB_EXPORTED_FUNC <span class="keyword">self</span>();
+<a name="l00719"></a>00719 
+<a name="l00721"></a><a class="code" href="a00291.html#314e98ee4347ccec83efcb9ee22e8596">00721</a>     <a class="code" href="a00291.html">task</a>* parent()<span class="keyword"> const </span>{<span class="keywordflow">return</span> prefix().parent;}
+<a name="l00722"></a>00722 
+<a name="l00723"></a>00723 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00725"></a>00725 <span class="preprocessor"></span>
+<a name="l00726"></a><a class="code" href="a00291.html#d8c36a93f3972590fbb65ff1cef3173b">00726</a> <span class="preprocessor">    task_group_context* context() {return prefix().context;}</span>
+<a name="l00727"></a>00727 <span class="preprocessor"></span>
+<a name="l00729"></a><a class="code" href="a00291.html#5987123486afca36ddebb9e2a8b7779a">00729</a>     <a class="code" href="a00293.html">task_group_context</a>* group () { <span class="keywordflow">return</span> prefix().context; }
+<a name="l00730"></a>00730 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>   
+<a name="l00731"></a>00731 
+<a name="l00733"></a><a class="code" href="a00291.html#f9169402702f56bf519448aaf34450aa">00733</a>     <span class="keywordtype">bool</span> is_stolen_task()<span class="keyword"> const </span>{
+<a name="l00734"></a>00734         <span class="keywordflow">return</span> (prefix().extra_state & 0x80)!=0;
+<a name="l00735"></a>00735     }
+<a name="l00736"></a>00736 
+<a name="l00737"></a>00737     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00738"></a>00738     <span class="comment">// Debugging</span>
+<a name="l00739"></a>00739     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00740"></a>00740 
+<a name="l00742"></a><a class="code" href="a00291.html#0af7b2d7e6e8b4333b2accfce3dfb374">00742</a>     <a class="code" href="a00291.html#4a3c415562d17905390ea5b49d12293e">state_type</a> state()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <a class="code" href="a00291.html#4a3c415562d17905390ea5b49d12293e">state_type</a>(prefix().state);}
+<a name="l00743"></a>00743 
+<a name="l00745"></a><a class="code" href="a00291.html#ad774f55eaec008ae02b236423209ced">00745</a>     <span class="keywordtype">int</span> ref_count()<span class="keyword"> const </span>{
+<a name="l00746"></a>00746 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00747"></a>00747 <span class="preprocessor"></span>        internal::reference_count ref_count_ = prefix().ref_count;
+<a name="l00748"></a>00748         __TBB_ASSERT( ref_count_==<span class="keywordtype">int</span>(ref_count_), <span class="stringliteral">"integer overflow error"</span>);
+<a name="l00749"></a>00749 <span class="preprocessor">#endif</span>
+<a name="l00750"></a>00750 <span class="preprocessor"></span>        <span class="keywordflow">return</span> int(prefix().ref_count);
+<a name="l00751"></a>00751     }
+<a name="l00752"></a>00752 
+<a name="l00754"></a>00754     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD is_owned_by_current_thread() <span class="keyword">const</span>;
+<a name="l00755"></a>00755 
+<a name="l00756"></a>00756     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00757"></a>00757     <span class="comment">// Affinity</span>
+<a name="l00758"></a>00758     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00759"></a>00759  
+<a name="l00761"></a>00761 
+<a name="l00762"></a><a class="code" href="a00291.html#d61bb32389d3857bf7511d69beaafb76">00762</a>     <span class="keyword">typedef</span> internal::affinity_id affinity_id;
+<a name="l00763"></a>00763 
+<a name="l00765"></a><a class="code" href="a00291.html#dca19d7a45487a7d67a0db517e2b57c9">00765</a>     <span class="keywordtype">void</span> set_affinity( affinity_id <span class="keywordtype">id</span> ) {prefix().affinity = id;}
+<a name="l00766"></a>00766 
+<a name="l00768"></a><a class="code" href="a00291.html#3a920a56b0bcf2801518fb45b2c9d2be">00768</a>     affinity_id affinity()<span class="keyword"> const </span>{<span class="keywordflow">return</span> prefix().affinity;}
+<a name="l00769"></a>00769 
+<a name="l00771"></a>00771 
+<a name="l00775"></a>00775     <span class="keyword">virtual</span> <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD note_affinity( affinity_id <span class="keywordtype">id</span> );
+<a name="l00776"></a>00776 
+<a name="l00777"></a>00777 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00779"></a>00779 <span class="preprocessor"></span>
+<a name="l00789"></a>00789 <span class="preprocessor">    void __TBB_EXPORTED_METHOD change_group ( task_group_context& ctx );</span>
+<a name="l00790"></a>00790 <span class="preprocessor"></span>
+<a name="l00792"></a>00792 
+<a name="l00793"></a><a class="code" href="a00291.html#0f3fb4aac549ab642022450a4bd13326">00793</a>     <span class="keywordtype">bool</span> cancel_group_execution () { <span class="keywordflow">return</span> prefix().context->cancel_group_execution(); }
+<a name="l00794"></a>00794 
+<a name="l00796"></a><a class="code" href="a00291.html#025f18118c057c4c8db87ff2ce8df975">00796</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="l00797"></a>00797 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00798"></a>00798 
+<a name="l00799"></a>00799 <span class="preprocessor">#if TBB_PREVIEW_TASK_PRIORITY</span>
+<a name="l00801"></a><a class="code" href="a00291.html#9ac8d1542d67d9d80121ff986801ac26">00801</a> <span class="preprocessor">    void set_group_priority ( priority_t p ) {  prefix().context->set_priority(p); }</span>
+<a name="l00802"></a>00802 <span class="preprocessor"></span>
+<a name="l00804"></a><a class="code" href="a00291.html#e1d969a1ccab6796e3b8b2c1a5be33d2">00804</a>     priority_t group_priority ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> prefix().context->priority(); }
+<a name="l00805"></a>00805 
+<a name="l00806"></a>00806 <span class="preprocessor">#endif </span><span class="comment">/* TBB_PREVIEW_TASK_PRIORITY */</span>
+<a name="l00807"></a>00807 
+<a name="l00808"></a>00808 <span class="keyword">private</span>:
+<a name="l00809"></a>00809     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00292.html">interface5::internal::task_base</a>;
+<a name="l00810"></a>00810     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00294.html">task_list</a>;
+<a name="l00811"></a>00811     <span class="keyword">friend</span> <span class="keyword">class </span>internal::scheduler;
+<a name="l00812"></a>00812     <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_root_proxy;
+<a name="l00813"></a>00813 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00814"></a>00814 <span class="preprocessor"></span>    <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_root_with_context_proxy;
+<a name="l00815"></a>00815 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00816"></a>00816     <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_continuation_proxy;
+<a name="l00817"></a>00817     <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_child_proxy;
+<a name="l00818"></a>00818     <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_additional_child_of_proxy;
+<a name="l00819"></a>00819     
+<a name="l00821"></a>00821 
+<a name="l00822"></a>00822     internal::task_prefix& prefix( internal::version_tag* = NULL )<span class="keyword"> const </span>{
+<a name="l00823"></a>00823         <span class="keywordflow">return</span> reinterpret_cast<internal::task_prefix*>(const_cast<task*>(<span class="keyword">this</span>))[-1];
+<a name="l00824"></a>00824     }
+<a name="l00825"></a>00825 }; <span class="comment">// class task</span>
+<a name="l00826"></a>00826 
+<a name="l00828"></a>00828 
+<a name="l00829"></a><a class="code" href="a00242.html">00829</a> <span class="keyword">class </span><a class="code" href="a00242.html">empty_task</a>: <span class="keyword">public</span> <a class="code" href="a00291.html">task</a> {
+<a name="l00830"></a>00830     <span class="comment">/*override*/</span> <a class="code" href="a00291.html">task</a>* execute() {
+<a name="l00831"></a>00831         <span class="keywordflow">return</span> NULL;
+<a name="l00832"></a>00832     }
+<a name="l00833"></a>00833 };
+<a name="l00834"></a>00834 
+<a name="l00836"></a>00836 
+<a name="l00838"></a><a class="code" href="a00294.html">00838</a> <span class="keyword">class </span><a class="code" href="a00294.html">task_list</a>: internal::no_copy {
+<a name="l00839"></a>00839 <span class="keyword">private</span>:
+<a name="l00840"></a>00840     <a class="code" href="a00291.html">task</a>* first;
+<a name="l00841"></a>00841     <a class="code" href="a00291.html">task</a>** next_ptr;
+<a name="l00842"></a>00842     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00291.html">task</a>;
+<a name="l00843"></a>00843     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00292.html">interface5::internal::task_base</a>;
+<a name="l00844"></a>00844 <span class="keyword">public</span>:
+<a name="l00846"></a><a class="code" href="a00294.html#416341c2047eaef50417b41eaf7e9de6">00846</a>     <a class="code" href="a00294.html#416341c2047eaef50417b41eaf7e9de6">task_list</a>() : first(NULL), next_ptr(&first) {}
+<a name="l00847"></a>00847 
+<a name="l00849"></a><a class="code" href="a00294.html#6d438f1499a02db1e59c24ab6043e5ba">00849</a>     <a class="code" href="a00294.html#6d438f1499a02db1e59c24ab6043e5ba">~task_list</a>() {}
+<a name="l00850"></a>00850 
+<a name="l00852"></a><a class="code" href="a00294.html#f3ac31e092814b90929f81bb30441959">00852</a>     <span class="keywordtype">bool</span> <a class="code" href="a00294.html#f3ac31e092814b90929f81bb30441959">empty</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !first;}
+<a name="l00853"></a>00853 
+<a name="l00855"></a><a class="code" href="a00294.html#4cd34756bc4763dafb8c84838a0124ff">00855</a>     <span class="keywordtype">void</span> <a class="code" href="a00294.html#4cd34756bc4763dafb8c84838a0124ff">push_back</a>( <a class="code" href="a00291.html">task</a>& <a class="code" href="a00291.html">task</a> ) {
+<a name="l00856"></a>00856         task.<a class="code" href="a00291.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().next = NULL;
+<a name="l00857"></a>00857         *next_ptr = &task;
+<a name="l00858"></a>00858         next_ptr = &task.<a class="code" href="a00291.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().next;
+<a name="l00859"></a>00859     }
+<a name="l00860"></a>00860 
+<a name="l00862"></a><a class="code" href="a00294.html#5fe85df5ed524418389d34051750347d">00862</a>     <a class="code" href="a00291.html">task</a>& <a class="code" href="a00294.html#5fe85df5ed524418389d34051750347d">pop_front</a>() {
+<a name="l00863"></a>00863         __TBB_ASSERT( !<a class="code" href="a00294.html#f3ac31e092814b90929f81bb30441959">empty</a>(), <span class="stringliteral">"attempt to pop item from empty task_list"</span> );
+<a name="l00864"></a>00864         <a class="code" href="a00291.html">task</a>* result = first;
+<a name="l00865"></a>00865         first = result-><a class="code" href="a00291.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().next;
+<a name="l00866"></a>00866         <span class="keywordflow">if</span>( !first ) next_ptr = &first;
+<a name="l00867"></a>00867         <span class="keywordflow">return</span> *result;
+<a name="l00868"></a>00868     }
+<a name="l00869"></a>00869 
+<a name="l00871"></a><a class="code" href="a00294.html#fce446ee13e025969945328f3ff59b95">00871</a>     <span class="keywordtype">void</span> <a class="code" href="a00294.html#fce446ee13e025969945328f3ff59b95">clear</a>() {
+<a name="l00872"></a>00872         first=NULL;
+<a name="l00873"></a>00873         next_ptr=&first;
+<a name="l00874"></a>00874     }
+<a name="l00875"></a>00875 };
+<a name="l00876"></a>00876 
+<a name="l00877"></a>00877 <span class="keyword">inline</span> <span class="keywordtype">void</span> interface5::internal::task_base::spawn( task& t ) {
+<a name="l00878"></a>00878     t.<a class="code" href="a00291.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().owner->spawn( t, t.prefix().next );
+<a name="l00879"></a>00879 }
+<a name="l00880"></a>00880 
+<a name="l00881"></a>00881 <span class="keyword">inline</span> <span class="keywordtype">void</span> interface5::internal::task_base::spawn( task_list& list ) {
+<a name="l00882"></a>00882     <span class="keywordflow">if</span>( task* t = list.first ) {
+<a name="l00883"></a>00883         t->prefix().owner->spawn( *t, *list.next_ptr );
+<a name="l00884"></a>00884         list.clear();
+<a name="l00885"></a>00885     }
+<a name="l00886"></a>00886 }
+<a name="l00887"></a>00887 
+<a name="l00888"></a><a class="code" href="a00291.html#c33c7edbaec67aa8a56f48986a9dc69f">00888</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00291.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>( <a class="code" href="a00294.html">task_list</a>& root_list ) {
+<a name="l00889"></a>00889     <span class="keywordflow">if</span>( <a class="code" href="a00291.html">task</a>* t = root_list.<a class="code" href="a00294.html#78fcc389819ee34427d510f7d8cb8b1e">first</a> ) {
+<a name="l00890"></a>00890         t->prefix().owner->spawn_root_and_wait( *t, *root_list.<a class="code" href="a00294.html#21553a32bcd08f980aa28f61254307da">next_ptr</a> );
+<a name="l00891"></a>00891         root_list.<a class="code" href="a00294.html#fce446ee13e025969945328f3ff59b95">clear</a>();
+<a name="l00892"></a>00892     }
+<a name="l00893"></a>00893 }
+<a name="l00894"></a>00894 
+<a name="l00895"></a>00895 } <span class="comment">// namespace tbb</span>
+<a name="l00896"></a>00896 
+<a name="l00897"></a>00897 <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="l00898"></a>00898     <span class="keywordflow">return</span> &tbb::internal::allocate_root_proxy::allocate(bytes);
+<a name="l00899"></a>00899 }
+<a name="l00900"></a>00900 
+<a name="l00901"></a>00901 <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="l00902"></a>00902     tbb::internal::allocate_root_proxy::free( *static_cast<tbb::task*>(task) );
+<a name="l00903"></a>00903 }
+<a name="l00904"></a>00904 
+<a name="l00905"></a>00905 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00906"></a>00906 <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="l00907"></a>00907     <span class="keywordflow">return</span> &p.allocate(bytes);
+<a name="l00908"></a>00908 }
+<a name="l00909"></a>00909 
+<a name="l00910"></a>00910 <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="l00911"></a>00911     p.free( *static_cast<tbb::task*>(task) );
+<a name="l00912"></a>00912 }
+<a name="l00913"></a>00913 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00914"></a>00914 
+<a name="l00915"></a>00915 <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="l00916"></a>00916     <span class="keywordflow">return</span> &p.allocate(bytes);
+<a name="l00917"></a>00917 }
+<a name="l00918"></a>00918 
+<a name="l00919"></a>00919 <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="l00920"></a>00920     p.free( *static_cast<tbb::task*>(task) );
+<a name="l00921"></a>00921 }
+<a name="l00922"></a>00922 
+<a name="l00923"></a>00923 <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="l00924"></a>00924     <span class="keywordflow">return</span> &p.allocate(bytes);
+<a name="l00925"></a>00925 }
+<a name="l00926"></a>00926 
+<a name="l00927"></a>00927 <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="l00928"></a>00928     p.free( *static_cast<tbb::task*>(task) );
+<a name="l00929"></a>00929 }
+<a name="l00930"></a>00930 
+<a name="l00931"></a>00931 <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="l00932"></a>00932     <span class="keywordflow">return</span> &p.allocate(bytes);
+<a name="l00933"></a>00933 }
+<a name="l00934"></a>00934 
+<a name="l00935"></a>00935 <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="l00936"></a>00936     p.free( *static_cast<tbb::task*>(task) );
+<a name="l00937"></a>00937 }
+<a name="l00938"></a>00938 
+<a name="l00939"></a>00939 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_task_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/a00577.html b/doc/html/a00577.html
new file mode 100644
index 0000000..8dbaf6a
--- /dev/null
+++ b/doc/html/a00577.html
@@ -0,0 +1,270 @@
+<!DOCTYPE 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="keyword">namespace </span>tbb {
+<a name="l00028"></a>00028 
+<a name="l00029"></a>00029 <span class="keyword">namespace </span>internal {
+<a name="l00030"></a>00030     <span class="keyword">template</span><<span class="keyword">typename</span> F> <span class="keyword">class </span>task_handle_task;
+<a name="l00031"></a>00031 }
+<a name="l00032"></a>00032 
+<a name="l00033"></a>00033 <span class="keyword">template</span><<span class="keyword">typename</span> F>
+<a name="l00034"></a>00034 <span class="keyword">class </span>task_handle : internal::no_assign {
+<a name="l00035"></a>00035     <span class="keyword">template</span><<span class="keyword">typename</span> _F> <span class="keyword">friend</span> <span class="keyword">class </span>internal::task_handle_task;
+<a name="l00036"></a>00036 
+<a name="l00037"></a>00037     <span class="keyword">static</span> <span class="keyword">const</span> intptr_t scheduled = 0x1;
+<a name="l00038"></a>00038 
+<a name="l00039"></a>00039     F my_func;
+<a name="l00040"></a>00040     intptr_t my_state;
+<a name="l00041"></a>00041 
+<a name="l00042"></a>00042     <span class="keywordtype">void</span> mark_scheduled () {
+<a name="l00043"></a>00043         <span class="comment">// The check here is intentionally lax to avoid the impact of interlocked operation</span>
+<a name="l00044"></a>00044         <span class="keywordflow">if</span> ( my_state & scheduled )
+<a name="l00045"></a>00045             internal::throw_exception( internal::eid_invalid_multiple_scheduling );
+<a name="l00046"></a>00046         my_state |= scheduled;
+<a name="l00047"></a>00047     }
+<a name="l00048"></a>00048 <span class="keyword">public</span>:
+<a name="l00049"></a>00049     task_handle( <span class="keyword">const</span> F& f ) : my_func(f), my_state(0) {}
+<a name="l00050"></a>00050 
+<a name="l00051"></a>00051     <span class="keywordtype">void</span> operator() ()<span class="keyword"> const </span>{ my_func(); }
+<a name="l00052"></a>00052 };
+<a name="l00053"></a>00053 
+<a name="l00054"></a>00054 <span class="keyword">enum</span> task_group_status {
+<a name="l00055"></a>00055     not_complete,
+<a name="l00056"></a>00056     complete,
+<a name="l00057"></a>00057     canceled
+<a name="l00058"></a>00058 };
+<a name="l00059"></a>00059 
+<a name="l00060"></a>00060 <span class="keyword">namespace </span>internal {
+<a name="l00061"></a>00061 
+<a name="l00062"></a>00062 <span class="comment">// Suppress gratuitous warnings from icc 11.0 when lambda expressions are used in instances of function_task.</span>
+<a name="l00063"></a>00063 <span class="comment">//#pragma warning(disable: 588)</span>
+<a name="l00064"></a>00064 
+<a name="l00065"></a>00065 <span class="keyword">template</span><<span class="keyword">typename</span> F>
+<a name="l00066"></a>00066 <span class="keyword">class </span>function_task : <span class="keyword">public</span> task {
+<a name="l00067"></a>00067     F my_func;
+<a name="l00068"></a>00068     <span class="comment">/*override*/</span> <a class="code" href="a00291.html#2bce8ec6e44706e70128f5cf91b76e67">task</a>* execute() {
+<a name="l00069"></a>00069         my_func();
+<a name="l00070"></a>00070         <span class="keywordflow">return</span> NULL;
+<a name="l00071"></a>00071     }
+<a name="l00072"></a>00072 <span class="keyword">public</span>:
+<a name="l00073"></a>00073     function_task( <span class="keyword">const</span> F& f ) : my_func(f) {}
+<a name="l00074"></a>00074 };
+<a name="l00075"></a>00075 
+<a name="l00076"></a>00076 <span class="keyword">template</span><<span class="keyword">typename</span> F>
+<a name="l00077"></a>00077 <span class="keyword">class </span>task_handle_task : <span class="keyword">public</span> task {
+<a name="l00078"></a>00078     task_handle<F>& my_handle;
+<a name="l00079"></a>00079     <span class="comment">/*override*/</span> <a class="code" href="a00291.html#2bce8ec6e44706e70128f5cf91b76e67">task</a>* execute() {
+<a name="l00080"></a>00080         my_handle();
+<a name="l00081"></a>00081         <span class="keywordflow">return</span> NULL;
+<a name="l00082"></a>00082     }
+<a name="l00083"></a>00083 <span class="keyword">public</span>:
+<a name="l00084"></a>00084     task_handle_task( task_handle<F>& h ) : my_handle(h) { h.mark_scheduled(); }
+<a name="l00085"></a>00085 };
+<a name="l00086"></a>00086 
+<a name="l00087"></a>00087 <span class="keyword">class </span>task_group_base : internal::no_copy {
+<a name="l00088"></a>00088 <span class="keyword">protected</span>:
+<a name="l00089"></a>00089     empty_task* my_root;
+<a name="l00090"></a>00090     task_group_context my_context;
+<a name="l00091"></a>00091 
+<a name="l00092"></a>00092     task& owner () { <span class="keywordflow">return</span> *my_root; }
+<a name="l00093"></a>00093 
+<a name="l00094"></a>00094     <span class="keyword">template</span><<span class="keyword">typename</span> F>
+<a name="l00095"></a>00095     task_group_status internal_run_and_wait( F& f ) {
+<a name="l00096"></a>00096         __TBB_TRY {
+<a name="l00097"></a>00097             <span class="keywordflow">if</span> ( !my_context.is_group_execution_cancelled() )
+<a name="l00098"></a>00098                 f();
+<a name="l00099"></a>00099         } __TBB_CATCH( ... ) {
+<a name="l00100"></a>00100             my_context.register_pending_exception();
+<a name="l00101"></a>00101         }
+<a name="l00102"></a>00102         <span class="keywordflow">return</span> wait();
+<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> F, <span class="keyword">typename</span> Task>
+<a name="l00106"></a>00106     <span class="keywordtype">void</span> internal_run( F& f ) {
+<a name="l00107"></a>00107         owner().spawn( *<span class="keyword">new</span>( owner().allocate_additional_child_of(*my_root) ) Task(f) );
+<a name="l00108"></a>00108     }
+<a name="l00109"></a>00109 
+<a name="l00110"></a>00110 <span class="keyword">public</span>:
+<a name="l00111"></a>00111     task_group_base( uintptr_t traits = 0 )
+<a name="l00112"></a>00112         : my_context(task_group_context::bound, task_group_context::default_traits | traits)
+<a name="l00113"></a>00113     {
+<a name="l00114"></a>00114         my_root = <span class="keyword">new</span>( <a class="code" href="a00291.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>(my_context) ) empty_task;
+<a name="l00115"></a>00115         my_root->set_ref_count(1);
+<a name="l00116"></a>00116     }
+<a name="l00117"></a>00117 
+<a name="l00118"></a>00118     ~task_group_base() {
+<a name="l00119"></a>00119         <span class="keywordflow">if</span>( my_root->ref_count() > 1 ) {
+<a name="l00120"></a>00120             <span class="keywordtype">bool</span> stack_unwinding_in_progress = std::uncaught_exception();
+<a name="l00121"></a>00121             <span class="comment">// Always attempt to do proper cleanup to avoid inevitable memory corruption </span>
+<a name="l00122"></a>00122             <span class="comment">// in case of missing wait (for the sake of better testability & debuggability)</span>
+<a name="l00123"></a>00123             <span class="keywordflow">if</span> ( !is_canceling() )
+<a name="l00124"></a>00124                 cancel();
+<a name="l00125"></a>00125             __TBB_TRY {
+<a name="l00126"></a>00126                 my_root->wait_for_all();
+<a name="l00127"></a>00127             } __TBB_CATCH (...) {
+<a name="l00128"></a>00128                 <a class="code" href="a00291.html#dfaacf92685e5f86393bf657b2853bf8">task::destroy</a>(*my_root);
+<a name="l00129"></a>00129                 __TBB_RETHROW();
+<a name="l00130"></a>00130             }
+<a name="l00131"></a>00131             <a class="code" href="a00291.html#dfaacf92685e5f86393bf657b2853bf8">task::destroy</a>(*my_root);
+<a name="l00132"></a>00132             <span class="keywordflow">if</span> ( !stack_unwinding_in_progress )
+<a name="l00133"></a>00133                 internal::throw_exception( internal::eid_missing_wait );
+<a name="l00134"></a>00134         }
+<a name="l00135"></a>00135         <span class="keywordflow">else</span> {
+<a name="l00136"></a>00136             <a class="code" href="a00291.html#dfaacf92685e5f86393bf657b2853bf8">task::destroy</a>(*my_root);
+<a name="l00137"></a>00137         }
+<a name="l00138"></a>00138     }
+<a name="l00139"></a>00139 
+<a name="l00140"></a>00140     <span class="keyword">template</span><<span class="keyword">typename</span> F>
+<a name="l00141"></a>00141     <span class="keywordtype">void</span> run( task_handle<F>& h ) {
+<a name="l00142"></a>00142         internal_run< task_handle<F>, internal::task_handle_task<F> >( h );
+<a name="l00143"></a>00143     }
+<a name="l00144"></a>00144 
+<a name="l00145"></a>00145     task_group_status wait() {
+<a name="l00146"></a>00146         __TBB_TRY {
+<a name="l00147"></a>00147             my_root->wait_for_all();
+<a name="l00148"></a>00148         } __TBB_CATCH( ... ) {
+<a name="l00149"></a>00149             my_context.reset();
+<a name="l00150"></a>00150             __TBB_RETHROW();
+<a name="l00151"></a>00151         }
+<a name="l00152"></a>00152         <span class="keywordflow">if</span> ( my_context.is_group_execution_cancelled() ) {
+<a name="l00153"></a>00153             my_context.reset();
+<a name="l00154"></a>00154             <span class="keywordflow">return</span> canceled;
+<a name="l00155"></a>00155         }
+<a name="l00156"></a>00156         <span class="keywordflow">return</span> complete;
+<a name="l00157"></a>00157     }
+<a name="l00158"></a>00158 
+<a name="l00159"></a>00159     <span class="keywordtype">bool</span> is_canceling() {
+<a name="l00160"></a>00160         <span class="keywordflow">return</span> my_context.is_group_execution_cancelled();
+<a name="l00161"></a>00161     }
+<a name="l00162"></a>00162 
+<a name="l00163"></a>00163     <span class="keywordtype">void</span> cancel() {
+<a name="l00164"></a>00164         my_context.cancel_group_execution();
+<a name="l00165"></a>00165     }
+<a name="l00166"></a>00166 }; <span class="comment">// class task_group_base</span>
+<a name="l00167"></a>00167 
+<a name="l00168"></a>00168 } <span class="comment">// namespace internal</span>
+<a name="l00169"></a>00169 
+<a name="l00170"></a>00170 <span class="keyword">class </span>task_group : <span class="keyword">public</span> internal::task_group_base {
+<a name="l00171"></a>00171 <span class="keyword">public</span>:
+<a name="l00172"></a>00172     task_group () : task_group_base( task_group_context::concurrent_wait ) {}
+<a name="l00173"></a>00173 
+<a name="l00174"></a>00174 <span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00175"></a>00175 <span class="preprocessor"></span>    ~task_group() __TBB_TRY {
+<a name="l00176"></a>00176         __TBB_ASSERT( my_root->ref_count() != 0, NULL );
+<a name="l00177"></a>00177         <span class="keywordflow">if</span>( my_root->ref_count() > 1 )
+<a name="l00178"></a>00178             my_root->wait_for_all();
+<a name="l00179"></a>00179     }
+<a name="l00180"></a>00180 <span class="preprocessor">#if TBB_USE_EXCEPTIONS</span>
+<a name="l00181"></a>00181 <span class="preprocessor"></span>    <span class="keywordflow">catch</span> (...) {
+<a name="l00182"></a>00182         <span class="comment">// Have to destroy my_root here as the base class destructor won't be called</span>
+<a name="l00183"></a>00183         <a class="code" href="a00291.html#dfaacf92685e5f86393bf657b2853bf8">task::destroy</a>(*my_root);
+<a name="l00184"></a>00184         <span class="keywordflow">throw</span>;
+<a name="l00185"></a>00185     }
+<a name="l00186"></a>00186 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_EXCEPTIONS */</span>
+<a name="l00187"></a>00187 <span class="preprocessor">#endif </span><span class="comment">/* TBB_DEPRECATED */</span>
+<a name="l00188"></a>00188 
+<a name="l00189"></a>00189 <span class="preprocessor">#if __SUNPRO_CC</span>
+<a name="l00190"></a>00190 <span class="preprocessor"></span>    <span class="keyword">template</span><<span class="keyword">typename</span> F>
+<a name="l00191"></a>00191     <span class="keywordtype">void</span> run( task_handle<F>& h ) {
+<a name="l00192"></a>00192         internal_run< task_handle<F>, internal::task_handle_task<F> >( h );
+<a name="l00193"></a>00193     }
+<a name="l00194"></a>00194 <span class="preprocessor">#else</span>
+<a name="l00195"></a>00195 <span class="preprocessor"></span>    <span class="keyword">using</span> task_group_base::run;
+<a name="l00196"></a>00196 <span class="preprocessor">#endif</span>
+<a name="l00197"></a>00197 <span class="preprocessor"></span>
+<a name="l00198"></a>00198     <span class="keyword">template</span><<span class="keyword">typename</span> F>
+<a name="l00199"></a>00199     <span class="keywordtype">void</span> run( <span class="keyword">const</span> F& f ) {
+<a name="l00200"></a>00200         internal_run< const F, internal::function_task<F> >( f );
+<a name="l00201"></a>00201     }
+<a name="l00202"></a>00202 
+<a name="l00203"></a>00203     <span class="keyword">template</span><<span class="keyword">typename</span> F>
+<a name="l00204"></a>00204     task_group_status run_and_wait( <span class="keyword">const</span> F& f ) {
+<a name="l00205"></a>00205         <span class="keywordflow">return</span> internal_run_and_wait<const F>( f );
+<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> F>
+<a name="l00209"></a>00209     task_group_status run_and_wait( task_handle<F>& h ) {
+<a name="l00210"></a>00210       <span class="keywordflow">return</span> internal_run_and_wait< task_handle<F> >( h );
+<a name="l00211"></a>00211     }
+<a name="l00212"></a>00212 }; <span class="comment">// class task_group</span>
+<a name="l00213"></a>00213 
+<a name="l00214"></a>00214 <span class="keyword">class </span>structured_task_group : <span class="keyword">public</span> internal::task_group_base {
+<a name="l00215"></a>00215 <span class="keyword">public</span>:
+<a name="l00216"></a>00216     <span class="keyword">template</span><<span class="keyword">typename</span> F>
+<a name="l00217"></a>00217     task_group_status run_and_wait ( task_handle<F>& h ) {
+<a name="l00218"></a>00218         <span class="keywordflow">return</span> internal_run_and_wait< task_handle<F> >( h );
+<a name="l00219"></a>00219     }
+<a name="l00220"></a>00220 
+<a name="l00221"></a>00221     task_group_status wait() {
+<a name="l00222"></a>00222         task_group_status res = task_group_base::wait();
+<a name="l00223"></a>00223         my_root->set_ref_count(1);
+<a name="l00224"></a>00224         <span class="keywordflow">return</span> res;
+<a name="l00225"></a>00225     }
+<a name="l00226"></a>00226 }; <span class="comment">// class structured_task_group</span>
+<a name="l00227"></a>00227 
+<a name="l00228"></a>00228 <span class="keyword">inline</span> 
+<a name="l00229"></a>00229 <span class="keywordtype">bool</span> is_current_task_group_canceling() {
+<a name="l00230"></a>00230     <span class="keywordflow">return</span> <a class="code" href="a00291.html#bd43e8d6249738efafd12d6a4c72c5e3">task::self</a>().<a class="code" href="a00291.html#025f18118c057c4c8db87ff2ce8df975">is_cancelled</a>();
+<a name="l00231"></a>00231 }
+<a name="l00232"></a>00232 
+<a name="l00233"></a>00233 <span class="keyword">template</span><<span class="keyword">class</span> F>
+<a name="l00234"></a>00234 task_handle<F> make_task( <span class="keyword">const</span> F& f ) {
+<a name="l00235"></a>00235     <span class="keywordflow">return</span> task_handle<F>( f );
+<a name="l00236"></a>00236 }
+<a name="l00237"></a>00237 
+<a name="l00238"></a>00238 } <span class="comment">// namespace tbb</span>
+<a name="l00239"></a>00239 
+<a name="l00240"></a>00240 <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
new file mode 100644
index 0000000..71e56af
--- /dev/null
+++ b/doc/html/a00584.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>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="a00295.html">00053</a> <span class="keyword">class </span><a class="code" href="a00295.html">task_scheduler_init</a>: internal::no_copy {
+<a name="l00054"></a>00054 <span class="preprocessor">#if TBB_USE_EXCEPTIONS</span>
+<a name="l00055"></a>00055 <span class="preprocessor"></span>    <span class="keyword">enum</span> ExceptionPropagationMode {
+<a name="l00056"></a>00056         propagation_mode_exact = 1u,
+<a name="l00057"></a>00057         propagation_mode_captured = 2u,
+<a name="l00058"></a>00058         propagation_mode_mask = propagation_mode_exact | propagation_mode_captured
+<a name="l00059"></a>00059     };
+<a name="l00060"></a>00060 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_EXCEPTIONS */</span>
+<a name="l00061"></a>00061 
+<a name="l00063"></a>00063     internal::scheduler* my_scheduler;
+<a name="l00064"></a>00064 <span class="keyword">public</span>:
+<a name="l00065"></a>00065 
+<a name="l00067"></a><a class="code" href="a00295.html#8f5988e2b0fbb2d533fcbb7f2583743f">00067</a>     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code" href="a00295.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a> = -1;
+<a name="l00068"></a>00068 
+<a name="l00070"></a><a class="code" href="a00295.html#e6c860f1e559026ff3ef4599c0d6c514">00070</a>     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code" href="a00295.html#e6c860f1e559026ff3ef4599c0d6c514">deferred</a> = -2;
+<a name="l00071"></a>00071 
+<a name="l00073"></a>00073 
+<a name="l00084"></a>00084     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00295.html#d476053cc712e572554823492a5229ce">initialize</a>( <span class="keywordtype">int</span> number_of_threads=<a class="code" href="a00295.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a> );
+<a name="l00085"></a>00085 
+<a name="l00087"></a>00087 
+<a name="l00088"></a>00088     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00295.html#d476053cc712e572554823492a5229ce">initialize</a>( <span class="keywordtype">int</span> number_of_threads, stack_size_type thread_stack_size );
+<a name="l00089"></a>00089 
+<a name="l00091"></a>00091     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00295.html#f73257e04cb7fb9bd5be2b635d9016f1">terminate</a>();
+<a name="l00092"></a>00092 
+<a name="l00094"></a><a class="code" href="a00295.html#421600bf9bf9338bcf937063f2ff0e90">00094</a>     <a class="code" href="a00295.html#421600bf9bf9338bcf937063f2ff0e90">task_scheduler_init</a>( <span class="keywordtype">int</span> number_of_threads=<a class="code" href="a00295.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a>, stack_size_type thread_stack_size=0 ) : my_scheduler(NULL)  {
+<a name="l00095"></a>00095 <span class="preprocessor">#if TBB_USE_EXCEPTIONS</span>
+<a name="l00096"></a>00096 <span class="preprocessor"></span>        <span class="comment">// Take two lowest order bits of the stack size argument to communicate</span>
+<a name="l00097"></a>00097         <span class="comment">// default exception propagation mode of the client to be used when the</span>
+<a name="l00098"></a>00098         <span class="comment">// client manually creates tasks in the master thread and does not use</span>
+<a name="l00099"></a>00099         <span class="comment">// explicit task group context object. This is necessary because newer </span>
+<a name="l00100"></a>00100         <span class="comment">// TBB binaries with exact propagation enabled by default may be used </span>
+<a name="l00101"></a>00101         <span class="comment">// by older clients that expect tbb::captured_exception wrapper.</span>
+<a name="l00102"></a>00102         <span class="comment">// All zeros mean old client - no preference. </span>
+<a name="l00103"></a>00103         __TBB_ASSERT( !(thread_stack_size & propagation_mode_mask), <span class="stringliteral">"Requested stack size is not aligned"</span> );
+<a name="l00104"></a>00104         thread_stack_size |= TBB_USE_CAPTURED_EXCEPTION ? propagation_mode_captured : propagation_mode_exact;
+<a name="l00105"></a>00105 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_EXCEPTIONS */</span>
+<a name="l00106"></a>00106         <a class="code" href="a00295.html#d476053cc712e572554823492a5229ce">initialize</a>( number_of_threads, thread_stack_size );
+<a name="l00107"></a>00107     }
+<a name="l00108"></a>00108 
+<a name="l00110"></a><a class="code" href="a00295.html#4da6c86292d80c703a66c1f6f5299488">00110</a>     <a class="code" href="a00295.html#4da6c86292d80c703a66c1f6f5299488">~task_scheduler_init</a>() {
+<a name="l00111"></a>00111         <span class="keywordflow">if</span>( my_scheduler ) 
+<a name="l00112"></a>00112             <a class="code" href="a00295.html#f73257e04cb7fb9bd5be2b635d9016f1">terminate</a>();
+<a name="l00113"></a>00113         internal::poison_pointer( my_scheduler );
+<a name="l00114"></a>00114     }
+<a name="l00116"></a>00116 
+<a name="l00133"></a>00133     <span class="keyword">static</span> <span class="keywordtype">int</span> __TBB_EXPORTED_FUNC <a class="code" href="a00295.html#ba00714c33a41a3c2216f48613971cab">default_num_threads</a> ();
+<a name="l00134"></a>00134 
+<a name="l00136"></a><a class="code" href="a00295.html#12752282977029f23416642bc03e8b74">00136</a>     <span class="keywordtype">bool</span> <a class="code" href="a00295.html#12752282977029f23416642bc03e8b74">is_active</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_scheduler != NULL; }
+<a name="l00137"></a>00137 };
+<a name="l00138"></a>00138 
+<a name="l00139"></a>00139 } <span class="comment">// namespace tbb</span>
+<a name="l00140"></a>00140 
+<a name="l00141"></a>00141 <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
new file mode 100644
index 0000000..0fbc58c
--- /dev/null
+++ b/doc/html/a00585.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-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
new file mode 100644
index 0000000..ea3a07c
--- /dev/null
+++ b/doc/html/a00587.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.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-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_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tbb_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00032"></a>00032 <span class="preprocessor">#include "aligned_space.h"</span>
+<a name="l00033"></a>00033 <span class="preprocessor">#include "atomic.h"</span>
+<a name="l00034"></a>00034 <span class="preprocessor">#include "blocked_range.h"</span>
+<a name="l00035"></a>00035 <span class="preprocessor">#include "blocked_range2d.h"</span>
+<a name="l00036"></a>00036 <span class="preprocessor">#include "blocked_range3d.h"</span>
+<a name="l00037"></a>00037 <span class="preprocessor">#include "cache_aligned_allocator.h"</span>
+<a name="l00038"></a>00038 <span class="preprocessor">#include "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="l00074"></a>00074 
+<a name="l00075"></a>00075 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_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/a00588.html b/doc/html/a00588.html
new file mode 100644
index 0000000..305ea1b
--- /dev/null
+++ b/doc/html/a00588.html
@@ -0,0 +1,212 @@
+<!DOCTYPE HTML 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="a00296.html">00070</a> <span class="keyword">class </span><a class="code" href="a00296.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="a00296.html">tbb_allocator<U></a> other;
+<a name="l00081"></a>00081     };
+<a name="l00082"></a>00082 
+<a name="l00084"></a><a class="code" href="a00296.html#09a7f81fb2c3055aaecf058b11538544">00084</a>     <span class="keyword">enum</span> <a class="code" href="a00296.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="a00296.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="a00296.html#f6cb487b1bdce0b581f265a77dca6d53">00097</a>     pointer <a class="code" href="a00296.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="a00296.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">00102</a>     <span class="keywordtype">void</span> <a class="code" href="a00296.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="a00296.html#f059ca2c96243024f0d562ee3a87a3a5">00107</a>     size_type <a class="code" href="a00296.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="a00296.html#ab228ab9e324ed041c2226e1d717df5f">00113</a>     <span class="keywordtype">void</span> <a class="code" href="a00296.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="a00296.html#ef133522bf55f05a605bee0763208281">00116</a>     <span class="keywordtype">void</span> <a class="code" href="a00296.html#ef133522bf55f05a605bee0763208281">destroy</a>( pointer p ) {p->~value_type();}
+<a name="l00117"></a>00117 
+<a name="l00119"></a><a class="code" href="a00296.html#78701e7454ef8e1a25b5acd364367080">00119</a>     <span class="keyword">static</span> <a class="code" href="a00296.html#09a7f81fb2c3055aaecf058b11538544">malloc_type</a> <a class="code" href="a00296.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="a00297.html">00131</a> <span class="keyword">class </span><a class="code" href="a00296.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="a00296.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="a00296.html">tbb_allocator<T></a>&, <span class="keyword">const</span> <a class="code" href="a00296.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="a00306.html">00154</a> <span class="keyword">class </span><a class="code" href="a00306.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="a00306.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="a00306.html">zero_allocator</a>() <span class="keywordflow">throw</span>() { }
+<a name="l00170"></a>00170     <a class="code" href="a00306.html">zero_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00306.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="a00306.html">zero_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00306.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="a00307.html">00184</a> <span class="keyword">class </span><a class="code" href="a00306.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="a00306.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="a00306.html">zero_allocator<T1,B1></a> &a, <span class="keyword">const</span> <a class="code" href="a00306.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
new file mode 100644
index 0000000..5b4c18f
--- /dev/null
+++ b/doc/html/a00592.html
@@ -0,0 +1,237 @@
+<!DOCTYPE HTML 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="l00033"></a>00033 <span class="preprocessor">#ifndef TBB_USE_DEBUG</span>
+<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#ifdef TBB_DO_ASSERT</span>
+<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_DEBUG TBB_DO_ASSERT</span>
+<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_DEBUG 0</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_ASSERT */</span>
+<a name="l00039"></a>00039 <span class="preprocessor">#else</span>
+<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#define TBB_DO_ASSERT TBB_USE_DEBUG</span>
+<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_DEBUG */</span>
+<a name="l00042"></a>00042 
+<a name="l00043"></a>00043 <span class="preprocessor">#ifndef TBB_USE_ASSERT</span>
+<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#ifdef TBB_DO_ASSERT</span>
+<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_ASSERT TBB_DO_ASSERT</span>
+<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">#else </span>
+<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_ASSERT TBB_USE_DEBUG</span>
+<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_ASSERT */</span>
+<a name="l00049"></a>00049 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00050"></a>00050 
+<a name="l00051"></a>00051 <span class="preprocessor">#ifndef TBB_USE_THREADING_TOOLS</span>
+<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="preprocessor">#ifdef TBB_DO_THREADING_TOOLS</span>
+<a name="l00053"></a>00053 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_THREADING_TOOLS TBB_DO_THREADING_TOOLS</span>
+<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor">#else </span>
+<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_THREADING_TOOLS TBB_USE_DEBUG</span>
+<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_THREADING_TOOLS */</span>
+<a name="l00057"></a>00057 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS */</span>
+<a name="l00058"></a>00058 
+<a name="l00059"></a>00059 <span class="preprocessor">#ifndef TBB_USE_PERFORMANCE_WARNINGS</span>
+<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">#ifdef TBB_PERFORMANCE_WARNINGS</span>
+<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_PERFORMANCE_WARNINGS TBB_PERFORMANCE_WARNINGS</span>
+<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="preprocessor">#else </span>
+<a name="l00063"></a>00063 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_PERFORMANCE_WARNINGS TBB_USE_DEBUG</span>
+<a name="l00064"></a>00064 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_PEFORMANCE_WARNINGS */</span>
+<a name="l00065"></a>00065 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_PERFORMANCE_WARNINGS */</span>
+<a name="l00066"></a>00066 
+<a name="l00067"></a>00067 <span class="preprocessor">#if !defined(__EXCEPTIONS) && !defined(_CPPUNWIND) && !defined(__SUNPRO_CC) || defined(_XBOX)</span>
+<a name="l00068"></a>00068 <span class="preprocessor"></span><span class="preprocessor">    #if TBB_USE_EXCEPTIONS</span>
+<a name="l00069"></a>00069 <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="l00070"></a>00070 <span class="preprocessor"></span><span class="preprocessor">    #elif !defined(TBB_USE_EXCEPTIONS)</span>
+<a name="l00071"></a>00071 <span class="preprocessor"></span><span class="preprocessor">        #define TBB_USE_EXCEPTIONS 0</span>
+<a name="l00072"></a>00072 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
+<a name="l00073"></a>00073 <span class="preprocessor"></span><span class="preprocessor">#elif !defined(TBB_USE_EXCEPTIONS)</span>
+<a name="l00074"></a>00074 <span class="preprocessor"></span><span class="preprocessor">    #define TBB_USE_EXCEPTIONS 1</span>
+<a name="l00075"></a>00075 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00076"></a>00076 <span class="preprocessor"></span>
+<a name="l00077"></a>00077 <span class="preprocessor">#ifndef TBB_IMPLEMENT_CPP0X</span>
+<a name="l00078"></a>00078 <span class="preprocessor"></span>
+<a name="l00079"></a>00079 <span class="preprocessor">    #if __GNUC__==4 && __GNUC_MINOR__>=4 && __GXX_EXPERIMENTAL_CXX0X__</span>
+<a name="l00080"></a>00080 <span class="preprocessor"></span><span class="preprocessor">        #define TBB_IMPLEMENT_CPP0X 0</span>
+<a name="l00081"></a>00081 <span class="preprocessor"></span><span class="preprocessor">    #else</span>
+<a name="l00082"></a>00082 <span class="preprocessor"></span><span class="preprocessor">        #define TBB_IMPLEMENT_CPP0X 1</span>
+<a name="l00083"></a>00083 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
+<a name="l00084"></a>00084 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_IMPLEMENT_CPP0X */</span>
+<a name="l00085"></a>00085 
+<a name="l00086"></a>00086 <span class="preprocessor">#ifndef __TBB_DYNAMIC_LOAD_ENABLED</span>
+<a name="l00087"></a>00087 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_DYNAMIC_LOAD_ENABLED !__TBB_TASK_CPP_DIRECTLY_INCLUDED</span>
+<a name="l00088"></a>00088 <span class="preprocessor"></span><span class="preprocessor">#elif !__TBB_DYNAMIC_LOAD_ENABLED</span>
+<a name="l00089"></a>00089 <span class="preprocessor"></span><span class="preprocessor">    #if _WIN32||_WIN64</span>
+<a name="l00090"></a>00090 <span class="preprocessor"></span><span class="preprocessor">        #define __TBB_NO_IMPLICIT_LINKAGE 1</span>
+<a name="l00091"></a>00091 <span class="preprocessor"></span><span class="preprocessor">        #define __TBBMALLOC_NO_IMPLICIT_LINKAGE 1</span>
+<a name="l00092"></a>00092 <span class="preprocessor"></span><span class="preprocessor">    #else</span>
+<a name="l00093"></a>00093 <span class="preprocessor"></span><span class="preprocessor">        #define __TBB_WEAK_SYMBOLS 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><span class="preprocessor">#endif</span>
+<a name="l00096"></a>00096 <span class="preprocessor"></span>
+<a name="l00099"></a>00099 <span class="preprocessor">#ifndef __TBB_COUNT_TASK_NODES</span>
+<a name="l00100"></a>00100 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_COUNT_TASK_NODES TBB_USE_ASSERT</span>
+<a name="l00101"></a>00101 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00102"></a>00102 <span class="preprocessor"></span>
+<a name="l00103"></a>00103 <span class="preprocessor">#ifndef __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00104"></a>00104 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_TASK_GROUP_CONTEXT 1</span>
+<a name="l00105"></a>00105 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00106"></a>00106 
+<a name="l00107"></a>00107 <span class="preprocessor">#ifndef __TBB_SCHEDULER_OBSERVER</span>
+<a name="l00108"></a>00108 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_SCHEDULER_OBSERVER 1</span>
+<a name="l00109"></a>00109 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_SCHEDULER_OBSERVER */</span>
+<a name="l00110"></a>00110 
+<a name="l00111"></a>00111 <span class="preprocessor">#ifndef __TBB_TASK_PRIORITY</span>
+<a name="l00112"></a>00112 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_TASK_PRIORITY __TBB_CPF_BUILD</span>
+<a name="l00113"></a>00113 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_PRIORITY */</span>
+<a name="l00114"></a>00114 
+<a name="l00115"></a>00115 <span class="preprocessor">#if __TBB_TASK_PRIORITY && !__TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00116"></a>00116 <span class="preprocessor"></span><span class="preprocessor">    #error __TBB_TASK_PRIORITY requires __TBB_TASK_GROUP_CONTEXT to be enabled</span>
+<a name="l00117"></a>00117 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00118"></a>00118 <span class="preprocessor"></span>
+<a name="l00119"></a>00119 <span class="preprocessor">#ifdef TBB_PREVIEW_TASK_PRIORITY</span>
+<a name="l00120"></a>00120 <span class="preprocessor"></span><span class="preprocessor">    #if TBB_PREVIEW_TASK_PRIORITY</span>
+<a name="l00121"></a>00121 <span class="preprocessor"></span><span class="preprocessor">        #define __TBB_NO_IMPLICIT_LINKAGE 1</span>
+<a name="l00122"></a>00122 <span class="preprocessor"></span><span class="preprocessor">        #if __TBB_BUILD && !__TBB_TASK_PRIORITY</span>
+<a name="l00123"></a>00123 <span class="preprocessor"></span><span class="preprocessor">            #error TBB_PREVIEW_TASK_PRIORITY requires __TBB_TASK_PRIORITY to be enabled during TBB build</span>
+<a name="l00124"></a>00124 <span class="preprocessor"></span><span class="preprocessor">        #elif !__TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00125"></a>00125 <span class="preprocessor"></span><span class="preprocessor">            #error TBB_PREVIEW_TASK_PRIORITY requires __TBB_TASK_GROUP_CONTEXT to be enabled</span>
+<a name="l00126"></a>00126 <span class="preprocessor"></span><span class="preprocessor">        #endif</span>
+<a name="l00127"></a>00127 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
+<a name="l00128"></a>00128 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00129"></a>00129 <span class="preprocessor"></span><span class="preprocessor">    #if __TBB_BUILD</span>
+<a name="l00130"></a>00130 <span class="preprocessor"></span><span class="preprocessor">        #define TBB_PREVIEW_TASK_PRIORITY __TBB_TASK_PRIORITY</span>
+<a name="l00131"></a>00131 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
+<a name="l00132"></a>00132 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_PREVIEW_TASK_PRIORITY */</span>
+<a name="l00133"></a>00133 
+<a name="l00134"></a>00134 <span class="preprocessor">#if !defined(__TBB_SURVIVE_THREAD_SWITCH) && (_WIN32 || _WIN64 || __linux__)</span>
+<a name="l00135"></a>00135 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_SURVIVE_THREAD_SWITCH 1</span>
+<a name="l00136"></a>00136 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_SURVIVE_THREAD_SWITCH */</span>
+<a name="l00137"></a>00137 
+<a name="l00138"></a>00138 
+<a name="l00139"></a>00139 <span class="comment">/* TODO: The following condition should be extended as soon as new compilers/runtimes </span>
+<a name="l00140"></a>00140 <span class="comment">         with std::exception_ptr support appear. */</span>
+<a name="l00141"></a>00141 <span class="preprocessor">#define __TBB_EXCEPTION_PTR_PRESENT  (_MSC_VER >= 1600 || __GXX_EXPERIMENTAL_CXX0X__ && (__GNUC__==4 && __GNUC_MINOR__>=4))</span>
+<a name="l00142"></a>00142 <span class="preprocessor"></span>
+<a name="l00143"></a>00143 
+<a name="l00144"></a>00144 <span class="preprocessor">#ifndef TBB_USE_CAPTURED_EXCEPTION</span>
+<a name="l00145"></a>00145 <span class="preprocessor"></span><span class="preprocessor">    #if __TBB_EXCEPTION_PTR_PRESENT</span>
+<a name="l00146"></a>00146 <span class="preprocessor"></span><span class="preprocessor">        #define TBB_USE_CAPTURED_EXCEPTION 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_CAPTURED_EXCEPTION 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">#else </span><span class="comment">/* defined TBB_USE_CAPTURED_EXCEPTION */</span>
+<a name="l00151"></a>00151 <span class="preprocessor">    #if !TBB_USE_CAPTURED_EXCEPTION && !__TBB_EXCEPTION_PTR_PRESENT</span>
+<a name="l00152"></a>00152 <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="l00153"></a>00153 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
+<a name="l00154"></a>00154 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* defined TBB_USE_CAPTURED_EXCEPTION */</span>
+<a name="l00155"></a>00155 
+<a name="l00156"></a>00156 
+<a name="l00157"></a>00157 <span class="preprocessor">#ifndef __TBB_DEFAULT_PARTITIONER</span>
+<a name="l00158"></a>00158 <span class="preprocessor"></span><span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00159"></a>00159 <span class="preprocessor"></span>
+<a name="l00160"></a>00160 <span class="preprocessor">#define __TBB_DEFAULT_PARTITIONER tbb::simple_partitioner</span>
+<a name="l00161"></a>00161 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00162"></a>00162 <span class="preprocessor"></span>
+<a name="l00163"></a>00163 <span class="preprocessor">#define __TBB_DEFAULT_PARTITIONER tbb::auto_partitioner</span>
+<a name="l00164"></a>00164 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_DEFAULT_PARTITIONER */</span>
+<a name="l00165"></a>00165 <span class="preprocessor">#endif </span><span class="comment">/* !defined(__TBB_DEFAULT_PARTITIONER */</span>
+<a name="l00166"></a>00166 
+<a name="l00169"></a>00169 <span class="preprocessor">#if __GNUC__==4 && __GNUC_MINOR__>=4 && !defined(__INTEL_COMPILER)</span>
+<a name="l00170"></a>00170 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_GCC_WARNING_SUPPRESSION_ENABLED 1</span>
+<a name="l00171"></a>00171 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00172"></a>00172 <span class="preprocessor"></span>
+<a name="l00179"></a>00179 <span class="preprocessor">#if _MSC_VER && __INTEL_COMPILER && (__INTEL_COMPILER<1110 || __INTEL_COMPILER==1110 && __INTEL_COMPILER_BUILD_DATE < 20091012)</span>
+<a name="l00180"></a>00180 <span class="preprocessor"></span>
+<a name="l00183"></a>00183 <span class="preprocessor">    #define __TBB_DEFAULT_DTOR_THROW_SPEC_BROKEN 1</span>
+<a name="l00184"></a>00184 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00185"></a>00185 <span class="preprocessor"></span>
+<a name="l00186"></a>00186 <span class="preprocessor">#if defined(_MSC_VER) && _MSC_VER < 1500 && !defined(__INTEL_COMPILER)</span>
+<a name="l00187"></a>00187 <span class="preprocessor"></span>
+<a name="l00189"></a>00189 <span class="preprocessor">    #define __TBB_TEMPLATE_FRIENDS_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 __GLIBC__==2 && __GLIBC_MINOR__==3 || __MINGW32__</span>
+<a name="l00194"></a>00194 <span class="preprocessor"></span>
+<a name="l00195"></a>00195 <span class="preprocessor">    #define __TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN 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">#if (_WIN32||_WIN64) && __INTEL_COMPILER == 1110</span>
+<a name="l00199"></a>00199 <span class="preprocessor"></span>
+<a name="l00200"></a>00200 <span class="preprocessor">    #define __TBB_ICL_11_1_CODE_GEN_BROKEN 1</span>
+<a name="l00201"></a>00201 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00202"></a>00202 <span class="preprocessor"></span>
+<a name="l00203"></a>00203 <span class="preprocessor">#if __GNUC__==3 && __GNUC_MINOR__==3 && !defined(__INTEL_COMPILER)</span>
+<a name="l00204"></a>00204 <span class="preprocessor"></span>
+<a name="l00205"></a>00205 <span class="preprocessor">    #define __TBB_GCC_3_3_PROTECTED_BROKEN 1</span>
+<a name="l00206"></a>00206 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00207"></a>00207 <span class="preprocessor"></span>
+<a name="l00208"></a>00208 <span class="preprocessor">#if __MINGW32__ && (__GNUC__<4 || __GNUC__==4 && __GNUC_MINOR__<2)</span>
+<a name="l00209"></a>00209 <span class="preprocessor"></span>
+<a name="l00211"></a>00211 <span class="preprocessor">    #define __TBB_SSE_STACK_ALIGNMENT_BROKEN 1</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 <span class="preprocessor">#if __GNUC__==4 && __GNUC_MINOR__==3 && __GNUC_PATCHLEVEL__==0</span>
+<a name="l00215"></a>00215 <span class="preprocessor"></span>    <span class="comment">// GCC of this version may rashly ignore control dependencies</span>
+<a name="l00216"></a>00216 <span class="preprocessor">    #define __TBB_GCC_OPTIMIZER_ORDERING_BROKEN 1</span>
+<a name="l00217"></a>00217 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00218"></a>00218 <span class="preprocessor"></span>
+<a name="l00219"></a>00219 <span class="preprocessor">#if __FreeBSD__</span>
+<a name="l00220"></a>00220 <span class="preprocessor"></span>
+<a name="l00222"></a>00222 <span class="preprocessor">    #define __TBB_PRIO_INHERIT_BROKEN 1</span>
+<a name="l00223"></a>00223 <span class="preprocessor"></span>
+<a name="l00226"></a>00226 <span class="preprocessor">    #define __TBB_PLACEMENT_NEW_EXCEPTION_SAFETY_BROKEN 1</span>
+<a name="l00227"></a>00227 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __FreeBSD__ */</span>
+<a name="l00228"></a>00228 
+<a name="l00229"></a>00229 <span class="preprocessor">#if (__linux__ || __APPLE__) && __i386__ && defined(__INTEL_COMPILER)</span>
+<a name="l00230"></a>00230 <span class="preprocessor"></span>
+<a name="l00232"></a>00232 <span class="preprocessor">    #define __TBB_ICC_ASM_VOLATILE_BROKEN 1</span>
+<a name="l00233"></a>00233 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00234"></a>00234 <span class="preprocessor"></span>
+<a name="l00235"></a>00235 <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
new file mode 100644
index 0000000..c03be4c
--- /dev/null
+++ b/doc/html/a00593.html
@@ -0,0 +1,316 @@
+<!DOCTYPE HTML 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="a00220.html">00042</a> <span class="keyword">class </span><a class="code" href="a00220.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="a00220.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="a00252.html">00051</a> <span class="keyword">class </span><a class="code" href="a00252.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="a00256.html">00057</a> <span class="keyword">class </span><a class="code" href="a00256.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="a00253.html">00063</a> <span class="keyword">class </span><a class="code" href="a00253.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="a00298.html">00136</a> <span class="keyword">class </span><a class="code" href="a00298.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="a00298.html">tbb_exception</a>* <a class="code" href="a00298.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="a00298.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="a00298.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="a00298.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="a00298.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="a00298.html#3f2da7f3d8a6e4c1df522af1213afb5a">00172</a>     <span class="keywordtype">void</span> <a class="code" href="a00298.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="a00228.html">00182</a> <span class="keyword">class </span><a class="code" href="a00228.html">captured_exception</a> : <span class="keyword">public</span> <a class="code" href="a00298.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="a00228.html">captured_exception</a> ( <span class="keyword">const</span> <a class="code" href="a00228.html">captured_exception</a>& src )
+<a name="l00186"></a>00186         : <a class="code" href="a00298.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="a00228.html#6a57f9aa0bce72392492d109b9e1d941">my_exception_name</a>, src.<a class="code" href="a00228.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="a00228.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="a00228.html">captured_exception</a> () <span class="keywordflow">throw</span>();
+<a name="l00198"></a>00198 
+<a name="l00199"></a>00199     <a class="code" href="a00228.html">captured_exception</a>& operator= ( <span class="keyword">const</span> <a class="code" href="a00228.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="a00228.html#6a57f9aa0bce72392492d109b9e1d941">my_exception_name</a>, src.<a class="code" href="a00228.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="a00228.html">captured_exception</a>* __TBB_EXPORTED_METHOD <a class="code" href="a00228.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="a00228.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="a00228.html#2dd1be66ab32fa27e0ddef5707fa67ef">00214</a>     <span class="keywordtype">void</span> <a class="code" href="a00228.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="a00228.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="a00228.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="a00228.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="a00228.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="a00228.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="a00257.html">00243</a> <span class="keyword">class </span><a class="code" href="a00257.html">movable_exception</a> : <span class="keyword">public</span> <a class="code" href="a00298.html">tbb_exception</a>
+<a name="l00244"></a>00244 {
+<a name="l00245"></a>00245     <span class="keyword">typedef</span> <a class="code" href="a00257.html">movable_exception<ExceptionData></a> <a class="code" href="a00257.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="a00257.html">movable_exception</a> ( <span class="keyword">const</span> ExceptionData& data_ )
+<a name="l00249"></a>00249         : <a class="code" href="a00257.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="a00257.html">self_type</a>).<a class="code" href="a00257.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="a00257.html">movable_exception</a> ( <span class="keyword">const</span> <a class="code" href="a00257.html">movable_exception</a>& src ) <span class="keywordflow">throw</span> ()
+<a name="l00261"></a>00261         : <a class="code" href="a00298.html">tbb_exception</a>(src)
+<a name="l00262"></a>00262         , <a class="code" href="a00257.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>(src.<a class="code" href="a00257.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="a00257.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="a00257.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="a00257.html">movable_exception</a>& operator= ( <span class="keyword">const</span> <a class="code" href="a00257.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="a00257.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a> = src.<a class="code" href="a00257.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>;
+<a name="l00272"></a>00272             my_exception_name = src.<a class="code" href="a00257.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="a00257.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="a00257.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>; }
+<a name="l00280"></a>00280 
+<a name="l00281"></a><a class="code" href="a00257.html#bc5f5c4739b17ac5211ac58226c2f5a5">00281</a>     <span class="comment">/*override*/</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="a00257.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="a00257.html#b33a89bccf0c63106f1270c7bfaaf54f">00283</a>     <span class="comment">/*override*/</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="a00257.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="a00257.html#1aea0ad179d6f0481fe7f3495f66adf9">00286</a>     <a class="code" href="a00257.html">movable_exception</a>* <a class="code" href="a00257.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="a00257.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="a00257.html#7a46873119d9f85a7b0009c13e41a258">00295</a>     <span class="keywordtype">void</span> <a class="code" href="a00257.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="a00257.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="a00257.html#17cffba35811c92b7e65d63506b69602">00303</a>     <span class="keywordtype">void</span> <a class="code" href="a00257.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="a00257.html#a8c0ae2089ae784b28907cf748b89416">00307</a>     ExceptionData  <a class="code" href="a00257.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="a00299.html">00324</a> <span class="keyword">class </span><a class="code" href="a00299.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="a00299.html">tbb_exception_ptr</a>* allocate ();
+<a name="l00329"></a>00329     <span class="keyword">static</span> <a class="code" href="a00299.html">tbb_exception_ptr</a>* allocate ( <span class="keyword">const</span> <a class="code" href="a00298.html">tbb_exception</a>& tag );
+<a name="l00331"></a>00331     <span class="keyword">static</span> <a class="code" href="a00299.html">tbb_exception_ptr</a>* allocate ( <a class="code" href="a00228.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="a00299.html#921875bbacd2c8a5f324c7da7a415262">destroy</a> () <span class="keywordflow">throw</span>();
+<a name="l00336"></a>00336 
+<a name="l00338"></a><a class="code" href="a00299.html#292832fd5c523e3d8081a22247840a1d">00338</a>     <span class="keywordtype">void</span> <a class="code" href="a00299.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="a00299.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="a00228.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
new file mode 100644
index 0000000..2905182
--- /dev/null
+++ b/doc/html/a00594.html
@@ -0,0 +1,709 @@
+<!DOCTYPE HTML 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="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>
+<a name="l00028"></a>00028 <span class="preprocessor">#ifdef _MANAGED</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#pragma managed(push, off)</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">#if __MINGW64__</span>
+<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#include "machine/linux_intel64.h"</span>
+<a name="l00034"></a>00034 <span class="keyword">extern</span> <span class="stringliteral">"C"</span> __declspec(dllimport) int __stdcall SwitchToThread( <span class="keywordtype">void</span> );
+<a name="l00035"></a>00035 <span class="preprocessor">#define __TBB_Yield()  SwitchToThread()</span>
+<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#elif __MINGW32__</span>
+<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#include "machine/linux_ia32.h"</span>
+<a name="l00038"></a>00038 <span class="keyword">extern</span> <span class="stringliteral">"C"</span> __declspec(dllimport) int __stdcall SwitchToThread( <span class="keywordtype">void</span> );
+<a name="l00039"></a>00039 <span class="preprocessor">#define __TBB_Yield()  SwitchToThread()</span>
+<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#elif defined(_M_IX86)</span>
+<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor">#include "machine/windows_ia32.h"</span>
+<a name="l00042"></a>00042 <span class="preprocessor">#elif defined(_M_AMD64) </span>
+<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor">#include "machine/windows_intel64.h"</span>
+<a name="l00044"></a>00044 <span class="preprocessor">#elif _XBOX </span>
+<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#include "machine/xbox360_ppc.h"</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">#ifdef _MANAGED</span>
+<a name="l00049"></a>00049 <span class="preprocessor"></span><span class="preprocessor">#pragma managed(pop)</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">#elif __linux__ || __FreeBSD__ || __NetBSD__</span>
+<a name="l00053"></a>00053 <span class="preprocessor"></span>
+<a name="l00054"></a>00054 <span class="preprocessor">#if __i386__</span>
+<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#include "machine/linux_ia32.h"</span>
+<a name="l00056"></a>00056 <span class="preprocessor">#elif __x86_64__</span>
+<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">#include "machine/linux_intel64.h"</span>
+<a name="l00058"></a>00058 <span class="preprocessor">#elif __ia64__</span>
+<a name="l00059"></a>00059 <span class="preprocessor"></span><span class="preprocessor">#include "machine/linux_ia64.h"</span>
+<a name="l00060"></a>00060 <span class="preprocessor">#elif __powerpc__</span>
+<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">#include "machine/mac_ppc.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 "machine/linux_common.h"</span>
+<a name="l00064"></a>00064 
+<a name="l00065"></a>00065 <span class="preprocessor">#elif __APPLE__</span>
+<a name="l00066"></a>00066 <span class="preprocessor"></span>
+<a name="l00067"></a>00067 <span class="preprocessor">#if __i386__</span>
+<a name="l00068"></a>00068 <span class="preprocessor"></span><span class="preprocessor">#include "machine/linux_ia32.h"</span>
+<a name="l00069"></a>00069 <span class="preprocessor">#elif __x86_64__</span>
+<a name="l00070"></a>00070 <span class="preprocessor"></span><span class="preprocessor">#include "machine/linux_intel64.h"</span>
+<a name="l00071"></a>00071 <span class="preprocessor">#elif __POWERPC__</span>
+<a name="l00072"></a>00072 <span class="preprocessor"></span><span class="preprocessor">#include "machine/mac_ppc.h"</span>
+<a name="l00073"></a>00073 <span class="preprocessor">#endif</span>
+<a name="l00074"></a>00074 <span class="preprocessor"></span><span class="preprocessor">#include "machine/macos_common.h"</span>
+<a name="l00075"></a>00075 
+<a name="l00076"></a>00076 <span class="preprocessor">#elif _AIX</span>
+<a name="l00077"></a>00077 <span class="preprocessor"></span>
+<a name="l00078"></a>00078 <span class="preprocessor">#include "machine/ibm_aix51.h"</span>
+<a name="l00079"></a>00079 
+<a name="l00080"></a>00080 <span class="preprocessor">#elif __sun || __SUNPRO_CC</span>
+<a name="l00081"></a>00081 <span class="preprocessor"></span>
+<a name="l00082"></a>00082 <span class="preprocessor">#define __asm__ asm </span>
+<a name="l00083"></a>00083 <span class="preprocessor"></span><span class="preprocessor">#define __volatile__ volatile</span>
+<a name="l00084"></a>00084 <span class="preprocessor"></span>
+<a name="l00085"></a>00085 <span class="preprocessor">#if __i386  || __i386__</span>
+<a name="l00086"></a>00086 <span class="preprocessor"></span><span class="preprocessor">#include "machine/linux_ia32.h"</span>
+<a name="l00087"></a>00087 <span class="preprocessor">#elif __x86_64__</span>
+<a name="l00088"></a>00088 <span class="preprocessor"></span><span class="preprocessor">#include "machine/linux_intel64.h"</span>
+<a name="l00089"></a>00089 <span class="preprocessor">#elif __sparc</span>
+<a name="l00090"></a>00090 <span class="preprocessor"></span><span class="preprocessor">#include "machine/sunos_sparc.h"</span>
+<a name="l00091"></a>00091 <span class="preprocessor">#endif</span>
+<a name="l00092"></a>00092 <span class="preprocessor"></span><span class="preprocessor">#include <sched.h></span>
+<a name="l00093"></a>00093 
+<a name="l00094"></a>00094 <span class="preprocessor">#define __TBB_Yield() sched_yield()</span>
+<a name="l00095"></a>00095 <span class="preprocessor"></span>
+<a name="l00096"></a>00096 <span class="preprocessor">#endif </span><span class="comment">/* Sun */</span>
+<a name="l00097"></a>00097 
+<a name="l00098"></a>00098 <span class="preprocessor">#ifndef __TBB_64BIT_ATOMICS</span>
+<a name="l00099"></a>00099 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_64BIT_ATOMICS 1</span>
+<a name="l00100"></a>00100 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00101"></a>00101 <span class="preprocessor"></span>
+<a name="l00103"></a>00103 
+<a name="l00115"></a>00115 <span class="preprocessor">#if    !defined(__TBB_CompareAndSwap4) \</span>
+<a name="l00116"></a>00116 <span class="preprocessor">    || !defined(__TBB_CompareAndSwap8) && __TBB_64BIT_ATOMICS \</span>
+<a name="l00117"></a>00117 <span class="preprocessor">    || !defined(__TBB_Yield)           \</span>
+<a name="l00118"></a>00118 <span class="preprocessor">    || !defined(__TBB_full_memory_fence)    \</span>
+<a name="l00119"></a>00119 <span class="preprocessor">    || !defined(__TBB_release_consistency_helper)</span>
+<a name="l00120"></a>00120 <span class="preprocessor"></span><span class="preprocessor">#error Minimal requirements for tbb_machine.h not satisfied; platform is not supported.</span>
+<a name="l00121"></a>00121 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00122"></a>00122 <span class="preprocessor"></span>
+<a name="l00123"></a>00123 <span class="preprocessor">#ifndef __TBB_Pause</span>
+<a name="l00124"></a>00124 <span class="preprocessor"></span>    <span class="keyword">inline</span> <span class="keywordtype">void</span> __TBB_Pause(int32_t) {
+<a name="l00125"></a>00125         __TBB_Yield();
+<a name="l00126"></a>00126     }
+<a name="l00127"></a>00127 <span class="preprocessor">#endif</span>
+<a name="l00128"></a>00128 <span class="preprocessor"></span>
+<a name="l00129"></a>00129 <span class="keyword">namespace </span>tbb {
+<a name="l00130"></a>00130 
+<a name="l00132"></a><a class="code" href="a00362.html#250275615f10d5b5de6ad466ae2f54de">00132</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00362.html#250275615f10d5b5de6ad466ae2f54de">atomic_fence</a> () { __TBB_full_memory_fence(); }
+<a name="l00133"></a>00133 
+<a name="l00134"></a>00134 <span class="keyword">namespace </span>internal {
+<a name="l00135"></a>00135 
+<a name="l00137"></a>00137 
+<a name="l00138"></a><a class="code" href="a00218.html">00138</a> <span class="keyword">class </span><a class="code" href="a00218.html">atomic_backoff</a> : no_copy {
+<a name="l00140"></a>00140 
+<a name="l00142"></a>00142     <span class="keyword">static</span> <span class="keyword">const</span> int32_t LOOPS_BEFORE_YIELD = 16;
+<a name="l00143"></a>00143     int32_t count;
+<a name="l00144"></a>00144 <span class="keyword">public</span>:
+<a name="l00145"></a>00145     <a class="code" href="a00218.html">atomic_backoff</a>() : count(1) {}
+<a name="l00146"></a>00146 
+<a name="l00148"></a><a class="code" href="a00218.html#a174ea93e3bd3d5cce82389c2f28d037">00148</a>     <span class="keywordtype">void</span> <a class="code" href="a00218.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>() {
+<a name="l00149"></a>00149         <span class="keywordflow">if</span>( count<=LOOPS_BEFORE_YIELD ) {
+<a name="l00150"></a>00150             __TBB_Pause(count);
+<a name="l00151"></a>00151             <span class="comment">// Pause twice as long the next time.</span>
+<a name="l00152"></a>00152             count*=2;
+<a name="l00153"></a>00153         } <span class="keywordflow">else</span> {
+<a name="l00154"></a>00154             <span class="comment">// Pause is so long that we might as well yield CPU to scheduler.</span>
+<a name="l00155"></a>00155             __TBB_Yield();
+<a name="l00156"></a>00156         }
+<a name="l00157"></a>00157     }
+<a name="l00158"></a>00158 
+<a name="l00159"></a>00159     <span class="comment">// pause for a few times and then return false immediately.</span>
+<a name="l00160"></a>00160     <span class="keywordtype">bool</span> bounded_pause() {
+<a name="l00161"></a>00161         <span class="keywordflow">if</span>( count<=LOOPS_BEFORE_YIELD ) {
+<a name="l00162"></a>00162             __TBB_Pause(count);
+<a name="l00163"></a>00163             <span class="comment">// Pause twice as long the next time.</span>
+<a name="l00164"></a>00164             count*=2;
+<a name="l00165"></a>00165             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00166"></a>00166         } <span class="keywordflow">else</span> {
+<a name="l00167"></a>00167             <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00168"></a>00168         }
+<a name="l00169"></a>00169     }
+<a name="l00170"></a>00170 
+<a name="l00171"></a>00171     <span class="keywordtype">void</span> reset() {
+<a name="l00172"></a>00172         count = 1;
+<a name="l00173"></a>00173     }
+<a name="l00174"></a>00174 };
+<a name="l00175"></a>00175 
+<a name="l00177"></a>00177 
+<a name="l00178"></a>00178 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00179"></a>00179 <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="l00180"></a>00180     atomic_backoff backoff;
+<a name="l00181"></a>00181     <span class="keywordflow">while</span>( location==value ) backoff.pause();
+<a name="l00182"></a>00182 }
+<a name="l00183"></a>00183 
+<a name="l00185"></a>00185 
+<a name="l00186"></a>00186 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00187"></a>00187 <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="l00188"></a>00188     atomic_backoff backoff;
+<a name="l00189"></a>00189     <span class="keywordflow">while</span>( location!=value ) backoff.pause();
+<a name="l00190"></a>00190 }
+<a name="l00191"></a>00191 
+<a name="l00192"></a>00192 <span class="comment">// T should be unsigned, otherwise sign propagation will break correctness of bit manipulations.</span>
+<a name="l00193"></a>00193 <span class="comment">// S should be either 1 or 2, for the mask calculation to work correctly.</span>
+<a name="l00194"></a>00194 <span class="comment">// Together, these rules limit applicability of Masked CAS to unsigned char and unsigned short.</span>
+<a name="l00195"></a>00195 <span class="keyword">template</span><size_t S, <span class="keyword">typename</span> T>
+<a name="l00196"></a>00196 <span class="keyword">inline</span> T __TBB_MaskedCompareAndSwap (<span class="keyword">volatile</span> T *ptr, T value, T comparand ) {
+<a name="l00197"></a>00197     <span class="keyword">volatile</span> uint32_t * base = (uint32_t*)( (uintptr_t)ptr & ~(uintptr_t)0x3 );
+<a name="l00198"></a>00198 <span class="preprocessor">#if __TBB_BIG_ENDIAN</span>
+<a name="l00199"></a>00199 <span class="preprocessor"></span>    <span class="keyword">const</span> uint8_t bitoffset = uint8_t( 8*( 4-S - (uintptr_t(ptr) & 0x3) ) );
+<a name="l00200"></a>00200 <span class="preprocessor">#else</span>
+<a name="l00201"></a>00201 <span class="preprocessor"></span>    <span class="keyword">const</span> uint8_t bitoffset = uint8_t( 8*((uintptr_t)ptr & 0x3) );
+<a name="l00202"></a>00202 <span class="preprocessor">#endif</span>
+<a name="l00203"></a>00203 <span class="preprocessor"></span>    <span class="keyword">const</span> uint32_t mask = ( (1<<(S*8)) - 1 )<<bitoffset;
+<a name="l00204"></a>00204     atomic_backoff b;
+<a name="l00205"></a>00205     uint32_t result;
+<a name="l00206"></a>00206     <span class="keywordflow">for</span>(;;) {
+<a name="l00207"></a>00207         result = *base; <span class="comment">// reload the base value which might change during the pause</span>
+<a name="l00208"></a>00208         uint32_t old_value = ( result & ~mask ) | ( comparand << bitoffset );
+<a name="l00209"></a>00209         uint32_t new_value = ( result & ~mask ) | ( value << bitoffset );
+<a name="l00210"></a>00210         <span class="comment">// __TBB_CompareAndSwap4 presumed to have full fence. </span>
+<a name="l00211"></a>00211         result = __TBB_CompareAndSwap4( base, new_value, old_value );
+<a name="l00212"></a>00212         <span class="keywordflow">if</span>(  result==old_value               <span class="comment">// CAS succeeded</span>
+<a name="l00213"></a>00213           || ((result^old_value)&mask)!=0 )  <span class="comment">// CAS failed and the bits of interest have changed</span>
+<a name="l00214"></a>00214             <span class="keywordflow">break</span>;
+<a name="l00215"></a>00215         <span class="keywordflow">else</span>                                 <span class="comment">// CAS failed but the bits of interest left unchanged</span>
+<a name="l00216"></a>00216             b.pause();
+<a name="l00217"></a>00217     }
+<a name="l00218"></a>00218     <span class="keywordflow">return</span> T((result & mask) >> bitoffset);
+<a name="l00219"></a>00219 }
+<a name="l00220"></a>00220 
+<a name="l00221"></a>00221 <span class="keyword">template</span><size_t S, <span class="keyword">typename</span> T>
+<a name="l00222"></a>00222 <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="l00223"></a>00223     <span class="keywordflow">return</span> __TBB_CompareAndSwapW((T *)ptr,value,comparand);
+<a name="l00224"></a>00224 }
+<a name="l00225"></a>00225 
+<a name="l00226"></a>00226 <span class="keyword">template</span><>
+<a name="l00227"></a>00227 <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="l00228"></a>00228 #ifdef __TBB_CompareAndSwap1
+<a name="l00229"></a>00229     <span class="keywordflow">return</span> __TBB_CompareAndSwap1(ptr,value,comparand);
+<a name="l00230"></a>00230 <span class="preprocessor">#else</span>
+<a name="l00231"></a>00231 <span class="preprocessor"></span>    <span class="keywordflow">return</span> __TBB_MaskedCompareAndSwap<1,uint8_t>((<span class="keyword">volatile</span> uint8_t *)ptr,value,comparand);
+<a name="l00232"></a>00232 <span class="preprocessor">#endif</span>
+<a name="l00233"></a>00233 <span class="preprocessor"></span>}
+<a name="l00234"></a>00234 
+<a name="l00235"></a>00235 <span class="keyword">template</span><>
+<a name="l00236"></a>00236 <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="l00237"></a>00237 #ifdef __TBB_CompareAndSwap2
+<a name="l00238"></a>00238     <span class="keywordflow">return</span> __TBB_CompareAndSwap2(ptr,value,comparand);
+<a name="l00239"></a>00239 <span class="preprocessor">#else</span>
+<a name="l00240"></a>00240 <span class="preprocessor"></span>    <span class="keywordflow">return</span> __TBB_MaskedCompareAndSwap<2,uint16_t>((<span class="keyword">volatile</span> uint16_t *)ptr,value,comparand);
+<a name="l00241"></a>00241 <span class="preprocessor">#endif</span>
+<a name="l00242"></a>00242 <span class="preprocessor"></span>}
+<a name="l00243"></a>00243 
+<a name="l00244"></a>00244 <span class="keyword">template</span><>
+<a name="l00245"></a>00245 <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="l00246"></a>00246     <span class="keywordflow">return</span> __TBB_CompareAndSwap4(ptr,value,comparand);
+<a name="l00247"></a>00247 }
+<a name="l00248"></a>00248 
+<a name="l00249"></a>00249 <span class="preprocessor">#if __TBB_64BIT_ATOMICS</span>
+<a name="l00250"></a>00250 <span class="preprocessor"></span><span class="keyword">template</span><>
+<a name="l00251"></a>00251 <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="l00252"></a>00252     <span class="keywordflow">return</span> __TBB_CompareAndSwap8(ptr,value,comparand);
+<a name="l00253"></a>00253 }
+<a name="l00254"></a>00254 <span class="preprocessor">#endif</span>
+<a name="l00255"></a>00255 <span class="preprocessor"></span>
+<a name="l00256"></a>00256 <span class="keyword">template</span><size_t S, <span class="keyword">typename</span> T>
+<a name="l00257"></a>00257 <span class="keyword">inline</span> T __TBB_FetchAndAddGeneric (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, T addend) {
+<a name="l00258"></a>00258     atomic_backoff b;
+<a name="l00259"></a>00259     T result;
+<a name="l00260"></a>00260     <span class="keywordflow">for</span>(;;) {
+<a name="l00261"></a>00261         result = *reinterpret_cast<volatile T *>(ptr);
+<a name="l00262"></a>00262         <span class="comment">// __TBB_CompareAndSwapGeneric presumed to have full fence. </span>
+<a name="l00263"></a>00263         <span class="keywordflow">if</span>( __TBB_CompareAndSwapGeneric<S,T> ( ptr, result+addend, result )==result ) 
+<a name="l00264"></a>00264             <span class="keywordflow">break</span>;
+<a name="l00265"></a>00265         b.pause();
+<a name="l00266"></a>00266     }
+<a name="l00267"></a>00267     <span class="keywordflow">return</span> result;
+<a name="l00268"></a>00268 }
+<a name="l00269"></a>00269 
+<a name="l00270"></a>00270 <span class="keyword">template</span><size_t S, <span class="keyword">typename</span> T>
+<a name="l00271"></a>00271 <span class="keyword">inline</span> T __TBB_FetchAndStoreGeneric (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, T value) {
+<a name="l00272"></a>00272     atomic_backoff b;
+<a name="l00273"></a>00273     T result;
+<a name="l00274"></a>00274     <span class="keywordflow">for</span>(;;) {
+<a name="l00275"></a>00275         result = *reinterpret_cast<volatile T *>(ptr);
+<a name="l00276"></a>00276         <span class="comment">// __TBB_CompareAndSwapGeneric presumed to have full fence.</span>
+<a name="l00277"></a>00277         <span class="keywordflow">if</span>( __TBB_CompareAndSwapGeneric<S,T> ( ptr, value, result )==result ) 
+<a name="l00278"></a>00278             <span class="keywordflow">break</span>;
+<a name="l00279"></a>00279         b.pause();
+<a name="l00280"></a>00280     }
+<a name="l00281"></a>00281     <span class="keywordflow">return</span> result;
+<a name="l00282"></a>00282 }
+<a name="l00283"></a>00283 
+<a name="l00284"></a>00284 <span class="comment">// Macro __TBB_TypeWithAlignmentAtLeastAsStrict(T) should be a type with alignment at least as </span>
+<a name="l00285"></a>00285 <span class="comment">// strict as type T.  Type type should have a trivial default constructor and destructor, so that</span>
+<a name="l00286"></a>00286 <span class="comment">// arrays of that type can be declared without initializers.  </span>
+<a name="l00287"></a>00287 <span class="comment">// It is correct (but perhaps a waste of space) if __TBB_TypeWithAlignmentAtLeastAsStrict(T) expands</span>
+<a name="l00288"></a>00288 <span class="comment">// to a type bigger than T.</span>
+<a name="l00289"></a>00289 <span class="comment">// The default definition here works on machines where integers are naturally aligned and the</span>
+<a name="l00290"></a>00290 <span class="comment">// strictest alignment is 16.</span>
+<a name="l00291"></a>00291 <span class="preprocessor">#ifndef __TBB_TypeWithAlignmentAtLeastAsStrict</span>
+<a name="l00292"></a>00292 <span class="preprocessor"></span>
+<a name="l00293"></a>00293 <span class="preprocessor">#if __GNUC__ || __SUNPRO_CC || __IBMCPP__</span>
+<a name="l00294"></a>00294 <span class="preprocessor"></span><span class="keyword">struct </span>__TBB_machine_type_with_strictest_alignment {
+<a name="l00295"></a>00295     <span class="keywordtype">int</span> member[4];
+<a name="l00296"></a>00296 } __attribute__((aligned(16)));
+<a name="l00297"></a>00297 <span class="preprocessor">#elif _MSC_VER</span>
+<a name="l00298"></a>00298 <span class="preprocessor"></span>__declspec(align(16)) struct __TBB_machine_type_with_strictest_alignment {
+<a name="l00299"></a>00299     <span class="keywordtype">int</span> member[4];
+<a name="l00300"></a>00300 };
+<a name="l00301"></a>00301 <span class="preprocessor">#else</span>
+<a name="l00302"></a>00302 <span class="preprocessor"></span><span class="preprocessor">#error Must define __TBB_TypeWithAlignmentAtLeastAsStrict(T) or __TBB_machine_type_with_strictest_alignment</span>
+<a name="l00303"></a>00303 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00304"></a>00304 <span class="preprocessor"></span>
+<a name="l00305"></a>00305 <span class="keyword">template</span><size_t N> <span class="keyword">struct </span>type_with_alignment {__TBB_machine_type_with_strictest_alignment member;};
+<a name="l00306"></a>00306 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<1> { <span class="keywordtype">char</span> member; };
+<a name="l00307"></a>00307 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<2> { uint16_t member; };
+<a name="l00308"></a>00308 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<4> { uint32_t member; };
+<a name="l00309"></a>00309 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<8> { uint64_t member; };
+<a name="l00310"></a>00310 
+<a name="l00311"></a>00311 <span class="preprocessor">#if _MSC_VER||defined(__GNUC__)&&__GNUC__==3 && __GNUC_MINOR__<=2  </span>
+<a name="l00313"></a>00313 <span class="preprocessor"></span>
+<a name="l00315"></a>00315 <span class="preprocessor">template<size_t Size, typename T> </span>
+<a name="l00316"></a><a class="code" href="a00305.html">00316</a> <span class="preprocessor"></span><span class="keyword">struct </span><a class="code" href="a00305.html">work_around_alignment_bug</a> {
+<a name="l00317"></a>00317 <span class="preprocessor">#if _MSC_VER</span>
+<a name="l00318"></a>00318 <span class="preprocessor"></span>    <span class="keyword">static</span> <span class="keyword">const</span> size_t alignment = __alignof(T);
+<a name="l00319"></a>00319 <span class="preprocessor">#else</span>
+<a name="l00320"></a>00320 <span class="preprocessor"></span>    <span class="keyword">static</span> <span class="keyword">const</span> size_t alignment = __alignof__(T);
+<a name="l00321"></a>00321 <span class="preprocessor">#endif</span>
+<a name="l00322"></a>00322 <span class="preprocessor"></span>};
+<a name="l00323"></a>00323 <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="l00324"></a>00324 <span class="preprocessor"></span><span class="preprocessor">#elif __GNUC__ || __SUNPRO_CC || __IBMCPP__</span>
+<a name="l00325"></a>00325 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_TypeWithAlignmentAtLeastAsStrict(T) tbb::internal::type_with_alignment<__alignof__(T)></span>
+<a name="l00326"></a>00326 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00327"></a>00327 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_TypeWithAlignmentAtLeastAsStrict(T) __TBB_machine_type_with_strictest_alignment</span>
+<a name="l00328"></a>00328 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00329"></a>00329 <span class="preprocessor"></span><span class="preprocessor">#endif  </span><span class="comment">/* ____TBB_TypeWithAlignmentAtLeastAsStrict */</span>
+<a name="l00330"></a>00330 
+<a name="l00331"></a>00331 <span class="comment">// Template class here is to avoid instantiation of the static data for modules that don't use it</span>
+<a name="l00332"></a>00332 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00333"></a>00333 <span class="keyword">struct </span>reverse {
+<a name="l00334"></a>00334     <span class="keyword">static</span> <span class="keyword">const</span> T byte_table[256];
+<a name="l00335"></a>00335 };
+<a name="l00336"></a>00336 <span class="comment">// An efficient implementation of the reverse function utilizes a 2^8 lookup table holding the bit-reversed</span>
+<a name="l00337"></a>00337 <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="l00338"></a>00338 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00339"></a>00339 <span class="keyword">const</span> T reverse<T>::byte_table[256] = {
+<a name="l00340"></a>00340     0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0,
+<a name="l00341"></a>00341     0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8,
+<a name="l00342"></a>00342     0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4,
+<a name="l00343"></a>00343     0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC,
+<a name="l00344"></a>00344     0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2,
+<a name="l00345"></a>00345     0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA,
+<a name="l00346"></a>00346     0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6,
+<a name="l00347"></a>00347     0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE,
+<a name="l00348"></a>00348     0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1, 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1,
+<a name="l00349"></a>00349     0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9,
+<a name="l00350"></a>00350     0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5, 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5,
+<a name="l00351"></a>00351     0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED, 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD,
+<a name="l00352"></a>00352     0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3, 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3,
+<a name="l00353"></a>00353     0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB,
+<a name="l00354"></a>00354     0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7,
+<a name="l00355"></a>00355     0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF
+<a name="l00356"></a>00356 };
+<a name="l00357"></a>00357 
+<a name="l00358"></a>00358 } <span class="comment">// namespace internal</span>
+<a name="l00359"></a>00359 } <span class="comment">// namespace tbb</span>
+<a name="l00360"></a>00360 
+<a name="l00361"></a>00361 <span class="preprocessor">#ifndef __TBB_CompareAndSwap1</span>
+<a name="l00362"></a>00362 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap1 tbb::internal::__TBB_CompareAndSwapGeneric<1,uint8_t></span>
+<a name="l00363"></a>00363 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00364"></a>00364 <span class="preprocessor"></span>
+<a name="l00365"></a>00365 <span class="preprocessor">#ifndef __TBB_CompareAndSwap2 </span>
+<a name="l00366"></a>00366 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap2 tbb::internal::__TBB_CompareAndSwapGeneric<2,uint16_t></span>
+<a name="l00367"></a>00367 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00368"></a>00368 <span class="preprocessor"></span>
+<a name="l00369"></a>00369 <span class="preprocessor">#ifndef __TBB_CompareAndSwapW</span>
+<a name="l00370"></a>00370 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwapW tbb::internal::__TBB_CompareAndSwapGeneric<sizeof(ptrdiff_t),ptrdiff_t></span>
+<a name="l00371"></a>00371 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00372"></a>00372 <span class="preprocessor"></span>
+<a name="l00373"></a>00373 <span class="preprocessor">#ifndef __TBB_FetchAndAdd1</span>
+<a name="l00374"></a>00374 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd1 tbb::internal::__TBB_FetchAndAddGeneric<1,uint8_t></span>
+<a name="l00375"></a>00375 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00376"></a>00376 <span class="preprocessor"></span>
+<a name="l00377"></a>00377 <span class="preprocessor">#ifndef __TBB_FetchAndAdd2</span>
+<a name="l00378"></a>00378 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd2 tbb::internal::__TBB_FetchAndAddGeneric<2,uint16_t></span>
+<a name="l00379"></a>00379 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00380"></a>00380 <span class="preprocessor"></span>
+<a name="l00381"></a>00381 <span class="preprocessor">#ifndef __TBB_FetchAndAdd4</span>
+<a name="l00382"></a>00382 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd4 tbb::internal::__TBB_FetchAndAddGeneric<4,uint32_t></span>
+<a name="l00383"></a>00383 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00384"></a>00384 <span class="preprocessor"></span>
+<a name="l00385"></a>00385 <span class="preprocessor">#ifndef __TBB_FetchAndAdd8</span>
+<a name="l00386"></a>00386 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd8 tbb::internal::__TBB_FetchAndAddGeneric<8,uint64_t></span>
+<a name="l00387"></a>00387 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00388"></a>00388 <span class="preprocessor"></span>
+<a name="l00389"></a>00389 <span class="preprocessor">#ifndef __TBB_FetchAndAddW</span>
+<a name="l00390"></a>00390 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAddW tbb::internal::__TBB_FetchAndAddGeneric<sizeof(ptrdiff_t),ptrdiff_t></span>
+<a name="l00391"></a>00391 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00392"></a>00392 <span class="preprocessor"></span>
+<a name="l00393"></a>00393 <span class="preprocessor">#ifndef __TBB_FetchAndStore1</span>
+<a name="l00394"></a>00394 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore1 tbb::internal::__TBB_FetchAndStoreGeneric<1,uint8_t></span>
+<a name="l00395"></a>00395 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00396"></a>00396 <span class="preprocessor"></span>
+<a name="l00397"></a>00397 <span class="preprocessor">#ifndef __TBB_FetchAndStore2</span>
+<a name="l00398"></a>00398 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore2 tbb::internal::__TBB_FetchAndStoreGeneric<2,uint16_t></span>
+<a name="l00399"></a>00399 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00400"></a>00400 <span class="preprocessor"></span>
+<a name="l00401"></a>00401 <span class="preprocessor">#ifndef __TBB_FetchAndStore4</span>
+<a name="l00402"></a>00402 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore4 tbb::internal::__TBB_FetchAndStoreGeneric<4,uint32_t></span>
+<a name="l00403"></a>00403 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00404"></a>00404 <span class="preprocessor"></span>
+<a name="l00405"></a>00405 <span class="preprocessor">#ifndef __TBB_FetchAndStore8</span>
+<a name="l00406"></a>00406 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore8 tbb::internal::__TBB_FetchAndStoreGeneric<8,uint64_t></span>
+<a name="l00407"></a>00407 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00408"></a>00408 <span class="preprocessor"></span>
+<a name="l00409"></a>00409 <span class="preprocessor">#ifndef __TBB_FetchAndStoreW</span>
+<a name="l00410"></a>00410 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStoreW tbb::internal::__TBB_FetchAndStoreGeneric<sizeof(ptrdiff_t),ptrdiff_t></span>
+<a name="l00411"></a>00411 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00412"></a>00412 <span class="preprocessor"></span>
+<a name="l00413"></a>00413 <span class="preprocessor">#if __TBB_DECL_FENCED_ATOMICS</span>
+<a name="l00414"></a>00414 <span class="preprocessor"></span>
+<a name="l00415"></a>00415 <span class="preprocessor">#ifndef __TBB_CompareAndSwap1__TBB_full_fence</span>
+<a name="l00416"></a>00416 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap1__TBB_full_fence __TBB_CompareAndSwap1</span>
+<a name="l00417"></a>00417 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
+<a name="l00418"></a>00418 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap1acquire</span>
+<a name="l00419"></a>00419 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap1acquire __TBB_CompareAndSwap1__TBB_full_fence</span>
+<a name="l00420"></a>00420 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
+<a name="l00421"></a>00421 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap1release</span>
+<a name="l00422"></a>00422 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap1release __TBB_CompareAndSwap1__TBB_full_fence</span>
+<a name="l00423"></a>00423 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
+<a name="l00424"></a>00424 <span class="preprocessor"></span>
+<a name="l00425"></a>00425 <span class="preprocessor">#ifndef __TBB_CompareAndSwap2__TBB_full_fence</span>
+<a name="l00426"></a>00426 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap2__TBB_full_fence __TBB_CompareAndSwap2</span>
+<a name="l00427"></a>00427 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00428"></a>00428 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap2acquire</span>
+<a name="l00429"></a>00429 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap2acquire __TBB_CompareAndSwap2__TBB_full_fence</span>
+<a name="l00430"></a>00430 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00431"></a>00431 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap2release</span>
+<a name="l00432"></a>00432 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap2release __TBB_CompareAndSwap2__TBB_full_fence</span>
+<a name="l00433"></a>00433 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00434"></a>00434 <span class="preprocessor"></span>
+<a name="l00435"></a>00435 <span class="preprocessor">#ifndef __TBB_CompareAndSwap4__TBB_full_fence</span>
+<a name="l00436"></a>00436 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap4__TBB_full_fence __TBB_CompareAndSwap4</span>
+<a name="l00437"></a>00437 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
+<a name="l00438"></a>00438 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap4acquire</span>
+<a name="l00439"></a>00439 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap4acquire __TBB_CompareAndSwap4__TBB_full_fence</span>
+<a name="l00440"></a>00440 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
+<a name="l00441"></a>00441 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap4release</span>
+<a name="l00442"></a>00442 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap4release __TBB_CompareAndSwap4__TBB_full_fence</span>
+<a name="l00443"></a>00443 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
+<a name="l00444"></a>00444 <span class="preprocessor"></span>
+<a name="l00445"></a>00445 <span class="preprocessor">#ifndef __TBB_CompareAndSwap8__TBB_full_fence</span>
+<a name="l00446"></a>00446 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap8__TBB_full_fence __TBB_CompareAndSwap8</span>
+<a name="l00447"></a>00447 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00448"></a>00448 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap8acquire</span>
+<a name="l00449"></a>00449 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap8acquire __TBB_CompareAndSwap8__TBB_full_fence</span>
+<a name="l00450"></a>00450 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00451"></a>00451 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap8release</span>
+<a name="l00452"></a>00452 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap8release __TBB_CompareAndSwap8__TBB_full_fence</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">#ifndef __TBB_FetchAndAdd1__TBB_full_fence</span>
+<a name="l00456"></a>00456 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd1__TBB_full_fence __TBB_FetchAndAdd1</span>
+<a name="l00457"></a>00457 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00458"></a>00458 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd1acquire</span>
+<a name="l00459"></a>00459 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd1acquire __TBB_FetchAndAdd1__TBB_full_fence</span>
+<a name="l00460"></a>00460 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00461"></a>00461 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd1release</span>
+<a name="l00462"></a>00462 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd1release __TBB_FetchAndAdd1__TBB_full_fence</span>
+<a name="l00463"></a>00463 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00464"></a>00464 <span class="preprocessor"></span>
+<a name="l00465"></a>00465 <span class="preprocessor">#ifndef __TBB_FetchAndAdd2__TBB_full_fence</span>
+<a name="l00466"></a>00466 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd2__TBB_full_fence __TBB_FetchAndAdd2</span>
+<a name="l00467"></a>00467 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00468"></a>00468 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd2acquire</span>
+<a name="l00469"></a>00469 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd2acquire __TBB_FetchAndAdd2__TBB_full_fence</span>
+<a name="l00470"></a>00470 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00471"></a>00471 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd2release</span>
+<a name="l00472"></a>00472 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd2release __TBB_FetchAndAdd2__TBB_full_fence</span>
+<a name="l00473"></a>00473 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00474"></a>00474 <span class="preprocessor"></span>
+<a name="l00475"></a>00475 <span class="preprocessor">#ifndef __TBB_FetchAndAdd4__TBB_full_fence</span>
+<a name="l00476"></a>00476 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd4__TBB_full_fence __TBB_FetchAndAdd4</span>
+<a name="l00477"></a>00477 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00478"></a>00478 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd4acquire</span>
+<a name="l00479"></a>00479 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd4acquire __TBB_FetchAndAdd4__TBB_full_fence</span>
+<a name="l00480"></a>00480 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00481"></a>00481 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd4release</span>
+<a name="l00482"></a>00482 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd4release __TBB_FetchAndAdd4__TBB_full_fence</span>
+<a name="l00483"></a>00483 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00484"></a>00484 <span class="preprocessor"></span>
+<a name="l00485"></a>00485 <span class="preprocessor">#ifndef __TBB_FetchAndAdd8__TBB_full_fence</span>
+<a name="l00486"></a>00486 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd8__TBB_full_fence __TBB_FetchAndAdd8</span>
+<a name="l00487"></a>00487 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00488"></a>00488 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd8acquire</span>
+<a name="l00489"></a>00489 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd8acquire __TBB_FetchAndAdd8__TBB_full_fence</span>
+<a name="l00490"></a>00490 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00491"></a>00491 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd8release</span>
+<a name="l00492"></a>00492 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd8release __TBB_FetchAndAdd8__TBB_full_fence</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">#ifndef __TBB_FetchAndStore1__TBB_full_fence</span>
+<a name="l00496"></a>00496 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore1__TBB_full_fence __TBB_FetchAndStore1</span>
+<a name="l00497"></a>00497 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00498"></a>00498 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore1acquire</span>
+<a name="l00499"></a>00499 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore1acquire __TBB_FetchAndStore1__TBB_full_fence</span>
+<a name="l00500"></a>00500 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00501"></a>00501 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore1release</span>
+<a name="l00502"></a>00502 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore1release __TBB_FetchAndStore1__TBB_full_fence</span>
+<a name="l00503"></a>00503 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00504"></a>00504 <span class="preprocessor"></span>
+<a name="l00505"></a>00505 <span class="preprocessor">#ifndef __TBB_FetchAndStore2__TBB_full_fence</span>
+<a name="l00506"></a>00506 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore2__TBB_full_fence __TBB_FetchAndStore2</span>
+<a name="l00507"></a>00507 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00508"></a>00508 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore2acquire</span>
+<a name="l00509"></a>00509 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore2acquire __TBB_FetchAndStore2__TBB_full_fence</span>
+<a name="l00510"></a>00510 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00511"></a>00511 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore2release</span>
+<a name="l00512"></a>00512 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore2release __TBB_FetchAndStore2__TBB_full_fence</span>
+<a name="l00513"></a>00513 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00514"></a>00514 <span class="preprocessor"></span>
+<a name="l00515"></a>00515 <span class="preprocessor">#ifndef __TBB_FetchAndStore4__TBB_full_fence</span>
+<a name="l00516"></a>00516 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore4__TBB_full_fence __TBB_FetchAndStore4</span>
+<a name="l00517"></a>00517 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00518"></a>00518 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore4acquire</span>
+<a name="l00519"></a>00519 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore4acquire __TBB_FetchAndStore4__TBB_full_fence</span>
+<a name="l00520"></a>00520 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00521"></a>00521 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore4release</span>
+<a name="l00522"></a>00522 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore4release __TBB_FetchAndStore4__TBB_full_fence</span>
+<a name="l00523"></a>00523 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00524"></a>00524 <span class="preprocessor"></span>
+<a name="l00525"></a>00525 <span class="preprocessor">#ifndef __TBB_FetchAndStore8__TBB_full_fence</span>
+<a name="l00526"></a>00526 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore8__TBB_full_fence __TBB_FetchAndStore8</span>
+<a name="l00527"></a>00527 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00528"></a>00528 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore8acquire</span>
+<a name="l00529"></a>00529 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore8acquire __TBB_FetchAndStore8__TBB_full_fence</span>
+<a name="l00530"></a>00530 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00531"></a>00531 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore8release</span>
+<a name="l00532"></a>00532 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore8release __TBB_FetchAndStore8__TBB_full_fence</span>
+<a name="l00533"></a>00533 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00534"></a>00534 <span class="preprocessor"></span>
+<a name="l00535"></a>00535 <span class="preprocessor">#endif // __TBB_DECL_FENCED_ATOMICS</span>
+<a name="l00536"></a>00536 <span class="preprocessor"></span>
+<a name="l00537"></a>00537 <span class="comment">// Special atomic functions</span>
+<a name="l00538"></a>00538 <span class="preprocessor">#ifndef __TBB_FetchAndAddWrelease</span>
+<a name="l00539"></a>00539 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAddWrelease __TBB_FetchAndAddW</span>
+<a name="l00540"></a>00540 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00541"></a>00541 <span class="preprocessor"></span>
+<a name="l00542"></a>00542 <span class="preprocessor">#ifndef __TBB_FetchAndIncrementWacquire</span>
+<a name="l00543"></a>00543 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndIncrementWacquire(P) __TBB_FetchAndAddW(P,1)</span>
+<a name="l00544"></a>00544 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00545"></a>00545 <span class="preprocessor"></span>
+<a name="l00546"></a>00546 <span class="preprocessor">#ifndef __TBB_FetchAndDecrementWrelease</span>
+<a name="l00547"></a>00547 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndDecrementWrelease(P) __TBB_FetchAndAddW(P,(-1))</span>
+<a name="l00548"></a>00548 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00549"></a>00549 <span class="preprocessor"></span>
+<a name="l00550"></a>00550 <span class="keyword">template</span> <<span class="keyword">typename</span> T, size_t S>
+<a name="l00551"></a>00551 <span class="keyword">struct </span>__TBB_machine_load_store {
+<a name="l00552"></a>00552     <span class="keyword">static</span> <span class="keyword">inline</span> T load_with_acquire(<span class="keyword">const</span> <span class="keyword">volatile</span> T& location) {
+<a name="l00553"></a>00553         T to_return = location;
+<a name="l00554"></a>00554         __TBB_release_consistency_helper();
+<a name="l00555"></a>00555         <span class="keywordflow">return</span> to_return;
+<a name="l00556"></a>00556     }
+<a name="l00557"></a>00557 
+<a name="l00558"></a>00558     <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> store_with_release(<span class="keyword">volatile</span> T &location, T value) {
+<a name="l00559"></a>00559         __TBB_release_consistency_helper();
+<a name="l00560"></a>00560         location = value;
+<a name="l00561"></a>00561     }
+<a name="l00562"></a>00562 };
+<a name="l00563"></a>00563 
+<a name="l00564"></a>00564 <span class="preprocessor">#if __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS</span>
+<a name="l00565"></a>00565 <span class="preprocessor"></span><span class="preprocessor">#if _MSC_VER</span>
+<a name="l00566"></a>00566 <span class="preprocessor"></span><span class="keyword">using</span> tbb::internal::int64_t;
+<a name="l00567"></a>00567 <span class="preprocessor">#endif</span>
+<a name="l00568"></a>00568 <span class="preprocessor"></span><span class="comment">// On 32-bit platforms, there should be definition of __TBB_Store8 and __TBB_Load8</span>
+<a name="l00569"></a>00569 <span class="preprocessor">#ifndef __TBB_Store8</span>
+<a name="l00570"></a>00570 <span class="preprocessor"></span><span class="keyword">inline</span> <span class="keywordtype">void</span> __TBB_Store8 (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, int64_t value) {
+<a name="l00571"></a>00571     <span class="keywordflow">for</span>(;;) {
+<a name="l00572"></a>00572         int64_t result = *(int64_t *)ptr;
+<a name="l00573"></a>00573         <span class="keywordflow">if</span>( __TBB_CompareAndSwap8(ptr,value,result)==result ) <span class="keywordflow">break</span>;
+<a name="l00574"></a>00574     }
+<a name="l00575"></a>00575 }
+<a name="l00576"></a>00576 <span class="preprocessor">#endif</span>
+<a name="l00577"></a>00577 <span class="preprocessor"></span>
+<a name="l00578"></a>00578 <span class="preprocessor">#ifndef __TBB_Load8</span>
+<a name="l00579"></a>00579 <span class="preprocessor"></span><span class="keyword">inline</span> int64_t __TBB_Load8 (<span class="keyword">const</span> <span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr) {
+<a name="l00580"></a>00580     <span class="keyword">const</span> int64_t anyvalue = 3264; <span class="comment">// Could be anything, just the same for comparand and new value</span>
+<a name="l00581"></a>00581     <span class="keywordflow">return</span> __TBB_CompareAndSwap8(const_cast<volatile void *>(ptr),anyvalue,anyvalue);
+<a name="l00582"></a>00582 }
+<a name="l00583"></a>00583 <span class="preprocessor">#endif</span>
+<a name="l00584"></a>00584 <span class="preprocessor"></span>
+<a name="l00585"></a>00585 <span class="keyword">template</span> <<span class="keyword">typename</span> T>
+<a name="l00586"></a>00586 <span class="keyword">struct </span>__TBB_machine_load_store<T,8> {
+<a name="l00587"></a>00587     <span class="keyword">static</span> <span class="keyword">inline</span> T load_with_acquire(<span class="keyword">const</span> <span class="keyword">volatile</span> T& location) {
+<a name="l00588"></a>00588         T to_return = (T)__TBB_Load8((<span class="keyword">const</span> <span class="keyword">volatile</span> <span class="keywordtype">void</span>*)&location);
+<a name="l00589"></a>00589         __TBB_release_consistency_helper();
+<a name="l00590"></a>00590         <span class="keywordflow">return</span> to_return;
+<a name="l00591"></a>00591     }
+<a name="l00592"></a>00592 
+<a name="l00593"></a>00593     <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> store_with_release(<span class="keyword">volatile</span> T& location, T value) {
+<a name="l00594"></a>00594         __TBB_release_consistency_helper();
+<a name="l00595"></a>00595         __TBB_Store8((<span class="keyword">volatile</span> <span class="keywordtype">void</span> *)&location,(int64_t)value);
+<a name="l00596"></a>00596     }
+<a name="l00597"></a>00597 };
+<a name="l00598"></a>00598 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_WORDSIZE==4 */</span>
+<a name="l00599"></a>00599 
+<a name="l00600"></a>00600 <span class="preprocessor">#ifndef __TBB_load_with_acquire</span>
+<a name="l00601"></a>00601 <span class="preprocessor"></span><span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00602"></a>00602 <span class="keyword">inline</span> T __TBB_load_with_acquire(<span class="keyword">const</span> <span class="keyword">volatile</span> T &location) {
+<a name="l00603"></a>00603     <span class="keywordflow">return</span> __TBB_machine_load_store<T,sizeof(T)>::load_with_acquire(location);
+<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="l00607"></a>00607 <span class="preprocessor">#ifndef __TBB_store_with_release</span>
+<a name="l00608"></a>00608 <span class="preprocessor"></span><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_with_release(<span class="keyword">volatile</span> T& location, V value) {
+<a name="l00610"></a>00610     __TBB_machine_load_store<T,sizeof(T)>::store_with_release(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_with_release(<span class="keyword">volatile</span> size_t& location, size_t value) {
+<a name="l00614"></a>00614     __TBB_machine_load_store<size_t,sizeof(size_t)>::store_with_release(location,value);
+<a name="l00615"></a>00615 }
+<a name="l00616"></a>00616 <span class="preprocessor">#endif</span>
+<a name="l00617"></a>00617 <span class="preprocessor"></span>
+<a name="l00618"></a>00618 <span class="preprocessor">#ifndef __TBB_Log2</span>
+<a name="l00619"></a>00619 <span class="preprocessor"></span><span class="keyword">inline</span> intptr_t __TBB_Log2( uintptr_t x ) {
+<a name="l00620"></a>00620     <span class="keywordflow">if</span>( x==0 ) <span class="keywordflow">return</span> -1;
+<a name="l00621"></a>00621     intptr_t result = 0;
+<a name="l00622"></a>00622     uintptr_t tmp;
+<a name="l00623"></a>00623 <span class="preprocessor">#if __TBB_WORDSIZE>=8</span>
+<a name="l00624"></a>00624 <span class="preprocessor"></span>    <span class="keywordflow">if</span>( (tmp = x>>32) ) { x=tmp; result += 32; }
+<a name="l00625"></a>00625 <span class="preprocessor">#endif</span>
+<a name="l00626"></a>00626 <span class="preprocessor"></span>    <span class="keywordflow">if</span>( (tmp = x>>16) ) { x=tmp; result += 16; }
+<a name="l00627"></a>00627     <span class="keywordflow">if</span>( (tmp = x>>8) )  { x=tmp; result += 8; }
+<a name="l00628"></a>00628     <span class="keywordflow">if</span>( (tmp = x>>4) )  { x=tmp; result += 4; }
+<a name="l00629"></a>00629     <span class="keywordflow">if</span>( (tmp = x>>2) )  { x=tmp; result += 2; }
+<a name="l00630"></a>00630     <span class="keywordflow">return</span> (x&2)? result+1: result;
+<a name="l00631"></a>00631 }
+<a name="l00632"></a>00632 <span class="preprocessor">#endif</span>
+<a name="l00633"></a>00633 <span class="preprocessor"></span>
+<a name="l00634"></a>00634 <span class="preprocessor">#ifndef __TBB_AtomicOR</span>
+<a name="l00635"></a>00635 <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="l00636"></a>00636     <a class="code" href="a00218.html">tbb::internal::atomic_backoff</a> b;
+<a name="l00637"></a>00637     <span class="keywordflow">for</span>(;;) {
+<a name="l00638"></a>00638         uintptr_t tmp = *(<span class="keyword">volatile</span> uintptr_t *)operand;
+<a name="l00639"></a>00639         uintptr_t result = __TBB_CompareAndSwapW(operand, tmp|addend, tmp);
+<a name="l00640"></a>00640         <span class="keywordflow">if</span>( result==tmp ) <span class="keywordflow">break</span>;
+<a name="l00641"></a>00641         b.<a class="code" href="a00218.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>();
+<a name="l00642"></a>00642     }
+<a name="l00643"></a>00643 }
+<a name="l00644"></a>00644 <span class="preprocessor">#endif</span>
+<a name="l00645"></a>00645 <span class="preprocessor"></span>
+<a name="l00646"></a>00646 <span class="preprocessor">#ifndef __TBB_AtomicAND</span>
+<a name="l00647"></a>00647 <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="l00648"></a>00648     <a class="code" href="a00218.html">tbb::internal::atomic_backoff</a> b;
+<a name="l00649"></a>00649     <span class="keywordflow">for</span>(;;) {
+<a name="l00650"></a>00650         uintptr_t tmp = *(<span class="keyword">volatile</span> uintptr_t *)operand;
+<a name="l00651"></a>00651         uintptr_t result = __TBB_CompareAndSwapW(operand, tmp&addend, tmp);
+<a name="l00652"></a>00652         <span class="keywordflow">if</span>( result==tmp ) <span class="keywordflow">break</span>;
+<a name="l00653"></a>00653         b.<a class="code" href="a00218.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>();
+<a name="l00654"></a>00654     }
+<a name="l00655"></a>00655 }
+<a name="l00656"></a>00656 <span class="preprocessor">#endif</span>
+<a name="l00657"></a>00657 <span class="preprocessor"></span>
+<a name="l00658"></a>00658 <span class="preprocessor">#ifndef __TBB_Byte</span>
+<a name="l00659"></a>00659 <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> __TBB_Byte;
+<a name="l00660"></a>00660 <span class="preprocessor">#endif</span>
+<a name="l00661"></a>00661 <span class="preprocessor"></span>
+<a name="l00662"></a>00662 <span class="preprocessor">#ifndef __TBB_TryLockByte</span>
+<a name="l00663"></a>00663 <span class="preprocessor"></span><span class="keyword">inline</span> <span class="keywordtype">bool</span> __TBB_TryLockByte( __TBB_Byte &flag ) {
+<a name="l00664"></a>00664     <span class="keywordflow">return</span> __TBB_CompareAndSwap1(&flag,1,0)==0;
+<a name="l00665"></a>00665 }
+<a name="l00666"></a>00666 <span class="preprocessor">#endif</span>
+<a name="l00667"></a>00667 <span class="preprocessor"></span>
+<a name="l00668"></a>00668 <span class="preprocessor">#ifndef __TBB_LockByte</span>
+<a name="l00669"></a>00669 <span class="preprocessor"></span><span class="keyword">inline</span> uintptr_t __TBB_LockByte( __TBB_Byte& flag ) {
+<a name="l00670"></a>00670     <span class="keywordflow">if</span> ( !__TBB_TryLockByte(flag) ) {
+<a name="l00671"></a>00671         <a class="code" href="a00218.html">tbb::internal::atomic_backoff</a> b;
+<a name="l00672"></a>00672         <span class="keywordflow">do</span> {
+<a name="l00673"></a>00673             b.<a class="code" href="a00218.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>();
+<a name="l00674"></a>00674         } <span class="keywordflow">while</span> ( !__TBB_TryLockByte(flag) );
+<a name="l00675"></a>00675     }
+<a name="l00676"></a>00676     <span class="keywordflow">return</span> 0;
+<a name="l00677"></a>00677 }
+<a name="l00678"></a>00678 <span class="preprocessor">#endif</span>
+<a name="l00679"></a>00679 <span class="preprocessor"></span>
+<a name="l00680"></a>00680 <span class="preprocessor">#define __TBB_UnlockByte __TBB_store_with_release</span>
+<a name="l00681"></a>00681 <span class="preprocessor"></span>
+<a name="l00682"></a>00682 <span class="preprocessor">#ifndef __TBB_ReverseByte</span>
+<a name="l00683"></a>00683 <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="l00684"></a>00684     <span class="keywordflow">return</span> tbb::internal::reverse<unsigned char>::byte_table[src];
+<a name="l00685"></a>00685 }
+<a name="l00686"></a>00686 <span class="preprocessor">#endif</span>
+<a name="l00687"></a>00687 <span class="preprocessor"></span>
+<a name="l00688"></a>00688 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00689"></a>00689 T __TBB_ReverseBits(T src)
+<a name="l00690"></a>00690 {
+<a name="l00691"></a>00691     T dst;
+<a name="l00692"></a>00692     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *original = (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) &src;
+<a name="l00693"></a>00693     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *reversed = (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) &dst;
+<a name="l00694"></a>00694 
+<a name="l00695"></a>00695     <span class="keywordflow">for</span>( <span class="keywordtype">int</span> i = <span class="keyword">sizeof</span>(T)-1; i >= 0; i-- )
+<a name="l00696"></a>00696         reversed[i] = __TBB_ReverseByte( original[<span class="keyword">sizeof</span>(T)-i-1] );
+<a name="l00697"></a>00697 
+<a name="l00698"></a>00698     <span class="keywordflow">return</span> dst;
+<a name="l00699"></a>00699 }
+<a name="l00700"></a>00700 
+<a name="l00701"></a>00701 <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/a00599.html b/doc/html/a00599.html
new file mode 100644
index 0000000..486b1b7
--- /dev/null
+++ b/doc/html/a00599.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-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="a00216.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="a00216.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/a00600.html b/doc/html/a00600.html
new file mode 100644
index 0000000..dea6fc7
--- /dev/null
+++ b/doc/html/a00600.html
@@ -0,0 +1,261 @@
+<!DOCTYPE HTML 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 3</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 5006</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</span>
+<a name="l00122"></a>00122 <span class="preprocessor"></span><span class="comment">// define the parts of stdint.h that are needed, but put them inside tbb::internal</span>
+<a name="l00123"></a>00123 <span class="keyword">namespace </span>tbb {
+<a name="l00124"></a>00124 <span class="keyword">namespace </span>internal {
+<a name="l00125"></a>00125     <span class="keyword">typedef</span> __int8 int8_t;
+<a name="l00126"></a>00126     <span class="keyword">typedef</span> __int16 int16_t;
+<a name="l00127"></a>00127     <span class="keyword">typedef</span> __int32 int32_t;
+<a name="l00128"></a>00128     <span class="keyword">typedef</span> __int64 int64_t;
+<a name="l00129"></a>00129     <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> __int8 uint8_t;
+<a name="l00130"></a>00130     <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> __int16 uint16_t;
+<a name="l00131"></a>00131     <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> __int32 uint32_t;
+<a name="l00132"></a>00132     <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> __int64 uint64_t;
+<a name="l00133"></a>00133 } <span class="comment">// namespace internal</span>
+<a name="l00134"></a>00134 } <span class="comment">// namespace tbb</span>
+<a name="l00135"></a>00135 <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><span class="comment">/* _MSC_VER */</span>
+<a name="l00138"></a>00138 
+<a name="l00139"></a>00139 <span class="preprocessor">#if _MSC_VER >=1400</span>
+<a name="l00140"></a>00140 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXPORTED_FUNC   __cdecl</span>
+<a name="l00141"></a>00141 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXPORTED_METHOD __thiscall</span>
+<a name="l00142"></a>00142 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00143"></a>00143 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXPORTED_FUNC</span>
+<a name="l00144"></a>00144 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXPORTED_METHOD</span>
+<a name="l00145"></a>00145 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00146"></a>00146 <span class="preprocessor"></span>
+<a name="l00147"></a>00147 <span class="preprocessor">#include <cstddef></span>      <span class="comment">/* Need size_t and ptrdiff_t */</span>
+<a name="l00148"></a>00148 
+<a name="l00149"></a>00149 <span class="preprocessor">#if _MSC_VER</span>
+<a name="l00150"></a>00150 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tbb_windef_H</span>
+<a name="l00151"></a>00151 <span class="preprocessor"></span><span class="preprocessor">#include "_tbb_windef.h"</span>
+<a name="l00152"></a>00152 <span class="preprocessor">#undef __TBB_tbb_windef_H</span>
+<a name="l00153"></a>00153 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00154"></a>00154 <span class="preprocessor"></span>
+<a name="l00156"></a>00156 <span class="keyword">namespace </span>tbb {
+<a name="l00157"></a>00157 
+<a name="l00158"></a>00158 <span class="keyword">using</span> std::size_t; <span class="keyword">using</span> std::ptrdiff_t;
+<a name="l00159"></a>00159 
+<a name="l00161"></a><a class="code" href="a00362.html#ed375248ff6019a70ca0f9da528e5d0b">00161</a>     <span class="keyword">typedef</span> void(*<a class="code" href="a00362.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="l00162"></a>00162 
+<a name="l00163"></a>00163 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00164"></a>00164 <span class="preprocessor"></span>
+<a name="l00166"></a>00166 
+<a name="l00169"></a>00169 <span class="preprocessor">#define __TBB_ASSERT(predicate,message) ((predicate)?((void)0):tbb::assertion_failure(__FILE__,__LINE__,#predicate,message))</span>
+<a name="l00170"></a>00170 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_ASSERT_EX __TBB_ASSERT</span>
+<a name="l00171"></a>00171 <span class="preprocessor"></span>
+<a name="l00173"></a>00173     <a class="code" href="a00362.html#ed375248ff6019a70ca0f9da528e5d0b">assertion_handler_type</a> __TBB_EXPORTED_FUNC <a class="code" href="a00362.html#823fa1c15dd829d1d9167157450ddcd9">set_assertion_handler</a>( <a class="code" href="a00362.html#ed375248ff6019a70ca0f9da528e5d0b">assertion_handler_type</a> new_handler );
+<a name="l00174"></a>00174 
+<a name="l00176"></a>00176 
+<a name="l00179"></a>00179     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC <a class="code" href="a00362.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="l00180"></a>00180 
+<a name="l00181"></a>00181 <span class="preprocessor">#else</span>
+<a name="l00182"></a>00182 <span class="preprocessor"></span>
+<a name="l00184"></a>00184 <span class="preprocessor">#define __TBB_ASSERT(predicate,comment) ((void)0)</span>
+<a name="l00186"></a>00186 <span class="preprocessor">#define __TBB_ASSERT_EX(predicate,comment) ((void)(1 && (predicate)))</span>
+<a name="l00187"></a>00187 <span class="preprocessor"></span>
+<a name="l00188"></a>00188 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00189"></a>00189 
+<a name="l00191"></a>00191 
+<a name="l00195"></a>00195 <span class="keyword">extern</span> <span class="stringliteral">"C"</span> <span class="keywordtype">int</span> __TBB_EXPORTED_FUNC <a class="code" href="a00362.html#a6858b22e90041c9c4669674ff39b056">TBB_runtime_interface_version</a>();
+<a name="l00196"></a>00196 
+<a name="l00198"></a>00198 
+<a name="l00202"></a><a class="code" href="a00290.html">00202</a> <span class="keyword">class </span><a class="code" href="a00290.html">split</a> {
+<a name="l00203"></a>00203 };
+<a name="l00204"></a>00204 
+<a name="l00209"></a>00209 <span class="keyword">namespace </span>internal {
+<a name="l00210"></a>00210 
+<a name="l00212"></a>00212 
+<a name="l00215"></a>00215 <span class="keyword">const</span> size_t NFS_MaxLineSize = 128;
+<a name="l00216"></a>00216 
+<a name="l00217"></a>00217 <span class="keyword">template</span><<span class="keyword">class</span> T, <span class="keywordtype">int</span> S>
+<a name="l00218"></a>00218 <span class="keyword">struct </span>padded_base : T {
+<a name="l00219"></a>00219     <span class="keywordtype">char</span> pad[NFS_MaxLineSize - <span class="keyword">sizeof</span>(T) % NFS_MaxLineSize];
+<a name="l00220"></a>00220 };
+<a name="l00221"></a>00221 <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">struct </span>padded_base<T, 0> : T {};
+<a name="l00222"></a>00222 
+<a name="l00224"></a>00224 <span class="keyword">template</span><<span class="keyword">class</span> T>
+<a name="l00225"></a>00225 <span class="keyword">struct </span>padded : padded_base<T, sizeof(T)> {};
+<a name="l00226"></a>00226 
+<a name="l00228"></a>00228 
+<a name="l00230"></a>00230 <span class="preprocessor">#define __TBB_offsetof(class_name, member_name) \</span>
+<a name="l00231"></a>00231 <span class="preprocessor">    ((ptrdiff_t)&(reinterpret_cast<class_name*>(0x1000)->member_name) - 0x1000)</span>
+<a name="l00232"></a>00232 <span class="preprocessor"></span>
+<a name="l00234"></a>00234 <span class="preprocessor">#define __TBB_get_object_ref(class_name, member_name, member_addr) \</span>
+<a name="l00235"></a>00235 <span class="preprocessor">    (*reinterpret_cast<class_name*>((char*)member_addr - __TBB_offsetof(class_name, member_name)))</span>
+<a name="l00236"></a>00236 <span class="preprocessor"></span>
+<a name="l00238"></a>00238 <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="l00239"></a>00239 
+<a name="l00240"></a>00240 <span class="preprocessor">#if TBB_USE_EXCEPTIONS</span>
+<a name="l00241"></a>00241 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_TRY try</span>
+<a name="l00242"></a>00242 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_CATCH(e) catch(e)</span>
+<a name="l00243"></a>00243 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_THROW(e) throw e</span>
+<a name="l00244"></a>00244 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_RETHROW() throw</span>
+<a name="l00245"></a>00245 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* !TBB_USE_EXCEPTIONS */</span>
+<a name="l00246"></a>00246     <span class="keyword">inline</span> <span class="keywordtype">bool</span> __TBB_false() { <span class="keywordflow">return</span> <span class="keyword">false</span>; }
+<a name="l00247"></a>00247 <span class="preprocessor">    #define __TBB_TRY</span>
+<a name="l00248"></a>00248 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_CATCH(e) if ( tbb::internal::__TBB_false() )</span>
+<a name="l00249"></a>00249 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_THROW(e) ((void)0)</span>
+<a name="l00250"></a>00250 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_RETHROW() ((void)0)</span>
+<a name="l00251"></a>00251 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* !TBB_USE_EXCEPTIONS */</span>
+<a name="l00252"></a>00252 
+<a name="l00254"></a>00254 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC runtime_warning( <span class="keyword">const</span> <span class="keywordtype">char</span>* format, ... );
+<a name="l00255"></a>00255 
+<a name="l00256"></a>00256 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00257"></a>00257 <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="l00258"></a>00258 
+<a name="l00260"></a>00260 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00261"></a>00261 <span class="keyword">inline</span> <span class="keywordtype">void</span> poison_pointer( T*& p ) { p = reinterpret_cast<T*>(poisoned_ptr); }
+<a name="l00262"></a>00262 
+<a name="l00264"></a>00264 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00265"></a>00265 <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="l00266"></a>00266 <span class="preprocessor">#else</span>
+<a name="l00267"></a>00267 <span class="preprocessor"></span><span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00268"></a>00268 <span class="keyword">inline</span> <span class="keywordtype">void</span> poison_pointer( T* ) {<span class="comment">/*do nothing*/</span>}
+<a name="l00269"></a>00269 <span class="preprocessor">#endif </span><span class="comment">/* !TBB_USE_ASSERT */</span>
+<a name="l00270"></a>00270 
+<a name="l00272"></a>00272 
+<a name="l00274"></a>00274 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U> 
+<a name="l00275"></a>00275 <span class="keyword">inline</span> T punned_cast( U* ptr ) {
+<a name="l00276"></a>00276     uintptr_t x = reinterpret_cast<uintptr_t>(ptr);
+<a name="l00277"></a>00277     <span class="keywordflow">return</span> reinterpret_cast<T>(x);
+<a name="l00278"></a>00278 }
+<a name="l00279"></a>00279 
+<a name="l00281"></a>00281 <span class="keyword">class </span>no_assign {
+<a name="l00282"></a>00282     <span class="comment">// Deny assignment</span>
+<a name="l00283"></a>00283     <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> no_assign& );
+<a name="l00284"></a>00284 <span class="keyword">public</span>:
+<a name="l00285"></a>00285 <span class="preprocessor">#if __GNUC__</span>
+<a name="l00287"></a>00287 <span class="preprocessor">    no_assign() {}</span>
+<a name="l00288"></a>00288 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __GNUC__ */</span>
+<a name="l00289"></a>00289 };
+<a name="l00290"></a>00290 
+<a name="l00292"></a>00292 <span class="keyword">class </span>no_copy: no_assign {
+<a name="l00294"></a>00294     no_copy( <span class="keyword">const</span> no_copy& );
+<a name="l00295"></a>00295 <span class="keyword">public</span>:
+<a name="l00297"></a>00297     no_copy() {}
+<a name="l00298"></a>00298 };
+<a name="l00299"></a>00299 
+<a name="l00301"></a>00301 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00302"></a>00302 <span class="keyword">struct </span>allocator_type {
+<a name="l00303"></a>00303     <span class="keyword">typedef</span> T value_type;
+<a name="l00304"></a>00304 };
+<a name="l00305"></a>00305 
+<a name="l00306"></a>00306 <span class="preprocessor">#if _MSC_VER</span>
+<a name="l00308"></a>00308 <span class="preprocessor">template<typename T></span>
+<a name="l00309"></a>00309 <span class="preprocessor"></span><span class="keyword">struct </span>allocator_type<const T> {
+<a name="l00310"></a>00310     <span class="keyword">typedef</span> T value_type;
+<a name="l00311"></a>00311 };
+<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="comment">// Struct to be used as a version tag for inline functions.</span>
+<a name="l00317"></a>00317 <span class="comment"></span><span class="keyword">struct </span>version_tag_v3 {};
+<a name="l00318"></a>00318 
+<a name="l00319"></a>00319 <span class="keyword">typedef</span> version_tag_v3 version_tag;
+<a name="l00320"></a>00320 
+<a name="l00321"></a>00321 } <span class="comment">// internal</span>
+<a name="l00323"></a>00323 <span class="comment"></span>
+<a name="l00324"></a>00324 } <span class="comment">// tbb</span>
+<a name="l00325"></a>00325 
+<a name="l00326"></a>00326 <span class="preprocessor">#endif </span><span class="comment">/* RC_INVOKED */</span>
+<a name="l00327"></a>00327 <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/a00606.html b/doc/html/a00606.html
new file mode 100644
index 0000000..88571ef
--- /dev/null
+++ b/doc/html/a00606.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-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_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="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-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/a00614.html b/doc/html/a00614.html
new file mode 100644
index 0000000..c83d1a6
--- /dev/null
+++ b/doc/html/a00614.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-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/a00616.html b/doc/html/a00616.html
new file mode 100644
index 0000000..e01fd80
--- /dev/null
+++ b/doc/html/a00616.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-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="a00302.html">00038</a> <span class="keyword">class </span><a class="code" href="a00302.html">tick_count</a> {
+<a name="l00039"></a>00039 <span class="keyword">public</span>:
+<a name="l00041"></a><a class="code" href="a00303.html">00041</a>     <span class="keyword">class </span><a class="code" href="a00303.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="a00303.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="a00303.html#75a9a0949f8a8a84d6758835f1b48dad">00046</a>         <a class="code" href="a00303.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="a00303.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="a00303.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="a00302.html">tbb::tick_count</a>;
+<a name="l00055"></a>00055 
+<a name="l00057"></a>00057         <span class="keyword">friend</span> <a class="code" href="a00303.html">interval_t</a> <a class="code" href="a00303.html#09dde78a4100800c11bb883d6204b586">operator-</a>( <span class="keyword">const</span> <a class="code" href="a00302.html">tick_count</a>& t1, <span class="keyword">const</span> <a class="code" href="a00302.html">tick_count</a>& t0 );
+<a name="l00058"></a>00058 
+<a name="l00060"></a><a class="code" href="a00303.html#5871ead1ca230efbe52a5008470e6428">00060</a>         <span class="keyword">friend</span> <a class="code" href="a00303.html">interval_t</a> <a class="code" href="a00303.html#5871ead1ca230efbe52a5008470e6428">operator+</a>( <span class="keyword">const</span> <a class="code" href="a00303.html">interval_t</a>& i, <span class="keyword">const</span> <a class="code" href="a00303.html">interval_t</a>& j ) {
+<a name="l00061"></a>00061             <span class="keywordflow">return</span> <a class="code" href="a00303.html#75a9a0949f8a8a84d6758835f1b48dad">interval_t</a>(i.<a class="code" href="a00303.html#beea71acda120af3e3e29f10e8cb5c10">value</a>+j.<a class="code" href="a00303.html#beea71acda120af3e3e29f10e8cb5c10">value</a>);
+<a name="l00062"></a>00062         }
+<a name="l00063"></a>00063 
+<a name="l00065"></a><a class="code" href="a00303.html#fa509691e1d689830931e36edd274f76">00065</a>         <span class="keyword">friend</span> <a class="code" href="a00303.html">interval_t</a> <a class="code" href="a00303.html#09dde78a4100800c11bb883d6204b586">operator-</a>( <span class="keyword">const</span> <a class="code" href="a00303.html">interval_t</a>& i, <span class="keyword">const</span> <a class="code" href="a00303.html">interval_t</a>& j ) {
+<a name="l00066"></a>00066             <span class="keywordflow">return</span> <a class="code" href="a00303.html#75a9a0949f8a8a84d6758835f1b48dad">interval_t</a>(i.<a class="code" href="a00303.html#beea71acda120af3e3e29f10e8cb5c10">value</a>-j.<a class="code" href="a00303.html#beea71acda120af3e3e29f10e8cb5c10">value</a>);
+<a name="l00067"></a>00067         }
+<a name="l00068"></a>00068 
+<a name="l00070"></a><a class="code" href="a00303.html#cd9814947902e26463a69a111530f81b">00070</a>         <a class="code" href="a00303.html">interval_t</a>& <a class="code" href="a00303.html#cd9814947902e26463a69a111530f81b">operator+=</a>( <span class="keyword">const</span> <a class="code" href="a00303.html">interval_t</a>& i ) {value += i.<a class="code" href="a00303.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="a00303.html#35ff7eaf7c2031b4a991402ac9ecb940">00073</a>         <a class="code" href="a00303.html">interval_t</a>& <a class="code" href="a00303.html#35ff7eaf7c2031b4a991402ac9ecb940">operator-=</a>( <span class="keyword">const</span> <a class="code" href="a00303.html">interval_t</a>& i ) {value -= i.<a class="code" href="a00303.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="a00302.html#34593326ae4191e02a13c7cbdab9de4c">00077</a>     <a class="code" href="a00302.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="a00302.html">tick_count</a> <a class="code" href="a00302.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="a00302.html#09dde78a4100800c11bb883d6204b586">operator-</a>( <span class="keyword">const</span> <a class="code" href="a00302.html">tick_count</a>& t1, <span class="keyword">const</span> <a class="code" href="a00302.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="a00302.html#fb7f78ca61cf28398645ace66e284473">00089</a> <span class="keyword">inline</span> <a class="code" href="a00302.html">tick_count</a> <a class="code" href="a00302.html#fb7f78ca61cf28398645ace66e284473">tick_count::now</a>() {
+<a name="l00090"></a>00090     <a class="code" href="a00302.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="a00302.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="a00302.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="a00302.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="a00303.html#1a21a428e00cced2e6a49e0f5f2258bf">00115</a> <span class="keyword">inline</span> <a class="code" href="a00303.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="a00302.html#09dde78a4100800c11bb883d6204b586">00128</a> <span class="keyword">inline</span> <a class="code" href="a00303.html">tick_count::interval_t</a> <a class="code" href="a00302.html#09dde78a4100800c11bb883d6204b586">operator-</a>( <span class="keyword">const</span> <a class="code" href="a00302.html">tick_count</a>& t1, <span class="keyword">const</span> <a class="code" href="a00302.html">tick_count</a>& t0 ) {
+<a name="l00129"></a>00129     <span class="keywordflow">return</span> <a class="code" href="a00303.html">tick_count::interval_t</a>( t1.<a class="code" href="a00302.html#1ba05ad46dc08bc1bf34bd6cc94e36ec">my_count</a>-t0.<a class="code" href="a00302.html#1ba05ad46dc08bc1bf34bd6cc94e36ec">my_count</a> );
+<a name="l00130"></a>00130 }
+<a name="l00131"></a>00131 
+<a name="l00132"></a><a class="code" href="a00303.html#d5d8429c0bc59cf6131b2abc7929fa59">00132</a> <span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code" href="a00303.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/annotated.html b/doc/html/annotated.html
index bb8e3f7..8c497a2 100644
--- a/doc/html/annotated.html
+++ b/doc/html/annotated.html
@@ -21,85 +21,106 @@
     <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="a00140.html">tbb::affinity_partitioner</a></td><td class="indexvalue">An affinity partitioner </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00141.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="a00142.html">tbb::atomic< T ></a></td><td class="indexvalue">Primary template for atomic </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00143.html">tbb::atomic< void * ></a></td><td class="indexvalue">Specialization for <a class="el" href="a00143.html">atomic<void*></a>, for sake of not allowing arithmetic or operator-> </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00144.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="a00145.html">tbb::auto_partitioner</a></td><td class="indexvalue">An auto partitioner </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00146.html">tbb::bad_last_alloc</a></td><td class="indexvalue">Exception for concurrent containers </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00147.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="a00148.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="a00149.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="a00150.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="a00151.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="a00152.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="a00153.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="a00154.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="a00155.html">tbb::interface4::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="a00156.html">tbb::interface4::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="a00157.html">tbb::interface4::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="a00158.html">tbb::interface4::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="a00159.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="a00160.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="a00161.html">tbb::concurrent_vector< T, A ></a></td><td class="indexvalue">Concurrent vector container </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00162.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="a00163.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="indexvalue">The <a class="el" href="a00163.html">enumerable_thread_specific</a> container </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00164.html">tbb::filter</a></td><td class="indexvalue">A stage in a pipeline </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00165.html">tbb::interface5::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="a00166.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="a00167.html">tbb::interface5::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="a00168.html">tbb::improper_lock</a></td><td class="indexvalue">Exception for PPL locks </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00169.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="a00170.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="a00171.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="a00172.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="a00173.html">tbb::mutex::scoped_lock</a></td><td class="indexvalue">The scoped locking pattern </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00174.html">tbb::null_mutex</a></td><td class="indexvalue">A mutex which does nothing </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00175.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="a00176.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="a00177.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="a00178.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="a00179.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="a00180.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="a00181.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="a00182.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="a00183.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="a00184.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="a00185.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="a00186.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="a00187.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="a00188.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="a00189.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="a00190.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="a00191.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="a00192.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="a00193.html">tbb::simple_partitioner</a></td><td class="indexvalue">A simple partitioner </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00194.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="a00195.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="a00196.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="a00197.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="a00198.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="a00199.html">tbb::task</a></td><td class="indexvalue">Base class for user-defined tasks </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00200.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="a00201.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="a00202.html">tbb::task_list</a></td><td class="indexvalue">A list of children </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00203.html">tbb::task_scheduler_init</a></td><td class="indexvalue">Class representing reference to tbb scheduler </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00204.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="a00205.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="a00206.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="a00207.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="a00208.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="a00209.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="a00210.html">tbb::tick_count</a></td><td class="indexvalue">Absolute timestamp </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00211.html">tbb::tick_count::interval_t</a></td><td class="indexvalue">Relative time interval </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00212.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="a00213.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="a00214.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="a00212.html">tbb::affinity_partitioner</a></td><td class="indexvalue">An affinity partitioner </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00213.html">tbb::interface6::internal::aggregated_operation< Derived ></a></td><td class="indexvalue">Aggregated_operation base class </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00214.html">tbb::interface6::internal::aggregator< handler_type, operation_type ></a></td><td class="indexvalue">Aggregator base class </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00215.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="a00216.html">tbb::atomic< T ></a></td><td class="indexvalue">Primary template for atomic </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00217.html">tbb::atomic< void * ></a></td><td class="indexvalue">Specialization for <a class="el" href="a00217.html">atomic<void*></a>, for sake of not allowing arithmetic or operator-> </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00218.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="a00219.html">tbb::auto_partitioner</a></td><td class="indexvalue">An auto partitioner </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00220.html">tbb::bad_last_alloc</a></td><td class="indexvalue">Exception for concurrent containers </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00221.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="a00222.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="a00223.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="a00224.html">tbb::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="a00225.html">tbb::buffer_node< T ></a></td><td class="indexvalue">Forwards messages in arbitrary order </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00226.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="a00227.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="a00228.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="a00229.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="a00230.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="a00231.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="a00232.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="a00233.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="a00234.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="a00235.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="a00236.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="a00237.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="a00238.html">tbb::concurrent_vector< T, A ></a></td><td class="indexvalue">Concurrent vector container </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00239.html">tbb::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="a00240.html">tbb::continue_node</a></td><td class="indexvalue">Broadcasts completion message when it receives completion messages from all predecessors. Then resets </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00241.html">tbb::continue_receiver</a></td><td class="indexvalue">Base class for receivers of completion messages </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00242.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="a00243.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="indexvalue">The <a class="el" href="a00243.html">enumerable_thread_specific</a> container </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00244.html">tbb::executable_node< Output ></a></td><td class="indexvalue">Implements an executable node that supports <a class="el" href="a00239.html">continue_msg</a> -> Output </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00245.html">tbb::filter</a></td><td class="indexvalue">A stage in a pipeline </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00246.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="a00247.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="a00248.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="a00249.html">tbb::function_node< Input, Output ></a></td><td class="indexvalue">Implements a function node that supports Input -> Output </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00250.html">tbb::graph</a></td><td class="indexvalue">The graph class </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00251.html">tbb::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="a00252.html">tbb::improper_lock</a></td><td class="indexvalue">Exception for PPL locks </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00253.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="a00254.html">tbb::internal::join_node_base< JP, InputTuple, OutputTuple ></a></td><td class="indexvalue">Join_node_base </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00255.html">tbb::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="a00256.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="a00257.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="a00258.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="a00259.html">tbb::mutex::scoped_lock</a></td><td class="indexvalue">The scoped locking pattern </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00260.html">tbb::null_mutex</a></td><td class="indexvalue">A mutex which does nothing </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00261.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="a00262.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="a00263.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="a00264.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="a00265.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="a00266.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="a00267.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="a00268.html">tbb::priority_queue_node< T, Compare ></a></td><td class="indexvalue">Forwards messages in priority order </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00269.html">tbb::queue_node< T ></a></td><td class="indexvalue">Forwards messages in FIFO order </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00270.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="a00271.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="a00272.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="a00273.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="a00274.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="a00275.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="a00276.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="a00277.html">tbb::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="a00278.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="a00279.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="a00280.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="a00281.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="a00282.html">tbb::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="a00283.html">tbb::sequencer_node< T ></a></td><td class="indexvalue">Forwards messages in sequence order </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00284.html">tbb::simple_partitioner</a></td><td class="indexvalue">A simple partitioner </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00285.html">tbb::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="a00286.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="a00287.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="a00288.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="a00289.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="a00290.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="a00291.html">tbb::task</a></td><td class="indexvalue">Base class for user-defined tasks </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00292.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="a00293.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="a00294.html">tbb::task_list</a></td><td class="indexvalue">A list of children </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00295.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="a00296.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="a00297.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="a00298.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="a00299.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="a00300.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="a00301.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="a00302.html">tbb::tick_count</a></td><td class="indexvalue">Absolute timestamp </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00303.html">tbb::tick_count::interval_t</a></td><td class="indexvalue">Relative time interval </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00304.html">tbb::internal::two_phase_port< T ></a></td><td class="indexvalue">The two-phase join port </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00305.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="a00306.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="a00307.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-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/concepts.html b/doc/html/concepts.html
index cfb3171..7403edb 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-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/deprecated.html b/doc/html/deprecated.html
index e1f5336..90d05f7 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="a00160.html#48da3536245318af6cb5fd58bac78039">tbb::deprecated::concurrent_queue::pop_if_present</a> (T &destination) </dt>
+<dt>Member <a class="el" href="a00237.html#48da3536245318af6cb5fd58bac78039">tbb::deprecated::concurrent_queue::pop_if_present</a> (T &destination) </dt>
 <dd>Use try_pop() </dd>
 </dl>
 <hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/files.html b/doc/html/files.html
index 73144ce..5e565d1 100644
--- a/doc/html/files.html
+++ b/doc/html/files.html
@@ -20,61 +20,63 @@
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
 <h1>File List</h1>Here is a list of all documented files with brief descriptions:<table>
-  <tr><td class="indexkey"><b>_concurrent_queue_internal.h</b> <a href="a00281.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>_concurrent_unordered_internal.h</b> <a href="a00299.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>_tbb_windef.h</b> <a href="a00309.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>aligned_space.h</b> <a href="a00311.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>atomic.h</b> <a href="a00312.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>blocked_range.h</b> <a href="a00320.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>blocked_range2d.h</b> <a href="a00321.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>blocked_range3d.h</b> <a href="a00322.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>cache_aligned_allocator.h</b> <a href="a00323.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>combinable.h</b> <a href="a00325.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>concurrent_hash_map.h</b> <a href="a00326.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>concurrent_queue.h</b> <a href="a00336.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>concurrent_unordered_map.h</b> <a href="a00337.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>concurrent_vector.h</b> <a href="a00342.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>critical_section.h</b> <a href="a00351.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>enumerable_thread_specific.h</b> <a href="a00354.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>mutex.h</b> <a href="a00367.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>null_mutex.h</b> <a href="a00369.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>null_rw_mutex.h</b> <a href="a00370.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>parallel_do.h</b> <a href="a00371.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>parallel_for.h</b> <a href="a00380.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>parallel_for_each.h</b> <a href="a00384.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>parallel_invoke.h</b> <a href="a00386.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>parallel_reduce.h</b> <a href="a00392.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>parallel_scan.h</b> <a href="a00396.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>parallel_sort.h</b> <a href="a00401.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>parallel_while.h</b> <a href="a00405.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>partitioner.h</b> <a href="a00409.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>pipeline.h</b> <a href="a00414.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>queuing_mutex.h</b> <a href="a00426.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>queuing_rw_mutex.h</b> <a href="a00427.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>reader_writer_lock.h</b> <a href="a00428.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>recursive_mutex.h</b> <a href="a00429.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00248.html">scalable_allocator.h</a> <a href="a00430.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>spin_mutex.h</b> <a href="a00431.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>spin_rw_mutex.h</b> <a href="a00432.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>task.h</b> <a href="a00433.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>task_group.h</b> <a href="a00442.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>task_scheduler_init.h</b> <a href="a00449.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>task_scheduler_observer.h</b> <a href="a00450.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbb.h</b> <a href="a00452.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbb_allocator.h</b> <a href="a00453.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbb_config.h</b> <a href="a00457.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbb_config_lrb.h</b> <a href="a00458.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbb_exception.h</b> <a href="a00459.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbb_machine.h</b> <a href="a00460.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbb_profiling.h</b> <a href="a00464.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbb_stddef.h</b> <a href="a00465.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbb_thread.h</b> <a href="a00472.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbbmalloc_proxy.h</b> <a href="a00480.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tick_count.h</b> <a href="a00482.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>_aggregator_internal.h</b> <a href="a00377.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>_concurrent_queue_internal.h</b> <a href="a00381.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>_concurrent_unordered_internal.h</b> <a href="a00397.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>_tbb_windef.h</b> <a href="a00407.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>aligned_space.h</b> <a href="a00409.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>atomic.h</b> <a href="a00410.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>blocked_range.h</b> <a href="a00418.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>blocked_range2d.h</b> <a href="a00419.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>blocked_range3d.h</b> <a href="a00420.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>cache_aligned_allocator.h</b> <a href="a00421.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>combinable.h</b> <a href="a00423.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>concurrent_hash_map.h</b> <a href="a00424.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>concurrent_priority_queue.h</b> <a href="a00433.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>concurrent_queue.h</b> <a href="a00436.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>concurrent_unordered_map.h</b> <a href="a00437.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>concurrent_vector.h</b> <a href="a00442.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>critical_section.h</b> <a href="a00451.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>enumerable_thread_specific.h</b> <a href="a00454.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00326.html">graph.h</a> <a href="a00466.html">[code]</a></td><td class="indexvalue">The graph related classes and functions </td></tr>
+  <tr><td class="indexkey"><b>mutex.h</b> <a href="a00499.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>null_mutex.h</b> <a href="a00501.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>null_rw_mutex.h</b> <a href="a00502.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>parallel_do.h</b> <a href="a00503.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>parallel_for.h</b> <a href="a00512.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>parallel_for_each.h</b> <a href="a00516.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>parallel_invoke.h</b> <a href="a00518.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>parallel_reduce.h</b> <a href="a00524.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>parallel_scan.h</b> <a href="a00528.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>parallel_sort.h</b> <a href="a00533.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>parallel_while.h</b> <a href="a00537.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>partitioner.h</b> <a href="a00541.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>pipeline.h</b> <a href="a00546.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>queuing_mutex.h</b> <a href="a00560.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>queuing_rw_mutex.h</b> <a href="a00561.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>reader_writer_lock.h</b> <a href="a00562.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>recursive_mutex.h</b> <a href="a00563.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00344.html">scalable_allocator.h</a> <a href="a00564.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="a00599.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>tbb_stddef.h</b> <a href="a00600.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>tbb_thread.h</b> <a href="a00606.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>tbbmalloc_proxy.h</b> <a href="a00614.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>tick_count.h</b> <a href="a00616.html">[code]</a></td><td class="indexvalue"></td></tr>
 </table>
 <hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/functions.html b/doc/html/functions.html
index 7985ebe..9d6e83b 100644
--- a/doc/html/functions.html
+++ b/doc/html/functions.html
@@ -33,27 +33,27 @@
 </div>
 <div class="tabs">
   <ul>
-    <li><a href="#index_a"><span>a</span></a></li>
-    <li><a href="#index_b"><span>b</span></a></li>
-    <li><a href="#index_c"><span>c</span></a></li>
-    <li><a href="#index_d"><span>d</span></a></li>
-    <li><a href="#index_e"><span>e</span></a></li>
-    <li><a href="#index_f"><span>f</span></a></li>
-    <li><a href="#index_g"><span>g</span></a></li>
-    <li><a href="#index_i"><span>i</span></a></li>
-    <li><a href="#index_l"><span>l</span></a></li>
-    <li><a href="#index_m"><span>m</span></a></li>
-    <li><a href="#index_n"><span>n</span></a></li>
-    <li><a href="#index_o"><span>o</span></a></li>
-    <li><a href="#index_p"><span>p</span></a></li>
-    <li><a href="#index_q"><span>q</span></a></li>
-    <li><a href="#index_r"><span>r</span></a></li>
-    <li><a href="#index_s"><span>s</span></a></li>
-    <li><a href="#index_t"><span>t</span></a></li>
-    <li><a href="#index_u"><span>u</span></a></li>
-    <li><a href="#index_v"><span>v</span></a></li>
-    <li><a href="#index_w"><span>w</span></a></li>
-    <li><a href="#index_~"><span>~</span></a></li>
+    <li id="current"><a href="functions.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+    <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_0x7e.html#index_~"><span>~</span></a></li>
   </ul>
 </div>
 
@@ -62,245 +62,24 @@ Here is a list of all documented class members with links to the class documenta
 <p>
 <h3><a class="anchor" name="index_a">- a -</a></h3><ul>
 <li>acquire()
-: <a class="el" href="a00197.html#b0b646ec5be02a127d159bbb7ca65353">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00195.html#3ee3c338732b1f64b0b32a757807a30d">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00190.html#7fb04da37cccf8c99b1f9102d9074f9a">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00185.html#a8dd5ab8686e76de21587544dbb681e0">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00183.html#533e4fc8355ee321206a0609c42d909d">tbb::qu [...]
-: <a class="el" href="a00179.html#e131c560057a58229992b61eb8dba4c6">tbb::parallel_while< Body ></a>, <a class="el" href="a00178.html#40baaf0f6856f4491dd0adf896c93516">tbb::parallel_do_feeder< Item ></a><li>add_filter()
-: <a class="el" href="a00180.html#38fb5c9c8395dd6f89a4ae2011a83e0d">tbb::pipeline</a><li>affinity()
-: <a class="el" href="a00199.html#3a920a56b0bcf2801518fb45b2c9d2be">tbb::task</a><li>affinity_id
-: <a class="el" href="a00199.html#d61bb32389d3857bf7511d69beaafb76">tbb::task</a><li>allocate()
-: <a class="el" href="a00207.html#c35e5db8e9cdff5d1387db5b0bad2e4a">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00204.html#f6cb487b1bdce0b581f265a77dca6d53">tbb::tbb_allocator< T ></a>, <a class="el" href="a00191.html#726b1586d05d44665a36e1c7b2699bfd">tbb::scalable_allocator< T ></a>, <a class="el" href="a00150.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">tbb::cache_aligned_allocator< T ></a><li>allocate_child()
-: <a class="el" href="a00199.html#1ff794f7053cd9148d5f280fbf07377f">tbb::task</a><li>allocate_continuation()
-: <a class="el" href="a00199.html#1434c79a5138993269d034008bff7329">tbb::task</a><li>allocate_root()
-: <a class="el" href="a00199.html#8ccc518caf31075a3e073996d2d240a4">tbb::task</a><li>allocated
-: <a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">tbb::task</a><li>allocator_type
-: <a class="el" href="a00204.html#78701e7454ef8e1a25b5acd364367080">tbb::tbb_allocator< T ></a>, <a class="el" href="a00163.html#3c03eb40955b933b01987222722ac4bd">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00154.html#2e2726fccf6d975dc1071608cc0bbf90">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00159.html#5a3956341728eaa558d8827063718cac">tbb::strict_ppl::concurrent_queue< T, A ></a><li>assign()
-: <a class="el" href="a00161.html#93a06b3112cb804f42f40efb5e7387b4">tbb::concurrent_vector< T, A ></a><li>at()
-: <a class="el" href="a00161.html#23e14a38af748edff96a7adc3a0f1c58">tbb::concurrent_vector< T, A ></a><li>automatic
-: <a class="el" href="a00203.html#8f5988e2b0fbb2d533fcbb7f2583743f">tbb::task_scheduler_init</a></ul>
-<h3><a class="anchor" name="index_b">- b -</a></h3><ul>
-<li>back()
-: <a class="el" href="a00161.html#bd518e204107d07fd08d0ec5bdfd383d">tbb::concurrent_vector< T, A ></a><li>begin()
-: <a class="el" href="a00163.html#84afb3906a39e399cde1c950d6351300">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00161.html#78a06182276ff758788d4c0623ae0d71">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00147.html#18d2258400756ac1446dac7676b18df3">tbb::blocked_range< Value ></a>, <a class="el" href="a00141.html#0d702fc6b9e9d061ace3501b3c861cdf">tbb::aligned_space< T, N ></a><li>blocked_range()
-: <a class="el" href="a00147.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">tbb::blocked_range< Value ></a><li>bucket_count()
-: <a class="el" href="a00155.html#414d15033d36c63aa3a40666dc4d6f5e">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></ul>
-<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
-<li>cancel_group_execution()
-: <a class="el" href="a00199.html#0f3fb4aac549ab642022450a4bd13326">tbb::task</a>, <a class="el" href="a00201.html#8bcdfdf4e6bfb76125b6de15c00b571d">tbb::task_group_context</a><li>capacity()
-: <a class="el" href="a00161.html#3ed6b9ae7217af5103d974045b6f5cd5">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00154.html#b2888b3e4e837d7e03f2c731963a402b">tbb::concurrent_bounded_queue< T, A ></a><li>cbegin()
-: <a class="el" href="a00161.html#f88fcf1c920693c39bd9709db33c199f">tbb::concurrent_vector< T, A ></a><li>cend()
-: <a class="el" href="a00161.html#0c15a5d0f1cf75d687dabba07da1d46b">tbb::concurrent_vector< T, A ></a><li>clear()
-: <a class="el" href="a00202.html#fce446ee13e025969945328f3ff59b95">tbb::task_list</a>, <a class="el" href="a00180.html#2c84aef5b834b555ee220b176e25931e">tbb::pipeline</a>, <a class="el" href="a00163.html#a8764176d4b6014c5d65f1051851abc8">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00161.html#26f937a359a66b6aae904c3cd9a3c444">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00154.html#90b31e2954c6e4596c7900435a5f [...]
-: <a class="el" href="a00149.html#3336ba9480fd6c43e158f9beb024c050">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00148.html#392a46759af2c884957115771affa7f4">tbb::blocked_range2d< RowValue, ColValue ></a><li>compact()
-: <a class="el" href="a00161.html#1693d1da41b1a8235871be9c6633be35">tbb::concurrent_vector< T, A ></a><li>concurrent_bounded_queue()
-: <a class="el" href="a00154.html#a5e04dcd7db9fd9b583b4e7df832246a">tbb::concurrent_bounded_queue< T, A ></a><li>concurrent_hash_map()
-: <a class="el" href="a00155.html#3bfe75fcb350ce39cf610c164f233edc">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>concurrent_queue()
-: <a class="el" href="a00160.html#9102b897776bd2d9e908e6604ff16b5f">tbb::deprecated::concurrent_queue< T, A ></a>, <a class="el" href="a00159.html#8a6b98ea11a867db8ac868f0113ca429">tbb::strict_ppl::concurrent_queue< T, A ></a><li>concurrent_vector()
-: <a class="el" href="a00161.html#4450de83c5862ea4bcd9443fd7e67419">tbb::concurrent_vector< T, A ></a><li>const_accessor()
-: <a class="el" href="a00158.html#a9ead65cca68d4c49c7ef64d7899a4c8">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>const_iterator
-: <a class="el" href="a00147.html#1a8d05842c2b3dfc177bc4d347e4cef7">tbb::blocked_range< Value ></a><li>const_reference
-: <a class="el" href="a00154.html#796713d0b9ba93a4721cbe13e4474068">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00159.html#4d48e7ff93f81636bca2c74f7da34750">tbb::strict_ppl::concurrent_queue< T, A ></a><li>construct()
-: <a class="el" href="a00204.html#ab228ab9e324ed041c2226e1d717df5f">tbb::tbb_allocator< T ></a>, <a class="el" href="a00150.html#958ee8745c86c275bfc9533af565e017">tbb::cache_aligned_allocator< T ></a><li>context()
-: <a class="el" href="a00199.html#d8c36a93f3972590fbb65ff1cef3173b">tbb::task</a><li>count()
-: <a class="el" href="a00155.html#74f5ef06a06c5e619f156a1c76c04969">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>crbegin()
-: <a class="el" href="a00161.html#db78a1d28c9c966050e8a2926d834a33">tbb::concurrent_vector< T, A ></a><li>crend()
-: <a class="el" href="a00161.html#fff9cece89438587997ebedf93c5e962">tbb::concurrent_vector< T, A ></a></ul>
-<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
-<li>deallocate()
-: <a class="el" href="a00204.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">tbb::tbb_allocator< T ></a>, <a class="el" href="a00191.html#f806a238c18cbcfb531e1e0a0d2ec59d">tbb::scalable_allocator< T ></a>, <a class="el" href="a00150.html#3d4eadf188f7d85d3805ae534e0b8e1c">tbb::cache_aligned_allocator< T ></a><li>decrement_ref_count()
-: <a class="el" href="a00199.html#ef4680f5c148020c5e7e43ddef44cd5d">tbb::task</a><li>default_num_threads()
-: <a class="el" href="a00203.html#ba00714c33a41a3c2216f48613971cab">tbb::task_scheduler_init</a><li>deferred
-: <a class="el" href="a00203.html#e6c860f1e559026ff3ef4599c0d6c514">tbb::task_scheduler_init</a><li>destroy()
-: <a class="el" href="a00207.html#921875bbacd2c8a5f324c7da7a415262">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00171.html#7a46873119d9f85a7b0009c13e41a258">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00152.html#93d875d3555502ff6f18513525de204c">tbb::captured_exception</a>, <a class="el" href="a00206.html#66c94938eca8bf88b76f3eccaaf215d8">tbb::tbb_exception</a>, <a class="el" href="a00204.html#ef133522bf55f05a605bee0763208281">tbb::tbb_allocator [...]
-: <a class="el" href="a00154.html#4b45c91297e69515d83d5eef85ae1f49">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00159.html#068576d16c7e4e05d52f9db7a45b5b65">tbb::strict_ppl::concurrent_queue< T, A ></a><li>downgrade_to_reader()
-: <a class="el" href="a00197.html#c2c2c38a08cb9080e87099fac3e5bc94">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00185.html#0d2f93edf7b15ec4bcee138823220c52">tbb::queuing_rw_mutex::scoped_lock</a></ul>
-<h3><a class="anchor" name="index_e">- e -</a></h3><ul>
-<li>empty()
-: <a class="el" href="a00202.html#f3ac31e092814b90929f81bb30441959">tbb::task_list</a>, <a class="el" href="a00163.html#72595886d0ac8fd0543f90038570510d">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00161.html#c6426cb93cf20d3af40f3c90f1f0481a">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00154.html#f64924f2ee9225c368a270fc3c394db9">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00159.htm [...]
-: <a class="el" href="a00163.html#cb448bb4977ce366ceb7344085cc7050">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00161.html#1e6aa764ce5a1cbd24526f68bc0a2f6b">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00147.html#8b929d93ddc13f148b11bceef3a3bdf8">tbb::blocked_range< Value ></a>, <a class="el" href="a00141.html#024be075c23c0394c9a2518d993bcd9e">tbb::aligned_space< T, N ></a><li>enqueue()
-: <a class="el" href="a00199.html#8365d063c0cc9d7bd616bca47256b93c">tbb::task</a><li>enumerable_thread_specific()
-: <a class="el" href="a00163.html#7bce6829981c9efe3f59cae2355e383e">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>erase()
-: <a class="el" href="a00155.html#0f500842d0cf791f8fa61662edb1b311">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>exclude()
-: <a class="el" href="a00155.html#faad2108bd2be75e52293486af59f11e">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>execute()
-: <a class="el" href="a00199.html#22c298cd40937a431a06777423f002f6">tbb::task</a><li>executing
-: <a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">tbb::task</a></ul>
-<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
-<li>finalize()
-: <a class="el" href="a00164.html#56275eb889c77c4807967133e21401bd">tbb::filter</a><li>find()
-: <a class="el" href="a00155.html#bce7bdf46435115a95cca2aa73c5da83">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>freed
-: <a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">tbb::task</a><li>front()
-: <a class="el" href="a00161.html#502615a858eb9fa0390ee59169065e90">tbb::concurrent_vector< T, A ></a></ul>
-<h3><a class="anchor" name="index_g">- g -</a></h3><ul>
-<li>get_allocator()
-: <a class="el" href="a00161.html#2fdba8e90de6a4d2300222236d46758e">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00154.html#415eb87e53b1c6a266de06ecbc490d16">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00159.html#f034f70caef445fe8abc9113ec926a8d">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00155.html#199208eed6f09e200cda364f906be0fe">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><l [...]
-: <a class="el" href="a00147.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">tbb::blocked_range< Value ></a><li>grow_by()
-: <a class="el" href="a00161.html#473a59a4c9308b93411b898b3110d26c">tbb::concurrent_vector< T, A ></a><li>grow_to_at_least()
-: <a class="el" href="a00161.html#a7e3b67c8ccab16d0aecc80899ae799d">tbb::concurrent_vector< T, A ></a></ul>
-<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
-<li>increment_ref_count()
-: <a class="el" href="a00199.html#f5fb43c7ad0de5a4b95703cebc39e345">tbb::task</a><li>init()
-: <a class="el" href="a00201.html#49a55352084fd44b8863d182e839e6dc">tbb::task_group_context</a><li>initialize()
-: <a class="el" href="a00203.html#d5ed214a8bb53b0466ed91ff4734b9a3">tbb::task_scheduler_init</a><li>insert()
-: <a class="el" href="a00155.html#cfe172677e5987004ef4a03e22fa338a">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_copy()
-: <a class="el" href="a00155.html#3c27779fe66b79505390d084310d997e">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_equal_range()
-: <a class="el" href="a00155.html#976c57edfb7f22b9f91a2e11f141eb4a">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_fast_find()
-: <a class="el" href="a00155.html#2f76ed101a0ccc8875b846c2f747897e">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>interval_t()
-: <a class="el" href="a00211.html#1a21a428e00cced2e6a49e0f5f2258bf">tbb::tick_count::interval_t</a><li>is_active()
-: <a class="el" href="a00203.html#12752282977029f23416642bc03e8b74">tbb::task_scheduler_init</a><li>is_bound()
-: <a class="el" href="a00164.html#15c29cae5d237e6d63dbfe5c94af89d5">tbb::filter</a><li>is_cancelled()
-: <a class="el" href="a00199.html#025f18118c057c4c8db87ff2ce8df975">tbb::task</a><li>is_divisible()
-: <a class="el" href="a00149.html#39d69191721c488e737ae5d9c5336b9c">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00148.html#ad36a9b38e4fef26d376f99552ce2d92">tbb::blocked_range2d< RowValue, ColValue ></a>, <a class="el" href="a00147.html#41a58b703d574b6e1ca155df3576f578">tbb::blocked_range< Value ></a><li>is_group_execution_cancelled()
-: <a class="el" href="a00201.html#4db72f16210b0a991b2c134d6763a4cc">tbb::task_group_context</a><li>is_ordered()
-: <a class="el" href="a00164.html#cd53206c4795ef2df5df26b795caf692">tbb::filter</a><li>is_owned_by_current_thread()
-: <a class="el" href="a00199.html#c26718b3b247cd13deb1a741902e7105">tbb::task</a><li>is_serial()
-: <a class="el" href="a00164.html#fcfec27656a69ff2072802ac001e936f">tbb::filter</a><li>is_stolen_task()
-: <a class="el" href="a00199.html#f9169402702f56bf519448aaf34450aa">tbb::task</a><li>is_writer()
-: <a class="el" href="a00157.html#fc194e3a186dc935a5fb513cc9f8e898">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a></ul>
-<h3><a class="anchor" name="index_l">- l -</a></h3><ul>
-<li>local()
-: <a class="el" href="a00163.html#7dc79058d2832f7447de8e691c3455ea">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>lock()
-: <a class="el" href="a00196.html#4007d6e1523dbc3c2bb7f889ab789a8a">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00194.html#4f748989e19b6045e3a2d2ee73626a28">tbb::spin_mutex</a>, <a class="el" href="a00189.html#4c342c69d47f4bb0b393535dee4015d6">tbb::recursive_mutex</a>, <a class="el" href="a00186.html#2653d1a2d560059a51219a8ceab3ade9">tbb::interface5::reader_writer_lock</a>, <a class="el" href="a00172.html#4470e61c24c129a0299ca6c17240adbb">tbb::mutex</a><li>lock_read()
-: <a class="el" href="a00196.html#13f799708ac4ca437a16be202e263e18">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00186.html#d9d16a24d9f6c3dada73c6b9ff214f5b">tbb::interface5::reader_writer_lock</a><li>lookup()
-: <a class="el" href="a00155.html#1f22480a290ddc6c145888d8f985531a">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></ul>
-<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
-<li>make_filter
-: <a class="el" href="a00165.html#85c2892eff1fddcd06e28911e75838bd">tbb::interface5::filter_t< T, U ></a><li>malloc_type
-: <a class="el" href="a00204.html#09a7f81fb2c3055aaecf058b11538544">tbb::tbb_allocator< T ></a><li>max_size()
-: <a class="el" href="a00204.html#f059ca2c96243024f0d562ee3a87a3a5">tbb::tbb_allocator< T ></a>, <a class="el" href="a00191.html#880e766f1d913988c21973dbdd874fd5">tbb::scalable_allocator< T ></a>, <a class="el" href="a00161.html#2c248a017f0576df3e7cd99627836fd6">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00155.html#1e45d3cbd1e2ae06f365f1b48e0df0b5">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>, <a class="el" href="a00150. [...]
-: <a class="el" href="a00171.html#1aea0ad179d6f0481fe7f3495f66adf9">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00152.html#837a50b8f6a800bda225c39d1699643f">tbb::captured_exception</a>, <a class="el" href="a00206.html#3e3482bf264d4ca4dde046cd9c02c766">tbb::tbb_exception</a><li>mutex()
-: <a class="el" href="a00172.html#05313cb77d4f85213103d4dab74ed454">tbb::mutex</a><li>my_exception_data
-: <a class="el" href="a00171.html#a8c0ae2089ae784b28907cf748b89416">tbb::movable_exception< ExceptionData ></a></ul>
-<h3><a class="anchor" name="index_n">- n -</a></h3><ul>
-<li>name()
-: <a class="el" href="a00171.html#bc5f5c4739b17ac5211ac58226c2f5a5">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00152.html#5af82fd677449c5ca727fa1d7e16f9f5">tbb::captured_exception</a>, <a class="el" href="a00206.html#d00f6497e552fee978a02bfcbebf46e2">tbb::tbb_exception</a><li>native_handle_type
-: <a class="el" href="a00189.html#889fa8cc32dd707eef7c0f52dda09c0d">tbb::recursive_mutex</a>, <a class="el" href="a00172.html#9f1ec84d5815263ceae853f06ddb4cac">tbb::mutex</a><li>note_affinity()
-: <a class="el" href="a00199.html#713c338c8eeaebdc5a6b10a69c039b06">tbb::task</a><li>now()
-: <a class="el" href="a00210.html#fb7f78ca61cf28398645ace66e284473">tbb::tick_count</a></ul>
-<h3><a class="anchor" name="index_o">- o -</a></h3><ul>
-<li>operator *()
-: <a class="el" href="a00156.html#e8938f0cd1211e88a1d73527ed3636c4">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, <a class="el" href="a00158.html#30f31106840700a4c3664b9cb1c31ca7">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>operator delete()
-: <a class="el" href="a00206.html#3f2da7f3d8a6e4c1df522af1213afb5a">tbb::tbb_exception</a><li>operator()()
-: <a class="el" href="a00164.html#fa1b3dc1f4f47563ccab7f4d92f5b543">tbb::filter</a>, <a class="el" href="a00157.html#57c6110bd20e95c06de5a199de988941">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a><li>operator+
-: <a class="el" href="a00211.html#5871ead1ca230efbe52a5008470e6428">tbb::tick_count::interval_t</a><li>operator+=()
-: <a class="el" href="a00211.html#cd9814947902e26463a69a111530f81b">tbb::tick_count::interval_t</a><li>operator-
-: <a class="el" href="a00210.html#09dde78a4100800c11bb883d6204b586">tbb::tick_count</a>, <a class="el" href="a00211.html#fa509691e1d689830931e36edd274f76">tbb::tick_count::interval_t</a><li>operator-=()
-: <a class="el" href="a00211.html#35ff7eaf7c2031b4a991402ac9ecb940">tbb::tick_count::interval_t</a><li>operator->()
-: <a class="el" href="a00156.html#fcebc32c020202cc37e60eadef157569">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, <a class="el" href="a00158.html#3d03a48ecb8cd9549bd8be64b09c9b0d">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>operator=()
-: <a class="el" href="a00161.html#19f4ab88a01b0fd056af3bba463e7bd6">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00155.html#2c0c42a2e1b5282b6739157df9ce2304">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>operator[]()
-: <a class="el" href="a00161.html#c6fade5c732cc95274d1d8277ea619d1">tbb::concurrent_vector< T, A ></a></ul>
-<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
-<li>page_range_type
-: <a class="el" href="a00149.html#b8ebf17a552ba47825e9b3887855b719">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a><li>pages()
-: <a class="el" href="a00149.html#cf971430aa12361d3ed245344b7c6764">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a><li>parallel_while()
-: <a class="el" href="a00179.html#36e26ba3880c7bcf804a97ba0cbe133f">tbb::parallel_while< Body ></a><li>parent()
-: <a class="el" href="a00199.html#314e98ee4347ccec83efcb9ee22e8596">tbb::task</a><li>pause()
-: <a class="el" href="a00144.html#a174ea93e3bd3d5cce82389c2f28d037">tbb::internal::atomic_backoff</a><li>pipeline()
-: <a class="el" href="a00180.html#596dc3beba27099c4c8581cb419e1a59">tbb::pipeline</a><li>pop()
-: <a class="el" href="a00154.html#41f4c6bd7a82ab070e840bbf81b0b123">tbb::concurrent_bounded_queue< T, A ></a><li>pop_front()
-: <a class="el" href="a00202.html#5fe85df5ed524418389d34051750347d">tbb::task_list</a><li>pop_if_present()
-: <a class="el" href="a00160.html#48da3536245318af6cb5fd58bac78039">tbb::deprecated::concurrent_queue< T, A ></a><li>process_item()
-: <a class="el" href="a00209.html#5e726bdc7fbd924c0b07bd558b1d4d5d">tbb::thread_bound_filter</a><li>push()
-: <a class="el" href="a00154.html#ceb08c743b11ba88c878e73fff8af20b">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00159.html#73c47563ffcc4c2f6452f25a04ebe2e2">tbb::strict_ppl::concurrent_queue< T, A ></a><li>push_back()
-: <a class="el" href="a00202.html#4cd34756bc4763dafb8c84838a0124ff">tbb::task_list</a>, <a class="el" href="a00161.html#e94e038f915c0268fdf2d3d7f87d81b8">tbb::concurrent_vector< T, A ></a><li>push_if_not_full()
-: <a class="el" href="a00160.html#7c45561bafe71107d09b2bc1b8f4e681">tbb::deprecated::concurrent_queue< T, A ></a></ul>
-<h3><a class="anchor" name="index_q">- q -</a></h3><ul>
-<li>queuing_mutex()
-: <a class="el" href="a00182.html#b389ad9c4db7293e4bdb5b8cda69ec04">tbb::queuing_mutex</a><li>queuing_rw_mutex()
-: <a class="el" href="a00184.html#85c90877c3447690ac4e2ac4ff8dea5e">tbb::queuing_rw_mutex</a></ul>
-<h3><a class="anchor" name="index_r">- r -</a></h3><ul>
-<li>range()
-: <a class="el" href="a00163.html#3b068000cf4dbf9b40f8bb7e3fc53e0b">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00161.html#3d09ccfb581b879ae64203741035e193">tbb::concurrent_vector< T, A ></a><li>rbegin()
-: <a class="el" href="a00161.html#9f9c103e18d5f212703805354074ad44">tbb::concurrent_vector< T, A ></a><li>reader_writer_lock()
-: <a class="el" href="a00186.html#c1431c4293e777efd9aab9a95c2a46e1">tbb::interface5::reader_writer_lock</a><li>ready
-: <a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">tbb::task</a><li>recursive_mutex()
-: <a class="el" href="a00189.html#d2fceb7f95c24a8cd1457d4527e4b8c6">tbb::recursive_mutex</a><li>recycle
-: <a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">tbb::task</a><li>recycle_as_child_of()
-: <a class="el" href="a00199.html#db399855177438bbc9cc61d508dae8d2">tbb::task</a><li>recycle_as_continuation()
-: <a class="el" href="a00199.html#a67a79e18f62b43a623a00cfbd76db4c">tbb::task</a><li>recycle_as_safe_continuation()
-: <a class="el" href="a00199.html#3b290d14109704e2b69dc1ac980a7a76">tbb::task</a><li>recycle_to_reexecute()
-: <a class="el" href="a00199.html#4f1be9bbcdb487830dbe298b68d85144">tbb::task</a><li>reexecute
-: <a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">tbb::task</a><li>ref_count()
-: <a class="el" href="a00199.html#ad774f55eaec008ae02b236423209ced">tbb::task</a><li>reference
-: <a class="el" href="a00154.html#dcd44ca6a88c0dc7a847a47a10811f0c">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00159.html#a8d725c50a9834bb7af5b67c0aff92b8">tbb::strict_ppl::concurrent_queue< T, A ></a><li>register_pending_exception()
-: <a class="el" href="a00201.html#d97c8a03615594b71b4ef06ff75cf561">tbb::task_group_context</a><li>rehash()
-: <a class="el" href="a00155.html#13f3f2e8de7564be03882c31559493c9">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>release()
-: <a class="el" href="a00197.html#61b14d00a78185c9b2d206ebfc379124">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00195.html#eeb615e68e963e6bf8d9c11402d0ce8e">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00190.html#ac480ea0e9d5ea0345a67d57008b6263">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00185.html#67ae221109ddc69510ab593874e435d4">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00183.html#3bf2b8c87ff22115be9b2eac179f2d30">tbb::qu [...]
-: <a class="el" href="a00161.html#d438b9b32ea3a8ffb703015b6dce055b">tbb::concurrent_vector< T, A ></a><li>reserve()
-: <a class="el" href="a00161.html#5a0ce05026994b010018f72cfdeb72c1">tbb::concurrent_vector< T, A ></a><li>reset()
-: <a class="el" href="a00201.html#6d30d16bf1cd22f86c6afaf29c2b430c">tbb::task_group_context</a><li>resize()
-: <a class="el" href="a00161.html#98ce6b2c6d2622f0c030b46dfac3880c">tbb::concurrent_vector< T, A ></a><li>row_range_type
-: <a class="el" href="a00148.html#a807a22fe658ec38b8edfd69521d0383">tbb::blocked_range2d< RowValue, ColValue ></a><li>rows()
-: <a class="el" href="a00149.html#1584623e59ff32a8aa82006827508be4">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00148.html#f496e7348a82652fba581203477cc07c">tbb::blocked_range2d< RowValue, ColValue ></a><li>run()
-: <a class="el" href="a00180.html#93d7fec8cd607b803dd2d79fb46bd260">tbb::pipeline</a>, <a class="el" href="a00179.html#b32a0a6e5e09ebb7fad3e6652c19afe5">tbb::parallel_while< Body ></a></ul>
-<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
-<li>scoped_lock()
-: <a class="el" href="a00197.html#42a92d4f8fdde425b111cfa8a9228071">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00195.html#5ce6807050a9e8f87bcb4a65dccb12ef">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00190.html#dec17713c4c1321ac8fec66816d0c602">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00187.html#cf19f20e082887c1bb0ba6b0911c3583">tbb::interface5::reader_writer_lock::scoped_lock</a>, <a class="el" href="a00185.html#fbb8798792d3aebb136c46fc63d [...]
-: <a class="el" href="a00188.html#87ab0dc8f7216e6ba0f7acd6aec33064">tbb::interface5::reader_writer_lock::scoped_lock_read</a><li>seconds()
-: <a class="el" href="a00211.html#d5d8429c0bc59cf6131b2abc7929fa59">tbb::tick_count::interval_t</a><li>self()
-: <a class="el" href="a00199.html#bd43e8d6249738efafd12d6a4c72c5e3">tbb::task</a><li>set_affinity()
-: <a class="el" href="a00199.html#dca19d7a45487a7d67a0db517e2b57c9">tbb::task</a><li>set_capacity()
-: <a class="el" href="a00154.html#f3c6c934f85fd02aedbc83a16943193b">tbb::concurrent_bounded_queue< T, A ></a><li>set_ref_count()
-: <a class="el" href="a00199.html#06a4206a57e8e12a439b14d6d41cfd92">tbb::task</a><li>set_state()
-: <a class="el" href="a00172.html#795649a185b0d6af6dc81c5f378616dd">tbb::mutex</a><li>shrink_to_fit()
-: <a class="el" href="a00161.html#03c6f4cf66532bf4cc907ee738a9a186">tbb::concurrent_vector< T, A ></a><li>size()
-: <a class="el" href="a00163.html#33fd6593da1ed14340f10f67d5a69130">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00161.html#715fe313c4a9c22731cc404dd80c9ec9">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00154.html#7dc14d1a579a4cccda9f857585e1768d">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00155.html#17fd8c5fe8c6a86075f34aa4e8412ba3">tbb::interface4::concurrent_hash_map< Key, T, H [...]
-: <a class="el" href="a00154.html#a80e4c11dbb324e4b92a24a77bbcde68">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00159.html#8fc30e93f8342a1960357f71e4fe8a2b">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00147.html#f5707bffea38eee5c9680f37358afb8e">tbb::blocked_range< Value ></a><li>spawn_and_wait_for_all()
-: <a class="el" href="a00199.html#894ab68378e502776d8220eea7ce9fa1">tbb::task</a><li>spawn_root_and_wait()
-: <a class="el" href="a00199.html#c33c7edbaec67aa8a56f48986a9dc69f">tbb::task</a><li>spin_mutex()
-: <a class="el" href="a00194.html#3d8fb44644fd8d41ada1fbeba7409be3">tbb::spin_mutex</a><li>spin_rw_mutex_v3()
-: <a class="el" href="a00196.html#61332b2756de89f3f5f69310cbb6e70c">tbb::spin_rw_mutex_v3</a><li>state()
-: <a class="el" href="a00199.html#0af7b2d7e6e8b4333b2accfce3dfb374">tbb::task</a><li>state_type
-: <a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293e">tbb::task</a><li>status_t
-: <a class="el" href="a00186.html#6f921f0d7c1812ceb5674418c8b6ccaf">tbb::interface5::reader_writer_lock</a><li>swap()
-: <a class="el" href="a00161.html#96c9c4bd968ed3edb8dd276854d2dae0">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00155.html#eddb0d2efe0b4f25a85c059e1c3dac15">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></ul>
-<h3><a class="anchor" name="index_t">- t -</a></h3><ul>
-<li>task()
-: <a class="el" href="a00199.html#2bce8ec6e44706e70128f5cf91b76e67">tbb::task</a><li>task_group_context()
-: <a class="el" href="a00201.html#19fee08fb8ac98adccfe69c1aa63c491">tbb::task_group_context</a><li>task_list()
-: <a class="el" href="a00202.html#416341c2047eaef50417b41eaf7e9de6">tbb::task_list</a><li>task_scheduler_init()
-: <a class="el" href="a00203.html#421600bf9bf9338bcf937063f2ff0e90">tbb::task_scheduler_init</a><li>terminate()
-: <a class="el" href="a00203.html#f73257e04cb7fb9bd5be2b635d9016f1">tbb::task_scheduler_init</a><li>throw_self()
-: <a class="el" href="a00207.html#292832fd5c523e3d8081a22247840a1d">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00171.html#17cffba35811c92b7e65d63506b69602">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00152.html#2dd1be66ab32fa27e0ddef5707fa67ef">tbb::captured_exception</a>, <a class="el" href="a00206.html#8588e07fa49692f4d734e4f2e4f048f4">tbb::tbb_exception</a><li>tick_count()
-: <a class="el" href="a00210.html#34593326ae4191e02a13c7cbdab9de4c">tbb::tick_count</a><li>try_acquire()
-: <a class="el" href="a00197.html#9879626968d9b9a04cd2ec0fb2e84ae1">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00195.html#9297ec188534b45dc0ca48f2f39a0501">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00190.html#36bfc3e93e3ef6340abef4901444d340">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00185.html#2e4ff6c9ec2fee6682f95290d1f42baa">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00183.html#e5a014fb817599386a87170cf2cf51a9">tbb::qu [...]
-: <a class="el" href="a00196.html#088bb256be794cc47d3b83791632fdfc">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00194.html#8f9a58fb56a2b4c5efe1a7f7c1ae2074">tbb::spin_mutex</a>, <a class="el" href="a00189.html#86e719b0afee25704af11ab97694d240">tbb::recursive_mutex</a>, <a class="el" href="a00186.html#721eb173e154ab38292273e9266a9b07">tbb::interface5::reader_writer_lock</a>, <a class="el" href="a00172.html#4331652c79dea1c1131bd59ab161b234">tbb::mutex</a><li>try_lock_read()
-: <a class="el" href="a00196.html#b8667415869013f840d976aa406d385a">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00186.html#595fb23952e3b89426b1f7938dea9b11">tbb::interface5::reader_writer_lock</a><li>try_pop()
-: <a class="el" href="a00154.html#0ca487019bbb00a196442aff78a1e4f7">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00159.html#ae31ca0db34ef96ef1e74aa0d28c95f8">tbb::strict_ppl::concurrent_queue< T, A ></a><li>try_process_item()
-: <a class="el" href="a00209.html#c4f90f2c771bce748beb9be734fa286c">tbb::thread_bound_filter</a><li>try_push()
-: <a class="el" href="a00154.html#2bd6232531279fb3ccbd296bea23066b">tbb::concurrent_bounded_queue< T, A ></a></ul>
-<h3><a class="anchor" name="index_u">- u -</a></h3><ul>
-<li>unlock()
-: <a class="el" href="a00196.html#f9f52ead2098eb5fb12da59d5ae53b55">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00194.html#0e843ee6265f57f27d228ba91e7308ef">tbb::spin_mutex</a>, <a class="el" href="a00189.html#f0a96e26b7f074588dc31e32524856ae">tbb::recursive_mutex</a>, <a class="el" href="a00186.html#5113b32689305599b2c36b5831547704">tbb::interface5::reader_writer_lock</a>, <a class="el" href="a00172.html#5fc9ef443ae75d966695546be399cc6b">tbb::mutex</a><li>unsafe_size()
-: <a class="el" href="a00159.html#eaa35a5274606779802e9a669a706260">tbb::strict_ppl::concurrent_queue< T, A ></a><li>upgrade_to_writer()
-: <a class="el" href="a00197.html#3f0b1e3f2efab63336400348bd070226">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00185.html#11ba1da4a722c9e6f73339a52c487e82">tbb::queuing_rw_mutex::scoped_lock</a></ul>
-<h3><a class="anchor" name="index_v">- v -</a></h3><ul>
-<li>value_type
-: <a class="el" href="a00179.html#fa297e53d3af2a101e712bc200233e9c">tbb::parallel_while< Body ></a>, <a class="el" href="a00154.html#98245517a931e5893f6601e66c51fc75">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00159.html#682c3978d5cb0620000994f11c44a476">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00156.html#49eec74f272bab187d176c0d9d16a7fe">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::accesso [...]
-<h3><a class="anchor" name="index_w">- w -</a></h3><ul>
-<li>wait_for_all()
-: <a class="el" href="a00199.html#53d2615ad9c38859b4c8080936600283">tbb::task</a><li>what()
-: <a class="el" href="a00171.html#b33a89bccf0c63106f1270c7bfaaf54f">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00152.html#6b5988ef74a1fe2a58998d110b3633e0">tbb::captured_exception</a>, <a class="el" href="a00206.html#e8157689ecb66bc6c72d3618bf3cc371">tbb::tbb_exception</a></ul>
-<h3><a class="anchor" name="index_~">- ~ -</a></h3><ul>
-<li>~combinable()
-: <a class="el" href="a00153.html#2c87e79ae98588a5780f708773388843">tbb::combinable< T ></a><li>~concurrent_bounded_queue()
-: <a class="el" href="a00154.html#acaf5b510dc0dfc7780b8c956cf773cf">tbb::concurrent_bounded_queue< T, A ></a><li>~concurrent_hash_map()
-: <a class="el" href="a00155.html#a1ac58997d8fbf242b266e3691573481">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>~concurrent_queue()
-: <a class="el" href="a00159.html#830b33753d6b149c366344e29b2edd8c">tbb::strict_ppl::concurrent_queue< T, A ></a><li>~concurrent_vector()
-: <a class="el" href="a00161.html#da2444b28bb840d38f60d0030333a5fc">tbb::concurrent_vector< T, A ></a><li>~const_accessor()
-: <a class="el" href="a00158.html#752b0c1ec74b94786403a75e42917d01">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>~enumerable_thread_specific()
-: <a class="el" href="a00163.html#5a7907d9e3e5b18e7a7b55211ef3213f">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>~filter()
-: <a class="el" href="a00164.html#66d159f362293e3964ba3da8bc1d2604">tbb::filter</a><li>~parallel_while()
-: <a class="el" href="a00179.html#6fcfc973cc56b79c6d0fbb8a31be7e84">tbb::parallel_while< Body ></a><li>~pipeline()
-: <a class="el" href="a00180.html#49513c6c24f9d5bbbb27edca5efe01c9">tbb::pipeline</a><li>~queuing_rw_mutex()
-: <a class="el" href="a00184.html#1ba73e3d95cfdf8323880bc623af9099">tbb::queuing_rw_mutex</a><li>~reader_writer_lock()
-: <a class="el" href="a00186.html#5135f64f7b7339017f33d956445edbee">tbb::interface5::reader_writer_lock</a><li>~scoped_lock()
-: <a class="el" href="a00197.html#d7eaaa3f2e2c5dc11e7005811b1bdd04">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00195.html#ac6fa425d1f06c56d8b70abc51aac844">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00190.html#c1197ffb8f3cd9d4fed71d7e06265b7c">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00187.html#70246e0260493625ff956fa5926fc71f">tbb::interface5::reader_writer_lock::scoped_lock</a>, <a class="el" href="a00185.html#32c7d67a660d23ebbaab1a1d282 [...]
-: <a class="el" href="a00188.html#bd21c5f3d555d64d1de8658e15bf4966">tbb::interface5::reader_writer_lock::scoped_lock_read</a><li>~spin_rw_mutex_v3()
-: <a class="el" href="a00196.html#9a815fb2759e55072ed413f1b6970cf3">tbb::spin_rw_mutex_v3</a><li>~task()
-: <a class="el" href="a00199.html#98245ee0473f84cb19dbbf8c81134908">tbb::task</a><li>~task_list()
-: <a class="el" href="a00202.html#6d438f1499a02db1e59c24ab6043e5ba">tbb::task_list</a><li>~task_scheduler_init()
-: <a class="el" href="a00203.html#4da6c86292d80c703a66c1f6f5299488">tbb::task_scheduler_init</a></ul>
+: <a class="el" href="a00289.html#b0b646ec5be02a127d159bbb7ca65353">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00287.html#3ee3c338732b1f64b0b32a757807a30d">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00279.html#7fb04da37cccf8c99b1f9102d9074f9a">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00273.html#a8dd5ab8686e76de21587544dbb681e0">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00271.html#533e4fc8355ee321206a0609c42d909d">tbb::qu [...]
+: <a class="el" href="a00285.html#d71ed386c53032463f3435f79a15b6ff">tbb::source_node< Output ></a><li>add()
+: <a class="el" href="a00265.html#e131c560057a58229992b61eb8dba4c6">tbb::parallel_while< Body ></a>, <a class="el" href="a00264.html#40baaf0f6856f4491dd0adf896c93516">tbb::parallel_do_feeder< Item ></a><li>add_filter()
+: <a class="el" href="a00266.html#38fb5c9c8395dd6f89a4ae2011a83e0d">tbb::pipeline</a><li>affinity()
+: <a class="el" href="a00291.html#3a920a56b0bcf2801518fb45b2c9d2be">tbb::task</a><li>affinity_id
+: <a class="el" href="a00291.html#d61bb32389d3857bf7511d69beaafb76">tbb::task</a><li>allocate()
+: <a class="el" href="a00299.html#c35e5db8e9cdff5d1387db5b0bad2e4a">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00296.html#f6cb487b1bdce0b581f265a77dca6d53">tbb::tbb_allocator< T ></a>, <a class="el" href="a00280.html#726b1586d05d44665a36e1c7b2699bfd">tbb::scalable_allocator< T ></a>, <a class="el" href="a00226.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">tbb::cache_aligned_allocator< T ></a><li>allocate_child()
+: <a class="el" href="a00291.html#1ff794f7053cd9148d5f280fbf07377f">tbb::task</a><li>allocate_continuation()
+: <a class="el" href="a00291.html#1434c79a5138993269d034008bff7329">tbb::task</a><li>allocate_root()
+: <a class="el" href="a00291.html#8ccc518caf31075a3e073996d2d240a4">tbb::task</a><li>allocated
+: <a class="el" href="a00291.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">tbb::task</a><li>allocator_type
+: <a class="el" href="a00296.html#78701e7454ef8e1a25b5acd364367080">tbb::tbb_allocator< T ></a>, <a class="el" href="a00243.html#3c03eb40955b933b01987222722ac4bd">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00230.html#2e2726fccf6d975dc1071608cc0bbf90">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00236.html#5a3956341728eaa558d8827063718cac">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a c [...]
+: <a class="el" href="a00238.html#93a06b3112cb804f42f40efb5e7387b4">tbb::concurrent_vector< T, A ></a><li>at()
+: <a class="el" href="a00238.html#23e14a38af748edff96a7adc3a0f1c58">tbb::concurrent_vector< T, A ></a><li>automatic
+: <a class="el" href="a00295.html#8f5988e2b0fbb2d533fcbb7f2583743f">tbb::task_scheduler_init</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/functions_0x62.html b/doc/html/functions_0x62.html
new file mode 100644
index 0000000..07268d8
--- /dev/null
+++ b/doc/html/functions_0x62.html
@@ -0,0 +1,78 @@
+<!DOCTYPE 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><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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="functions.html"><span>All</span></a></li>
+    <li><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html#index_a"><span>a</span></a></li>
+    <li id="current"><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+    <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+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_b">- b -</a></h3><ul>
+<li>back()
+: <a class="el" href="a00238.html#bd518e204107d07fd08d0ec5bdfd383d">tbb::concurrent_vector< T, A ></a><li>begin()
+: <a class="el" href="a00243.html#84afb3906a39e399cde1c950d6351300">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00238.html#78a06182276ff758788d4c0623ae0d71">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00221.html#18d2258400756ac1446dac7676b18df3">tbb::blocked_range< Value ></a>, <a class="el" href="a00215.html#0d702fc6b9e9d061ace3501b3c861cdf">tbb::aligned_space< T, N ></a><li>blocked_range()
+: <a class="el" href="a00221.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">tbb::blocked_range< Value ></a><li>bucket_count()
+: <a class="el" href="a00231.html#af34cb91b1d0f36a885a1a3432dd9af1">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>buffer_node()
+: <a class="el" href="a00225.html#7360978fa427d054bc6cde05c80e5e9f">tbb::buffer_node< T ></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/functions_0x63.html b/doc/html/functions_0x63.html
new file mode 100644
index 0000000..472f7a3
--- /dev/null
+++ b/doc/html/functions_0x63.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>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><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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="functions.html"><span>All</span></a></li>
+    <li><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+    <li id="current"><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+    <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+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_c">- c -</a></h3><ul>
+<li>cancel_group_execution()
+: <a class="el" href="a00291.html#0f3fb4aac549ab642022450a4bd13326">tbb::task</a>, <a class="el" href="a00293.html#8bcdfdf4e6bfb76125b6de15c00b571d">tbb::task_group_context</a><li>capacity()
+: <a class="el" href="a00238.html#3ed6b9ae7217af5103d974045b6f5cd5">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00230.html#b2888b3e4e837d7e03f2c731963a402b">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00235.html#e5d6a0aca1579ecebb716bbe53514963">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>cbegin()
+: <a class="el" href="a00238.html#f88fcf1c920693c39bd9709db33c199f">tbb::concurrent_vector< T, A ></a><li>cend()
+: <a class="el" href="a00238.html#0c15a5d0f1cf75d687dabba07da1d46b">tbb::concurrent_vector< T, A ></a><li>change_group()
+: <a class="el" href="a00291.html#62247be9a637a814c8e8f4bcfb3a1908">tbb::task</a><li>clear()
+: <a class="el" href="a00294.html#fce446ee13e025969945328f3ff59b95">tbb::task_list</a>, <a class="el" href="a00266.html#2c84aef5b834b555ee220b176e25931e">tbb::pipeline</a>, <a class="el" href="a00243.html#a8764176d4b6014c5d65f1051851abc8">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00238.html#26f937a359a66b6aae904c3cd9a3c444">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00230.html#90b31e2954c6e4596c7900435a5f [...]
+: <a class="el" href="a00223.html#3336ba9480fd6c43e158f9beb024c050">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00222.html#392a46759af2c884957115771affa7f4">tbb::blocked_range2d< RowValue, ColValue ></a><li>compact()
+: <a class="el" href="a00238.html#1693d1da41b1a8235871be9c6633be35">tbb::concurrent_vector< T, A ></a><li>concurrency
+: <a class="el" href="a00250.html#633b9b55e3248b785efd13264261f0e5">tbb::graph</a><li>concurrent_bounded_queue()
+: <a class="el" href="a00230.html#a5e04dcd7db9fd9b583b4e7df832246a">tbb::concurrent_bounded_queue< T, A ></a><li>concurrent_hash_map()
+: <a class="el" href="a00231.html#83c40f2053f208861b90390e12a36436">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>concurrent_priority_queue()
+: <a class="el" href="a00235.html#509419e320f200456d89dc54a65140b3">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>concurrent_queue()
+: <a class="el" href="a00237.html#9102b897776bd2d9e908e6604ff16b5f">tbb::deprecated::concurrent_queue< T, A ></a>, <a class="el" href="a00236.html#8a6b98ea11a867db8ac868f0113ca429">tbb::strict_ppl::concurrent_queue< T, A ></a><li>concurrent_vector()
+: <a class="el" href="a00238.html#4450de83c5862ea4bcd9443fd7e67419">tbb::concurrent_vector< T, A ></a><li>const_accessor()
+: <a class="el" href="a00234.html#27399c613eb1aecd4660803955dda09d">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>const_iterator
+: <a class="el" href="a00221.html#1a8d05842c2b3dfc177bc4d347e4cef7">tbb::blocked_range< Value ></a><li>const_reference
+: <a class="el" href="a00230.html#796713d0b9ba93a4721cbe13e4474068">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00236.html#4d48e7ff93f81636bca2c74f7da34750">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00235.html#a4ded8601a434098605be0dcc4febc60">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>construct()
+: <a class="el" href="a00296.html#ab228ab9e324ed041c2226e1d717df5f">tbb::tbb_allocator< T ></a>, <a class="el" href="a00226.html#958ee8745c86c275bfc9533af565e017">tbb::cache_aligned_allocator< T ></a><li>consume()
+: <a class="el" href="a00304.html#684f6bbc3290270ed43cb34ffd273f71">tbb::internal::two_phase_port< T ></a><li>context()
+: <a class="el" href="a00291.html#d8c36a93f3972590fbb65ff1cef3173b">tbb::task</a><li>continue_receiver()
+: <a class="el" href="a00241.html#799d383813261426d881b10247caadba">tbb::continue_receiver</a><li>count()
+: <a class="el" href="a00231.html#6968eb6feed2df36be421df0464297af">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>crbegin()
+: <a class="el" href="a00238.html#db78a1d28c9c966050e8a2926d834a33">tbb::concurrent_vector< T, A ></a><li>crend()
+: <a class="el" href="a00238.html#fff9cece89438587997ebedf93c5e962">tbb::concurrent_vector< T, A ></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/functions_0x64.html b/doc/html/functions_0x64.html
new file mode 100644
index 0000000..b3be88e
--- /dev/null
+++ b/doc/html/functions_0x64.html
@@ -0,0 +1,82 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>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><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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="functions.html"><span>All</span></a></li>
+    <li><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+    <li id="current"><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+    <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+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_d">- d -</a></h3><ul>
+<li>deallocate()
+: <a class="el" href="a00296.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">tbb::tbb_allocator< T ></a>, <a class="el" href="a00280.html#f806a238c18cbcfb531e1e0a0d2ec59d">tbb::scalable_allocator< T ></a>, <a class="el" href="a00226.html#3d4eadf188f7d85d3805ae534e0b8e1c">tbb::cache_aligned_allocator< T ></a><li>decrement
+: <a class="el" href="a00255.html#181fa37d3e3c68ec3819ea46beed79a2">tbb::limiter_node< T ></a><li>decrement_ref_count()
+: <a class="el" href="a00291.html#ef4680f5c148020c5e7e43ddef44cd5d">tbb::task</a><li>decrement_wait_count()
+: <a class="el" href="a00250.html#ff3b6a3ef2ae1e661dcdb398c227b43c">tbb::graph</a><li>default_num_threads()
+: <a class="el" href="a00295.html#ba00714c33a41a3c2216f48613971cab">tbb::task_scheduler_init</a><li>deferred
+: <a class="el" href="a00295.html#e6c860f1e559026ff3ef4599c0d6c514">tbb::task_scheduler_init</a><li>destroy()
+: <a class="el" href="a00299.html#921875bbacd2c8a5f324c7da7a415262">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00257.html#7a46873119d9f85a7b0009c13e41a258">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00228.html#93d875d3555502ff6f18513525de204c">tbb::captured_exception</a>, <a class="el" href="a00298.html#66c94938eca8bf88b76f3eccaaf215d8">tbb::tbb_exception</a>, <a class="el" href="a00296.html#ef133522bf55f05a605bee0763208281">tbb::tbb_allocator [...]
+: <a class="el" href="a00230.html#4b45c91297e69515d83d5eef85ae1f49">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00236.html#068576d16c7e4e05d52f9db7a45b5b65">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00235.html#77399bc76b3ecd60e33f7e35a5becd87">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>downgrade_to_reader()
+: <a class="el" href="a00289.html#c2c2c38a08cb9080e87099fac3e5bc94">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00273.html#0d2f93edf7b15ec4bcee138823220c52">tbb::queuing_rw_mutex::scoped_lock</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/functions_0x65.html b/doc/html/functions_0x65.html
new file mode 100644
index 0000000..3033112
--- /dev/null
+++ b/doc/html/functions_0x65.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>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><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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="functions.html"><span>All</span></a></li>
+    <li><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+    <li id="current"><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+    <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+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_e">- e -</a></h3><ul>
+<li>empty()
+: <a class="el" href="a00294.html#f3ac31e092814b90929f81bb30441959">tbb::task_list</a>, <a class="el" href="a00243.html#72595886d0ac8fd0543f90038570510d">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00238.html#c6426cb93cf20d3af40f3c90f1f0481a">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00230.html#f64924f2ee9225c368a270fc3c394db9">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00236.htm [...]
+: <a class="el" href="a00243.html#cb448bb4977ce366ceb7344085cc7050">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00238.html#1e6aa764ce5a1cbd24526f68bc0a2f6b">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00221.html#8b929d93ddc13f148b11bceef3a3bdf8">tbb::blocked_range< Value ></a>, <a class="el" href="a00215.html#024be075c23c0394c9a2518d993bcd9e">tbb::aligned_space< T, N ></a><li>enqueue()
+: <a class="el" href="a00291.html#fe6bf6aaf84e664134fabb6c4f409ea9">tbb::task</a><li>enumerable_thread_specific()
+: <a class="el" href="a00243.html#7bce6829981c9efe3f59cae2355e383e">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>erase()
+: <a class="el" href="a00231.html#5f12d150d421420965db07368666a84f">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>exact_exception_propagation
+: <a class="el" href="a00245.html#f17200974c33be21f42a5f00893de028">tbb::filter</a><li>exclude()
+: <a class="el" href="a00231.html#0c964214eb38f54603aa75fdff6d2709">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>executable_node()
+: <a class="el" href="a00244.html#c13030111d34feeafd9cdb1dd21584f1">tbb::executable_node< Output ></a><li>execute()
+: <a class="el" href="a00291.html#22c298cd40937a431a06777423f002f6">tbb::task</a>, <a class="el" href="a00241.html#e6bf1d21e670b78ea00c71fccbe17c78">tbb::continue_receiver</a>, <a class="el" href="a00214.html#282d5a2f1216b185c91ed23d00119481">tbb::interface6::internal::aggregator< handler_type, operation_type ></a><li>executing
+: <a class="el" href="a00291.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">tbb::task</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/functions_0x66.html b/doc/html/functions_0x66.html
new file mode 100644
index 0000000..f710d19
--- /dev/null
+++ b/doc/html/functions_0x66.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>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><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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="functions.html"><span>All</span></a></li>
+    <li><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+    <li id="current"><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+    <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+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_f">- f -</a></h3><ul>
+<li>filter_is_bound
+: <a class="el" href="a00245.html#dd6a6e7210efc9bcaf2c5e08767d92b5">tbb::filter</a><li>filter_is_out_of_order
+: <a class="el" href="a00245.html#2e5eb65f95d8050186278077e433c5b1">tbb::filter</a><li>filter_is_serial
+: <a class="el" href="a00245.html#4b7de3a76e744f3d9c1bc5d437ea851d">tbb::filter</a><li>filter_may_emit_null
+: <a class="el" href="a00245.html#bdd02a434a6e7499dd1e8f43aae96793">tbb::filter</a><li>finalize()
+: <a class="el" href="a00245.html#56275eb889c77c4807967133e21401bd">tbb::filter</a><li>find()
+: <a class="el" href="a00231.html#7bc475d1968f7f0af3d736d7e8a0d7df">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>forward()
+: <a class="el" href="a00225.html#3a31b3b55bee417de3af09c7b45b9ad6">tbb::buffer_node< T ></a><li>freed
+: <a class="el" href="a00291.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">tbb::task</a><li>front()
+: <a class="el" href="a00238.html#502615a858eb9fa0390ee59169065e90">tbb::concurrent_vector< T, A ></a><li>function_node()
+: <a class="el" href="a00249.html#7bde12e8ee43d4cafbdd5b1fc2031e2b">tbb::function_node< Input, Output ></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/functions_0x67.html b/doc/html/functions_0x67.html
new file mode 100644
index 0000000..f9096f0
--- /dev/null
+++ b/doc/html/functions_0x67.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>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><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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="functions.html"><span>All</span></a></li>
+    <li><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+    <li id="current"><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+    <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+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_g">- g -</a></h3><ul>
+<li>get_allocator()
+: <a class="el" href="a00238.html#2fdba8e90de6a4d2300222236d46758e">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00230.html#415eb87e53b1c6a266de06ecbc490d16">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00236.html#f034f70caef445fe8abc9113ec926a8d">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00235.html#d545d444fb0d16148f9b61fd89f9a337">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>, <a class="e [...]
+: <a class="el" href="a00221.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">tbb::blocked_range< Value ></a><li>graph()
+: <a class="el" href="a00250.html#1ba8311506558a2419101722f5d49ba9">tbb::graph</a><li>group()
+: <a class="el" href="a00291.html#5987123486afca36ddebb9e2a8b7779a">tbb::task</a><li>group_priority()
+: <a class="el" href="a00291.html#e1d969a1ccab6796e3b8b2c1a5be33d2">tbb::task</a><li>grow_by()
+: <a class="el" href="a00238.html#473a59a4c9308b93411b898b3110d26c">tbb::concurrent_vector< T, A ></a><li>grow_my_array()
+: <a class="el" href="a00225.html#3ec9d33aa9f1e9292d5952e3eb477ca1">tbb::buffer_node< T ></a><li>grow_to_at_least()
+: <a class="el" href="a00238.html#a7e3b67c8ccab16d0aecc80899ae799d">tbb::concurrent_vector< T, A ></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/functions_0x69.html b/doc/html/functions_0x69.html
new file mode 100644
index 0000000..732763d
--- /dev/null
+++ b/doc/html/functions_0x69.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>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><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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="functions.html"><span>All</span></a></li>
+    <li><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+    <li id="current"><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+    <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+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_i">- i -</a></h3><ul>
+<li>increment_ref_count()
+: <a class="el" href="a00291.html#f5fb43c7ad0de5a4b95703cebc39e345">tbb::task</a><li>increment_wait_count()
+: <a class="el" href="a00250.html#1e5c5ae6538ec714cee107d1004705b9">tbb::graph</a><li>init()
+: <a class="el" href="a00293.html#49a55352084fd44b8863d182e839e6dc">tbb::task_group_context</a><li>initialize()
+: <a class="el" href="a00295.html#d5ed214a8bb53b0466ed91ff4734b9a3">tbb::task_scheduler_init</a><li>input_type
+: <a class="el" href="a00304.html#0f464d59e15941d6d625e8c7d634e26b">tbb::internal::two_phase_port< T ></a>, <a class="el" href="a00255.html#f654b8974c613e8fd3de5a40e181d5ff">tbb::limiter_node< T ></a>, <a class="el" href="a00268.html#40fdedd4829aeae3ebd1a5fdaf39b23d">tbb::priority_queue_node< T, Compare ></a>, <a class="el" href="a00283.html#a73e4a3ae6c430281f08226d448ebfc8">tbb::sequencer_node< T ></a>, <a class="el" href="a00269.html#27016487003a4ff2908748c3cf11 [...]
+: <a class="el" href="a00231.html#1dd37fad87e561151ba1e242ca94bcc1">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_copy()
+: <a class="el" href="a00231.html#72c9c9e9655fcf096f5f0ed9c8ba6669">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_equal_range()
+: <a class="el" href="a00231.html#8f5373b8e1864619d1ffcf3bf3f1f13d">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_fast_find()
+: <a class="el" href="a00231.html#2f76ed101a0ccc8875b846c2f747897e">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_forward()
+: <a class="el" href="a00268.html#79161e73f79cc43b2c2b08367504dfda">tbb::priority_queue_node< T, Compare ></a>, <a class="el" href="a00269.html#fb58bac5ac355e5134c51125e601fa2a">tbb::queue_node< T ></a>, <a class="el" href="a00225.html#a3cb61d8a98bc4bc860b1cb04944b4f8">tbb::buffer_node< T ></a><li>internal_reg_succ()
+: <a class="el" href="a00225.html#017f16c8d6e0fb65d0d3a61aec86b3e2">tbb::buffer_node< T ></a><li>internal_rem_succ()
+: <a class="el" href="a00225.html#a75f731cf9fc93f7487eb72de3fcf7b1">tbb::buffer_node< T ></a><li>interval_t()
+: <a class="el" href="a00303.html#1a21a428e00cced2e6a49e0f5f2258bf">tbb::tick_count::interval_t</a><li>is_active()
+: <a class="el" href="a00295.html#12752282977029f23416642bc03e8b74">tbb::task_scheduler_init</a><li>is_bound()
+: <a class="el" href="a00245.html#15c29cae5d237e6d63dbfe5c94af89d5">tbb::filter</a><li>is_cancelled()
+: <a class="el" href="a00291.html#025f18118c057c4c8db87ff2ce8df975">tbb::task</a><li>is_divisible()
+: <a class="el" href="a00223.html#39d69191721c488e737ae5d9c5336b9c">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00222.html#ad36a9b38e4fef26d376f99552ce2d92">tbb::blocked_range2d< RowValue, ColValue ></a>, <a class="el" href="a00221.html#41a58b703d574b6e1ca155df3576f578">tbb::blocked_range< Value ></a><li>is_group_execution_cancelled()
+: <a class="el" href="a00293.html#4db72f16210b0a991b2c134d6763a4cc">tbb::task_group_context</a><li>is_ordered()
+: <a class="el" href="a00245.html#cd53206c4795ef2df5df26b795caf692">tbb::filter</a><li>is_owned_by_current_thread()
+: <a class="el" href="a00291.html#c26718b3b247cd13deb1a741902e7105">tbb::task</a><li>is_serial()
+: <a class="el" href="a00245.html#fcfec27656a69ff2072802ac001e936f">tbb::filter</a><li>is_stolen_task()
+: <a class="el" href="a00291.html#f9169402702f56bf519448aaf34450aa">tbb::task</a><li>is_writer
+: <a class="el" href="a00233.html#07d958f151a0eaa92f50fd56ad6440e2">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a>, <a class="el" href="a00289.html#6b5a7c3c67a36b05c4df8410d32627d8">tbb::spin_rw_mutex_v3::scoped_lock</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/functions_0x6c.html b/doc/html/functions_0x6c.html
new file mode 100644
index 0000000..89e6902
--- /dev/null
+++ b/doc/html/functions_0x6c.html
@@ -0,0 +1,78 @@
+<!DOCTYPE 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><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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="functions.html"><span>All</span></a></li>
+    <li><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+    <li id="current"><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+    <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+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_l">- l -</a></h3><ul>
+<li>limiter_node()
+: <a class="el" href="a00255.html#f0139fc645a51ce30b7aebb59c38a4ed">tbb::limiter_node< T ></a><li>local()
+: <a class="el" href="a00243.html#7dc79058d2832f7447de8e691c3455ea">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>lock()
+: <a class="el" href="a00288.html#4007d6e1523dbc3c2bb7f889ab789a8a">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00286.html#4f748989e19b6045e3a2d2ee73626a28">tbb::spin_mutex</a>, <a class="el" href="a00278.html#4c342c69d47f4bb0b393535dee4015d6">tbb::recursive_mutex</a>, <a class="el" href="a00274.html#2653d1a2d560059a51219a8ceab3ade9">tbb::interface5::reader_writer_lock</a>, <a class="el" href="a00258.html#4470e61c24c129a0299ca6c17240adbb">tbb::mutex</a><li>lock_read()
+: <a class="el" href="a00288.html#13f799708ac4ca437a16be202e263e18">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00274.html#d9d16a24d9f6c3dada73c6b9ff214f5b">tbb::interface5::reader_writer_lock</a><li>lookup()
+: <a class="el" href="a00231.html#3f3413264a99174a224ef96f6c4ea769">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></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/functions_0x6d.html b/doc/html/functions_0x6d.html
new file mode 100644
index 0000000..95a0db3
--- /dev/null
+++ b/doc/html/functions_0x6d.html
@@ -0,0 +1,79 @@
+<!DOCTYPE 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><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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="functions.html"><span>All</span></a></li>
+    <li><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+    <li id="current"><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+    <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+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_m">- m -</a></h3><ul>
+<li>make_filter
+: <a class="el" href="a00246.html#85c2892eff1fddcd06e28911e75838bd">tbb::interface6::filter_t< T, U ></a><li>malloc_type
+: <a class="el" href="a00296.html#09a7f81fb2c3055aaecf058b11538544">tbb::tbb_allocator< T ></a><li>max_size()
+: <a class="el" href="a00296.html#f059ca2c96243024f0d562ee3a87a3a5">tbb::tbb_allocator< T ></a>, <a class="el" href="a00280.html#880e766f1d913988c21973dbdd874fd5">tbb::scalable_allocator< T ></a>, <a class="el" href="a00238.html#2c248a017f0576df3e7cd99627836fd6">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00231.html#2bce57fe9b594abe1e6d2568aea8b357">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>, <a class="el" href="a00226. [...]
+: <a class="el" href="a00257.html#1aea0ad179d6f0481fe7f3495f66adf9">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00228.html#837a50b8f6a800bda225c39d1699643f">tbb::captured_exception</a>, <a class="el" href="a00298.html#3e3482bf264d4ca4dde046cd9c02c766">tbb::tbb_exception</a><li>mutex
+: <a class="el" href="a00258.html#05313cb77d4f85213103d4dab74ed454">tbb::mutex</a>, <a class="el" href="a00289.html#d96d1a1fcc3d79ef3e5c06a53b8ffeaa">tbb::spin_rw_mutex_v3::scoped_lock</a><li>my_exception_data
+: <a class="el" href="a00257.html#a8c0ae2089ae784b28907cf748b89416">tbb::movable_exception< ExceptionData ></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/functions_0x6e.html b/doc/html/functions_0x6e.html
new file mode 100644
index 0000000..7755321
--- /dev/null
+++ b/doc/html/functions_0x6e.html
@@ -0,0 +1,77 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>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><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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="functions.html"><span>All</span></a></li>
+    <li><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+    <li id="current"><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+    <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+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_n">- n -</a></h3><ul>
+<li>name()
+: <a class="el" href="a00257.html#bc5f5c4739b17ac5211ac58226c2f5a5">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00228.html#5af82fd677449c5ca727fa1d7e16f9f5">tbb::captured_exception</a>, <a class="el" href="a00298.html#d00f6497e552fee978a02bfcbebf46e2">tbb::tbb_exception</a><li>native_handle_type
+: <a class="el" href="a00278.html#889fa8cc32dd707eef7c0f52dda09c0d">tbb::recursive_mutex</a>, <a class="el" href="a00258.html#9f1ec84d5815263ceae853f06ddb4cac">tbb::mutex</a><li>note_affinity()
+: <a class="el" href="a00291.html#713c338c8eeaebdc5a6b10a69c039b06">tbb::task</a><li>now()
+: <a class="el" href="a00302.html#fb7f78ca61cf28398645ace66e284473">tbb::tick_count</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/functions_0x6f.html b/doc/html/functions_0x6f.html
new file mode 100644
index 0000000..9bef6ab
--- /dev/null
+++ b/doc/html/functions_0x6f.html
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>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><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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="functions.html"><span>All</span></a></li>
+    <li><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+    <li id="current"><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+    <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+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_o">- o -</a></h3><ul>
+<li>object_may_be_null()
+: <a class="el" href="a00245.html#8ec4dfe053e94a2349d56781ddea8477">tbb::filter</a><li>operator *()
+: <a class="el" href="a00232.html#170280ea807a22e742095de3e8c5ea38">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, <a class="el" href="a00234.html#9411df8197ceb4881ec4c7368a0a7f88">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>operator delete()
+: <a class="el" href="a00298.html#3f2da7f3d8a6e4c1df522af1213afb5a">tbb::tbb_exception</a><li>operator()()
+: <a class="el" href="a00245.html#fa1b3dc1f4f47563ccab7f4d92f5b543">tbb::filter</a>, <a class="el" href="a00233.html#fa6314b861c574f86ed189b124cf5853">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a><li>operator+
+: <a class="el" href="a00303.html#5871ead1ca230efbe52a5008470e6428">tbb::tick_count::interval_t</a><li>operator+=()
+: <a class="el" href="a00303.html#cd9814947902e26463a69a111530f81b">tbb::tick_count::interval_t</a><li>operator-
+: <a class="el" href="a00302.html#09dde78a4100800c11bb883d6204b586">tbb::tick_count</a>, <a class="el" href="a00303.html#fa509691e1d689830931e36edd274f76">tbb::tick_count::interval_t</a><li>operator-=()
+: <a class="el" href="a00303.html#35ff7eaf7c2031b4a991402ac9ecb940">tbb::tick_count::interval_t</a><li>operator->()
+: <a class="el" href="a00232.html#a807920cdffe3ec5c5e282b4d1ff92a2">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, <a class="el" href="a00234.html#3d03a48ecb8cd9549bd8be64b09c9b0d">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>operator=()
+: <a class="el" href="a00238.html#19f4ab88a01b0fd056af3bba463e7bd6">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00235.html#2ab7f7808891027ac0f0f5b3a4be51e9">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>, <a class="el" href="a00231.html#088d1aaccc816884a49e38f7065622c8">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>operator[]()
+: <a class="el" href="a00238.html#c6fade5c732cc95274d1d8277ea619d1">tbb::concurrent_vector< T, A ></a><li>output_type
+: <a class="el" href="a00254.html#578893d923f91b7e44a15dea8b0d7082">tbb::internal::join_node_base< JP, InputTuple, OutputTuple ></a>, <a class="el" href="a00255.html#370f88278dec6f584c1d08a375f9b4cd">tbb::limiter_node< T ></a>, <a class="el" href="a00268.html#3b3fa4479416e7cb6d4a6a4b175c2b15">tbb::priority_queue_node< T, Compare ></a>, <a class="el" href="a00283.html#0c613bb01103dfcfbc3f9cbe943f95b0">tbb::sequencer_node< T ></a>, <a class="el" href="a00269.html#d2 [...]
+<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/functions_0x70.html b/doc/html/functions_0x70.html
new file mode 100644
index 0000000..c3f3ee1
--- /dev/null
+++ b/doc/html/functions_0x70.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>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><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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="functions.html"><span>All</span></a></li>
+    <li><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+    <li id="current"><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+    <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+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_p">- p -</a></h3><ul>
+<li>page_range_type
+: <a class="el" href="a00223.html#b8ebf17a552ba47825e9b3887855b719">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a><li>pages()
+: <a class="el" href="a00223.html#cf971430aa12361d3ed245344b7c6764">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a><li>parallel_while()
+: <a class="el" href="a00265.html#36e26ba3880c7bcf804a97ba0cbe133f">tbb::parallel_while< Body ></a><li>parent()
+: <a class="el" href="a00291.html#314e98ee4347ccec83efcb9ee22e8596">tbb::task</a><li>pause()
+: <a class="el" href="a00218.html#a174ea93e3bd3d5cce82389c2f28d037">tbb::internal::atomic_backoff</a><li>pipeline()
+: <a class="el" href="a00266.html#596dc3beba27099c4c8581cb419e1a59">tbb::pipeline</a><li>pop()
+: <a class="el" href="a00230.html#41f4c6bd7a82ab070e840bbf81b0b123">tbb::concurrent_bounded_queue< T, A ></a><li>pop_front()
+: <a class="el" href="a00294.html#5fe85df5ed524418389d34051750347d">tbb::task_list</a><li>pop_if_present()
+: <a class="el" href="a00237.html#48da3536245318af6cb5fd58bac78039">tbb::deprecated::concurrent_queue< T, A ></a><li>predecessor_type
+: <a class="el" href="a00304.html#37ee9b5320b631c39bccc0b4745d88d1">tbb::internal::two_phase_port< T ></a>, <a class="el" href="a00255.html#fd88ce7670e7107aef2161b45f156185">tbb::limiter_node< T ></a>, <a class="el" href="a00268.html#98900a87758cac05500fcbc74113cebf">tbb::priority_queue_node< T, Compare ></a>, <a class="el" href="a00283.html#6581686ef0cf8e13c0270687628af5eb">tbb::sequencer_node< T ></a>, <a class="el" href="a00269.html#83bc7308a38f1d205377d78ec149 [...]
+: <a class="el" href="a00293.html#2f2342b9e6c9c03703248ac13ad0271d">tbb::task_group_context</a><li>priority_queue_node()
+: <a class="el" href="a00268.html#1630f68674c4b201346a391b1e8d3f5d">tbb::priority_queue_node< T, Compare ></a><li>process_item()
+: <a class="el" href="a00301.html#5e726bdc7fbd924c0b07bd558b1d4d5d">tbb::thread_bound_filter</a><li>push()
+: <a class="el" href="a00230.html#ceb08c743b11ba88c878e73fff8af20b">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00236.html#73c47563ffcc4c2f6452f25a04ebe2e2">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00235.html#d905af7b8f6defff562f5ae9c3275763">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>push_back()
+: <a class="el" href="a00294.html#4cd34756bc4763dafb8c84838a0124ff">tbb::task_list</a>, <a class="el" href="a00238.html#e94e038f915c0268fdf2d3d7f87d81b8">tbb::concurrent_vector< T, A ></a><li>push_if_not_full()
+: <a class="el" href="a00237.html#7c45561bafe71107d09b2bc1b8f4e681">tbb::deprecated::concurrent_queue< T, A ></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/functions_0x71.html b/doc/html/functions_0x71.html
new file mode 100644
index 0000000..a3a1519
--- /dev/null
+++ b/doc/html/functions_0x71.html
@@ -0,0 +1,76 @@
+<!DOCTYPE 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><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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="functions.html"><span>All</span></a></li>
+    <li><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+    <li id="current"><a href="functions_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+    <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+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_q">- q -</a></h3><ul>
+<li>queue_node()
+: <a class="el" href="a00269.html#1564c6bf9573b13d6854b0e8f7ce2b68">tbb::queue_node< T ></a><li>queuing_mutex()
+: <a class="el" href="a00270.html#b389ad9c4db7293e4bdb5b8cda69ec04">tbb::queuing_mutex</a><li>queuing_rw_mutex()
+: <a class="el" href="a00272.html#85c90877c3447690ac4e2ac4ff8dea5e">tbb::queuing_rw_mutex</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/functions_0x72.html b/doc/html/functions_0x72.html
new file mode 100644
index 0000000..9d7531a
--- /dev/null
+++ b/doc/html/functions_0x72.html
@@ -0,0 +1,101 @@
+<!DOCTYPE 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><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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="functions.html"><span>All</span></a></li>
+    <li><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_0x71.html#index_q"><span>q</span></a></li>
+    <li id="current"><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+    <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+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_r">- r -</a></h3><ul>
+<li>range()
+: <a class="el" href="a00243.html#3b068000cf4dbf9b40f8bb7e3fc53e0b">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00238.html#3d09ccfb581b879ae64203741035e193">tbb::concurrent_vector< T, A ></a><li>rbegin()
+: <a class="el" href="a00238.html#9f9c103e18d5f212703805354074ad44">tbb::concurrent_vector< T, A ></a><li>reader_writer_lock()
+: <a class="el" href="a00274.html#c1431c4293e777efd9aab9a95c2a46e1">tbb::interface5::reader_writer_lock</a><li>ready
+: <a class="el" href="a00291.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">tbb::task</a><li>recursive_mutex()
+: <a class="el" href="a00278.html#d2fceb7f95c24a8cd1457d4527e4b8c6">tbb::recursive_mutex</a><li>recycle
+: <a class="el" href="a00291.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">tbb::task</a><li>recycle_as_child_of()
+: <a class="el" href="a00291.html#db399855177438bbc9cc61d508dae8d2">tbb::task</a><li>recycle_as_continuation()
+: <a class="el" href="a00291.html#a67a79e18f62b43a623a00cfbd76db4c">tbb::task</a><li>recycle_as_safe_continuation()
+: <a class="el" href="a00291.html#3b290d14109704e2b69dc1ac980a7a76">tbb::task</a><li>recycle_to_reexecute()
+: <a class="el" href="a00291.html#4f1be9bbcdb487830dbe298b68d85144">tbb::task</a><li>reexecute
+: <a class="el" href="a00291.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">tbb::task</a><li>ref_count()
+: <a class="el" href="a00291.html#ad774f55eaec008ae02b236423209ced">tbb::task</a><li>reference
+: <a class="el" href="a00230.html#dcd44ca6a88c0dc7a847a47a10811f0c">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00236.html#a8d725c50a9834bb7af5b67c0aff92b8">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00235.html#5804b3c708ef4e50d603f918ef2b9e58">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>register_pending_exception()
+: <a class="el" href="a00293.html#d97c8a03615594b71b4ef06ff75cf561">tbb::task_group_context</a><li>register_predecessor()
+: <a class="el" href="a00304.html#6dc1f9bf02109c7f6fe4cc58bc31a00c">tbb::internal::two_phase_port< T ></a>, <a class="el" href="a00255.html#fb9909b87538f5c881c7cb7577436d14">tbb::limiter_node< T ></a>, <a class="el" href="a00241.html#b9fa9290cbb871f8780f9d69e1ec3b4e">tbb::continue_receiver</a>, <a class="el" href="a00277.html#14ae737c8fca4c8bf8e1a736dfbac444">tbb::receiver< T ></a><li>register_successor()
+: <a class="el" href="a00255.html#b8b9dbfbfc52750fa0c6bb8849681e86">tbb::limiter_node< T ></a>, <a class="el" href="a00225.html#cd2ef588b0ee6eb8d23ee169e00c73a9">tbb::buffer_node< T ></a>, <a class="el" href="a00224.html#3f4149fa6b984b2138cb5ed40a2ddc6c">tbb::broadcast_node< T ></a>, <a class="el" href="a00285.html#ce601874ec5cbb0996f6dcb8e43badb8">tbb::source_node< Output ></a>, <a class="el" href="a00282.html#be48ac70174cf8e08e2b0279cd6343d3">tbb::sender< T & [...]
+: <a class="el" href="a00231.html#94758113d8993cfe5afdf2d63a728869">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>release()
+: <a class="el" href="a00289.html#61b14d00a78185c9b2d206ebfc379124">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00287.html#eeb615e68e963e6bf8d9c11402d0ce8e">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00279.html#ac480ea0e9d5ea0345a67d57008b6263">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00273.html#67ae221109ddc69510ab593874e435d4">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00271.html#3bf2b8c87ff22115be9b2eac179f2d30">tbb::qu [...]
+: <a class="el" href="a00304.html#a734a55289804ff34ce1c6ac4c5075e4">tbb::internal::two_phase_port< T ></a>, <a class="el" href="a00255.html#a05cf39b2825183e9c0393890fbbbb41">tbb::limiter_node< T ></a>, <a class="el" href="a00241.html#02411d8d13b380062548aff133752cc5">tbb::continue_receiver</a>, <a class="el" href="a00277.html#d2f23b40b328dc254a7c2a0a30f408e4">tbb::receiver< T ></a><li>remove_successor()
+: <a class="el" href="a00255.html#047d77f583e789e6d3ac6a52aba3168b">tbb::limiter_node< T ></a>, <a class="el" href="a00225.html#415428db02e74a479fb056a8ed72ba53">tbb::buffer_node< T ></a>, <a class="el" href="a00224.html#eefb3210bb9727765ea7385ba163c2a6">tbb::broadcast_node< T ></a>, <a class="el" href="a00285.html#de069bfc6fae7ed4e82b2a1fbb58b721">tbb::source_node< Output ></a>, <a class="el" href="a00282.html#3f345427e812e8741370308ff88f30bf">tbb::sender< T & [...]
+: <a class="el" href="a00238.html#d438b9b32ea3a8ffb703015b6dce055b">tbb::concurrent_vector< T, A ></a><li>reserve()
+: <a class="el" href="a00304.html#1d7399cfc77fca8878d8d16049ce4e7e">tbb::internal::two_phase_port< T ></a>, <a class="el" href="a00238.html#5a0ce05026994b010018f72cfdeb72c1">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00235.html#e7c59f011c4cca83ff210aefe7c9d868">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>reset()
+: <a class="el" href="a00293.html#6d30d16bf1cd22f86c6afaf29c2b430c">tbb::task_group_context</a><li>resize()
+: <a class="el" href="a00238.html#98ce6b2c6d2622f0c030b46dfac3880c">tbb::concurrent_vector< T, A ></a><li>root_task()
+: <a class="el" href="a00250.html#34d61d8b6560e5b2eb42e0112701db0f">tbb::graph</a><li>row_range_type
+: <a class="el" href="a00222.html#a807a22fe658ec38b8edfd69521d0383">tbb::blocked_range2d< RowValue, ColValue ></a><li>rows()
+: <a class="el" href="a00223.html#1584623e59ff32a8aa82006827508be4">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00222.html#f496e7348a82652fba581203477cc07c">tbb::blocked_range2d< RowValue, ColValue ></a><li>run()
+: <a class="el" href="a00266.html#93d7fec8cd607b803dd2d79fb46bd260">tbb::pipeline</a>, <a class="el" href="a00265.html#b32a0a6e5e09ebb7fad3e6652c19afe5">tbb::parallel_while< Body ></a>, <a class="el" href="a00250.html#71213dd18099298dc74731e293c8286a">tbb::graph</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/functions_0x73.html b/doc/html/functions_0x73.html
new file mode 100644
index 0000000..fab8a63
--- /dev/null
+++ b/doc/html/functions_0x73.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>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><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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="functions.html"><span>All</span></a></li>
+    <li><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+    <li id="current"><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+    <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+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_s">- s -</a></h3><ul>
+<li>scoped_lock()
+: <a class="el" href="a00289.html#42a92d4f8fdde425b111cfa8a9228071">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00287.html#5ce6807050a9e8f87bcb4a65dccb12ef">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00279.html#dec17713c4c1321ac8fec66816d0c602">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00275.html#cf19f20e082887c1bb0ba6b0911c3583">tbb::interface5::reader_writer_lock::scoped_lock</a>, <a class="el" href="a00273.html#fbb8798792d3aebb136c46fc63d [...]
+: <a class="el" href="a00276.html#87ab0dc8f7216e6ba0f7acd6aec33064">tbb::interface5::reader_writer_lock::scoped_lock_read</a><li>seconds()
+: <a class="el" href="a00303.html#d5d8429c0bc59cf6131b2abc7929fa59">tbb::tick_count::interval_t</a><li>self()
+: <a class="el" href="a00291.html#bd43e8d6249738efafd12d6a4c72c5e3">tbb::task</a><li>sequencer_node()
+: <a class="el" href="a00283.html#c3138c1c96b76ae9f13b0abbf7029590">tbb::sequencer_node< T ></a><li>set_affinity()
+: <a class="el" href="a00291.html#dca19d7a45487a7d67a0db517e2b57c9">tbb::task</a><li>set_capacity()
+: <a class="el" href="a00230.html#f3c6c934f85fd02aedbc83a16943193b">tbb::concurrent_bounded_queue< T, A ></a><li>set_group_priority()
+: <a class="el" href="a00291.html#9ac8d1542d67d9d80121ff986801ac26">tbb::task</a><li>set_priority()
+: <a class="el" href="a00293.html#c4272d4d9ab65d600ca70fc2c8c4b039">tbb::task_group_context</a><li>set_ref_count()
+: <a class="el" href="a00291.html#06a4206a57e8e12a439b14d6d41cfd92">tbb::task</a><li>set_state()
+: <a class="el" href="a00258.html#795649a185b0d6af6dc81c5f378616dd">tbb::mutex</a><li>shrink_to_fit()
+: <a class="el" href="a00238.html#03c6f4cf66532bf4cc907ee738a9a186">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00235.html#28d113288fc7e0c04c9053ec7de61368">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>size()
+: <a class="el" href="a00243.html#33fd6593da1ed14340f10f67d5a69130">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00238.html#715fe313c4a9c22731cc404dd80c9ec9">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00230.html#7dc14d1a579a4cccda9f857585e1768d">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00235.html#8b2ae25c61338c6fd59e94fe09822ba5">tbb::interface5::concurrent_priority_queue< T,  [...]
+: <a class="el" href="a00230.html#a80e4c11dbb324e4b92a24a77bbcde68">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00236.html#8fc30e93f8342a1960357f71e4fe8a2b">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00235.html#b679eea8d01d041625a39f719ca2b7ed">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>, <a class="el" href="a00221.html#f5707bffea38eee5c9680f37358afb8e">tbb::blocked_range< Value ></a><li>source_node()
+: <a class="el" href="a00285.html#0513272133a06db6742873671af98f21">tbb::source_node< Output ></a><li>spawn_and_wait_for_all()
+: <a class="el" href="a00291.html#894ab68378e502776d8220eea7ce9fa1">tbb::task</a><li>spawn_root_and_wait()
+: <a class="el" href="a00291.html#c33c7edbaec67aa8a56f48986a9dc69f">tbb::task</a><li>spin_mutex()
+: <a class="el" href="a00286.html#3d8fb44644fd8d41ada1fbeba7409be3">tbb::spin_mutex</a><li>spin_rw_mutex_v3()
+: <a class="el" href="a00288.html#61332b2756de89f3f5f69310cbb6e70c">tbb::spin_rw_mutex_v3</a><li>state()
+: <a class="el" href="a00291.html#0af7b2d7e6e8b4333b2accfce3dfb374">tbb::task</a><li>state_type
+: <a class="el" href="a00291.html#4a3c415562d17905390ea5b49d12293e">tbb::task</a><li>status_t
+: <a class="el" href="a00274.html#6f921f0d7c1812ceb5674418c8b6ccaf">tbb::interface5::reader_writer_lock</a><li>successor_type
+: <a class="el" href="a00254.html#1212cbaa293a93c3bf334da1539556bd">tbb::internal::join_node_base< JP, InputTuple, OutputTuple ></a>, <a class="el" href="a00255.html#754182cc1e5b403201495bc1fd45674b">tbb::limiter_node< T ></a>, <a class="el" href="a00268.html#e01014f2e5ceea292c68f6fe47391c57">tbb::priority_queue_node< T, Compare ></a>, <a class="el" href="a00283.html#3591313e30d0f485a09106686067411f">tbb::sequencer_node< T ></a>, <a class="el" href="a00269.html#c3 [...]
+: <a class="el" href="a00238.html#96c9c4bd968ed3edb8dd276854d2dae0">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00235.html#0ecdc6a04aa259374425d424ca2a6082">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>, <a class="el" href="a00231.html#076f8d9e16110aac5f558777aa744eb6">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></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/functions_0x74.html b/doc/html/functions_0x74.html
new file mode 100644
index 0000000..56fc6d5
--- /dev/null
+++ b/doc/html/functions_0x74.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>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><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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="functions.html"><span>All</span></a></li>
+    <li><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+    <li id="current"><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+    <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+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_t">- t -</a></h3><ul>
+<li>task()
+: <a class="el" href="a00291.html#2bce8ec6e44706e70128f5cf91b76e67">tbb::task</a><li>task_group_context()
+: <a class="el" href="a00293.html#19fee08fb8ac98adccfe69c1aa63c491">tbb::task_group_context</a><li>task_list()
+: <a class="el" href="a00294.html#416341c2047eaef50417b41eaf7e9de6">tbb::task_list</a><li>task_scheduler_init()
+: <a class="el" href="a00295.html#421600bf9bf9338bcf937063f2ff0e90">tbb::task_scheduler_init</a><li>terminate()
+: <a class="el" href="a00295.html#f73257e04cb7fb9bd5be2b635d9016f1">tbb::task_scheduler_init</a><li>throw_self()
+: <a class="el" href="a00299.html#292832fd5c523e3d8081a22247840a1d">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00257.html#17cffba35811c92b7e65d63506b69602">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00228.html#2dd1be66ab32fa27e0ddef5707fa67ef">tbb::captured_exception</a>, <a class="el" href="a00298.html#8588e07fa49692f4d734e4f2e4f048f4">tbb::tbb_exception</a><li>tick_count()
+: <a class="el" href="a00302.html#34593326ae4191e02a13c7cbdab9de4c">tbb::tick_count</a><li>try_acquire()
+: <a class="el" href="a00289.html#9879626968d9b9a04cd2ec0fb2e84ae1">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00287.html#9297ec188534b45dc0ca48f2f39a0501">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00279.html#36bfc3e93e3ef6340abef4901444d340">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00273.html#2e4ff6c9ec2fee6682f95290d1f42baa">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00271.html#e5a014fb817599386a87170cf2cf51a9">tbb::qu [...]
+: <a class="el" href="a00225.html#46b8b257a97e2192a2b11743279e8ffe">tbb::buffer_node< T ></a>, <a class="el" href="a00285.html#809f51859ca4dd04204591d76c8572eb">tbb::source_node< Output ></a>, <a class="el" href="a00282.html#add46946c4c7330422733432e4032fac">tbb::sender< T ></a><li>try_get()
+: <a class="el" href="a00254.html#50c0e6465ac929a2e94d4e62a13ebeff">tbb::internal::join_node_base< JP, InputTuple, OutputTuple ></a>, <a class="el" href="a00225.html#b68bdec127703dbfb2d93d685abbfd67">tbb::buffer_node< T ></a>, <a class="el" href="a00285.html#0434d2933ad082d3c43a4ec774150511">tbb::source_node< Output ></a>, <a class="el" href="a00282.html#bf8c9235810354f3353a899c982645de">tbb::sender< T ></a><li>try_lock()
+: <a class="el" href="a00288.html#088bb256be794cc47d3b83791632fdfc">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00286.html#8f9a58fb56a2b4c5efe1a7f7c1ae2074">tbb::spin_mutex</a>, <a class="el" href="a00278.html#86e719b0afee25704af11ab97694d240">tbb::recursive_mutex</a>, <a class="el" href="a00274.html#721eb173e154ab38292273e9266a9b07">tbb::interface5::reader_writer_lock</a>, <a class="el" href="a00258.html#4331652c79dea1c1131bd59ab161b234">tbb::mutex</a><li>try_lock_read()
+: <a class="el" href="a00288.html#b8667415869013f840d976aa406d385a">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00274.html#595fb23952e3b89426b1f7938dea9b11">tbb::interface5::reader_writer_lock</a><li>try_pop()
+: <a class="el" href="a00230.html#0ca487019bbb00a196442aff78a1e4f7">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00236.html#ae31ca0db34ef96ef1e74aa0d28c95f8">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00235.html#e036461a29cc40902a2bb79abf9f5146">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>try_process_item()
+: <a class="el" href="a00301.html#c4f90f2c771bce748beb9be734fa286c">tbb::thread_bound_filter</a><li>try_push()
+: <a class="el" href="a00230.html#2bd6232531279fb3ccbd296bea23066b">tbb::concurrent_bounded_queue< T, A ></a><li>try_put()
+: <a class="el" href="a00304.html#f316c0d5ff67068ff23b684accbe87f4">tbb::internal::two_phase_port< T ></a>, <a class="el" href="a00255.html#a38facb46cde854cb7408bf9f3bf8999">tbb::limiter_node< T ></a>, <a class="el" href="a00225.html#f74899ffb67687998168ad428f586b64">tbb::buffer_node< T ></a>, <a class="el" href="a00224.html#9b211e02554d6b39dc04f7e7f4e00073">tbb::broadcast_node< T ></a>, <a class="el" href="a00241.html#a7f8b9cc6286eb2cd8d429d6279da64d">tbb::contin [...]
+: <a class="el" href="a00225.html#435e29a66f0719d4822a0a8dc78a0405">tbb::buffer_node< T ></a>, <a class="el" href="a00285.html#3dd7e998aa3e7258b3b5731307df23a0">tbb::source_node< Output ></a>, <a class="el" href="a00282.html#28c41df1c0c7ed485b4a691ec8f30098">tbb::sender< T ></a><li>try_reserve()
+: <a class="el" href="a00225.html#11ebad4c72082a1a03ecccd3afab4ae2">tbb::buffer_node< T ></a>, <a class="el" href="a00285.html#ecac0bb52cff61912dcd186647ccd1bf">tbb::source_node< Output ></a>, <a class="el" href="a00282.html#3506c7275aeeb2fc3ba5d5f10ee0adac">tbb::sender< T ></a><li>two_phase_port()
+: <a class="el" href="a00304.html#60e17ef935031c86c4a288eafab5c066">tbb::internal::two_phase_port< T ></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/functions_0x75.html b/doc/html/functions_0x75.html
new file mode 100644
index 0000000..0bdb8e4
--- /dev/null
+++ b/doc/html/functions_0x75.html
@@ -0,0 +1,76 @@
+<!DOCTYPE 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><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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="functions.html"><span>All</span></a></li>
+    <li><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+    <li id="current"><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+    <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+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_u">- u -</a></h3><ul>
+<li>unlock()
+: <a class="el" href="a00288.html#f9f52ead2098eb5fb12da59d5ae53b55">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00286.html#0e843ee6265f57f27d228ba91e7308ef">tbb::spin_mutex</a>, <a class="el" href="a00278.html#f0a96e26b7f074588dc31e32524856ae">tbb::recursive_mutex</a>, <a class="el" href="a00274.html#5113b32689305599b2c36b5831547704">tbb::interface5::reader_writer_lock</a>, <a class="el" href="a00258.html#5fc9ef443ae75d966695546be399cc6b">tbb::mutex</a><li>unsafe_size()
+: <a class="el" href="a00236.html#eaa35a5274606779802e9a669a706260">tbb::strict_ppl::concurrent_queue< T, A ></a><li>upgrade_to_writer()
+: <a class="el" href="a00289.html#3f0b1e3f2efab63336400348bd070226">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00273.html#11ba1da4a722c9e6f73339a52c487e82">tbb::queuing_rw_mutex::scoped_lock</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/functions_0x76.html b/doc/html/functions_0x76.html
new file mode 100644
index 0000000..f538a90
--- /dev/null
+++ b/doc/html/functions_0x76.html
@@ -0,0 +1,74 @@
+<!DOCTYPE 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><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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="functions.html"><span>All</span></a></li>
+    <li><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+    <li id="current"><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+    <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+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_v">- v -</a></h3><ul>
+<li>value_type
+: <a class="el" href="a00265.html#fa297e53d3af2a101e712bc200233e9c">tbb::parallel_while< Body ></a>, <a class="el" href="a00230.html#98245517a931e5893f6601e66c51fc75">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00236.html#682c3978d5cb0620000994f11c44a476">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00235.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.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/functions_0x77.html b/doc/html/functions_0x77.html
new file mode 100644
index 0000000..e499776
--- /dev/null
+++ b/doc/html/functions_0x77.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>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><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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="functions.html"><span>All</span></a></li>
+    <li><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+    <li id="current"><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+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_w">- w -</a></h3><ul>
+<li>wait_for_all()
+: <a class="el" href="a00291.html#53d2615ad9c38859b4c8080936600283">tbb::task</a>, <a class="el" href="a00250.html#bafd6349fdc6563ffa02746866e30bec">tbb::graph</a><li>what()
+: <a class="el" href="a00257.html#b33a89bccf0c63106f1270c7bfaaf54f">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00228.html#6b5988ef74a1fe2a58998d110b3633e0">tbb::captured_exception</a>, <a class="el" href="a00298.html#e8157689ecb66bc6c72d3618bf3cc371">tbb::tbb_exception</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/functions_0x7e.html b/doc/html/functions_0x7e.html
new file mode 100644
index 0000000..7cfb90e
--- /dev/null
+++ b/doc/html/functions_0x7e.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>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><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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="functions.html"><span>All</span></a></li>
+    <li><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+    <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+    <li id="current"><a href="functions_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+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></h3><ul>
+<li>~combinable()
+: <a class="el" href="a00229.html#2c87e79ae98588a5780f708773388843">tbb::combinable< T ></a><li>~concurrent_bounded_queue()
+: <a class="el" href="a00230.html#acaf5b510dc0dfc7780b8c956cf773cf">tbb::concurrent_bounded_queue< T, A ></a><li>~concurrent_hash_map()
+: <a class="el" href="a00231.html#2aa8e2d28d5af1284cf78d20a9c22731">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>~concurrent_queue()
+: <a class="el" href="a00236.html#830b33753d6b149c366344e29b2edd8c">tbb::strict_ppl::concurrent_queue< T, A ></a><li>~concurrent_vector()
+: <a class="el" href="a00238.html#da2444b28bb840d38f60d0030333a5fc">tbb::concurrent_vector< T, A ></a><li>~const_accessor()
+: <a class="el" href="a00234.html#928769b139d53427e7075c1f86148e4c">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>~continue_receiver()
+: <a class="el" href="a00241.html#9a38edb7e1e3c9be4e3848145c51a617">tbb::continue_receiver</a><li>~enumerable_thread_specific()
+: <a class="el" href="a00243.html#5a7907d9e3e5b18e7a7b55211ef3213f">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>~filter()
+: <a class="el" href="a00245.html#66d159f362293e3964ba3da8bc1d2604">tbb::filter</a><li>~graph()
+: <a class="el" href="a00250.html#55332084e7884a26ff288b8fe960030d">tbb::graph</a><li>~parallel_while()
+: <a class="el" href="a00265.html#6fcfc973cc56b79c6d0fbb8a31be7e84">tbb::parallel_while< Body ></a><li>~pipeline()
+: <a class="el" href="a00266.html#49513c6c24f9d5bbbb27edca5efe01c9">tbb::pipeline</a><li>~queuing_rw_mutex()
+: <a class="el" href="a00272.html#1ba73e3d95cfdf8323880bc623af9099">tbb::queuing_rw_mutex</a><li>~reader_writer_lock()
+: <a class="el" href="a00274.html#5135f64f7b7339017f33d956445edbee">tbb::interface5::reader_writer_lock</a><li>~receiver()
+: <a class="el" href="a00277.html#18f74b83abae0ee1e4ce07942797ef27">tbb::receiver< T ></a><li>~scoped_lock()
+: <a class="el" href="a00289.html#d7eaaa3f2e2c5dc11e7005811b1bdd04">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00287.html#ac6fa425d1f06c56d8b70abc51aac844">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00279.html#c1197ffb8f3cd9d4fed71d7e06265b7c">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00275.html#70246e0260493625ff956fa5926fc71f">tbb::interface5::reader_writer_lock::scoped_lock</a>, <a class="el" href="a00273.html#32c7d67a660d23ebbaab1a1d282 [...]
+: <a class="el" href="a00276.html#bd21c5f3d555d64d1de8658e15bf4966">tbb::interface5::reader_writer_lock::scoped_lock_read</a><li>~sequencer_node()
+: <a class="el" href="a00283.html#c87d80feebaf2bae4af22b5f2459b37e">tbb::sequencer_node< T ></a><li>~source_node()
+: <a class="el" href="a00285.html#90c94a8a52cc3d19cf393ce289e80733">tbb::source_node< Output ></a><li>~spin_rw_mutex_v3()
+: <a class="el" href="a00288.html#9a815fb2759e55072ed413f1b6970cf3">tbb::spin_rw_mutex_v3</a><li>~task()
+: <a class="el" href="a00291.html#98245ee0473f84cb19dbbf8c81134908">tbb::task</a><li>~task_list()
+: <a class="el" href="a00294.html#6d438f1499a02db1e59c24ab6043e5ba">tbb::task_list</a><li>~task_scheduler_init()
+: <a class="el" href="a00295.html#4da6c86292d80c703a66c1f6f5299488">tbb::task_scheduler_init</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/functions_enum.html b/doc/html/functions_enum.html
index 2e25ba7..0101d18 100644
--- a/doc/html/functions_enum.html
+++ b/doc/html/functions_enum.html
@@ -34,13 +34,14 @@
  
 <p>
 <ul>
-<li>malloc_type
-: <a class="el" href="a00204.html#09a7f81fb2c3055aaecf058b11538544">tbb::tbb_allocator< T ></a><li>state_type
-: <a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293e">tbb::task</a><li>status_t
-: <a class="el" href="a00186.html#6f921f0d7c1812ceb5674418c8b6ccaf">tbb::interface5::reader_writer_lock</a></ul>
+<li>concurrency
+: <a class="el" href="a00250.html#633b9b55e3248b785efd13264261f0e5">tbb::graph</a><li>malloc_type
+: <a class="el" href="a00296.html#09a7f81fb2c3055aaecf058b11538544">tbb::tbb_allocator< T ></a><li>state_type
+: <a class="el" href="a00291.html#4a3c415562d17905390ea5b49d12293e">tbb::task</a><li>status_t
+: <a class="el" href="a00274.html#6f921f0d7c1812ceb5674418c8b6ccaf">tbb::interface5::reader_writer_lock</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/functions_eval.html b/doc/html/functions_eval.html
index 1887a18..779d408 100644
--- a/doc/html/functions_eval.html
+++ b/doc/html/functions_eval.html
@@ -35,15 +35,15 @@
 <p>
 <ul>
 <li>allocated
-: <a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">tbb::task</a><li>executing
-: <a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">tbb::task</a><li>freed
-: <a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">tbb::task</a><li>ready
-: <a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">tbb::task</a><li>recycle
-: <a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">tbb::task</a><li>reexecute
-: <a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">tbb::task</a></ul>
+: <a class="el" href="a00291.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">tbb::task</a><li>executing
+: <a class="el" href="a00291.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">tbb::task</a><li>freed
+: <a class="el" href="a00291.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">tbb::task</a><li>ready
+: <a class="el" href="a00291.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">tbb::task</a><li>recycle
+: <a class="el" href="a00291.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">tbb::task</a><li>reexecute
+: <a class="el" href="a00291.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">tbb::task</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/functions_func.html b/doc/html/functions_func.html
index 8855797..46bfd23 100644
--- a/doc/html/functions_func.html
+++ b/doc/html/functions_func.html
@@ -33,26 +33,26 @@
 </div>
 <div class="tabs">
   <ul>
-    <li><a href="#index_a"><span>a</span></a></li>
-    <li><a href="#index_b"><span>b</span></a></li>
-    <li><a href="#index_c"><span>c</span></a></li>
-    <li><a href="#index_d"><span>d</span></a></li>
-    <li><a href="#index_e"><span>e</span></a></li>
-    <li><a href="#index_f"><span>f</span></a></li>
-    <li><a href="#index_g"><span>g</span></a></li>
-    <li><a href="#index_i"><span>i</span></a></li>
-    <li><a href="#index_l"><span>l</span></a></li>
-    <li><a href="#index_m"><span>m</span></a></li>
-    <li><a href="#index_n"><span>n</span></a></li>
-    <li><a href="#index_o"><span>o</span></a></li>
-    <li><a href="#index_p"><span>p</span></a></li>
-    <li><a href="#index_q"><span>q</span></a></li>
-    <li><a href="#index_r"><span>r</span></a></li>
-    <li><a href="#index_s"><span>s</span></a></li>
-    <li><a href="#index_t"><span>t</span></a></li>
-    <li><a href="#index_u"><span>u</span></a></li>
-    <li><a href="#index_w"><span>w</span></a></li>
-    <li><a href="#index_~"><span>~</span></a></li>
+    <li id="current"><a href="functions_func.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_func_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_func_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_func_0x7e.html#index_~"><span>~</span></a></li>
   </ul>
 </div>
 
@@ -61,218 +61,21 @@
 <p>
 <h3><a class="anchor" name="index_a">- a -</a></h3><ul>
 <li>acquire()
-: <a class="el" href="a00197.html#b0b646ec5be02a127d159bbb7ca65353">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00195.html#3ee3c338732b1f64b0b32a757807a30d">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00190.html#7fb04da37cccf8c99b1f9102d9074f9a">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00185.html#a8dd5ab8686e76de21587544dbb681e0">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00183.html#533e4fc8355ee321206a0609c42d909d">tbb::qu [...]
-: <a class="el" href="a00179.html#e131c560057a58229992b61eb8dba4c6">tbb::parallel_while< Body ></a>, <a class="el" href="a00178.html#40baaf0f6856f4491dd0adf896c93516">tbb::parallel_do_feeder< Item ></a><li>add_filter()
-: <a class="el" href="a00180.html#38fb5c9c8395dd6f89a4ae2011a83e0d">tbb::pipeline</a><li>affinity()
-: <a class="el" href="a00199.html#3a920a56b0bcf2801518fb45b2c9d2be">tbb::task</a><li>allocate()
-: <a class="el" href="a00207.html#c35e5db8e9cdff5d1387db5b0bad2e4a">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00204.html#f6cb487b1bdce0b581f265a77dca6d53">tbb::tbb_allocator< T ></a>, <a class="el" href="a00191.html#726b1586d05d44665a36e1c7b2699bfd">tbb::scalable_allocator< T ></a>, <a class="el" href="a00150.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">tbb::cache_aligned_allocator< T ></a><li>allocate_child()
-: <a class="el" href="a00199.html#1ff794f7053cd9148d5f280fbf07377f">tbb::task</a><li>allocate_continuation()
-: <a class="el" href="a00199.html#1434c79a5138993269d034008bff7329">tbb::task</a><li>allocate_root()
-: <a class="el" href="a00199.html#8ccc518caf31075a3e073996d2d240a4">tbb::task</a><li>allocator_type()
-: <a class="el" href="a00204.html#78701e7454ef8e1a25b5acd364367080">tbb::tbb_allocator< T ></a>, <a class="el" href="a00163.html#3c03eb40955b933b01987222722ac4bd">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00154.html#2e2726fccf6d975dc1071608cc0bbf90">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00159.html#5a3956341728eaa558d8827063718cac">tbb::strict_ppl::concurrent_queue< T, A ></a><li>assign()
-: <a class="el" href="a00161.html#93a06b3112cb804f42f40efb5e7387b4">tbb::concurrent_vector< T, A ></a><li>at()
-: <a class="el" href="a00161.html#23e14a38af748edff96a7adc3a0f1c58">tbb::concurrent_vector< T, A ></a></ul>
-<h3><a class="anchor" name="index_b">- b -</a></h3><ul>
-<li>back()
-: <a class="el" href="a00161.html#bd518e204107d07fd08d0ec5bdfd383d">tbb::concurrent_vector< T, A ></a><li>begin()
-: <a class="el" href="a00163.html#84afb3906a39e399cde1c950d6351300">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00161.html#78a06182276ff758788d4c0623ae0d71">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00147.html#18d2258400756ac1446dac7676b18df3">tbb::blocked_range< Value ></a>, <a class="el" href="a00141.html#0d702fc6b9e9d061ace3501b3c861cdf">tbb::aligned_space< T, N ></a><li>blocked_range()
-: <a class="el" href="a00147.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">tbb::blocked_range< Value ></a><li>bucket_count()
-: <a class="el" href="a00155.html#414d15033d36c63aa3a40666dc4d6f5e">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></ul>
-<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
-<li>cancel_group_execution()
-: <a class="el" href="a00199.html#0f3fb4aac549ab642022450a4bd13326">tbb::task</a>, <a class="el" href="a00201.html#8bcdfdf4e6bfb76125b6de15c00b571d">tbb::task_group_context</a><li>capacity()
-: <a class="el" href="a00161.html#3ed6b9ae7217af5103d974045b6f5cd5">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00154.html#b2888b3e4e837d7e03f2c731963a402b">tbb::concurrent_bounded_queue< T, A ></a><li>cbegin()
-: <a class="el" href="a00161.html#f88fcf1c920693c39bd9709db33c199f">tbb::concurrent_vector< T, A ></a><li>cend()
-: <a class="el" href="a00161.html#0c15a5d0f1cf75d687dabba07da1d46b">tbb::concurrent_vector< T, A ></a><li>clear()
-: <a class="el" href="a00202.html#fce446ee13e025969945328f3ff59b95">tbb::task_list</a>, <a class="el" href="a00180.html#2c84aef5b834b555ee220b176e25931e">tbb::pipeline</a>, <a class="el" href="a00163.html#a8764176d4b6014c5d65f1051851abc8">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00161.html#26f937a359a66b6aae904c3cd9a3c444">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00154.html#90b31e2954c6e4596c7900435a5f [...]
-: <a class="el" href="a00149.html#3336ba9480fd6c43e158f9beb024c050">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00148.html#392a46759af2c884957115771affa7f4">tbb::blocked_range2d< RowValue, ColValue ></a><li>compact()
-: <a class="el" href="a00161.html#1693d1da41b1a8235871be9c6633be35">tbb::concurrent_vector< T, A ></a><li>concurrent_bounded_queue()
-: <a class="el" href="a00154.html#a5e04dcd7db9fd9b583b4e7df832246a">tbb::concurrent_bounded_queue< T, A ></a><li>concurrent_hash_map()
-: <a class="el" href="a00155.html#3bfe75fcb350ce39cf610c164f233edc">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>concurrent_queue()
-: <a class="el" href="a00160.html#9102b897776bd2d9e908e6604ff16b5f">tbb::deprecated::concurrent_queue< T, A ></a>, <a class="el" href="a00159.html#8a6b98ea11a867db8ac868f0113ca429">tbb::strict_ppl::concurrent_queue< T, A ></a><li>concurrent_vector()
-: <a class="el" href="a00161.html#4450de83c5862ea4bcd9443fd7e67419">tbb::concurrent_vector< T, A ></a><li>const_accessor()
-: <a class="el" href="a00158.html#a9ead65cca68d4c49c7ef64d7899a4c8">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>construct()
-: <a class="el" href="a00204.html#ab228ab9e324ed041c2226e1d717df5f">tbb::tbb_allocator< T ></a>, <a class="el" href="a00150.html#958ee8745c86c275bfc9533af565e017">tbb::cache_aligned_allocator< T ></a><li>context()
-: <a class="el" href="a00199.html#d8c36a93f3972590fbb65ff1cef3173b">tbb::task</a><li>count()
-: <a class="el" href="a00155.html#74f5ef06a06c5e619f156a1c76c04969">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>crbegin()
-: <a class="el" href="a00161.html#db78a1d28c9c966050e8a2926d834a33">tbb::concurrent_vector< T, A ></a><li>crend()
-: <a class="el" href="a00161.html#fff9cece89438587997ebedf93c5e962">tbb::concurrent_vector< T, A ></a></ul>
-<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
-<li>deallocate()
-: <a class="el" href="a00204.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">tbb::tbb_allocator< T ></a>, <a class="el" href="a00191.html#f806a238c18cbcfb531e1e0a0d2ec59d">tbb::scalable_allocator< T ></a>, <a class="el" href="a00150.html#3d4eadf188f7d85d3805ae534e0b8e1c">tbb::cache_aligned_allocator< T ></a><li>decrement_ref_count()
-: <a class="el" href="a00199.html#ef4680f5c148020c5e7e43ddef44cd5d">tbb::task</a><li>default_num_threads()
-: <a class="el" href="a00203.html#ba00714c33a41a3c2216f48613971cab">tbb::task_scheduler_init</a><li>destroy()
-: <a class="el" href="a00207.html#921875bbacd2c8a5f324c7da7a415262">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00171.html#7a46873119d9f85a7b0009c13e41a258">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00152.html#93d875d3555502ff6f18513525de204c">tbb::captured_exception</a>, <a class="el" href="a00206.html#66c94938eca8bf88b76f3eccaaf215d8">tbb::tbb_exception</a>, <a class="el" href="a00204.html#ef133522bf55f05a605bee0763208281">tbb::tbb_allocator [...]
-: <a class="el" href="a00197.html#c2c2c38a08cb9080e87099fac3e5bc94">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00185.html#0d2f93edf7b15ec4bcee138823220c52">tbb::queuing_rw_mutex::scoped_lock</a></ul>
-<h3><a class="anchor" name="index_e">- e -</a></h3><ul>
-<li>empty()
-: <a class="el" href="a00202.html#f3ac31e092814b90929f81bb30441959">tbb::task_list</a>, <a class="el" href="a00163.html#72595886d0ac8fd0543f90038570510d">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00161.html#c6426cb93cf20d3af40f3c90f1f0481a">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00154.html#f64924f2ee9225c368a270fc3c394db9">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00159.htm [...]
-: <a class="el" href="a00163.html#cb448bb4977ce366ceb7344085cc7050">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00161.html#1e6aa764ce5a1cbd24526f68bc0a2f6b">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00147.html#8b929d93ddc13f148b11bceef3a3bdf8">tbb::blocked_range< Value ></a>, <a class="el" href="a00141.html#024be075c23c0394c9a2518d993bcd9e">tbb::aligned_space< T, N ></a><li>enqueue()
-: <a class="el" href="a00199.html#8365d063c0cc9d7bd616bca47256b93c">tbb::task</a><li>enumerable_thread_specific()
-: <a class="el" href="a00163.html#7bce6829981c9efe3f59cae2355e383e">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>erase()
-: <a class="el" href="a00155.html#0f500842d0cf791f8fa61662edb1b311">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>exclude()
-: <a class="el" href="a00155.html#faad2108bd2be75e52293486af59f11e">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>execute()
-: <a class="el" href="a00199.html#22c298cd40937a431a06777423f002f6">tbb::task</a></ul>
-<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
-<li>finalize()
-: <a class="el" href="a00164.html#56275eb889c77c4807967133e21401bd">tbb::filter</a><li>find()
-: <a class="el" href="a00155.html#bce7bdf46435115a95cca2aa73c5da83">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>front()
-: <a class="el" href="a00161.html#502615a858eb9fa0390ee59169065e90">tbb::concurrent_vector< T, A ></a></ul>
-<h3><a class="anchor" name="index_g">- g -</a></h3><ul>
-<li>get_allocator()
-: <a class="el" href="a00161.html#2fdba8e90de6a4d2300222236d46758e">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00154.html#415eb87e53b1c6a266de06ecbc490d16">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00159.html#f034f70caef445fe8abc9113ec926a8d">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00155.html#199208eed6f09e200cda364f906be0fe">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><l [...]
-: <a class="el" href="a00147.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">tbb::blocked_range< Value ></a><li>grow_by()
-: <a class="el" href="a00161.html#473a59a4c9308b93411b898b3110d26c">tbb::concurrent_vector< T, A ></a><li>grow_to_at_least()
-: <a class="el" href="a00161.html#a7e3b67c8ccab16d0aecc80899ae799d">tbb::concurrent_vector< T, A ></a></ul>
-<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
-<li>increment_ref_count()
-: <a class="el" href="a00199.html#f5fb43c7ad0de5a4b95703cebc39e345">tbb::task</a><li>init()
-: <a class="el" href="a00201.html#49a55352084fd44b8863d182e839e6dc">tbb::task_group_context</a><li>initialize()
-: <a class="el" href="a00203.html#d5ed214a8bb53b0466ed91ff4734b9a3">tbb::task_scheduler_init</a><li>insert()
-: <a class="el" href="a00155.html#cfe172677e5987004ef4a03e22fa338a">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_copy()
-: <a class="el" href="a00155.html#3c27779fe66b79505390d084310d997e">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_equal_range()
-: <a class="el" href="a00155.html#976c57edfb7f22b9f91a2e11f141eb4a">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_fast_find()
-: <a class="el" href="a00155.html#2f76ed101a0ccc8875b846c2f747897e">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>interval_t()
-: <a class="el" href="a00211.html#1a21a428e00cced2e6a49e0f5f2258bf">tbb::tick_count::interval_t</a><li>is_active()
-: <a class="el" href="a00203.html#12752282977029f23416642bc03e8b74">tbb::task_scheduler_init</a><li>is_bound()
-: <a class="el" href="a00164.html#15c29cae5d237e6d63dbfe5c94af89d5">tbb::filter</a><li>is_cancelled()
-: <a class="el" href="a00199.html#025f18118c057c4c8db87ff2ce8df975">tbb::task</a><li>is_divisible()
-: <a class="el" href="a00149.html#39d69191721c488e737ae5d9c5336b9c">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00148.html#ad36a9b38e4fef26d376f99552ce2d92">tbb::blocked_range2d< RowValue, ColValue ></a>, <a class="el" href="a00147.html#41a58b703d574b6e1ca155df3576f578">tbb::blocked_range< Value ></a><li>is_group_execution_cancelled()
-: <a class="el" href="a00201.html#4db72f16210b0a991b2c134d6763a4cc">tbb::task_group_context</a><li>is_ordered()
-: <a class="el" href="a00164.html#cd53206c4795ef2df5df26b795caf692">tbb::filter</a><li>is_owned_by_current_thread()
-: <a class="el" href="a00199.html#c26718b3b247cd13deb1a741902e7105">tbb::task</a><li>is_serial()
-: <a class="el" href="a00164.html#fcfec27656a69ff2072802ac001e936f">tbb::filter</a><li>is_stolen_task()
-: <a class="el" href="a00199.html#f9169402702f56bf519448aaf34450aa">tbb::task</a><li>is_writer()
-: <a class="el" href="a00157.html#fc194e3a186dc935a5fb513cc9f8e898">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a></ul>
-<h3><a class="anchor" name="index_l">- l -</a></h3><ul>
-<li>local()
-: <a class="el" href="a00163.html#7dc79058d2832f7447de8e691c3455ea">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>lock()
-: <a class="el" href="a00196.html#4007d6e1523dbc3c2bb7f889ab789a8a">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00194.html#4f748989e19b6045e3a2d2ee73626a28">tbb::spin_mutex</a>, <a class="el" href="a00189.html#4c342c69d47f4bb0b393535dee4015d6">tbb::recursive_mutex</a>, <a class="el" href="a00186.html#2653d1a2d560059a51219a8ceab3ade9">tbb::interface5::reader_writer_lock</a>, <a class="el" href="a00172.html#4470e61c24c129a0299ca6c17240adbb">tbb::mutex</a><li>lock_read()
-: <a class="el" href="a00196.html#13f799708ac4ca437a16be202e263e18">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00186.html#d9d16a24d9f6c3dada73c6b9ff214f5b">tbb::interface5::reader_writer_lock</a><li>lookup()
-: <a class="el" href="a00155.html#1f22480a290ddc6c145888d8f985531a">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></ul>
-<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
-<li>max_size()
-: <a class="el" href="a00204.html#f059ca2c96243024f0d562ee3a87a3a5">tbb::tbb_allocator< T ></a>, <a class="el" href="a00191.html#880e766f1d913988c21973dbdd874fd5">tbb::scalable_allocator< T ></a>, <a class="el" href="a00161.html#2c248a017f0576df3e7cd99627836fd6">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00155.html#1e45d3cbd1e2ae06f365f1b48e0df0b5">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>, <a class="el" href="a00150. [...]
-: <a class="el" href="a00171.html#1aea0ad179d6f0481fe7f3495f66adf9">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00152.html#837a50b8f6a800bda225c39d1699643f">tbb::captured_exception</a>, <a class="el" href="a00206.html#3e3482bf264d4ca4dde046cd9c02c766">tbb::tbb_exception</a><li>mutex()
-: <a class="el" href="a00172.html#05313cb77d4f85213103d4dab74ed454">tbb::mutex</a></ul>
-<h3><a class="anchor" name="index_n">- n -</a></h3><ul>
-<li>name()
-: <a class="el" href="a00171.html#bc5f5c4739b17ac5211ac58226c2f5a5">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00152.html#5af82fd677449c5ca727fa1d7e16f9f5">tbb::captured_exception</a>, <a class="el" href="a00206.html#d00f6497e552fee978a02bfcbebf46e2">tbb::tbb_exception</a><li>note_affinity()
-: <a class="el" href="a00199.html#713c338c8eeaebdc5a6b10a69c039b06">tbb::task</a><li>now()
-: <a class="el" href="a00210.html#fb7f78ca61cf28398645ace66e284473">tbb::tick_count</a></ul>
-<h3><a class="anchor" name="index_o">- o -</a></h3><ul>
-<li>operator *()
-: <a class="el" href="a00156.html#e8938f0cd1211e88a1d73527ed3636c4">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, <a class="el" href="a00158.html#30f31106840700a4c3664b9cb1c31ca7">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>operator delete()
-: <a class="el" href="a00206.html#3f2da7f3d8a6e4c1df522af1213afb5a">tbb::tbb_exception</a><li>operator()()
-: <a class="el" href="a00164.html#fa1b3dc1f4f47563ccab7f4d92f5b543">tbb::filter</a>, <a class="el" href="a00157.html#57c6110bd20e95c06de5a199de988941">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a><li>operator+=()
-: <a class="el" href="a00211.html#cd9814947902e26463a69a111530f81b">tbb::tick_count::interval_t</a><li>operator-=()
-: <a class="el" href="a00211.html#35ff7eaf7c2031b4a991402ac9ecb940">tbb::tick_count::interval_t</a><li>operator->()
-: <a class="el" href="a00156.html#fcebc32c020202cc37e60eadef157569">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, <a class="el" href="a00158.html#3d03a48ecb8cd9549bd8be64b09c9b0d">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>operator=()
-: <a class="el" href="a00161.html#19f4ab88a01b0fd056af3bba463e7bd6">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00155.html#2c0c42a2e1b5282b6739157df9ce2304">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>operator[]()
-: <a class="el" href="a00161.html#c6fade5c732cc95274d1d8277ea619d1">tbb::concurrent_vector< T, A ></a></ul>
-<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
-<li>pages()
-: <a class="el" href="a00149.html#cf971430aa12361d3ed245344b7c6764">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a><li>parallel_while()
-: <a class="el" href="a00179.html#36e26ba3880c7bcf804a97ba0cbe133f">tbb::parallel_while< Body ></a><li>parent()
-: <a class="el" href="a00199.html#314e98ee4347ccec83efcb9ee22e8596">tbb::task</a><li>pause()
-: <a class="el" href="a00144.html#a174ea93e3bd3d5cce82389c2f28d037">tbb::internal::atomic_backoff</a><li>pipeline()
-: <a class="el" href="a00180.html#596dc3beba27099c4c8581cb419e1a59">tbb::pipeline</a><li>pop()
-: <a class="el" href="a00154.html#41f4c6bd7a82ab070e840bbf81b0b123">tbb::concurrent_bounded_queue< T, A ></a><li>pop_front()
-: <a class="el" href="a00202.html#5fe85df5ed524418389d34051750347d">tbb::task_list</a><li>pop_if_present()
-: <a class="el" href="a00160.html#48da3536245318af6cb5fd58bac78039">tbb::deprecated::concurrent_queue< T, A ></a><li>process_item()
-: <a class="el" href="a00209.html#5e726bdc7fbd924c0b07bd558b1d4d5d">tbb::thread_bound_filter</a><li>push()
-: <a class="el" href="a00154.html#ceb08c743b11ba88c878e73fff8af20b">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00159.html#73c47563ffcc4c2f6452f25a04ebe2e2">tbb::strict_ppl::concurrent_queue< T, A ></a><li>push_back()
-: <a class="el" href="a00202.html#4cd34756bc4763dafb8c84838a0124ff">tbb::task_list</a>, <a class="el" href="a00161.html#e94e038f915c0268fdf2d3d7f87d81b8">tbb::concurrent_vector< T, A ></a><li>push_if_not_full()
-: <a class="el" href="a00160.html#7c45561bafe71107d09b2bc1b8f4e681">tbb::deprecated::concurrent_queue< T, A ></a></ul>
-<h3><a class="anchor" name="index_q">- q -</a></h3><ul>
-<li>queuing_mutex()
-: <a class="el" href="a00182.html#b389ad9c4db7293e4bdb5b8cda69ec04">tbb::queuing_mutex</a><li>queuing_rw_mutex()
-: <a class="el" href="a00184.html#85c90877c3447690ac4e2ac4ff8dea5e">tbb::queuing_rw_mutex</a></ul>
-<h3><a class="anchor" name="index_r">- r -</a></h3><ul>
-<li>range()
-: <a class="el" href="a00163.html#3b068000cf4dbf9b40f8bb7e3fc53e0b">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00161.html#3d09ccfb581b879ae64203741035e193">tbb::concurrent_vector< T, A ></a><li>rbegin()
-: <a class="el" href="a00161.html#9f9c103e18d5f212703805354074ad44">tbb::concurrent_vector< T, A ></a><li>reader_writer_lock()
-: <a class="el" href="a00186.html#c1431c4293e777efd9aab9a95c2a46e1">tbb::interface5::reader_writer_lock</a><li>recursive_mutex()
-: <a class="el" href="a00189.html#d2fceb7f95c24a8cd1457d4527e4b8c6">tbb::recursive_mutex</a><li>recycle_as_child_of()
-: <a class="el" href="a00199.html#db399855177438bbc9cc61d508dae8d2">tbb::task</a><li>recycle_as_continuation()
-: <a class="el" href="a00199.html#a67a79e18f62b43a623a00cfbd76db4c">tbb::task</a><li>recycle_as_safe_continuation()
-: <a class="el" href="a00199.html#3b290d14109704e2b69dc1ac980a7a76">tbb::task</a><li>recycle_to_reexecute()
-: <a class="el" href="a00199.html#4f1be9bbcdb487830dbe298b68d85144">tbb::task</a><li>ref_count()
-: <a class="el" href="a00199.html#ad774f55eaec008ae02b236423209ced">tbb::task</a><li>register_pending_exception()
-: <a class="el" href="a00201.html#d97c8a03615594b71b4ef06ff75cf561">tbb::task_group_context</a><li>rehash()
-: <a class="el" href="a00155.html#13f3f2e8de7564be03882c31559493c9">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>release()
-: <a class="el" href="a00197.html#61b14d00a78185c9b2d206ebfc379124">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00195.html#eeb615e68e963e6bf8d9c11402d0ce8e">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00190.html#ac480ea0e9d5ea0345a67d57008b6263">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00185.html#67ae221109ddc69510ab593874e435d4">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00183.html#3bf2b8c87ff22115be9b2eac179f2d30">tbb::qu [...]
-: <a class="el" href="a00161.html#d438b9b32ea3a8ffb703015b6dce055b">tbb::concurrent_vector< T, A ></a><li>reserve()
-: <a class="el" href="a00161.html#5a0ce05026994b010018f72cfdeb72c1">tbb::concurrent_vector< T, A ></a><li>reset()
-: <a class="el" href="a00201.html#6d30d16bf1cd22f86c6afaf29c2b430c">tbb::task_group_context</a><li>resize()
-: <a class="el" href="a00161.html#98ce6b2c6d2622f0c030b46dfac3880c">tbb::concurrent_vector< T, A ></a><li>rows()
-: <a class="el" href="a00149.html#1584623e59ff32a8aa82006827508be4">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00148.html#f496e7348a82652fba581203477cc07c">tbb::blocked_range2d< RowValue, ColValue ></a><li>run()
-: <a class="el" href="a00180.html#93d7fec8cd607b803dd2d79fb46bd260">tbb::pipeline</a>, <a class="el" href="a00179.html#b32a0a6e5e09ebb7fad3e6652c19afe5">tbb::parallel_while< Body ></a></ul>
-<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
-<li>scoped_lock()
-: <a class="el" href="a00197.html#42a92d4f8fdde425b111cfa8a9228071">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00195.html#5ce6807050a9e8f87bcb4a65dccb12ef">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00190.html#dec17713c4c1321ac8fec66816d0c602">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00187.html#cf19f20e082887c1bb0ba6b0911c3583">tbb::interface5::reader_writer_lock::scoped_lock</a>, <a class="el" href="a00185.html#fbb8798792d3aebb136c46fc63d [...]
-: <a class="el" href="a00188.html#87ab0dc8f7216e6ba0f7acd6aec33064">tbb::interface5::reader_writer_lock::scoped_lock_read</a><li>seconds()
-: <a class="el" href="a00211.html#d5d8429c0bc59cf6131b2abc7929fa59">tbb::tick_count::interval_t</a><li>self()
-: <a class="el" href="a00199.html#bd43e8d6249738efafd12d6a4c72c5e3">tbb::task</a><li>set_affinity()
-: <a class="el" href="a00199.html#dca19d7a45487a7d67a0db517e2b57c9">tbb::task</a><li>set_capacity()
-: <a class="el" href="a00154.html#f3c6c934f85fd02aedbc83a16943193b">tbb::concurrent_bounded_queue< T, A ></a><li>set_ref_count()
-: <a class="el" href="a00199.html#06a4206a57e8e12a439b14d6d41cfd92">tbb::task</a><li>set_state()
-: <a class="el" href="a00172.html#795649a185b0d6af6dc81c5f378616dd">tbb::mutex</a><li>shrink_to_fit()
-: <a class="el" href="a00161.html#03c6f4cf66532bf4cc907ee738a9a186">tbb::concurrent_vector< T, A ></a><li>size()
-: <a class="el" href="a00163.html#33fd6593da1ed14340f10f67d5a69130">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00161.html#715fe313c4a9c22731cc404dd80c9ec9">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00154.html#7dc14d1a579a4cccda9f857585e1768d">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00155.html#17fd8c5fe8c6a86075f34aa4e8412ba3">tbb::interface4::concurrent_hash_map< Key, T, H [...]
-: <a class="el" href="a00199.html#894ab68378e502776d8220eea7ce9fa1">tbb::task</a><li>spawn_root_and_wait()
-: <a class="el" href="a00199.html#c33c7edbaec67aa8a56f48986a9dc69f">tbb::task</a><li>spin_mutex()
-: <a class="el" href="a00194.html#3d8fb44644fd8d41ada1fbeba7409be3">tbb::spin_mutex</a><li>spin_rw_mutex_v3()
-: <a class="el" href="a00196.html#61332b2756de89f3f5f69310cbb6e70c">tbb::spin_rw_mutex_v3</a><li>state()
-: <a class="el" href="a00199.html#0af7b2d7e6e8b4333b2accfce3dfb374">tbb::task</a><li>swap()
-: <a class="el" href="a00161.html#96c9c4bd968ed3edb8dd276854d2dae0">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00155.html#eddb0d2efe0b4f25a85c059e1c3dac15">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></ul>
-<h3><a class="anchor" name="index_t">- t -</a></h3><ul>
-<li>task()
-: <a class="el" href="a00199.html#2bce8ec6e44706e70128f5cf91b76e67">tbb::task</a><li>task_group_context()
-: <a class="el" href="a00201.html#19fee08fb8ac98adccfe69c1aa63c491">tbb::task_group_context</a><li>task_list()
-: <a class="el" href="a00202.html#416341c2047eaef50417b41eaf7e9de6">tbb::task_list</a><li>task_scheduler_init()
-: <a class="el" href="a00203.html#421600bf9bf9338bcf937063f2ff0e90">tbb::task_scheduler_init</a><li>terminate()
-: <a class="el" href="a00203.html#f73257e04cb7fb9bd5be2b635d9016f1">tbb::task_scheduler_init</a><li>throw_self()
-: <a class="el" href="a00207.html#292832fd5c523e3d8081a22247840a1d">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00171.html#17cffba35811c92b7e65d63506b69602">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00152.html#2dd1be66ab32fa27e0ddef5707fa67ef">tbb::captured_exception</a>, <a class="el" href="a00206.html#8588e07fa49692f4d734e4f2e4f048f4">tbb::tbb_exception</a><li>tick_count()
-: <a class="el" href="a00210.html#34593326ae4191e02a13c7cbdab9de4c">tbb::tick_count</a><li>try_acquire()
-: <a class="el" href="a00197.html#9879626968d9b9a04cd2ec0fb2e84ae1">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00195.html#9297ec188534b45dc0ca48f2f39a0501">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00190.html#36bfc3e93e3ef6340abef4901444d340">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00185.html#2e4ff6c9ec2fee6682f95290d1f42baa">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00183.html#e5a014fb817599386a87170cf2cf51a9">tbb::qu [...]
-: <a class="el" href="a00196.html#088bb256be794cc47d3b83791632fdfc">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00194.html#8f9a58fb56a2b4c5efe1a7f7c1ae2074">tbb::spin_mutex</a>, <a class="el" href="a00189.html#86e719b0afee25704af11ab97694d240">tbb::recursive_mutex</a>, <a class="el" href="a00186.html#721eb173e154ab38292273e9266a9b07">tbb::interface5::reader_writer_lock</a>, <a class="el" href="a00172.html#4331652c79dea1c1131bd59ab161b234">tbb::mutex</a><li>try_lock_read()
-: <a class="el" href="a00196.html#b8667415869013f840d976aa406d385a">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00186.html#595fb23952e3b89426b1f7938dea9b11">tbb::interface5::reader_writer_lock</a><li>try_pop()
-: <a class="el" href="a00154.html#0ca487019bbb00a196442aff78a1e4f7">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00159.html#ae31ca0db34ef96ef1e74aa0d28c95f8">tbb::strict_ppl::concurrent_queue< T, A ></a><li>try_process_item()
-: <a class="el" href="a00209.html#c4f90f2c771bce748beb9be734fa286c">tbb::thread_bound_filter</a><li>try_push()
-: <a class="el" href="a00154.html#2bd6232531279fb3ccbd296bea23066b">tbb::concurrent_bounded_queue< T, A ></a></ul>
-<h3><a class="anchor" name="index_u">- u -</a></h3><ul>
-<li>unlock()
-: <a class="el" href="a00196.html#f9f52ead2098eb5fb12da59d5ae53b55">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00194.html#0e843ee6265f57f27d228ba91e7308ef">tbb::spin_mutex</a>, <a class="el" href="a00189.html#f0a96e26b7f074588dc31e32524856ae">tbb::recursive_mutex</a>, <a class="el" href="a00186.html#5113b32689305599b2c36b5831547704">tbb::interface5::reader_writer_lock</a>, <a class="el" href="a00172.html#5fc9ef443ae75d966695546be399cc6b">tbb::mutex</a><li>unsafe_size()
-: <a class="el" href="a00159.html#eaa35a5274606779802e9a669a706260">tbb::strict_ppl::concurrent_queue< T, A ></a><li>upgrade_to_writer()
-: <a class="el" href="a00197.html#3f0b1e3f2efab63336400348bd070226">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00185.html#11ba1da4a722c9e6f73339a52c487e82">tbb::queuing_rw_mutex::scoped_lock</a></ul>
-<h3><a class="anchor" name="index_w">- w -</a></h3><ul>
-<li>wait_for_all()
-: <a class="el" href="a00199.html#53d2615ad9c38859b4c8080936600283">tbb::task</a><li>what()
-: <a class="el" href="a00171.html#b33a89bccf0c63106f1270c7bfaaf54f">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00152.html#6b5988ef74a1fe2a58998d110b3633e0">tbb::captured_exception</a>, <a class="el" href="a00206.html#e8157689ecb66bc6c72d3618bf3cc371">tbb::tbb_exception</a></ul>
-<h3><a class="anchor" name="index_~">- ~ -</a></h3><ul>
-<li>~combinable()
-: <a class="el" href="a00153.html#2c87e79ae98588a5780f708773388843">tbb::combinable< T ></a><li>~concurrent_bounded_queue()
-: <a class="el" href="a00154.html#acaf5b510dc0dfc7780b8c956cf773cf">tbb::concurrent_bounded_queue< T, A ></a><li>~concurrent_hash_map()
-: <a class="el" href="a00155.html#a1ac58997d8fbf242b266e3691573481">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>~concurrent_queue()
-: <a class="el" href="a00159.html#830b33753d6b149c366344e29b2edd8c">tbb::strict_ppl::concurrent_queue< T, A ></a><li>~concurrent_vector()
-: <a class="el" href="a00161.html#da2444b28bb840d38f60d0030333a5fc">tbb::concurrent_vector< T, A ></a><li>~const_accessor()
-: <a class="el" href="a00158.html#752b0c1ec74b94786403a75e42917d01">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>~enumerable_thread_specific()
-: <a class="el" href="a00163.html#5a7907d9e3e5b18e7a7b55211ef3213f">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>~filter()
-: <a class="el" href="a00164.html#66d159f362293e3964ba3da8bc1d2604">tbb::filter</a><li>~parallel_while()
-: <a class="el" href="a00179.html#6fcfc973cc56b79c6d0fbb8a31be7e84">tbb::parallel_while< Body ></a><li>~pipeline()
-: <a class="el" href="a00180.html#49513c6c24f9d5bbbb27edca5efe01c9">tbb::pipeline</a><li>~queuing_rw_mutex()
-: <a class="el" href="a00184.html#1ba73e3d95cfdf8323880bc623af9099">tbb::queuing_rw_mutex</a><li>~reader_writer_lock()
-: <a class="el" href="a00186.html#5135f64f7b7339017f33d956445edbee">tbb::interface5::reader_writer_lock</a><li>~scoped_lock()
-: <a class="el" href="a00197.html#d7eaaa3f2e2c5dc11e7005811b1bdd04">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00195.html#ac6fa425d1f06c56d8b70abc51aac844">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00190.html#c1197ffb8f3cd9d4fed71d7e06265b7c">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00187.html#70246e0260493625ff956fa5926fc71f">tbb::interface5::reader_writer_lock::scoped_lock</a>, <a class="el" href="a00185.html#32c7d67a660d23ebbaab1a1d282 [...]
-: <a class="el" href="a00188.html#bd21c5f3d555d64d1de8658e15bf4966">tbb::interface5::reader_writer_lock::scoped_lock_read</a><li>~spin_rw_mutex_v3()
-: <a class="el" href="a00196.html#9a815fb2759e55072ed413f1b6970cf3">tbb::spin_rw_mutex_v3</a><li>~task()
-: <a class="el" href="a00199.html#98245ee0473f84cb19dbbf8c81134908">tbb::task</a><li>~task_list()
-: <a class="el" href="a00202.html#6d438f1499a02db1e59c24ab6043e5ba">tbb::task_list</a><li>~task_scheduler_init()
-: <a class="el" href="a00203.html#4da6c86292d80c703a66c1f6f5299488">tbb::task_scheduler_init</a></ul>
+: <a class="el" href="a00289.html#b0b646ec5be02a127d159bbb7ca65353">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00287.html#3ee3c338732b1f64b0b32a757807a30d">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00279.html#7fb04da37cccf8c99b1f9102d9074f9a">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00273.html#a8dd5ab8686e76de21587544dbb681e0">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00271.html#533e4fc8355ee321206a0609c42d909d">tbb::qu [...]
+: <a class="el" href="a00285.html#d71ed386c53032463f3435f79a15b6ff">tbb::source_node< Output ></a><li>add()
+: <a class="el" href="a00265.html#e131c560057a58229992b61eb8dba4c6">tbb::parallel_while< Body ></a>, <a class="el" href="a00264.html#40baaf0f6856f4491dd0adf896c93516">tbb::parallel_do_feeder< Item ></a><li>add_filter()
+: <a class="el" href="a00266.html#38fb5c9c8395dd6f89a4ae2011a83e0d">tbb::pipeline</a><li>affinity()
+: <a class="el" href="a00291.html#3a920a56b0bcf2801518fb45b2c9d2be">tbb::task</a><li>allocate()
+: <a class="el" href="a00299.html#c35e5db8e9cdff5d1387db5b0bad2e4a">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00296.html#f6cb487b1bdce0b581f265a77dca6d53">tbb::tbb_allocator< T ></a>, <a class="el" href="a00280.html#726b1586d05d44665a36e1c7b2699bfd">tbb::scalable_allocator< T ></a>, <a class="el" href="a00226.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">tbb::cache_aligned_allocator< T ></a><li>allocate_child()
+: <a class="el" href="a00291.html#1ff794f7053cd9148d5f280fbf07377f">tbb::task</a><li>allocate_continuation()
+: <a class="el" href="a00291.html#1434c79a5138993269d034008bff7329">tbb::task</a><li>allocate_root()
+: <a class="el" href="a00291.html#8ccc518caf31075a3e073996d2d240a4">tbb::task</a><li>allocator_type()
+: <a class="el" href="a00296.html#78701e7454ef8e1a25b5acd364367080">tbb::tbb_allocator< T ></a>, <a class="el" href="a00243.html#3c03eb40955b933b01987222722ac4bd">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00230.html#2e2726fccf6d975dc1071608cc0bbf90">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00236.html#5a3956341728eaa558d8827063718cac">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a c [...]
+: <a class="el" href="a00238.html#93a06b3112cb804f42f40efb5e7387b4">tbb::concurrent_vector< T, A ></a><li>at()
+: <a class="el" href="a00238.html#23e14a38af748edff96a7adc3a0f1c58">tbb::concurrent_vector< T, A ></a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/functions_func_0x62.html b/doc/html/functions_func_0x62.html
new file mode 100644
index 0000000..39b430f
--- /dev/null
+++ b/doc/html/functions_func_0x62.html
@@ -0,0 +1,77 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Class Members - Functions</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html"><span>All</span></a></li>
+    <li id="current"><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions_func.html#index_a"><span>a</span></a></li>
+    <li id="current"><a href="functions_func_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_func_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_func_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+ 
+<p>
+<h3><a class="anchor" name="index_b">- b -</a></h3><ul>
+<li>back()
+: <a class="el" href="a00238.html#bd518e204107d07fd08d0ec5bdfd383d">tbb::concurrent_vector< T, A ></a><li>begin()
+: <a class="el" href="a00243.html#84afb3906a39e399cde1c950d6351300">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00238.html#78a06182276ff758788d4c0623ae0d71">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00221.html#18d2258400756ac1446dac7676b18df3">tbb::blocked_range< Value ></a>, <a class="el" href="a00215.html#0d702fc6b9e9d061ace3501b3c861cdf">tbb::aligned_space< T, N ></a><li>blocked_range()
+: <a class="el" href="a00221.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">tbb::blocked_range< Value ></a><li>bucket_count()
+: <a class="el" href="a00231.html#af34cb91b1d0f36a885a1a3432dd9af1">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>buffer_node()
+: <a class="el" href="a00225.html#7360978fa427d054bc6cde05c80e5e9f">tbb::buffer_node< T ></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/functions_func_0x63.html b/doc/html/functions_func_0x63.html
new file mode 100644
index 0000000..6a5f078
--- /dev/null
+++ b/doc/html/functions_func_0x63.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>Class Members - Functions</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html"><span>All</span></a></li>
+    <li id="current"><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions_func.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_func_0x62.html#index_b"><span>b</span></a></li>
+    <li id="current"><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_func_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_func_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+ 
+<p>
+<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
+<li>cancel_group_execution()
+: <a class="el" href="a00291.html#0f3fb4aac549ab642022450a4bd13326">tbb::task</a>, <a class="el" href="a00293.html#8bcdfdf4e6bfb76125b6de15c00b571d">tbb::task_group_context</a><li>capacity()
+: <a class="el" href="a00238.html#3ed6b9ae7217af5103d974045b6f5cd5">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00230.html#b2888b3e4e837d7e03f2c731963a402b">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00235.html#e5d6a0aca1579ecebb716bbe53514963">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>cbegin()
+: <a class="el" href="a00238.html#f88fcf1c920693c39bd9709db33c199f">tbb::concurrent_vector< T, A ></a><li>cend()
+: <a class="el" href="a00238.html#0c15a5d0f1cf75d687dabba07da1d46b">tbb::concurrent_vector< T, A ></a><li>change_group()
+: <a class="el" href="a00291.html#62247be9a637a814c8e8f4bcfb3a1908">tbb::task</a><li>clear()
+: <a class="el" href="a00294.html#fce446ee13e025969945328f3ff59b95">tbb::task_list</a>, <a class="el" href="a00266.html#2c84aef5b834b555ee220b176e25931e">tbb::pipeline</a>, <a class="el" href="a00243.html#a8764176d4b6014c5d65f1051851abc8">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00238.html#26f937a359a66b6aae904c3cd9a3c444">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00230.html#90b31e2954c6e4596c7900435a5f [...]
+: <a class="el" href="a00223.html#3336ba9480fd6c43e158f9beb024c050">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00222.html#392a46759af2c884957115771affa7f4">tbb::blocked_range2d< RowValue, ColValue ></a><li>compact()
+: <a class="el" href="a00238.html#1693d1da41b1a8235871be9c6633be35">tbb::concurrent_vector< T, A ></a><li>concurrent_bounded_queue()
+: <a class="el" href="a00230.html#a5e04dcd7db9fd9b583b4e7df832246a">tbb::concurrent_bounded_queue< T, A ></a><li>concurrent_hash_map()
+: <a class="el" href="a00231.html#83c40f2053f208861b90390e12a36436">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>concurrent_priority_queue()
+: <a class="el" href="a00235.html#509419e320f200456d89dc54a65140b3">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>concurrent_queue()
+: <a class="el" href="a00237.html#9102b897776bd2d9e908e6604ff16b5f">tbb::deprecated::concurrent_queue< T, A ></a>, <a class="el" href="a00236.html#8a6b98ea11a867db8ac868f0113ca429">tbb::strict_ppl::concurrent_queue< T, A ></a><li>concurrent_vector()
+: <a class="el" href="a00238.html#4450de83c5862ea4bcd9443fd7e67419">tbb::concurrent_vector< T, A ></a><li>const_accessor()
+: <a class="el" href="a00234.html#27399c613eb1aecd4660803955dda09d">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>construct()
+: <a class="el" href="a00296.html#ab228ab9e324ed041c2226e1d717df5f">tbb::tbb_allocator< T ></a>, <a class="el" href="a00226.html#958ee8745c86c275bfc9533af565e017">tbb::cache_aligned_allocator< T ></a><li>consume()
+: <a class="el" href="a00304.html#684f6bbc3290270ed43cb34ffd273f71">tbb::internal::two_phase_port< T ></a><li>context()
+: <a class="el" href="a00291.html#d8c36a93f3972590fbb65ff1cef3173b">tbb::task</a><li>continue_receiver()
+: <a class="el" href="a00241.html#799d383813261426d881b10247caadba">tbb::continue_receiver</a><li>count()
+: <a class="el" href="a00231.html#6968eb6feed2df36be421df0464297af">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>crbegin()
+: <a class="el" href="a00238.html#db78a1d28c9c966050e8a2926d834a33">tbb::concurrent_vector< T, A ></a><li>crend()
+: <a class="el" href="a00238.html#fff9cece89438587997ebedf93c5e962">tbb::concurrent_vector< T, A ></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/functions_func_0x64.html b/doc/html/functions_func_0x64.html
new file mode 100644
index 0000000..41cd362
--- /dev/null
+++ b/doc/html/functions_func_0x64.html
@@ -0,0 +1,78 @@
+<!DOCTYPE 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 - Functions</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html"><span>All</span></a></li>
+    <li id="current"><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions_func.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_func_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
+    <li id="current"><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_func_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_func_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+ 
+<p>
+<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
+<li>deallocate()
+: <a class="el" href="a00296.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">tbb::tbb_allocator< T ></a>, <a class="el" href="a00280.html#f806a238c18cbcfb531e1e0a0d2ec59d">tbb::scalable_allocator< T ></a>, <a class="el" href="a00226.html#3d4eadf188f7d85d3805ae534e0b8e1c">tbb::cache_aligned_allocator< T ></a><li>decrement_ref_count()
+: <a class="el" href="a00291.html#ef4680f5c148020c5e7e43ddef44cd5d">tbb::task</a><li>decrement_wait_count()
+: <a class="el" href="a00250.html#ff3b6a3ef2ae1e661dcdb398c227b43c">tbb::graph</a><li>default_num_threads()
+: <a class="el" href="a00295.html#ba00714c33a41a3c2216f48613971cab">tbb::task_scheduler_init</a><li>destroy()
+: <a class="el" href="a00299.html#921875bbacd2c8a5f324c7da7a415262">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00257.html#7a46873119d9f85a7b0009c13e41a258">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00228.html#93d875d3555502ff6f18513525de204c">tbb::captured_exception</a>, <a class="el" href="a00298.html#66c94938eca8bf88b76f3eccaaf215d8">tbb::tbb_exception</a>, <a class="el" href="a00296.html#ef133522bf55f05a605bee0763208281">tbb::tbb_allocator [...]
+: <a class="el" href="a00289.html#c2c2c38a08cb9080e87099fac3e5bc94">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00273.html#0d2f93edf7b15ec4bcee138823220c52">tbb::queuing_rw_mutex::scoped_lock</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/functions_func_0x65.html b/doc/html/functions_func_0x65.html
new file mode 100644
index 0000000..f1d21cc
--- /dev/null
+++ b/doc/html/functions_func_0x65.html
@@ -0,0 +1,80 @@
+<!DOCTYPE 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 - Functions</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html"><span>All</span></a></li>
+    <li id="current"><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions_func.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_func_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
+    <li id="current"><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_func_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_func_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+ 
+<p>
+<h3><a class="anchor" name="index_e">- e -</a></h3><ul>
+<li>empty()
+: <a class="el" href="a00294.html#f3ac31e092814b90929f81bb30441959">tbb::task_list</a>, <a class="el" href="a00243.html#72595886d0ac8fd0543f90038570510d">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00238.html#c6426cb93cf20d3af40f3c90f1f0481a">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00230.html#f64924f2ee9225c368a270fc3c394db9">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00236.htm [...]
+: <a class="el" href="a00243.html#cb448bb4977ce366ceb7344085cc7050">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00238.html#1e6aa764ce5a1cbd24526f68bc0a2f6b">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00221.html#8b929d93ddc13f148b11bceef3a3bdf8">tbb::blocked_range< Value ></a>, <a class="el" href="a00215.html#024be075c23c0394c9a2518d993bcd9e">tbb::aligned_space< T, N ></a><li>enqueue()
+: <a class="el" href="a00291.html#fe6bf6aaf84e664134fabb6c4f409ea9">tbb::task</a><li>enumerable_thread_specific()
+: <a class="el" href="a00243.html#7bce6829981c9efe3f59cae2355e383e">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>erase()
+: <a class="el" href="a00231.html#5f12d150d421420965db07368666a84f">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>exclude()
+: <a class="el" href="a00231.html#0c964214eb38f54603aa75fdff6d2709">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>executable_node()
+: <a class="el" href="a00244.html#c13030111d34feeafd9cdb1dd21584f1">tbb::executable_node< Output ></a><li>execute()
+: <a class="el" href="a00291.html#22c298cd40937a431a06777423f002f6">tbb::task</a>, <a class="el" href="a00241.html#e6bf1d21e670b78ea00c71fccbe17c78">tbb::continue_receiver</a>, <a class="el" href="a00214.html#282d5a2f1216b185c91ed23d00119481">tbb::interface6::internal::aggregator< handler_type, operation_type ></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/functions_func_0x66.html b/doc/html/functions_func_0x66.html
new file mode 100644
index 0000000..636de28
--- /dev/null
+++ b/doc/html/functions_func_0x66.html
@@ -0,0 +1,77 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Class Members - Functions</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html"><span>All</span></a></li>
+    <li id="current"><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions_func.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_func_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
+    <li id="current"><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_func_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_func_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+ 
+<p>
+<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
+<li>finalize()
+: <a class="el" href="a00245.html#56275eb889c77c4807967133e21401bd">tbb::filter</a><li>find()
+: <a class="el" href="a00231.html#7bc475d1968f7f0af3d736d7e8a0d7df">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>forward()
+: <a class="el" href="a00225.html#3a31b3b55bee417de3af09c7b45b9ad6">tbb::buffer_node< T ></a><li>front()
+: <a class="el" href="a00238.html#502615a858eb9fa0390ee59169065e90">tbb::concurrent_vector< T, A ></a><li>function_node()
+: <a class="el" href="a00249.html#7bde12e8ee43d4cafbdd5b1fc2031e2b">tbb::function_node< Input, Output ></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/functions_func_0x67.html b/doc/html/functions_func_0x67.html
new file mode 100644
index 0000000..759fd8e
--- /dev/null
+++ b/doc/html/functions_func_0x67.html
@@ -0,0 +1,80 @@
+<!DOCTYPE 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 - Functions</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html"><span>All</span></a></li>
+    <li id="current"><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions_func.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_func_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
+    <li id="current"><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_func_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_func_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+ 
+<p>
+<h3><a class="anchor" name="index_g">- g -</a></h3><ul>
+<li>get_allocator()
+: <a class="el" href="a00238.html#2fdba8e90de6a4d2300222236d46758e">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00230.html#415eb87e53b1c6a266de06ecbc490d16">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00236.html#f034f70caef445fe8abc9113ec926a8d">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00235.html#d545d444fb0d16148f9b61fd89f9a337">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>, <a class="e [...]
+: <a class="el" href="a00221.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">tbb::blocked_range< Value ></a><li>graph()
+: <a class="el" href="a00250.html#1ba8311506558a2419101722f5d49ba9">tbb::graph</a><li>group()
+: <a class="el" href="a00291.html#5987123486afca36ddebb9e2a8b7779a">tbb::task</a><li>group_priority()
+: <a class="el" href="a00291.html#e1d969a1ccab6796e3b8b2c1a5be33d2">tbb::task</a><li>grow_by()
+: <a class="el" href="a00238.html#473a59a4c9308b93411b898b3110d26c">tbb::concurrent_vector< T, A ></a><li>grow_my_array()
+: <a class="el" href="a00225.html#3ec9d33aa9f1e9292d5952e3eb477ca1">tbb::buffer_node< T ></a><li>grow_to_at_least()
+: <a class="el" href="a00238.html#a7e3b67c8ccab16d0aecc80899ae799d">tbb::concurrent_vector< T, A ></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/functions_func_0x69.html b/doc/html/functions_func_0x69.html
new file mode 100644
index 0000000..eb7cd39
--- /dev/null
+++ b/doc/html/functions_func_0x69.html
@@ -0,0 +1,94 @@
+<!DOCTYPE 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 - Functions</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html"><span>All</span></a></li>
+    <li id="current"><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions_func.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_func_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
+    <li id="current"><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_func_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_func_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+ 
+<p>
+<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
+<li>increment_ref_count()
+: <a class="el" href="a00291.html#f5fb43c7ad0de5a4b95703cebc39e345">tbb::task</a><li>increment_wait_count()
+: <a class="el" href="a00250.html#1e5c5ae6538ec714cee107d1004705b9">tbb::graph</a><li>init()
+: <a class="el" href="a00293.html#49a55352084fd44b8863d182e839e6dc">tbb::task_group_context</a><li>initialize()
+: <a class="el" href="a00295.html#d5ed214a8bb53b0466ed91ff4734b9a3">tbb::task_scheduler_init</a><li>insert()
+: <a class="el" href="a00231.html#1dd37fad87e561151ba1e242ca94bcc1">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_copy()
+: <a class="el" href="a00231.html#72c9c9e9655fcf096f5f0ed9c8ba6669">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_equal_range()
+: <a class="el" href="a00231.html#8f5373b8e1864619d1ffcf3bf3f1f13d">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_fast_find()
+: <a class="el" href="a00231.html#2f76ed101a0ccc8875b846c2f747897e">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_forward()
+: <a class="el" href="a00268.html#79161e73f79cc43b2c2b08367504dfda">tbb::priority_queue_node< T, Compare ></a>, <a class="el" href="a00269.html#fb58bac5ac355e5134c51125e601fa2a">tbb::queue_node< T ></a>, <a class="el" href="a00225.html#a3cb61d8a98bc4bc860b1cb04944b4f8">tbb::buffer_node< T ></a><li>internal_reg_succ()
+: <a class="el" href="a00225.html#017f16c8d6e0fb65d0d3a61aec86b3e2">tbb::buffer_node< T ></a><li>internal_rem_succ()
+: <a class="el" href="a00225.html#a75f731cf9fc93f7487eb72de3fcf7b1">tbb::buffer_node< T ></a><li>interval_t()
+: <a class="el" href="a00303.html#1a21a428e00cced2e6a49e0f5f2258bf">tbb::tick_count::interval_t</a><li>is_active()
+: <a class="el" href="a00295.html#12752282977029f23416642bc03e8b74">tbb::task_scheduler_init</a><li>is_bound()
+: <a class="el" href="a00245.html#15c29cae5d237e6d63dbfe5c94af89d5">tbb::filter</a><li>is_cancelled()
+: <a class="el" href="a00291.html#025f18118c057c4c8db87ff2ce8df975">tbb::task</a><li>is_divisible()
+: <a class="el" href="a00223.html#39d69191721c488e737ae5d9c5336b9c">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00222.html#ad36a9b38e4fef26d376f99552ce2d92">tbb::blocked_range2d< RowValue, ColValue ></a>, <a class="el" href="a00221.html#41a58b703d574b6e1ca155df3576f578">tbb::blocked_range< Value ></a><li>is_group_execution_cancelled()
+: <a class="el" href="a00293.html#4db72f16210b0a991b2c134d6763a4cc">tbb::task_group_context</a><li>is_ordered()
+: <a class="el" href="a00245.html#cd53206c4795ef2df5df26b795caf692">tbb::filter</a><li>is_owned_by_current_thread()
+: <a class="el" href="a00291.html#c26718b3b247cd13deb1a741902e7105">tbb::task</a><li>is_serial()
+: <a class="el" href="a00245.html#fcfec27656a69ff2072802ac001e936f">tbb::filter</a><li>is_stolen_task()
+: <a class="el" href="a00291.html#f9169402702f56bf519448aaf34450aa">tbb::task</a><li>is_writer()
+: <a class="el" href="a00233.html#07d958f151a0eaa92f50fd56ad6440e2">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a>, <a class="el" href="a00289.html#6b5a7c3c67a36b05c4df8410d32627d8">tbb::spin_rw_mutex_v3::scoped_lock</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/functions_func_0x6c.html b/doc/html/functions_func_0x6c.html
new file mode 100644
index 0000000..1a1a4b6
--- /dev/null
+++ b/doc/html/functions_func_0x6c.html
@@ -0,0 +1,77 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Class Members - Functions</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html"><span>All</span></a></li>
+    <li id="current"><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions_func.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_func_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
+    <li id="current"><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_func_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_func_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+ 
+<p>
+<h3><a class="anchor" name="index_l">- l -</a></h3><ul>
+<li>limiter_node()
+: <a class="el" href="a00255.html#f0139fc645a51ce30b7aebb59c38a4ed">tbb::limiter_node< T ></a><li>local()
+: <a class="el" href="a00243.html#7dc79058d2832f7447de8e691c3455ea">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>lock()
+: <a class="el" href="a00288.html#4007d6e1523dbc3c2bb7f889ab789a8a">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00286.html#4f748989e19b6045e3a2d2ee73626a28">tbb::spin_mutex</a>, <a class="el" href="a00278.html#4c342c69d47f4bb0b393535dee4015d6">tbb::recursive_mutex</a>, <a class="el" href="a00274.html#2653d1a2d560059a51219a8ceab3ade9">tbb::interface5::reader_writer_lock</a>, <a class="el" href="a00258.html#4470e61c24c129a0299ca6c17240adbb">tbb::mutex</a><li>lock_read()
+: <a class="el" href="a00288.html#13f799708ac4ca437a16be202e263e18">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00274.html#d9d16a24d9f6c3dada73c6b9ff214f5b">tbb::interface5::reader_writer_lock</a><li>lookup()
+: <a class="el" href="a00231.html#3f3413264a99174a224ef96f6c4ea769">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></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/functions_func_0x6d.html b/doc/html/functions_func_0x6d.html
new file mode 100644
index 0000000..83efb79
--- /dev/null
+++ b/doc/html/functions_func_0x6d.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>Class Members - Functions</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html"><span>All</span></a></li>
+    <li id="current"><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions_func.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_func_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
+    <li id="current"><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_func_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_func_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+ 
+<p>
+<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
+<li>max_size()
+: <a class="el" href="a00296.html#f059ca2c96243024f0d562ee3a87a3a5">tbb::tbb_allocator< T ></a>, <a class="el" href="a00280.html#880e766f1d913988c21973dbdd874fd5">tbb::scalable_allocator< T ></a>, <a class="el" href="a00238.html#2c248a017f0576df3e7cd99627836fd6">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00231.html#2bce57fe9b594abe1e6d2568aea8b357">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>, <a class="el" href="a00226. [...]
+: <a class="el" href="a00257.html#1aea0ad179d6f0481fe7f3495f66adf9">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00228.html#837a50b8f6a800bda225c39d1699643f">tbb::captured_exception</a>, <a class="el" href="a00298.html#3e3482bf264d4ca4dde046cd9c02c766">tbb::tbb_exception</a><li>mutex()
+: <a class="el" href="a00258.html#05313cb77d4f85213103d4dab74ed454">tbb::mutex</a>, <a class="el" href="a00289.html#d96d1a1fcc3d79ef3e5c06a53b8ffeaa">tbb::spin_rw_mutex_v3::scoped_lock</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/functions_func_0x6e.html b/doc/html/functions_func_0x6e.html
new file mode 100644
index 0000000..5e59bcf
--- /dev/null
+++ b/doc/html/functions_func_0x6e.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>Class Members - Functions</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html"><span>All</span></a></li>
+    <li id="current"><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions_func.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_func_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
+    <li id="current"><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_func_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_func_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+ 
+<p>
+<h3><a class="anchor" name="index_n">- n -</a></h3><ul>
+<li>name()
+: <a class="el" href="a00257.html#bc5f5c4739b17ac5211ac58226c2f5a5">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00228.html#5af82fd677449c5ca727fa1d7e16f9f5">tbb::captured_exception</a>, <a class="el" href="a00298.html#d00f6497e552fee978a02bfcbebf46e2">tbb::tbb_exception</a><li>note_affinity()
+: <a class="el" href="a00291.html#713c338c8eeaebdc5a6b10a69c039b06">tbb::task</a><li>now()
+: <a class="el" href="a00302.html#fb7f78ca61cf28398645ace66e284473">tbb::tick_count</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/functions_func_0x6f.html b/doc/html/functions_func_0x6f.html
new file mode 100644
index 0000000..cba6cd1
--- /dev/null
+++ b/doc/html/functions_func_0x6f.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>Class Members - Functions</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html"><span>All</span></a></li>
+    <li id="current"><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions_func.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_func_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
+    <li id="current"><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_func_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_func_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+ 
+<p>
+<h3><a class="anchor" name="index_o">- o -</a></h3><ul>
+<li>object_may_be_null()
+: <a class="el" href="a00245.html#8ec4dfe053e94a2349d56781ddea8477">tbb::filter</a><li>operator *()
+: <a class="el" href="a00232.html#170280ea807a22e742095de3e8c5ea38">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, <a class="el" href="a00234.html#9411df8197ceb4881ec4c7368a0a7f88">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>operator delete()
+: <a class="el" href="a00298.html#3f2da7f3d8a6e4c1df522af1213afb5a">tbb::tbb_exception</a><li>operator()()
+: <a class="el" href="a00245.html#fa1b3dc1f4f47563ccab7f4d92f5b543">tbb::filter</a>, <a class="el" href="a00233.html#fa6314b861c574f86ed189b124cf5853">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a><li>operator+=()
+: <a class="el" href="a00303.html#cd9814947902e26463a69a111530f81b">tbb::tick_count::interval_t</a><li>operator-=()
+: <a class="el" href="a00303.html#35ff7eaf7c2031b4a991402ac9ecb940">tbb::tick_count::interval_t</a><li>operator->()
+: <a class="el" href="a00232.html#a807920cdffe3ec5c5e282b4d1ff92a2">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, <a class="el" href="a00234.html#3d03a48ecb8cd9549bd8be64b09c9b0d">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>operator=()
+: <a class="el" href="a00238.html#19f4ab88a01b0fd056af3bba463e7bd6">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00235.html#2ab7f7808891027ac0f0f5b3a4be51e9">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>, <a class="el" href="a00231.html#088d1aaccc816884a49e38f7065622c8">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>operator[]()
+: <a class="el" href="a00238.html#c6fade5c732cc95274d1d8277ea619d1">tbb::concurrent_vector< T, A ></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/functions_func_0x70.html b/doc/html/functions_func_0x70.html
new file mode 100644
index 0000000..0920583
--- /dev/null
+++ b/doc/html/functions_func_0x70.html
@@ -0,0 +1,86 @@
+<!DOCTYPE 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 - Functions</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html"><span>All</span></a></li>
+    <li id="current"><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions_func.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_func_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
+    <li id="current"><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_func_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_func_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+ 
+<p>
+<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
+<li>pages()
+: <a class="el" href="a00223.html#cf971430aa12361d3ed245344b7c6764">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a><li>parallel_while()
+: <a class="el" href="a00265.html#36e26ba3880c7bcf804a97ba0cbe133f">tbb::parallel_while< Body ></a><li>parent()
+: <a class="el" href="a00291.html#314e98ee4347ccec83efcb9ee22e8596">tbb::task</a><li>pause()
+: <a class="el" href="a00218.html#a174ea93e3bd3d5cce82389c2f28d037">tbb::internal::atomic_backoff</a><li>pipeline()
+: <a class="el" href="a00266.html#596dc3beba27099c4c8581cb419e1a59">tbb::pipeline</a><li>pop()
+: <a class="el" href="a00230.html#41f4c6bd7a82ab070e840bbf81b0b123">tbb::concurrent_bounded_queue< T, A ></a><li>pop_front()
+: <a class="el" href="a00294.html#5fe85df5ed524418389d34051750347d">tbb::task_list</a><li>pop_if_present()
+: <a class="el" href="a00237.html#48da3536245318af6cb5fd58bac78039">tbb::deprecated::concurrent_queue< T, A ></a><li>priority()
+: <a class="el" href="a00293.html#2f2342b9e6c9c03703248ac13ad0271d">tbb::task_group_context</a><li>priority_queue_node()
+: <a class="el" href="a00268.html#1630f68674c4b201346a391b1e8d3f5d">tbb::priority_queue_node< T, Compare ></a><li>process_item()
+: <a class="el" href="a00301.html#5e726bdc7fbd924c0b07bd558b1d4d5d">tbb::thread_bound_filter</a><li>push()
+: <a class="el" href="a00230.html#ceb08c743b11ba88c878e73fff8af20b">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00236.html#73c47563ffcc4c2f6452f25a04ebe2e2">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00235.html#d905af7b8f6defff562f5ae9c3275763">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>push_back()
+: <a class="el" href="a00294.html#4cd34756bc4763dafb8c84838a0124ff">tbb::task_list</a>, <a class="el" href="a00238.html#e94e038f915c0268fdf2d3d7f87d81b8">tbb::concurrent_vector< T, A ></a><li>push_if_not_full()
+: <a class="el" href="a00237.html#7c45561bafe71107d09b2bc1b8f4e681">tbb::deprecated::concurrent_queue< T, A ></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/functions_func_0x71.html b/doc/html/functions_func_0x71.html
new file mode 100644
index 0000000..cea02fd
--- /dev/null
+++ b/doc/html/functions_func_0x71.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>Class Members - Functions</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html"><span>All</span></a></li>
+    <li id="current"><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions_func.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_func_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
+    <li id="current"><a href="functions_func_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_func_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+ 
+<p>
+<h3><a class="anchor" name="index_q">- q -</a></h3><ul>
+<li>queue_node()
+: <a class="el" href="a00269.html#1564c6bf9573b13d6854b0e8f7ce2b68">tbb::queue_node< T ></a><li>queuing_mutex()
+: <a class="el" href="a00270.html#b389ad9c4db7293e4bdb5b8cda69ec04">tbb::queuing_mutex</a><li>queuing_rw_mutex()
+: <a class="el" href="a00272.html#85c90877c3447690ac4e2ac4ff8dea5e">tbb::queuing_rw_mutex</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/functions_func_0x72.html b/doc/html/functions_func_0x72.html
new file mode 100644
index 0000000..2d81cc0
--- /dev/null
+++ b/doc/html/functions_func_0x72.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>Class Members - Functions</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html"><span>All</span></a></li>
+    <li id="current"><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions_func.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_func_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_func_0x71.html#index_q"><span>q</span></a></li>
+    <li id="current"><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_func_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+ 
+<p>
+<h3><a class="anchor" name="index_r">- r -</a></h3><ul>
+<li>range()
+: <a class="el" href="a00243.html#3b068000cf4dbf9b40f8bb7e3fc53e0b">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00238.html#3d09ccfb581b879ae64203741035e193">tbb::concurrent_vector< T, A ></a><li>rbegin()
+: <a class="el" href="a00238.html#9f9c103e18d5f212703805354074ad44">tbb::concurrent_vector< T, A ></a><li>reader_writer_lock()
+: <a class="el" href="a00274.html#c1431c4293e777efd9aab9a95c2a46e1">tbb::interface5::reader_writer_lock</a><li>recursive_mutex()
+: <a class="el" href="a00278.html#d2fceb7f95c24a8cd1457d4527e4b8c6">tbb::recursive_mutex</a><li>recycle_as_child_of()
+: <a class="el" href="a00291.html#db399855177438bbc9cc61d508dae8d2">tbb::task</a><li>recycle_as_continuation()
+: <a class="el" href="a00291.html#a67a79e18f62b43a623a00cfbd76db4c">tbb::task</a><li>recycle_as_safe_continuation()
+: <a class="el" href="a00291.html#3b290d14109704e2b69dc1ac980a7a76">tbb::task</a><li>recycle_to_reexecute()
+: <a class="el" href="a00291.html#4f1be9bbcdb487830dbe298b68d85144">tbb::task</a><li>ref_count()
+: <a class="el" href="a00291.html#ad774f55eaec008ae02b236423209ced">tbb::task</a><li>register_pending_exception()
+: <a class="el" href="a00293.html#d97c8a03615594b71b4ef06ff75cf561">tbb::task_group_context</a><li>register_predecessor()
+: <a class="el" href="a00304.html#6dc1f9bf02109c7f6fe4cc58bc31a00c">tbb::internal::two_phase_port< T ></a>, <a class="el" href="a00255.html#fb9909b87538f5c881c7cb7577436d14">tbb::limiter_node< T ></a>, <a class="el" href="a00241.html#b9fa9290cbb871f8780f9d69e1ec3b4e">tbb::continue_receiver</a>, <a class="el" href="a00277.html#14ae737c8fca4c8bf8e1a736dfbac444">tbb::receiver< T ></a><li>register_successor()
+: <a class="el" href="a00255.html#b8b9dbfbfc52750fa0c6bb8849681e86">tbb::limiter_node< T ></a>, <a class="el" href="a00225.html#cd2ef588b0ee6eb8d23ee169e00c73a9">tbb::buffer_node< T ></a>, <a class="el" href="a00224.html#3f4149fa6b984b2138cb5ed40a2ddc6c">tbb::broadcast_node< T ></a>, <a class="el" href="a00285.html#ce601874ec5cbb0996f6dcb8e43badb8">tbb::source_node< Output ></a>, <a class="el" href="a00282.html#be48ac70174cf8e08e2b0279cd6343d3">tbb::sender< T & [...]
+: <a class="el" href="a00231.html#94758113d8993cfe5afdf2d63a728869">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>release()
+: <a class="el" href="a00289.html#61b14d00a78185c9b2d206ebfc379124">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00287.html#eeb615e68e963e6bf8d9c11402d0ce8e">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00279.html#ac480ea0e9d5ea0345a67d57008b6263">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00273.html#67ae221109ddc69510ab593874e435d4">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00271.html#3bf2b8c87ff22115be9b2eac179f2d30">tbb::qu [...]
+: <a class="el" href="a00304.html#a734a55289804ff34ce1c6ac4c5075e4">tbb::internal::two_phase_port< T ></a>, <a class="el" href="a00255.html#a05cf39b2825183e9c0393890fbbbb41">tbb::limiter_node< T ></a>, <a class="el" href="a00241.html#02411d8d13b380062548aff133752cc5">tbb::continue_receiver</a>, <a class="el" href="a00277.html#d2f23b40b328dc254a7c2a0a30f408e4">tbb::receiver< T ></a><li>remove_successor()
+: <a class="el" href="a00255.html#047d77f583e789e6d3ac6a52aba3168b">tbb::limiter_node< T ></a>, <a class="el" href="a00225.html#415428db02e74a479fb056a8ed72ba53">tbb::buffer_node< T ></a>, <a class="el" href="a00224.html#eefb3210bb9727765ea7385ba163c2a6">tbb::broadcast_node< T ></a>, <a class="el" href="a00285.html#de069bfc6fae7ed4e82b2a1fbb58b721">tbb::source_node< Output ></a>, <a class="el" href="a00282.html#3f345427e812e8741370308ff88f30bf">tbb::sender< T & [...]
+: <a class="el" href="a00238.html#d438b9b32ea3a8ffb703015b6dce055b">tbb::concurrent_vector< T, A ></a><li>reserve()
+: <a class="el" href="a00304.html#1d7399cfc77fca8878d8d16049ce4e7e">tbb::internal::two_phase_port< T ></a>, <a class="el" href="a00238.html#5a0ce05026994b010018f72cfdeb72c1">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00235.html#e7c59f011c4cca83ff210aefe7c9d868">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>reset()
+: <a class="el" href="a00293.html#6d30d16bf1cd22f86c6afaf29c2b430c">tbb::task_group_context</a><li>resize()
+: <a class="el" href="a00238.html#98ce6b2c6d2622f0c030b46dfac3880c">tbb::concurrent_vector< T, A ></a><li>root_task()
+: <a class="el" href="a00250.html#34d61d8b6560e5b2eb42e0112701db0f">tbb::graph</a><li>rows()
+: <a class="el" href="a00223.html#1584623e59ff32a8aa82006827508be4">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00222.html#f496e7348a82652fba581203477cc07c">tbb::blocked_range2d< RowValue, ColValue ></a><li>run()
+: <a class="el" href="a00266.html#93d7fec8cd607b803dd2d79fb46bd260">tbb::pipeline</a>, <a class="el" href="a00265.html#b32a0a6e5e09ebb7fad3e6652c19afe5">tbb::parallel_while< Body ></a>, <a class="el" href="a00250.html#71213dd18099298dc74731e293c8286a">tbb::graph</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/functions_func_0x73.html b/doc/html/functions_func_0x73.html
new file mode 100644
index 0000000..ca03ec2
--- /dev/null
+++ b/doc/html/functions_func_0x73.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>Class Members - Functions</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html"><span>All</span></a></li>
+    <li id="current"><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions_func.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_func_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_func_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
+    <li id="current"><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_func_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+ 
+<p>
+<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
+<li>scoped_lock()
+: <a class="el" href="a00289.html#42a92d4f8fdde425b111cfa8a9228071">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00287.html#5ce6807050a9e8f87bcb4a65dccb12ef">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00279.html#dec17713c4c1321ac8fec66816d0c602">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00275.html#cf19f20e082887c1bb0ba6b0911c3583">tbb::interface5::reader_writer_lock::scoped_lock</a>, <a class="el" href="a00273.html#fbb8798792d3aebb136c46fc63d [...]
+: <a class="el" href="a00276.html#87ab0dc8f7216e6ba0f7acd6aec33064">tbb::interface5::reader_writer_lock::scoped_lock_read</a><li>seconds()
+: <a class="el" href="a00303.html#d5d8429c0bc59cf6131b2abc7929fa59">tbb::tick_count::interval_t</a><li>self()
+: <a class="el" href="a00291.html#bd43e8d6249738efafd12d6a4c72c5e3">tbb::task</a><li>sequencer_node()
+: <a class="el" href="a00283.html#c3138c1c96b76ae9f13b0abbf7029590">tbb::sequencer_node< T ></a><li>set_affinity()
+: <a class="el" href="a00291.html#dca19d7a45487a7d67a0db517e2b57c9">tbb::task</a><li>set_capacity()
+: <a class="el" href="a00230.html#f3c6c934f85fd02aedbc83a16943193b">tbb::concurrent_bounded_queue< T, A ></a><li>set_group_priority()
+: <a class="el" href="a00291.html#9ac8d1542d67d9d80121ff986801ac26">tbb::task</a><li>set_priority()
+: <a class="el" href="a00293.html#c4272d4d9ab65d600ca70fc2c8c4b039">tbb::task_group_context</a><li>set_ref_count()
+: <a class="el" href="a00291.html#06a4206a57e8e12a439b14d6d41cfd92">tbb::task</a><li>set_state()
+: <a class="el" href="a00258.html#795649a185b0d6af6dc81c5f378616dd">tbb::mutex</a><li>shrink_to_fit()
+: <a class="el" href="a00238.html#03c6f4cf66532bf4cc907ee738a9a186">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00235.html#28d113288fc7e0c04c9053ec7de61368">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>size()
+: <a class="el" href="a00243.html#33fd6593da1ed14340f10f67d5a69130">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00238.html#715fe313c4a9c22731cc404dd80c9ec9">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00230.html#7dc14d1a579a4cccda9f857585e1768d">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00235.html#8b2ae25c61338c6fd59e94fe09822ba5">tbb::interface5::concurrent_priority_queue< T,  [...]
+: <a class="el" href="a00285.html#0513272133a06db6742873671af98f21">tbb::source_node< Output ></a><li>spawn_and_wait_for_all()
+: <a class="el" href="a00291.html#894ab68378e502776d8220eea7ce9fa1">tbb::task</a><li>spawn_root_and_wait()
+: <a class="el" href="a00291.html#c33c7edbaec67aa8a56f48986a9dc69f">tbb::task</a><li>spin_mutex()
+: <a class="el" href="a00286.html#3d8fb44644fd8d41ada1fbeba7409be3">tbb::spin_mutex</a><li>spin_rw_mutex_v3()
+: <a class="el" href="a00288.html#61332b2756de89f3f5f69310cbb6e70c">tbb::spin_rw_mutex_v3</a><li>state()
+: <a class="el" href="a00291.html#0af7b2d7e6e8b4333b2accfce3dfb374">tbb::task</a><li>swap()
+: <a class="el" href="a00238.html#96c9c4bd968ed3edb8dd276854d2dae0">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00235.html#0ecdc6a04aa259374425d424ca2a6082">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>, <a class="el" href="a00231.html#076f8d9e16110aac5f558777aa744eb6">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></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/functions_func_0x74.html b/doc/html/functions_func_0x74.html
new file mode 100644
index 0000000..b0a91d5
--- /dev/null
+++ b/doc/html/functions_func_0x74.html
@@ -0,0 +1,91 @@
+<!DOCTYPE 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 - Functions</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html"><span>All</span></a></li>
+    <li id="current"><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions_func.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_func_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_func_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
+    <li id="current"><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_func_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+ 
+<p>
+<h3><a class="anchor" name="index_t">- t -</a></h3><ul>
+<li>task()
+: <a class="el" href="a00291.html#2bce8ec6e44706e70128f5cf91b76e67">tbb::task</a><li>task_group_context()
+: <a class="el" href="a00293.html#19fee08fb8ac98adccfe69c1aa63c491">tbb::task_group_context</a><li>task_list()
+: <a class="el" href="a00294.html#416341c2047eaef50417b41eaf7e9de6">tbb::task_list</a><li>task_scheduler_init()
+: <a class="el" href="a00295.html#421600bf9bf9338bcf937063f2ff0e90">tbb::task_scheduler_init</a><li>terminate()
+: <a class="el" href="a00295.html#f73257e04cb7fb9bd5be2b635d9016f1">tbb::task_scheduler_init</a><li>throw_self()
+: <a class="el" href="a00299.html#292832fd5c523e3d8081a22247840a1d">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00257.html#17cffba35811c92b7e65d63506b69602">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00228.html#2dd1be66ab32fa27e0ddef5707fa67ef">tbb::captured_exception</a>, <a class="el" href="a00298.html#8588e07fa49692f4d734e4f2e4f048f4">tbb::tbb_exception</a><li>tick_count()
+: <a class="el" href="a00302.html#34593326ae4191e02a13c7cbdab9de4c">tbb::tick_count</a><li>try_acquire()
+: <a class="el" href="a00289.html#9879626968d9b9a04cd2ec0fb2e84ae1">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00287.html#9297ec188534b45dc0ca48f2f39a0501">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00279.html#36bfc3e93e3ef6340abef4901444d340">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00273.html#2e4ff6c9ec2fee6682f95290d1f42baa">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00271.html#e5a014fb817599386a87170cf2cf51a9">tbb::qu [...]
+: <a class="el" href="a00225.html#46b8b257a97e2192a2b11743279e8ffe">tbb::buffer_node< T ></a>, <a class="el" href="a00285.html#809f51859ca4dd04204591d76c8572eb">tbb::source_node< Output ></a>, <a class="el" href="a00282.html#add46946c4c7330422733432e4032fac">tbb::sender< T ></a><li>try_get()
+: <a class="el" href="a00254.html#50c0e6465ac929a2e94d4e62a13ebeff">tbb::internal::join_node_base< JP, InputTuple, OutputTuple ></a>, <a class="el" href="a00225.html#b68bdec127703dbfb2d93d685abbfd67">tbb::buffer_node< T ></a>, <a class="el" href="a00285.html#0434d2933ad082d3c43a4ec774150511">tbb::source_node< Output ></a>, <a class="el" href="a00282.html#bf8c9235810354f3353a899c982645de">tbb::sender< T ></a><li>try_lock()
+: <a class="el" href="a00288.html#088bb256be794cc47d3b83791632fdfc">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00286.html#8f9a58fb56a2b4c5efe1a7f7c1ae2074">tbb::spin_mutex</a>, <a class="el" href="a00278.html#86e719b0afee25704af11ab97694d240">tbb::recursive_mutex</a>, <a class="el" href="a00274.html#721eb173e154ab38292273e9266a9b07">tbb::interface5::reader_writer_lock</a>, <a class="el" href="a00258.html#4331652c79dea1c1131bd59ab161b234">tbb::mutex</a><li>try_lock_read()
+: <a class="el" href="a00288.html#b8667415869013f840d976aa406d385a">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00274.html#595fb23952e3b89426b1f7938dea9b11">tbb::interface5::reader_writer_lock</a><li>try_pop()
+: <a class="el" href="a00230.html#0ca487019bbb00a196442aff78a1e4f7">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00236.html#ae31ca0db34ef96ef1e74aa0d28c95f8">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00235.html#e036461a29cc40902a2bb79abf9f5146">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>try_process_item()
+: <a class="el" href="a00301.html#c4f90f2c771bce748beb9be734fa286c">tbb::thread_bound_filter</a><li>try_push()
+: <a class="el" href="a00230.html#2bd6232531279fb3ccbd296bea23066b">tbb::concurrent_bounded_queue< T, A ></a><li>try_put()
+: <a class="el" href="a00304.html#f316c0d5ff67068ff23b684accbe87f4">tbb::internal::two_phase_port< T ></a>, <a class="el" href="a00255.html#a38facb46cde854cb7408bf9f3bf8999">tbb::limiter_node< T ></a>, <a class="el" href="a00225.html#f74899ffb67687998168ad428f586b64">tbb::buffer_node< T ></a>, <a class="el" href="a00224.html#9b211e02554d6b39dc04f7e7f4e00073">tbb::broadcast_node< T ></a>, <a class="el" href="a00241.html#a7f8b9cc6286eb2cd8d429d6279da64d">tbb::contin [...]
+: <a class="el" href="a00225.html#435e29a66f0719d4822a0a8dc78a0405">tbb::buffer_node< T ></a>, <a class="el" href="a00285.html#3dd7e998aa3e7258b3b5731307df23a0">tbb::source_node< Output ></a>, <a class="el" href="a00282.html#28c41df1c0c7ed485b4a691ec8f30098">tbb::sender< T ></a><li>try_reserve()
+: <a class="el" href="a00225.html#11ebad4c72082a1a03ecccd3afab4ae2">tbb::buffer_node< T ></a>, <a class="el" href="a00285.html#ecac0bb52cff61912dcd186647ccd1bf">tbb::source_node< Output ></a>, <a class="el" href="a00282.html#3506c7275aeeb2fc3ba5d5f10ee0adac">tbb::sender< T ></a><li>two_phase_port()
+: <a class="el" href="a00304.html#60e17ef935031c86c4a288eafab5c066">tbb::internal::two_phase_port< T ></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/functions_func_0x75.html b/doc/html/functions_func_0x75.html
new file mode 100644
index 0000000..e6ebc87
--- /dev/null
+++ b/doc/html/functions_func_0x75.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>Class Members - Functions</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html"><span>All</span></a></li>
+    <li id="current"><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions_func.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_func_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_func_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
+    <li id="current"><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_func_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+ 
+<p>
+<h3><a class="anchor" name="index_u">- u -</a></h3><ul>
+<li>unlock()
+: <a class="el" href="a00288.html#f9f52ead2098eb5fb12da59d5ae53b55">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00286.html#0e843ee6265f57f27d228ba91e7308ef">tbb::spin_mutex</a>, <a class="el" href="a00278.html#f0a96e26b7f074588dc31e32524856ae">tbb::recursive_mutex</a>, <a class="el" href="a00274.html#5113b32689305599b2c36b5831547704">tbb::interface5::reader_writer_lock</a>, <a class="el" href="a00258.html#5fc9ef443ae75d966695546be399cc6b">tbb::mutex</a><li>unsafe_size()
+: <a class="el" href="a00236.html#eaa35a5274606779802e9a669a706260">tbb::strict_ppl::concurrent_queue< T, A ></a><li>upgrade_to_writer()
+: <a class="el" href="a00289.html#3f0b1e3f2efab63336400348bd070226">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00273.html#11ba1da4a722c9e6f73339a52c487e82">tbb::queuing_rw_mutex::scoped_lock</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/functions_func_0x77.html b/doc/html/functions_func_0x77.html
new file mode 100644
index 0000000..3c76237
--- /dev/null
+++ b/doc/html/functions_func_0x77.html
@@ -0,0 +1,74 @@
+<!DOCTYPE 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 - Functions</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html"><span>All</span></a></li>
+    <li id="current"><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions_func.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_func_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_func_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
+    <li id="current"><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="functions_func_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+ 
+<p>
+<h3><a class="anchor" name="index_w">- w -</a></h3><ul>
+<li>wait_for_all()
+: <a class="el" href="a00291.html#53d2615ad9c38859b4c8080936600283">tbb::task</a>, <a class="el" href="a00250.html#bafd6349fdc6563ffa02746866e30bec">tbb::graph</a><li>what()
+: <a class="el" href="a00257.html#b33a89bccf0c63106f1270c7bfaaf54f">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00228.html#6b5988ef74a1fe2a58998d110b3633e0">tbb::captured_exception</a>, <a class="el" href="a00298.html#e8157689ecb66bc6c72d3618bf3cc371">tbb::tbb_exception</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/functions_func_0x7e.html b/doc/html/functions_func_0x7e.html
new file mode 100644
index 0000000..69f38a5
--- /dev/null
+++ b/doc/html/functions_func_0x7e.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>Class Members - Functions</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="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 id="current"><a href="functions.html"><span>Class Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html"><span>All</span></a></li>
+    <li id="current"><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions_func.html#index_a"><span>a</span></a></li>
+    <li><a href="functions_func_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="functions_func_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
+    <li id="current"><a href="functions_func_0x7e.html#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+ 
+<p>
+<h3><a class="anchor" name="index_~">- ~ -</a></h3><ul>
+<li>~combinable()
+: <a class="el" href="a00229.html#2c87e79ae98588a5780f708773388843">tbb::combinable< T ></a><li>~concurrent_bounded_queue()
+: <a class="el" href="a00230.html#acaf5b510dc0dfc7780b8c956cf773cf">tbb::concurrent_bounded_queue< T, A ></a><li>~concurrent_hash_map()
+: <a class="el" href="a00231.html#2aa8e2d28d5af1284cf78d20a9c22731">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>~concurrent_queue()
+: <a class="el" href="a00236.html#830b33753d6b149c366344e29b2edd8c">tbb::strict_ppl::concurrent_queue< T, A ></a><li>~concurrent_vector()
+: <a class="el" href="a00238.html#da2444b28bb840d38f60d0030333a5fc">tbb::concurrent_vector< T, A ></a><li>~const_accessor()
+: <a class="el" href="a00234.html#928769b139d53427e7075c1f86148e4c">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>~continue_receiver()
+: <a class="el" href="a00241.html#9a38edb7e1e3c9be4e3848145c51a617">tbb::continue_receiver</a><li>~enumerable_thread_specific()
+: <a class="el" href="a00243.html#5a7907d9e3e5b18e7a7b55211ef3213f">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>~filter()
+: <a class="el" href="a00245.html#66d159f362293e3964ba3da8bc1d2604">tbb::filter</a><li>~graph()
+: <a class="el" href="a00250.html#55332084e7884a26ff288b8fe960030d">tbb::graph</a><li>~parallel_while()
+: <a class="el" href="a00265.html#6fcfc973cc56b79c6d0fbb8a31be7e84">tbb::parallel_while< Body ></a><li>~pipeline()
+: <a class="el" href="a00266.html#49513c6c24f9d5bbbb27edca5efe01c9">tbb::pipeline</a><li>~queuing_rw_mutex()
+: <a class="el" href="a00272.html#1ba73e3d95cfdf8323880bc623af9099">tbb::queuing_rw_mutex</a><li>~reader_writer_lock()
+: <a class="el" href="a00274.html#5135f64f7b7339017f33d956445edbee">tbb::interface5::reader_writer_lock</a><li>~receiver()
+: <a class="el" href="a00277.html#18f74b83abae0ee1e4ce07942797ef27">tbb::receiver< T ></a><li>~scoped_lock()
+: <a class="el" href="a00289.html#d7eaaa3f2e2c5dc11e7005811b1bdd04">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00287.html#ac6fa425d1f06c56d8b70abc51aac844">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00279.html#c1197ffb8f3cd9d4fed71d7e06265b7c">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00275.html#70246e0260493625ff956fa5926fc71f">tbb::interface5::reader_writer_lock::scoped_lock</a>, <a class="el" href="a00273.html#32c7d67a660d23ebbaab1a1d282 [...]
+: <a class="el" href="a00276.html#bd21c5f3d555d64d1de8658e15bf4966">tbb::interface5::reader_writer_lock::scoped_lock_read</a><li>~sequencer_node()
+: <a class="el" href="a00283.html#c87d80feebaf2bae4af22b5f2459b37e">tbb::sequencer_node< T ></a><li>~source_node()
+: <a class="el" href="a00285.html#90c94a8a52cc3d19cf393ce289e80733">tbb::source_node< Output ></a><li>~spin_rw_mutex_v3()
+: <a class="el" href="a00288.html#9a815fb2759e55072ed413f1b6970cf3">tbb::spin_rw_mutex_v3</a><li>~task()
+: <a class="el" href="a00291.html#98245ee0473f84cb19dbbf8c81134908">tbb::task</a><li>~task_list()
+: <a class="el" href="a00294.html#6d438f1499a02db1e59c24ab6043e5ba">tbb::task_list</a><li>~task_scheduler_init()
+: <a class="el" href="a00295.html#4da6c86292d80c703a66c1f6f5299488">tbb::task_scheduler_init</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/functions_rela.html b/doc/html/functions_rela.html
index 40a47cb..730db22 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="a00165.html#85c2892eff1fddcd06e28911e75838bd">tbb::interface5::filter_t< T, U ></a><li>operator+
-: <a class="el" href="a00211.html#5871ead1ca230efbe52a5008470e6428">tbb::tick_count::interval_t</a><li>operator-
-: <a class="el" href="a00210.html#09dde78a4100800c11bb883d6204b586">tbb::tick_count</a>, <a class="el" href="a00211.html#fa509691e1d689830931e36edd274f76">tbb::tick_count::interval_t</a></ul>
+: <a class="el" href="a00246.html#85c2892eff1fddcd06e28911e75838bd">tbb::interface6::filter_t< T, U ></a><li>operator+
+: <a class="el" href="a00303.html#5871ead1ca230efbe52a5008470e6428">tbb::tick_count::interval_t</a><li>operator-
+: <a class="el" href="a00302.html#09dde78a4100800c11bb883d6204b586">tbb::tick_count</a>, <a class="el" href="a00303.html#fa509691e1d689830931e36edd274f76">tbb::tick_count::interval_t</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/functions_type.html b/doc/html/functions_type.html
index e12219b..807d610 100644
--- a/doc/html/functions_type.html
+++ b/doc/html/functions_type.html
@@ -35,20 +35,24 @@
 <p>
 <ul>
 <li>affinity_id
-: <a class="el" href="a00199.html#d61bb32389d3857bf7511d69beaafb76">tbb::task</a><li>allocator_type
-: <a class="el" href="a00204.html#78701e7454ef8e1a25b5acd364367080">tbb::tbb_allocator< T ></a>, <a class="el" href="a00163.html#3c03eb40955b933b01987222722ac4bd">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00154.html#2e2726fccf6d975dc1071608cc0bbf90">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00159.html#5a3956341728eaa558d8827063718cac">tbb::strict_ppl::concurrent_queue< T, A ></a><li>co [...]
-: <a class="el" href="a00147.html#1a8d05842c2b3dfc177bc4d347e4cef7">tbb::blocked_range< Value ></a><li>const_reference
-: <a class="el" href="a00154.html#796713d0b9ba93a4721cbe13e4474068">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00159.html#4d48e7ff93f81636bca2c74f7da34750">tbb::strict_ppl::concurrent_queue< T, A ></a><li>difference_type
-: <a class="el" href="a00154.html#4b45c91297e69515d83d5eef85ae1f49">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00159.html#068576d16c7e4e05d52f9db7a45b5b65">tbb::strict_ppl::concurrent_queue< T, A ></a><li>native_handle_type
-: <a class="el" href="a00189.html#889fa8cc32dd707eef7c0f52dda09c0d">tbb::recursive_mutex</a>, <a class="el" href="a00172.html#9f1ec84d5815263ceae853f06ddb4cac">tbb::mutex</a><li>page_range_type
-: <a class="el" href="a00149.html#b8ebf17a552ba47825e9b3887855b719">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a><li>reference
-: <a class="el" href="a00154.html#dcd44ca6a88c0dc7a847a47a10811f0c">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00159.html#a8d725c50a9834bb7af5b67c0aff92b8">tbb::strict_ppl::concurrent_queue< T, A ></a><li>row_range_type
-: <a class="el" href="a00148.html#a807a22fe658ec38b8edfd69521d0383">tbb::blocked_range2d< RowValue, ColValue ></a><li>size_type
-: <a class="el" href="a00154.html#a80e4c11dbb324e4b92a24a77bbcde68">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00159.html#8fc30e93f8342a1960357f71e4fe8a2b">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00147.html#f5707bffea38eee5c9680f37358afb8e">tbb::blocked_range< Value ></a><li>value_type
-: <a class="el" href="a00179.html#fa297e53d3af2a101e712bc200233e9c">tbb::parallel_while< Body ></a>, <a class="el" href="a00154.html#98245517a931e5893f6601e66c51fc75">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00159.html#682c3978d5cb0620000994f11c44a476">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00156.html#49eec74f272bab187d176c0d9d16a7fe">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::accesso [...]
+: <a class="el" href="a00291.html#d61bb32389d3857bf7511d69beaafb76">tbb::task</a><li>allocator_type
+: <a class="el" href="a00296.html#78701e7454ef8e1a25b5acd364367080">tbb::tbb_allocator< T ></a>, <a class="el" href="a00243.html#3c03eb40955b933b01987222722ac4bd">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00230.html#2e2726fccf6d975dc1071608cc0bbf90">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00236.html#5a3956341728eaa558d8827063718cac">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a c [...]
+: <a class="el" href="a00221.html#1a8d05842c2b3dfc177bc4d347e4cef7">tbb::blocked_range< Value ></a><li>const_reference
+: <a class="el" href="a00230.html#796713d0b9ba93a4721cbe13e4474068">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00236.html#4d48e7ff93f81636bca2c74f7da34750">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00235.html#a4ded8601a434098605be0dcc4febc60">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>difference_type
+: <a class="el" href="a00230.html#4b45c91297e69515d83d5eef85ae1f49">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00236.html#068576d16c7e4e05d52f9db7a45b5b65">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00235.html#77399bc76b3ecd60e33f7e35a5becd87">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>input_type
+: <a class="el" href="a00304.html#0f464d59e15941d6d625e8c7d634e26b">tbb::internal::two_phase_port< T ></a>, <a class="el" href="a00255.html#f654b8974c613e8fd3de5a40e181d5ff">tbb::limiter_node< T ></a>, <a class="el" href="a00268.html#40fdedd4829aeae3ebd1a5fdaf39b23d">tbb::priority_queue_node< T, Compare ></a>, <a class="el" href="a00283.html#a73e4a3ae6c430281f08226d448ebfc8">tbb::sequencer_node< T ></a>, <a class="el" href="a00269.html#27016487003a4ff2908748c3cf11 [...]
+: <a class="el" href="a00278.html#889fa8cc32dd707eef7c0f52dda09c0d">tbb::recursive_mutex</a>, <a class="el" href="a00258.html#9f1ec84d5815263ceae853f06ddb4cac">tbb::mutex</a><li>output_type
+: <a class="el" href="a00254.html#578893d923f91b7e44a15dea8b0d7082">tbb::internal::join_node_base< JP, InputTuple, OutputTuple ></a>, <a class="el" href="a00255.html#370f88278dec6f584c1d08a375f9b4cd">tbb::limiter_node< T ></a>, <a class="el" href="a00268.html#3b3fa4479416e7cb6d4a6a4b175c2b15">tbb::priority_queue_node< T, Compare ></a>, <a class="el" href="a00283.html#0c613bb01103dfcfbc3f9cbe943f95b0">tbb::sequencer_node< T ></a>, <a class="el" href="a00269.html#d2 [...]
+: <a class="el" href="a00223.html#b8ebf17a552ba47825e9b3887855b719">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a><li>predecessor_type
+: <a class="el" href="a00304.html#37ee9b5320b631c39bccc0b4745d88d1">tbb::internal::two_phase_port< T ></a>, <a class="el" href="a00255.html#fd88ce7670e7107aef2161b45f156185">tbb::limiter_node< T ></a>, <a class="el" href="a00268.html#98900a87758cac05500fcbc74113cebf">tbb::priority_queue_node< T, Compare ></a>, <a class="el" href="a00283.html#6581686ef0cf8e13c0270687628af5eb">tbb::sequencer_node< T ></a>, <a class="el" href="a00269.html#83bc7308a38f1d205377d78ec149 [...]
+: <a class="el" href="a00230.html#dcd44ca6a88c0dc7a847a47a10811f0c">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00236.html#a8d725c50a9834bb7af5b67c0aff92b8">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00235.html#5804b3c708ef4e50d603f918ef2b9e58">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>row_range_type
+: <a class="el" href="a00222.html#a807a22fe658ec38b8edfd69521d0383">tbb::blocked_range2d< RowValue, ColValue ></a><li>size_type
+: <a class="el" href="a00230.html#a80e4c11dbb324e4b92a24a77bbcde68">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00236.html#8fc30e93f8342a1960357f71e4fe8a2b">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00235.html#b679eea8d01d041625a39f719ca2b7ed">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>, <a class="el" href="a00221.html#f5707bffea38eee5c9680f37358afb8e">tbb::blocked_range< Value ></a><li>successor_type
+: <a class="el" href="a00254.html#1212cbaa293a93c3bf334da1539556bd">tbb::internal::join_node_base< JP, InputTuple, OutputTuple ></a>, <a class="el" href="a00255.html#754182cc1e5b403201495bc1fd45674b">tbb::limiter_node< T ></a>, <a class="el" href="a00268.html#e01014f2e5ceea292c68f6fe47391c57">tbb::priority_queue_node< T, Compare ></a>, <a class="el" href="a00283.html#3591313e30d0f485a09106686067411f">tbb::sequencer_node< T ></a>, <a class="el" href="a00269.html#c3 [...]
+: <a class="el" href="a00265.html#fa297e53d3af2a101e712bc200233e9c">tbb::parallel_while< Body ></a>, <a class="el" href="a00230.html#98245517a931e5893f6601e66c51fc75">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00236.html#682c3978d5cb0620000994f11c44a476">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00235.html#7c611a6b5b8f94b0e7f2afc97e31efb1">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>, <a class="el"  [...]
 <hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/functions_vars.html b/doc/html/functions_vars.html
index 9841113..ff417cd 100644
--- a/doc/html/functions_vars.html
+++ b/doc/html/functions_vars.html
@@ -35,12 +35,20 @@
 <p>
 <ul>
 <li>automatic
-: <a class="el" href="a00203.html#8f5988e2b0fbb2d533fcbb7f2583743f">tbb::task_scheduler_init</a><li>deferred
-: <a class="el" href="a00203.html#e6c860f1e559026ff3ef4599c0d6c514">tbb::task_scheduler_init</a><li>my_exception_data
-: <a class="el" href="a00171.html#a8c0ae2089ae784b28907cf748b89416">tbb::movable_exception< ExceptionData ></a></ul>
+: <a class="el" href="a00295.html#8f5988e2b0fbb2d533fcbb7f2583743f">tbb::task_scheduler_init</a><li>decrement
+: <a class="el" href="a00255.html#181fa37d3e3c68ec3819ea46beed79a2">tbb::limiter_node< T ></a><li>deferred
+: <a class="el" href="a00295.html#e6c860f1e559026ff3ef4599c0d6c514">tbb::task_scheduler_init</a><li>exact_exception_propagation
+: <a class="el" href="a00245.html#f17200974c33be21f42a5f00893de028">tbb::filter</a><li>filter_is_bound
+: <a class="el" href="a00245.html#dd6a6e7210efc9bcaf2c5e08767d92b5">tbb::filter</a><li>filter_is_out_of_order
+: <a class="el" href="a00245.html#2e5eb65f95d8050186278077e433c5b1">tbb::filter</a><li>filter_is_serial
+: <a class="el" href="a00245.html#4b7de3a76e744f3d9c1bc5d437ea851d">tbb::filter</a><li>filter_may_emit_null
+: <a class="el" href="a00245.html#bdd02a434a6e7499dd1e8f43aae96793">tbb::filter</a><li>is_writer
+: <a class="el" href="a00233.html#07d958f151a0eaa92f50fd56ad6440e2">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a>, <a class="el" href="a00289.html#6b5a7c3c67a36b05c4df8410d32627d8">tbb::spin_rw_mutex_v3::scoped_lock</a><li>mutex
+: <a class="el" href="a00258.html#05313cb77d4f85213103d4dab74ed454">tbb::mutex</a>, <a class="el" href="a00289.html#d96d1a1fcc3d79ef3e5c06a53b8ffeaa">tbb::spin_rw_mutex_v3::scoped_lock</a><li>my_exception_data
+: <a class="el" href="a00257.html#a8c0ae2089ae784b28907cf748b89416">tbb::movable_exception< ExceptionData ></a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/globals.html b/doc/html/globals.html
index e8feca6..428e922 100644
--- a/doc/html/globals.html
+++ b/doc/html/globals.html
@@ -28,19 +28,21 @@
 Here is a list of all documented file members with links to the documentation:
 <p>
 <ul>
-<li>scalable_aligned_free()
-: <a class="el" href="a00277.html#g65a20e812012f15ec7442d5b45d0cba5">scalable_allocator.h</a><li>scalable_aligned_malloc()
-: <a class="el" href="a00277.html#gc1c7aaa1fe85c17ba5a3a96f7e8d89e7">scalable_allocator.h</a><li>scalable_aligned_realloc()
-: <a class="el" href="a00277.html#gbaea91376be80dfabd7c93eaffd9abaa">scalable_allocator.h</a><li>scalable_calloc()
-: <a class="el" href="a00277.html#g3f5a2fde0bcaa3eda35be32c8658f444">scalable_allocator.h</a><li>scalable_free()
-: <a class="el" href="a00277.html#gca3579c21244dba9f0c351e5984d4565">scalable_allocator.h</a><li>scalable_malloc()
-: <a class="el" href="a00277.html#gc25b8e6c76db0b346a8249796a7a2475">scalable_allocator.h</a><li>scalable_msize()
-: <a class="el" href="a00277.html#g0965ce1b4b7835f92869c7fd867265f7">scalable_allocator.h</a><li>scalable_posix_memalign()
-: <a class="el" href="a00277.html#g05dcec987480bb2c82ecdead6a085899">scalable_allocator.h</a><li>scalable_realloc()
-: <a class="el" href="a00277.html#g951bbbbd2d041acb59ba5fa910b52543">scalable_allocator.h</a></ul>
+<li>make_edge()
+: <a class="el" href="a00362.html#0a5a2559e7d28a9bf8f9e5e60d745e86">graph.h</a><li>make_edges()
+: <a class="el" href="a00362.html#9368d2f689961f790bf7aa4a8cc1135e">graph.h</a><li>scalable_aligned_free()
+: <a class="el" href="a00373.html#g65a20e812012f15ec7442d5b45d0cba5">scalable_allocator.h</a><li>scalable_aligned_malloc()
+: <a class="el" href="a00373.html#gc1c7aaa1fe85c17ba5a3a96f7e8d89e7">scalable_allocator.h</a><li>scalable_aligned_realloc()
+: <a class="el" href="a00373.html#gbaea91376be80dfabd7c93eaffd9abaa">scalable_allocator.h</a><li>scalable_calloc()
+: <a class="el" href="a00373.html#g3f5a2fde0bcaa3eda35be32c8658f444">scalable_allocator.h</a><li>scalable_free()
+: <a class="el" href="a00373.html#gca3579c21244dba9f0c351e5984d4565">scalable_allocator.h</a><li>scalable_malloc()
+: <a class="el" href="a00373.html#gc25b8e6c76db0b346a8249796a7a2475">scalable_allocator.h</a><li>scalable_msize()
+: <a class="el" href="a00373.html#g0965ce1b4b7835f92869c7fd867265f7">scalable_allocator.h</a><li>scalable_posix_memalign()
+: <a class="el" href="a00373.html#g05dcec987480bb2c82ecdead6a085899">scalable_allocator.h</a><li>scalable_realloc()
+: <a class="el" href="a00373.html#g951bbbbd2d041acb59ba5fa910b52543">scalable_allocator.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/globals_func.html b/doc/html/globals_func.html
index 5322a98..7a70e40 100644
--- a/doc/html/globals_func.html
+++ b/doc/html/globals_func.html
@@ -28,19 +28,21 @@
  
 <p>
 <ul>
-<li>scalable_aligned_free()
-: <a class="el" href="a00277.html#g65a20e812012f15ec7442d5b45d0cba5">scalable_allocator.h</a><li>scalable_aligned_malloc()
-: <a class="el" href="a00277.html#gc1c7aaa1fe85c17ba5a3a96f7e8d89e7">scalable_allocator.h</a><li>scalable_aligned_realloc()
-: <a class="el" href="a00277.html#gbaea91376be80dfabd7c93eaffd9abaa">scalable_allocator.h</a><li>scalable_calloc()
-: <a class="el" href="a00277.html#g3f5a2fde0bcaa3eda35be32c8658f444">scalable_allocator.h</a><li>scalable_free()
-: <a class="el" href="a00277.html#gca3579c21244dba9f0c351e5984d4565">scalable_allocator.h</a><li>scalable_malloc()
-: <a class="el" href="a00277.html#gc25b8e6c76db0b346a8249796a7a2475">scalable_allocator.h</a><li>scalable_msize()
-: <a class="el" href="a00277.html#g0965ce1b4b7835f92869c7fd867265f7">scalable_allocator.h</a><li>scalable_posix_memalign()
-: <a class="el" href="a00277.html#g05dcec987480bb2c82ecdead6a085899">scalable_allocator.h</a><li>scalable_realloc()
-: <a class="el" href="a00277.html#g951bbbbd2d041acb59ba5fa910b52543">scalable_allocator.h</a></ul>
+<li>make_edge()
+: <a class="el" href="a00362.html#0a5a2559e7d28a9bf8f9e5e60d745e86">graph.h</a><li>make_edges()
+: <a class="el" href="a00362.html#9368d2f689961f790bf7aa4a8cc1135e">graph.h</a><li>scalable_aligned_free()
+: <a class="el" href="a00373.html#g65a20e812012f15ec7442d5b45d0cba5">scalable_allocator.h</a><li>scalable_aligned_malloc()
+: <a class="el" href="a00373.html#gc1c7aaa1fe85c17ba5a3a96f7e8d89e7">scalable_allocator.h</a><li>scalable_aligned_realloc()
+: <a class="el" href="a00373.html#gbaea91376be80dfabd7c93eaffd9abaa">scalable_allocator.h</a><li>scalable_calloc()
+: <a class="el" href="a00373.html#g3f5a2fde0bcaa3eda35be32c8658f444">scalable_allocator.h</a><li>scalable_free()
+: <a class="el" href="a00373.html#gca3579c21244dba9f0c351e5984d4565">scalable_allocator.h</a><li>scalable_malloc()
+: <a class="el" href="a00373.html#gc25b8e6c76db0b346a8249796a7a2475">scalable_allocator.h</a><li>scalable_msize()
+: <a class="el" href="a00373.html#g0965ce1b4b7835f92869c7fd867265f7">scalable_allocator.h</a><li>scalable_posix_memalign()
+: <a class="el" href="a00373.html#g05dcec987480bb2c82ecdead6a085899">scalable_allocator.h</a><li>scalable_realloc()
+: <a class="el" href="a00373.html#g951bbbbd2d041acb59ba5fa910b52543">scalable_allocator.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/hierarchy.html b/doc/html/hierarchy.html
index e8416f8..4b094d7 100644
--- a/doc/html/hierarchy.html
+++ b/doc/html/hierarchy.html
@@ -21,96 +21,191 @@
     <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="a00140.html">tbb::affinity_partitioner</a>
-<li><a class="el" href="a00141.html">tbb::aligned_space< T, N ></a>
-<li><a class="el" href="a00142.html">tbb::atomic< T ></a>
-<li><a class="el" href="a00143.html">tbb::atomic< void * ></a>
-<li><a class="el" href="a00144.html">tbb::internal::atomic_backoff</a>
-<li><a class="el" href="a00145.html">tbb::auto_partitioner</a>
-<li><a class="el" href="a00146.html">tbb::bad_last_alloc</a>
-<li><a class="el" href="a00147.html">tbb::blocked_range< Value ></a>
-<li><a class="el" href="a00148.html">tbb::blocked_range2d< RowValue, ColValue ></a>
-<li><a class="el" href="a00149.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
-<li><a class="el" href="a00147.html">tbb::blocked_range< I ></a>
-<li><a class="el" href="a00150.html">tbb::cache_aligned_allocator< T ></a>
-<li><a class="el" href="a00151.html">tbb::cache_aligned_allocator< void ></a>
-<li><a class="el" href="a00153.html">tbb::combinable< T ></a>
-<li><a class="el" href="a00154.html">tbb::concurrent_bounded_queue< T, A ></a>
+<li><a class="el" href="a00212.html">tbb::affinity_partitioner</a>
+<li><a class="el" href="a00213.html">tbb::interface6::internal::aggregated_operation< Derived ></a>
+<li><a class="el" href="a00214.html">tbb::interface6::internal::aggregator< handler_type, operation_type ></a>
+<li><a class="el" href="a00215.html">tbb::aligned_space< T, N ></a>
+<li><a class="el" href="a00216.html">tbb::atomic< T ></a>
+<li><a class="el" href="a00217.html">tbb::atomic< void * ></a>
+<li><a class="el" href="a00218.html">tbb::internal::atomic_backoff</a>
+<li><a class="el" href="a00219.html">tbb::auto_partitioner</a>
+<li><a class="el" href="a00220.html">tbb::bad_last_alloc</a>
+<li><a class="el" href="a00221.html">tbb::blocked_range< Value ></a>
+<li><a class="el" href="a00222.html">tbb::blocked_range2d< RowValue, ColValue ></a>
+<li><a class="el" href="a00223.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
+<li><a class="el" href="a00221.html">tbb::blocked_range< I ></a>
+<li><a class="el" href="a00226.html">tbb::cache_aligned_allocator< T ></a>
+<li><a class="el" href="a00227.html">tbb::cache_aligned_allocator< void ></a>
+<li><a class="el" href="a00229.html">tbb::combinable< T ></a>
+<li><a class="el" href="a00230.html">tbb::concurrent_bounded_queue< T, A ></a>
 <ul>
-<li><a class="el" href="a00160.html">tbb::deprecated::concurrent_queue< T, A ></a>
+<li><a class="el" href="a00237.html">tbb::deprecated::concurrent_queue< T, A ></a>
 </ul>
-<li><a class="el" href="a00155.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>
-<li><a class="el" href="a00157.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a>
-<li><a class="el" href="a00158.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>
+<li><a class="el" href="a00231.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>
+<li><a class="el" href="a00233.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a>
+<li><a class="el" href="a00234.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>
 <ul>
-<li><a class="el" href="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>
+<li><a class="el" href="a00232.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>
 </ul>
-<li><a class="el" href="a00159.html">tbb::strict_ppl::concurrent_queue< T, A ></a>
-<li><a class="el" href="a00161.html">tbb::concurrent_vector< T, A ></a>
-<li><a class="el" href="a00163.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
-<li><a class="el" href="a00164.html">tbb::filter</a>
+<li><a class="el" href="a00235.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+<li><a class="el" href="a00236.html">tbb::strict_ppl::concurrent_queue< T, A ></a>
+<li><a class="el" href="a00238.html">tbb::concurrent_vector< T, A ></a>
+<li><a class="el" href="a00239.html">tbb::continue_msg</a>
+<li><a class="el" href="a00243.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
+<li><a class="el" href="a00245.html">tbb::filter</a>
 <ul>
-<li><a class="el" href="a00209.html">tbb::thread_bound_filter</a>
-</ul>
-<li><a class="el" href="a00165.html">tbb::interface5::filter_t< T, U ></a>
-<li><a class="el" href="a00166.html">tbb::final_scan_tag</a>
-<li><a class="el" href="a00167.html">tbb::interface5::flow_control</a>
-<li><a class="el" href="a00168.html">tbb::improper_lock</a>
-<li><b>atomic_impl</b><li><a class="el" href="a00169.html">tbb::invalid_multiple_scheduling</a>
-<li><a class="el" href="a00170.html">tbb::missing_wait</a>
-<li><a class="el" href="a00172.html">tbb::mutex</a>
-<li><a class="el" href="a00173.html">tbb::mutex::scoped_lock</a>
-<li><a class="el" href="a00174.html">tbb::null_mutex</a>
-<li><a class="el" href="a00175.html">tbb::null_mutex::scoped_lock</a>
-<li><a class="el" href="a00176.html">tbb::null_rw_mutex</a>
-<li><a class="el" href="a00177.html">tbb::null_rw_mutex::scoped_lock</a>
-<li><a class="el" href="a00178.html">tbb::parallel_do_feeder< Item ></a>
-<li><a class="el" href="a00179.html">tbb::parallel_while< Body ></a>
-<li><a class="el" href="a00180.html">tbb::pipeline</a>
-<li><a class="el" href="a00181.html">tbb::pre_scan_tag</a>
-<li><a class="el" href="a00182.html">tbb::queuing_mutex</a>
-<li><a class="el" href="a00183.html">tbb::queuing_mutex::scoped_lock</a>
-<li><a class="el" href="a00184.html">tbb::queuing_rw_mutex</a>
-<li><a class="el" href="a00185.html">tbb::queuing_rw_mutex::scoped_lock</a>
-<li><a class="el" href="a00186.html">tbb::interface5::reader_writer_lock</a>
-<li><a class="el" href="a00187.html">tbb::interface5::reader_writer_lock::scoped_lock</a>
-<li><a class="el" href="a00188.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a>
-<li><a class="el" href="a00189.html">tbb::recursive_mutex</a>
-<li><a class="el" href="a00190.html">tbb::recursive_mutex::scoped_lock</a>
-<li><a class="el" href="a00191.html">tbb::scalable_allocator< T ></a>
-<li><a class="el" href="a00192.html">tbb::scalable_allocator< void ></a>
-<li><a class="el" href="a00193.html">tbb::simple_partitioner</a>
-<li><a class="el" href="a00194.html">tbb::spin_mutex</a>
-<li><a class="el" href="a00195.html">tbb::spin_mutex::scoped_lock</a>
-<li><a class="el" href="a00196.html">tbb::spin_rw_mutex_v3</a>
-<li><a class="el" href="a00197.html">tbb::spin_rw_mutex_v3::scoped_lock</a>
-<li><a class="el" href="a00198.html">tbb::split</a>
-<li><a class="el" href="a00199.html">tbb::task</a>
+<li><a class="el" href="a00301.html">tbb::thread_bound_filter</a>
+</ul>
+<li><a class="el" href="a00246.html">tbb::interface6::filter_t< T, U ></a>
+<li><a class="el" href="a00247.html">tbb::final_scan_tag</a>
+<li><a class="el" href="a00248.html">tbb::interface6::flow_control</a>
+<li><a class="el" href="a00250.html">tbb::graph</a>
+<li><a class="el" href="a00251.html">tbb::graph_node</a>
+<ul>
+<li><a class="el" href="a00224.html">tbb::broadcast_node< T ></a>
+<li><a class="el" href="a00225.html">tbb::buffer_node< T ></a>
+<ul>
+<li><a class="el" href="a00268.html">tbb::priority_queue_node< T, Compare ></a>
+<li><a class="el" href="a00269.html">tbb::queue_node< T ></a>
+<ul>
+<li><a class="el" href="a00283.html">tbb::sequencer_node< T ></a>
+</ul>
+</ul>
+<li><a class="el" href="a00244.html">tbb::executable_node< Output ></a>
+<ul>
+<li><a class="el" href="a00240.html">tbb::continue_node</a>
+</ul>
+<li><a class="el" href="a00244.html">tbb::executable_node< tbb::continue_msg ></a>
+<li><a class="el" href="a00249.html">tbb::function_node< Input, Output ></a>
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< JP, InputTuple, OutputTuple ></a>
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type > >, OutputTuple ></a>
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type > >, OutputTuple ></a>
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 3, OutputTuple >::type > >, OutputTuple ></a>
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 3, OutputTuple >::type >, tbb::internal::two_phase_port< std:: [...]
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 3, OutputTuple >::type >, tbb::internal::two_phase_port< std:: [...]
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 3, OutputTuple >::type >, tbb::internal::two_phase_port< std:: [...]
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 3, OutputTuple >::type >, tbb::internal::two_phase_port< std:: [...]
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 3, OutputTuple >::type >, tbb::internal::two_phase_port< std:: [...]
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 3, OutputTuple >::type >, tbb::internal::two_phase_port< std:: [...]
+<li><a class="el" href="a00255.html">tbb::limiter_node< T ></a>
+<li><a class="el" href="a00285.html">tbb::source_node< Output ></a>
+</ul>
+<li><a class="el" href="a00252.html">tbb::improper_lock</a>
+<li><b>atomic_impl</b><li><b>continue_input</b><ul>
+<li><a class="el" href="a00244.html">tbb::executable_node< tbb::continue_msg ></a>
+</ul>
+<li><b>function_output</b><ul>
+<li><a class="el" href="a00244.html">tbb::executable_node< tbb::continue_msg ></a>
+</ul>
+<li><a class="el" href="a00253.html">tbb::invalid_multiple_scheduling</a>
+<li><b>join_node_FE</b><ul>
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type > >, OutputTuple ></a>
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type > >, OutputTuple ></a>
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 3, OutputTuple >::type > >, OutputTuple ></a>
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 3, OutputTuple >::type >, tbb::internal::two_phase_port< std:: [...]
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 3, OutputTuple >::type >, tbb::internal::two_phase_port< std:: [...]
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 3, OutputTuple >::type >, tbb::internal::two_phase_port< std:: [...]
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 3, OutputTuple >::type >, tbb::internal::two_phase_port< std:: [...]
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 3, OutputTuple >::type >, tbb::internal::two_phase_port< std:: [...]
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 3, OutputTuple >::type >, tbb::internal::two_phase_port< std:: [...]
+</ul>
+<li><a class="el" href="a00256.html">tbb::missing_wait</a>
+<li><a class="el" href="a00258.html">tbb::mutex</a>
+<li><a class="el" href="a00259.html">tbb::mutex::scoped_lock</a>
+<li><b>no_copy</b><ul>
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type > >, OutputTuple ></a>
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type > >, OutputTuple ></a>
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 3, OutputTuple >::type > >, OutputTuple ></a>
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 3, OutputTuple >::type >, tbb::internal::two_phase_port< std:: [...]
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 3, OutputTuple >::type >, tbb::internal::two_phase_port< std:: [...]
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 3, OutputTuple >::type >, tbb::internal::two_phase_port< std:: [...]
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 3, OutputTuple >::type >, tbb::internal::two_phase_port< std:: [...]
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 3, OutputTuple >::type >, tbb::internal::two_phase_port< std:: [...]
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 3, OutputTuple >::type >, tbb::internal::two_phase_port< std:: [...]
+</ul>
+<li><a class="el" href="a00260.html">tbb::null_mutex</a>
+<li><a class="el" href="a00261.html">tbb::null_mutex::scoped_lock</a>
+<li><a class="el" href="a00262.html">tbb::null_rw_mutex</a>
+<li><a class="el" href="a00263.html">tbb::null_rw_mutex::scoped_lock</a>
+<li><a class="el" href="a00264.html">tbb::parallel_do_feeder< Item ></a>
+<li><a class="el" href="a00265.html">tbb::parallel_while< Body ></a>
+<li><a class="el" href="a00266.html">tbb::pipeline</a>
+<li><a class="el" href="a00267.html">tbb::pre_scan_tag</a>
+<li><a class="el" href="a00270.html">tbb::queuing_mutex</a>
+<li><a class="el" href="a00271.html">tbb::queuing_mutex::scoped_lock</a>
+<li><a class="el" href="a00272.html">tbb::queuing_rw_mutex</a>
+<li><a class="el" href="a00273.html">tbb::queuing_rw_mutex::scoped_lock</a>
+<li><a class="el" href="a00274.html">tbb::interface5::reader_writer_lock</a>
+<li><a class="el" href="a00275.html">tbb::interface5::reader_writer_lock::scoped_lock</a>
+<li><a class="el" href="a00276.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a>
+<li><a class="el" href="a00277.html">tbb::receiver< T ></a>
+<ul>
+<li><a class="el" href="a00224.html">tbb::broadcast_node< T ></a>
+<li><a class="el" href="a00225.html">tbb::buffer_node< T ></a>
+<li><a class="el" href="a00241.html">tbb::continue_receiver</a>
+<li><a class="el" href="a00304.html">tbb::internal::two_phase_port< T ></a>
+<li><a class="el" href="a00255.html">tbb::limiter_node< T ></a>
+</ul>
+<li><a class="el" href="a00277.html">tbb::receiver< tbb::continue_msg ></a>
+<li><a class="el" href="a00278.html">tbb::recursive_mutex</a>
+<li><a class="el" href="a00279.html">tbb::recursive_mutex::scoped_lock</a>
+<li><a class="el" href="a00280.html">tbb::scalable_allocator< T ></a>
+<li><a class="el" href="a00281.html">tbb::scalable_allocator< void ></a>
+<li><a class="el" href="a00282.html">tbb::sender< T ></a>
+<ul>
+<li><a class="el" href="a00224.html">tbb::broadcast_node< T ></a>
+<li><a class="el" href="a00225.html">tbb::buffer_node< T ></a>
+<li><a class="el" href="a00255.html">tbb::limiter_node< T ></a>
+</ul>
+<li><a class="el" href="a00282.html">tbb::sender< Output ></a>
 <ul>
-<li><a class="el" href="a00162.html">tbb::empty_task</a>
-</ul>
-<li><a class="el" href="a00200.html">tbb::interface5::internal::task_base</a>
-<li><a class="el" href="a00201.html">tbb::task_group_context</a>
-<li><a class="el" href="a00202.html">tbb::task_list</a>
-<li><a class="el" href="a00203.html">tbb::task_scheduler_init</a>
-<li><a class="el" href="a00204.html">tbb::tbb_allocator< T ></a>
-<li><a class="el" href="a00205.html">tbb::tbb_allocator< void ></a>
-<li><a class="el" href="a00206.html">tbb::tbb_exception</a>
+<li><a class="el" href="a00285.html">tbb::source_node< Output ></a>
+</ul>
+<li><a class="el" href="a00282.html">tbb::sender< OutputTuple ></a>
+<ul>
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< JP, InputTuple, OutputTuple ></a>
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type > >, OutputTuple ></a>
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type > >, OutputTuple ></a>
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 3, OutputTuple >::type > >, OutputTuple ></a>
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 3, OutputTuple >::type >, tbb::internal::two_phase_port< std:: [...]
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 3, OutputTuple >::type >, tbb::internal::two_phase_port< std:: [...]
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 3, OutputTuple >::type >, tbb::internal::two_phase_port< std:: [...]
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 3, OutputTuple >::type >, tbb::internal::two_phase_port< std:: [...]
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 3, OutputTuple >::type >, tbb::internal::two_phase_port< std:: [...]
+<li><a class="el" href="a00254.html">tbb::internal::join_node_base< two_phase, std::tuple< tbb::internal::two_phase_port< std::tuple_element< 0, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 1, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 2, OutputTuple >::type >, tbb::internal::two_phase_port< std::tuple_element< 3, OutputTuple >::type >, tbb::internal::two_phase_port< std:: [...]
+</ul>
+<li><a class="el" href="a00284.html">tbb::simple_partitioner</a>
+<li><a class="el" href="a00286.html">tbb::spin_mutex</a>
+<li><a class="el" href="a00287.html">tbb::spin_mutex::scoped_lock</a>
+<li><a class="el" href="a00288.html">tbb::spin_rw_mutex_v3</a>
+<li><a class="el" href="a00289.html">tbb::spin_rw_mutex_v3::scoped_lock</a>
+<li><a class="el" href="a00290.html">tbb::split</a>
+<li><a class="el" href="a00291.html">tbb::task</a>
+<ul>
+<li><a class="el" href="a00242.html">tbb::empty_task</a>
+</ul>
+<li><a class="el" href="a00292.html">tbb::interface5::internal::task_base</a>
+<li><a class="el" href="a00293.html">tbb::task_group_context</a>
+<li><a class="el" href="a00294.html">tbb::task_list</a>
+<li><a class="el" href="a00295.html">tbb::task_scheduler_init</a>
+<li><a class="el" href="a00296.html">tbb::tbb_allocator< T ></a>
+<li><a class="el" href="a00297.html">tbb::tbb_allocator< void ></a>
+<li><a class="el" href="a00298.html">tbb::tbb_exception</a>
 <ul>
-<li><a class="el" href="a00152.html">tbb::captured_exception</a>
-<li><a class="el" href="a00171.html">tbb::movable_exception< ExceptionData ></a>
+<li><a class="el" href="a00228.html">tbb::captured_exception</a>
+<li><a class="el" href="a00257.html">tbb::movable_exception< ExceptionData ></a>
 </ul>
-<li><a class="el" href="a00207.html">tbb::internal::tbb_exception_ptr</a>
-<li><a class="el" href="a00208.html">tbb::tbb_hash_compare< Key ></a>
-<li><a class="el" href="a00210.html">tbb::tick_count</a>
-<li><a class="el" href="a00211.html">tbb::tick_count::interval_t</a>
-<li><a class="el" href="a00212.html">tbb::internal::work_around_alignment_bug< Size, T ></a>
-<li><a class="el" href="a00213.html">tbb::zero_allocator< T, Allocator ></a>
-<li><a class="el" href="a00214.html">tbb::zero_allocator< void, Allocator ></a>
+<li><a class="el" href="a00299.html">tbb::internal::tbb_exception_ptr</a>
+<li><a class="el" href="a00300.html">tbb::tbb_hash_compare< Key ></a>
+<li><a class="el" href="a00302.html">tbb::tick_count</a>
+<li><a class="el" href="a00303.html">tbb::tick_count::interval_t</a>
+<li><a class="el" href="a00305.html">tbb::internal::work_around_alignment_bug< Size, T ></a>
+<li><a class="el" href="a00306.html">tbb::zero_allocator< T, Allocator ></a>
+<li><a class="el" href="a00307.html">tbb::zero_allocator< void, Allocator ></a>
 </ul>
 <hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/index.html b/doc/html/index.html
index b41f471..a26945c 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-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/modules.html b/doc/html/modules.html
index 6401481..f80ae48 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="a00275.html">Algorithms</a>
-<li><a class="el" href="a00276.html">Containers</a>
-<li><a class="el" href="a00277.html">Memory Allocation</a>
-<li><a class="el" href="a00278.html">Synchronization</a>
-<li><a class="el" href="a00279.html">Timing</a>
-<li><a class="el" href="a00280.html">Task Scheduling</a>
+<li><a class="el" href="a00371.html">Algorithms</a>
+<li><a class="el" href="a00372.html">Containers</a>
+<li><a class="el" href="a00373.html">Memory Allocation</a>
+<li><a class="el" href="a00374.html">Synchronization</a>
+<li><a class="el" href="a00375.html">Timing</a>
+<li><a class="el" href="a00376.html">Task Scheduling</a>
 </ul>
 <hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/namespacemembers.html b/doc/html/namespacemembers.html
index 4f7a719..b79d04c 100644
--- a/doc/html/namespacemembers.html
+++ b/doc/html/namespacemembers.html
@@ -32,26 +32,29 @@ 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="a00267.html#ad165cf61abbe349d413df2589679add">tbb</a><li>__TBB_full_fence
-: <a class="el" href="a00267.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">tbb</a><li>acquire
-: <a class="el" href="a00267.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">tbb</a><li>assertion_failure()
-: <a class="el" href="a00267.html#3d1252787be39b4aef311f1cadaff9e8">tbb</a><li>assertion_handler_type
-: <a class="el" href="a00267.html#ed375248ff6019a70ca0f9da528e5d0b">tbb</a><li>ets_key_usage_type
-: <a class="el" href="a00267.html#a8622ae61b7e7737dac26542e181178e">tbb</a><li>memory_semantics
-: <a class="el" href="a00267.html#a8686246bb5d3664bd07563749970fef">tbb</a><li>parallel_do()
-: <a class="el" href="a00275.html#g2617dc9b88b3285a7212599d49f74228">tbb</a><li>parallel_for()
-: <a class="el" href="a00274.html#490399525b1e690ec31d6db964c6b272">tbb::strict_ppl</a>, <a class="el" href="a00275.html#g04b4696b67370c01353ff5974c8f1196">tbb</a><li>parallel_for_each()
-: <a class="el" href="a00275.html#gc2d710ca573f0a9bd94379cba3772def">tbb</a><li>parallel_invoke()
-: <a class="el" href="a00275.html#gd3e2998f171494f94c2103f4eb924084">tbb</a><li>parallel_reduce()
-: <a class="el" href="a00275.html#g496bd7eadb3b97495ccb5655ef90319e">tbb</a><li>parallel_scan()
-: <a class="el" href="a00275.html#g62fde400a37bbca1a2fddc8e3d22f556">tbb</a><li>parallel_sort()
-: <a class="el" href="a00275.html#gc7576f82fdedc8a701a6c17ad9415926">tbb</a><li>release
-: <a class="el" href="a00267.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">tbb</a><li>set_assertion_handler()
-: <a class="el" href="a00267.html#823fa1c15dd829d1d9167157450ddcd9">tbb</a><li>TBB_runtime_interface_version()
-: <a class="el" href="a00267.html#a6858b22e90041c9c4669674ff39b056">tbb</a></ul>
+: <a class="el" href="a00362.html#ad165cf61abbe349d413df2589679add">tbb</a><li>__TBB_full_fence
+: <a class="el" href="a00362.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">tbb</a><li>acquire
+: <a class="el" href="a00362.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">tbb</a><li>assertion_failure()
+: <a class="el" href="a00362.html#3d1252787be39b4aef311f1cadaff9e8">tbb</a><li>assertion_handler_type
+: <a class="el" href="a00362.html#ed375248ff6019a70ca0f9da528e5d0b">tbb</a><li>atomic_fence()
+: <a class="el" href="a00362.html#250275615f10d5b5de6ad466ae2f54de">tbb</a><li>ets_key_usage_type
+: <a class="el" href="a00362.html#a8622ae61b7e7737dac26542e181178e">tbb</a><li>make_edge()
+: <a class="el" href="a00362.html#0a5a2559e7d28a9bf8f9e5e60d745e86">tbb</a><li>make_edges()
+: <a class="el" href="a00362.html#9368d2f689961f790bf7aa4a8cc1135e">tbb</a><li>memory_semantics
+: <a class="el" href="a00362.html#a8686246bb5d3664bd07563749970fef">tbb</a><li>parallel_do()
+: <a class="el" href="a00371.html#g2617dc9b88b3285a7212599d49f74228">tbb</a><li>parallel_for()
+: <a class="el" href="a00370.html#490399525b1e690ec31d6db964c6b272">tbb::strict_ppl</a>, <a class="el" href="a00371.html#g04b4696b67370c01353ff5974c8f1196">tbb</a><li>parallel_for_each()
+: <a class="el" href="a00371.html#gc2d710ca573f0a9bd94379cba3772def">tbb</a><li>parallel_invoke()
+: <a class="el" href="a00371.html#gd3e2998f171494f94c2103f4eb924084">tbb</a><li>parallel_reduce()
+: <a class="el" href="a00371.html#g496bd7eadb3b97495ccb5655ef90319e">tbb</a><li>parallel_scan()
+: <a class="el" href="a00371.html#g62fde400a37bbca1a2fddc8e3d22f556">tbb</a><li>parallel_sort()
+: <a class="el" href="a00371.html#gc7576f82fdedc8a701a6c17ad9415926">tbb</a><li>release
+: <a class="el" href="a00362.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">tbb</a><li>set_assertion_handler()
+: <a class="el" href="a00362.html#823fa1c15dd829d1d9167157450ddcd9">tbb</a><li>TBB_runtime_interface_version()
+: <a class="el" href="a00362.html#a6858b22e90041c9c4669674ff39b056">tbb</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/namespacemembers_enum.html b/doc/html/namespacemembers_enum.html
index 9b6ead3..9b77301 100644
--- a/doc/html/namespacemembers_enum.html
+++ b/doc/html/namespacemembers_enum.html
@@ -32,11 +32,11 @@
 <p>
 <ul>
 <li>ets_key_usage_type
-: <a class="el" href="a00267.html#a8622ae61b7e7737dac26542e181178e">tbb</a><li>memory_semantics
-: <a class="el" href="a00267.html#a8686246bb5d3664bd07563749970fef">tbb</a></ul>
+: <a class="el" href="a00362.html#a8622ae61b7e7737dac26542e181178e">tbb</a><li>memory_semantics
+: <a class="el" href="a00362.html#a8686246bb5d3664bd07563749970fef">tbb</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/namespacemembers_eval.html b/doc/html/namespacemembers_eval.html
index 48292ad..f4ac168 100644
--- a/doc/html/namespacemembers_eval.html
+++ b/doc/html/namespacemembers_eval.html
@@ -32,12 +32,12 @@
 <p>
 <ul>
 <li>__TBB_full_fence
-: <a class="el" href="a00267.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">tbb</a><li>acquire
-: <a class="el" href="a00267.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">tbb</a><li>release
-: <a class="el" href="a00267.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">tbb</a></ul>
+: <a class="el" href="a00362.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">tbb</a><li>acquire
+: <a class="el" href="a00362.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">tbb</a><li>release
+: <a class="el" href="a00362.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">tbb</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/namespacemembers_func.html b/doc/html/namespacemembers_func.html
index fe506d0..022da27 100644
--- a/doc/html/namespacemembers_func.html
+++ b/doc/html/namespacemembers_func.html
@@ -32,20 +32,23 @@
 <p>
 <ul>
 <li>__TBB_DECL_ATOMIC_ALT()
-: <a class="el" href="a00267.html#ad165cf61abbe349d413df2589679add">tbb</a><li>assertion_failure()
-: <a class="el" href="a00267.html#3d1252787be39b4aef311f1cadaff9e8">tbb</a><li>parallel_do()
-: <a class="el" href="a00275.html#g2617dc9b88b3285a7212599d49f74228">tbb</a><li>parallel_for()
-: <a class="el" href="a00274.html#490399525b1e690ec31d6db964c6b272">tbb::strict_ppl</a>, <a class="el" href="a00275.html#g04b4696b67370c01353ff5974c8f1196">tbb</a><li>parallel_for_each()
-: <a class="el" href="a00275.html#gc2d710ca573f0a9bd94379cba3772def">tbb</a><li>parallel_invoke()
-: <a class="el" href="a00275.html#gd3e2998f171494f94c2103f4eb924084">tbb</a><li>parallel_reduce()
-: <a class="el" href="a00275.html#g496bd7eadb3b97495ccb5655ef90319e">tbb</a><li>parallel_scan()
-: <a class="el" href="a00275.html#g62fde400a37bbca1a2fddc8e3d22f556">tbb</a><li>parallel_sort()
-: <a class="el" href="a00275.html#gc7576f82fdedc8a701a6c17ad9415926">tbb</a><li>set_assertion_handler()
-: <a class="el" href="a00267.html#823fa1c15dd829d1d9167157450ddcd9">tbb</a><li>TBB_runtime_interface_version()
-: <a class="el" href="a00267.html#a6858b22e90041c9c4669674ff39b056">tbb</a></ul>
+: <a class="el" href="a00362.html#ad165cf61abbe349d413df2589679add">tbb</a><li>assertion_failure()
+: <a class="el" href="a00362.html#3d1252787be39b4aef311f1cadaff9e8">tbb</a><li>atomic_fence()
+: <a class="el" href="a00362.html#250275615f10d5b5de6ad466ae2f54de">tbb</a><li>make_edge()
+: <a class="el" href="a00362.html#0a5a2559e7d28a9bf8f9e5e60d745e86">tbb</a><li>make_edges()
+: <a class="el" href="a00362.html#9368d2f689961f790bf7aa4a8cc1135e">tbb</a><li>parallel_do()
+: <a class="el" href="a00371.html#g2617dc9b88b3285a7212599d49f74228">tbb</a><li>parallel_for()
+: <a class="el" href="a00370.html#490399525b1e690ec31d6db964c6b272">tbb::strict_ppl</a>, <a class="el" href="a00371.html#g04b4696b67370c01353ff5974c8f1196">tbb</a><li>parallel_for_each()
+: <a class="el" href="a00371.html#gc2d710ca573f0a9bd94379cba3772def">tbb</a><li>parallel_invoke()
+: <a class="el" href="a00371.html#gd3e2998f171494f94c2103f4eb924084">tbb</a><li>parallel_reduce()
+: <a class="el" href="a00371.html#g496bd7eadb3b97495ccb5655ef90319e">tbb</a><li>parallel_scan()
+: <a class="el" href="a00371.html#g62fde400a37bbca1a2fddc8e3d22f556">tbb</a><li>parallel_sort()
+: <a class="el" href="a00371.html#gc7576f82fdedc8a701a6c17ad9415926">tbb</a><li>set_assertion_handler()
+: <a class="el" href="a00362.html#823fa1c15dd829d1d9167157450ddcd9">tbb</a><li>TBB_runtime_interface_version()
+: <a class="el" href="a00362.html#a6858b22e90041c9c4669674ff39b056">tbb</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/namespacemembers_type.html b/doc/html/namespacemembers_type.html
index 8cee2cb..fe239ae 100644
--- a/doc/html/namespacemembers_type.html
+++ b/doc/html/namespacemembers_type.html
@@ -32,10 +32,10 @@
 <p>
 <ul>
 <li>assertion_handler_type
-: <a class="el" href="a00267.html#ed375248ff6019a70ca0f9da528e5d0b">tbb</a></ul>
+: <a class="el" href="a00362.html#ed375248ff6019a70ca0f9da528e5d0b">tbb</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/namespaces.html b/doc/html/namespaces.html
index a2b9cd2..eb030d5 100644
--- a/doc/html/namespaces.html
+++ b/doc/html/namespaces.html
@@ -20,12 +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="a00267.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="a00274.html">tbb::strict_ppl</a></td><td class="indexvalue">For internal use only </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00362.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="a00370.html">tbb::strict_ppl</a></td><td class="indexvalue">For internal use only </td></tr>
 </table>
 <hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/pages.html b/doc/html/pages.html
index e2061d1..09078f3 100644
--- a/doc/html/pages.html
+++ b/doc/html/pages.html
@@ -22,7 +22,7 @@
 </ul>
 <hr>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/parallel_do_body_req.html b/doc/html/parallel_do_body_req.html
index a434c11..3d2dbc3 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-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/parallel_for_body_req.html b/doc/html/parallel_for_body_req.html
index 8a7fa48..9ccf4e9 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-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/parallel_reduce_body_req.html b/doc/html/parallel_reduce_body_req.html
index e152812..9284f5d 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-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/parallel_reduce_lambda_req.html b/doc/html/parallel_reduce_lambda_req.html
index 9892b0c..32bef4c 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-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/parallel_scan_body_req.html b/doc/html/parallel_scan_body_req.html
index 861bb6e..9a7908b 100644
--- a/doc/html/parallel_scan_body_req.html
+++ b/doc/html/parallel_scan_body_req.html
@@ -16,14 +16,14 @@
   </ul></div>
 <div class="nav">
 <a class="el" href="index.html">Main Page</a> &raquo <a class="el" href="concepts.html">TBB concepts</a></div>
-<h1><a class="anchor" name="parallel_scan_body_req">Requirements on parallel_scan body</a></h1>Class <code>Body</code> implementing the concept of parallel_reduce body must define: -<div class="fragment"><pre class="fragment"> Body::Body( Body&, split ); 
+<h1><a class="anchor" name="parallel_scan_body_req">Requirements on parallel_scan body</a></h1>Class <code>Body</code> implementing the concept of parallel_scan body must define: -<div class="fragment"><pre class="fragment"> Body::Body( Body&, split ); 
 </pre></div> Splitting constructor. Split <code>b</code> so that <code>this</code> and <code>b</code> can accumulate separately -<div class="fragment"><pre class="fragment"> Body::~Body(); 
 </pre></div> Destructor -<div class="fragment"><pre class="fragment"> <span class="keywordtype">void</span> Body::operator()( <span class="keyword">const</span> Range& r, pre_scan_tag ); 
 </pre></div> Preprocess iterations for range <code>r</code> -<div class="fragment"><pre class="fragment"> <span class="keywordtype">void</span> Body::operator()( <span class="keyword">const</span> Range& r, final_scan_tag ); 
 </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-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/parallel_sort_iter_req.html b/doc/html/parallel_sort_iter_req.html
index df61866..8bda7f8 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-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/doc/html/range_req.html b/doc/html/range_req.html
index a8f667d..68fbcb6 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-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/examples/GettingStarted/index.html b/examples/GettingStarted/index.html
index 893945e..bf756eb 100644
--- a/examples/GettingStarted/index.html
+++ b/examples/GettingStarted/index.html
@@ -13,7 +13,7 @@ This directory contains the examples referenced by the Threading Building Blocks
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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 
diff --git a/examples/GettingStarted/sub_string_finder/Makefile b/examples/GettingStarted/sub_string_finder/Makefile
index c234e3d..83e220b 100644
--- a/examples/GettingStarted/sub_string_finder/Makefile
+++ b/examples/GettingStarted/sub_string_finder/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/GettingStarted/sub_string_finder/Makefile.windows b/examples/GettingStarted/sub_string_finder/Makefile.windows
index 9b81760..f0719d6 100644
--- a/examples/GettingStarted/sub_string_finder/Makefile.windows
+++ b/examples/GettingStarted/sub_string_finder/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -34,7 +34,7 @@ CXX1 = $(TBB_CXX)-
 CXX2 = $(CXX1:icl.exe-=icl.exe)
 CXX  = $(CXX2:-=cl.exe)
 
-MYCXXFLAGS = /TP /EHsc /W3 /nologo $(TBB_SECURITY_SWITCH) /D _CONSOLE /D _MBCS /D WIN32 $(CXXFLAGS)
+MYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 $(CXXFLAGS)
 MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)
 
 all: release test
diff --git a/examples/GettingStarted/sub_string_finder/index.html b/examples/GettingStarted/sub_string_finder/index.html
index 4c208e9..8dc50f2 100644
--- a/examples/GettingStarted/sub_string_finder/index.html
+++ b/examples/GettingStarted/sub_string_finder/index.html
@@ -50,7 +50,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-2010 Intel Corporation.  All Rights Reserved.
+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 
diff --git a/examples/GettingStarted/sub_string_finder/sub_string_finder.cpp b/examples/GettingStarted/sub_string_finder/sub_string_finder.cpp
index e7298ca..22dc310 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-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -68,14 +68,15 @@ int main() {
   string str[N] = { string("a"), string("b") };
   for (size_t i = 2; i < N; ++i) str[i] = str[i-1]+str[i-2];
   string &to_scan = str[N-1]; 
+  size_t num_elem = to_scan.size();
 
-  size_t *max = new size_t[to_scan.size()];
-  size_t *pos = new size_t[to_scan.size()];
+  size_t *max = new size_t[num_elem];
+  size_t *pos = new size_t[num_elem];
 
-  parallel_for(blocked_range<size_t>(0, to_scan.size() ),
+  parallel_for(blocked_range<size_t>(0, num_elem ),
                SubStringFinder( to_scan, max, pos ) );
 
-  for (size_t i = 0; i < to_scan.size(); ++i)
+  for (size_t i = 0; i < num_elem; ++i)
     cout << " " << max[i] << "(" << pos[i] << ")" << endl;
   delete[] pos;
   delete[] max;
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 6321d1a..8ca1049 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-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -26,6 +26,7 @@
     the GNU General Public License.
 */
 
+
 #include <iostream>
 #include <string>
 #include <algorithm>
@@ -34,6 +35,7 @@
 #include "tbb/blocked_range.h"
 #include "tbb/tick_count.h"
 
+
 using namespace tbb;
 using namespace std;
 static const size_t N = 22;
@@ -90,11 +92,12 @@ int main(int argc, char *argv[]) {
  string str[N] = { string("a"), string("b") };
  for (size_t i = 2; i < N; ++i) str[i] = str[i-1]+str[i-2];
  string &to_scan = str[N-1]; 
+ size_t num_elem = to_scan.size();
 
- size_t *max = new size_t[to_scan.size()];
- size_t *max2 = new size_t[to_scan.size()];
- size_t *pos = new size_t[to_scan.size()];
- size_t *pos2 = new size_t[to_scan.size()];
+ size_t *max = new size_t[num_elem];
+ size_t *max2 = new size_t[num_elem];
+ size_t *pos = new size_t[num_elem];
+ size_t *pos2 = new size_t[num_elem];
  cout << " Done building string." << endl;
 
  
@@ -104,12 +107,12 @@ int main(int argc, char *argv[]) {
  cout << " Done with serial version." << endl;
 
  tick_count parallel_t0 = tick_count::now();
- parallel_for(blocked_range<size_t>(0, to_scan.size(), 100),
+ parallel_for(blocked_range<size_t>(0, num_elem, 100),
        SubStringFinder( to_scan, max, pos ) );
  tick_count parallel_t1 = tick_count::now();
  cout << " Done with parallel version." << endl;
 
- for (size_t i = 0; i < to_scan.size(); ++i) {
+ for (size_t i = 0; i < num_elem; ++i) {
    if (max[i] != max2[i] || pos[i] != pos2[i]) {
      cout << "ERROR: Serial and Parallel Results are Different!" << endl;
    }
@@ -119,6 +122,8 @@ int main(int argc, char *argv[]) {
  cout << "Serial version ran in " << (serial_t1 - serial_t0).seconds() << " seconds" << endl
            << "Parallel version ran in " <<  (parallel_t1 - parallel_t0).seconds() << " seconds" << endl
            << "Resulting in a speedup of " << (serial_t1 - serial_t0).seconds() / (parallel_t1 - parallel_t0).seconds() << endl;
+
+
  delete[] max;
  delete[] pos;
  delete[] max2;
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 fc9a372..a228fe7 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-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -69,22 +69,23 @@ int main(int argc, char *argv[]) {
  std::string str[N] = { std::string("a"), std::string("b") };
  for (size_t i = 2; i < N; ++i) str[i] = str[i-1]+str[i-2];
  std::string &to_scan = str[N-1]; 
+ size_t num_elem = to_scan.size();
  std::cout << "String to scan: " << to_scan << std::endl;
 
- size_t *max = new size_t[to_scan.size()];
- size_t *pos = new size_t[to_scan.size()];
+ size_t *max = new size_t[num_elem];
+ size_t *pos = new size_t[num_elem];
 
- parallel_for(blocked_range<size_t>(0, to_scan.size(), 100),
+ parallel_for(blocked_range<size_t>(0, num_elem, 100),
        SubStringFinder( to_scan, max, pos ) );
 
- for (size_t i = 0; i < to_scan.size(); ++i) {
-   for (size_t j = 0; j < to_scan.size(); ++j) {
+ for (size_t i = 0; i < num_elem; ++i) {
+   for (size_t j = 0; j < num_elem; ++j) {
      if (j >= i && j < i + max[i]) std::cout << "_";
      else std::cout << " ";
    } 
    std::cout << std::endl << to_scan << std::endl;
 
-   for (size_t j = 0; j < to_scan.size(); ++j) {
+   for (size_t j = 0; j < num_elem; ++j) {
      if (j >= pos[i] && j < pos[i] + max[i]) std::cout << "*";
      else std::cout << " ";
    }
diff --git a/examples/GettingStarted/sub_string_finder/xcode/sub_string_finder.xcodeproj/project.pbxproj b/examples/GettingStarted/sub_string_finder/xcode/sub_string_finder.xcodeproj/project.pbxproj
index 1101c2d..e487e98 100644
--- a/examples/GettingStarted/sub_string_finder/xcode/sub_string_finder.xcodeproj/project.pbxproj
+++ b/examples/GettingStarted/sub_string_finder/xcode/sub_string_finder.xcodeproj/project.pbxproj
@@ -54,7 +54,7 @@
 /* Begin PBXFileReference section */
 		8DD76F6C0486A84900D96B5E /* sub_string_finder */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = sub_string_finder; sourceTree = BUILT_PRODUCTS_DIR; };
 		A1F593A50B8F042A00073279 /* sub_string_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = sub_string_finder.cpp; path = ../sub_string_finder.cpp; sourceTree = SOURCE_ROOT; };
-		A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
+		A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; };
 		A1F5940A0B8F1D8E00073279 /* sub_string_finder_pretty */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = sub_string_finder_pretty; sourceTree = BUILT_PRODUCTS_DIR; };
 		A1F594110B8F1E0C00073279 /* sub_string_finder_pretty.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = sub_string_finder_pretty.cpp; path = ../sub_string_finder_pretty.cpp; sourceTree = SOURCE_ROOT; };
 		A1F5941B0B8F1F0900073279 /* sub_string_finder_extended */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = sub_string_finder_extended; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -237,12 +237,12 @@
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = sub_string_finder;
 				ZERO_LINK = NO;
 			};
@@ -253,12 +253,12 @@
 			buildSettings = {
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = sub_string_finder;
 				ZERO_LINK = NO;
 			};
@@ -306,12 +306,12 @@
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = sub_string_finder;
 				ZERO_LINK = NO;
 			};
@@ -324,12 +324,12 @@
 				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = sub_string_finder;
 				ZERO_LINK = NO;
 			};
@@ -386,12 +386,12 @@
 				GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PREBINDING = NO;
 				PRODUCT_NAME = sub_string_finder_pretty;
 				ZERO_LINK = NO;
@@ -408,12 +408,12 @@
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PREBINDING = NO;
 				PRODUCT_NAME = sub_string_finder_pretty;
 				ZERO_LINK = NO;
@@ -427,12 +427,12 @@
 				GCC_ENABLE_FIX_AND_CONTINUE = NO;
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PREBINDING = NO;
 				PRODUCT_NAME = sub_string_finder_pretty;
 				ZERO_LINK = NO;
@@ -446,12 +446,12 @@
 				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PREBINDING = NO;
 				PRODUCT_NAME = sub_string_finder_pretty;
 				ZERO_LINK = NO;
@@ -467,12 +467,12 @@
 				GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PREBINDING = NO;
 				PRODUCT_NAME = sub_string_finder_extended;
 				ZERO_LINK = NO;
@@ -489,12 +489,12 @@
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PREBINDING = NO;
 				PRODUCT_NAME = sub_string_finder_extended;
 				ZERO_LINK = NO;
@@ -508,12 +508,12 @@
 				GCC_ENABLE_FIX_AND_CONTINUE = NO;
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PREBINDING = NO;
 				PRODUCT_NAME = sub_string_finder_extended;
 				ZERO_LINK = NO;
@@ -527,12 +527,12 @@
 				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PREBINDING = NO;
 				PRODUCT_NAME = sub_string_finder_extended;
 				ZERO_LINK = NO;
diff --git a/examples/Makefile b/examples/Makefile
index 48d146f..018d5e0 100644
--- a/examples/Makefile
+++ b/examples/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -133,7 +133,7 @@ $(COMMON_TARGETS):: % : $(addsuffix %,$(EXAMPLES_DIRS))
 
 # proxy rule for calling appropriate example
 $(EXAMPLES_TARGETS)::
-	-$(MAKE) -C $(@D)  -f $(EXAMPLE_MAKEFILE) $(notdir $@) CXX="$(CPLUS)" CXXFLAGS="$(CXXFLAGS)"
+	-$(MAKE) SHELL=$(SHELL) -C $(@D)  -f $(EXAMPLE_MAKEFILE) $(notdir $@) CXX="$(CPLUS)" CXXFLAGS="$(CXXFLAGS)"
 
 printenv:
 ifeq ($(tbb_os),windows)
diff --git a/examples/common/copy_libraries.bat b/examples/common/copy_libraries.bat
index 3201273..adbf1b1 100644
--- a/examples/common/copy_libraries.bat
+++ b/examples/common/copy_libraries.bat
@@ -1,6 +1,6 @@
 @echo off
 REM
-REM Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+REM Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 REM
 REM This file is part of Threading Building Blocks.
 REM
@@ -35,6 +35,11 @@ set arch=%1
 if ("%2") == ("debug") set postfix=_debug
 set output_dir=%3
 
+:: Optional 4th parameter to set install root
+if ("%4") NEQ ("") set TBB30_INSTALL_DIR=%4
+:: Actually we can set install root by ourselves
+if ("%TBB30_INSTALL_DIR%") == ("") set TBB30_INSTALL_DIR=%~d0%~p0..\..\
+
 :: Getting vs folders in case vc_mt binaries are not provided
 if ("%VS80COMNTOOLS%")  NEQ ("") set vc_dir=vc8
 if ("%VS90COMNTOOLS%")  NEQ ("") set vc_dir=vc9
@@ -56,6 +61,8 @@ copy "%TBB30_INSTALL_DIR%\%interim_path%\%vc_dir%\tbb%postfix%.dll" "%output_dir
 copy "%TBB30_INSTALL_DIR%\%interim_path%\%vc_dir%\tbb%postfix%.pdb" "%output_dir%"
 copy "%TBB30_INSTALL_DIR%\%interim_path%\%vc_dir%\tbbmalloc%postfix%.dll" "%output_dir%"
 copy "%TBB30_INSTALL_DIR%\%interim_path%\%vc_dir%\tbbmalloc%postfix%.pdb" "%output_dir%"
+if exist "%TBB30_INSTALL_DIR%\%interim_path%\%vc_dir%\tbb_preview%postfix%.dll" copy "%TBB30_INSTALL_DIR%\%interim_path%\%vc_dir%\tbb_preview%postfix%.dll" "%output_dir%"
+if exist "%TBB30_INSTALL_DIR%\%interim_path%\%vc_dir%\tbb_preview%postfix%.pdb" copy "%TBB30_INSTALL_DIR%\%interim_path%\%vc_dir%\tbb_preview%postfix%.pdb" "%output_dir%"
 
 goto end
 :error
diff --git a/examples/common/gui/Makefile.gmake b/examples/common/gui/Makefile.gmake
index c5b9f94..4f27a11 100644
--- a/examples/common/gui/Makefile.gmake
+++ b/examples/common/gui/Makefile.gmake
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/common/gui/Makefile.win b/examples/common/gui/Makefile.win
index 8ff6641..9a9515b 100644
--- a/examples/common/gui/Makefile.win
+++ b/examples/common/gui/Makefile.win
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -27,7 +27,7 @@
 # Per-build Makefile rules (for recursive $(MAKE) calls from Makefile)
 
 # Base compile/link options
-MYCXXFLAGS = /nologo $(TBB_SECURITY_SWITCH) /EHsc /Zc:forScope /D WIN32 /D _MBCS /D _CRT_SECURE_NO_DEPRECATE $(CXXFLAGS)
+MYCXXFLAGS = /nologo /EHsc /Zc:forScope /D WIN32 /D _MBCS /D _CRT_SECURE_NO_DEPRECATE $(CXXFLAGS)
 MYLFLAGS = /link /incremental:no /fixed:no $(LFLAGS)
 CXXFLAGS_NDEBUG = /MD /O2 /Ot /Gy /D NDEBUG
 CXXFLAGS_DEBUG = /MDd /Od /Zi /D _DEBUG
diff --git a/examples/common/gui/convideo.cpp b/examples/common/gui/convideo.cpp
index b5e5285..9d02bc3 100644
--- a/examples/common/gui/convideo.cpp
+++ b/examples/common/gui/convideo.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -135,4 +135,4 @@ drawing_area::drawing_area(int x, int y, int sizex, int sizey)
     index = base_index; // current index
 }
 
-drawing_area::~drawing_area() {}
+void drawing_area::update() {}
diff --git a/examples/common/gui/ddvideo.cpp b/examples/common/gui/ddvideo.cpp
index 8ef0ee5..f837470 100644
--- a/examples/common/gui/ddvideo.cpp
+++ b/examples/common/gui/ddvideo.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -505,7 +505,7 @@ DWORD WINAPI thread_vsync(LPVOID lpParameter)
 
 ///////////////////////////////////////////// public methods of video class ///////////////////////
 
-inline void mask2bits(unsigned int mask, color_t &save, char &shift)
+inline void mask2bits(unsigned int mask, color_t &save, depth_t &shift)
 {
     save  = mask; if(!mask) { shift = 8; return; }
     shift = 0; while(!(mask&1)) ++shift, mask >>= 1;
@@ -535,8 +535,8 @@ bool video::init_window(int sizex, int sizey)
     mask2bits(PixelFormat.dwGBitMask, green_mask, green_shift);
     mask2bits(PixelFormat.dwBBitMask, blue_mask, blue_shift);
     if(PixelFormat.dwFlags == DDPF_RGB)
-         depth = char(PixelFormat.dwRGBBitCount);
-    else depth = -char(PixelFormat.dwFourCC);
+         depth = depth_t(PixelFormat.dwRGBBitCount);
+    else depth = -depth_t(PixelFormat.dwFourCC);
     for(int i = 0, e = sizex * sizey * PixelFormat.dwRGBBitCount / 32, c = get_color(0, 0, 0); i < e; i++)
         g_pImg[i] = c; // clear surface
     ShowWindow(g_hAppWnd, SW_SHOW);
@@ -575,6 +575,6 @@ drawing_area::drawing_area(int x, int y, int sizex, int sizey)
     index = base_index; // current index
 }
 
-drawing_area::~drawing_area()
+void drawing_area::update()
 {
 }
diff --git a/examples/common/gui/dxcheck.bat b/examples/common/gui/dxcheck.bat
index 879ab3d..e7013ed 100644
--- a/examples/common/gui/dxcheck.bat
+++ b/examples/common/gui/dxcheck.bat
@@ -1,6 +1,6 @@
 @echo off
 REM
-REM Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+REM Copyright 2005-2011 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 9b4caaf..f55813a 100644
--- a/examples/common/gui/gdivideo.cpp
+++ b/examples/common/gui/gdivideo.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -143,7 +143,7 @@ drawing_area::drawing_area(int x, int y, int sizex, int sizey)
     index = base_index; // current index
 }
 
-drawing_area::~drawing_area()
+void drawing_area::update()
 {
     if(g_video->updating) {
         RECT r;
diff --git a/examples/common/gui/macvideo.cpp b/examples/common/gui/macvideo.cpp
index 51fdb3d..17966e2 100644
--- a/examples/common/gui/macvideo.cpp
+++ b/examples/common/gui/macvideo.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -1488,4 +1488,4 @@ drawing_area::drawing_area(int x, int y, int sizex, int sizey)
     index = base_index; // current index
 }
 
-drawing_area::~drawing_area() {}
+void drawing_area::update() {}
diff --git a/examples/common/gui/video.h b/examples/common/gui/video.h
index 230603a..d969c4a 100644
--- a/examples/common/gui/video.h
+++ b/examples/common/gui/video.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -30,6 +30,11 @@
 #define __VIDEO_H__
 
 #include <cassert>
+#if _MSC_VER
+#include <stddef.h> // for uintptr_t
+#else
+#include <stdint.h> // for uintptr_t
+#endif
 #if _WIN32 || _WIN64
 #include <windows.h>
 #else
@@ -38,12 +43,33 @@
 
 typedef unsigned int color_t;
 typedef unsigned char colorcomp_t;
+typedef signed char depth_t;
+
+//! Class for getting access to drawing memory
+class drawing_memory
+{
+    // The address is kept as uintptr_t since
+    // the compiler could not offload a pointer
+    uintptr_t   my_address;
+public:
+    depth_t     pixel_depth;
+    int         sizex, sizey;
+    //! Get drawing memory
+    inline void* get_address() const { return reinterpret_cast<void*>(my_address); }
+    //! Get drawing memory size
+    inline int get_size() const { return ((pixel_depth>16) ? 4:2) * sizex * sizey; }
+    //! Set drawing memory
+    inline void set_address(void *mem) { my_address = reinterpret_cast<uintptr_t>(mem); }
+
+    friend class drawing_area;
+    friend class video;
+};
 
 //! Simple proxy class for managing of different video systems
 class video
 {
     //! colorspace information
-    char depth, red_shift, green_shift, blue_shift;
+    depth_t depth, red_shift, green_shift, blue_shift;
     color_t red_mask, green_mask, blue_mask;
     friend class drawing_area;
 
@@ -76,6 +102,8 @@ public:
     void show_title();
     //! translate RGB components into packed type
     inline color_t get_color(colorcomp_t red, colorcomp_t green, colorcomp_t blue) const;
+    //! Get drawing memory descriptor
+    inline drawing_memory get_drawing_memory() const;
 
     //! Mouse events handler.
     virtual void on_mouse(int x, int y, int key) { }
@@ -99,15 +127,18 @@ public:
 class drawing_area
 {
     const size_t base_index, max_index, index_stride;
-    const char pixel_depth;
+    const depth_t pixel_depth;
     unsigned int * const ptr32;
     size_t index;
 public:
     const int start_x, start_y, size_x, size_y;
-    //! constructor
+    //! constructors
     drawing_area(int x, int y, int sizex, int sizey);
+    inline drawing_area(int x, int y, int sizex, int sizey, const drawing_memory &dmem);
     //! destructor
-    ~drawing_area();
+    inline ~drawing_area();
+    //! update the image
+    void update();
     //! set current position. local_x could be bigger then size_x
     inline void set_pos(int local_x, int local_y);
     //! put pixel in current position with incremental address calculating to next right pixel
@@ -117,6 +148,20 @@ public:
         { set_pos(localx, localy); put_pixel(color); }
 };
 
+extern int g_sizex;
+extern int g_sizey;
+extern unsigned int *g_pImg;
+
+inline drawing_memory video::get_drawing_memory() const
+{
+    drawing_memory dmem;
+    dmem.pixel_depth = depth;
+    dmem.my_address = reinterpret_cast<uintptr_t>(g_pImg);
+    dmem.sizex = g_sizex;
+    dmem.sizey = g_sizey;
+    return dmem;
+}
+
 inline color_t video::get_color(colorcomp_t red, colorcomp_t green, colorcomp_t blue) const
 {
     if(red_shift == 16) // only for depth == 24 && red_shift > blue_shift
@@ -124,7 +169,7 @@ inline color_t video::get_color(colorcomp_t red, colorcomp_t green, colorcomp_t
     else if(depth >= 24)
         return (red<<red_shift) | (green<<green_shift) | (blue<<blue_shift);
     else if(depth > 0) {
-        register char bs = blue_shift, rs = red_shift;
+        register depth_t bs = blue_shift, rs = red_shift;
         if(blue_shift < 0) blue >>= -bs, bs = 0;
         else /*red_shift < 0*/ red >>= -rs, rs = 0;
         return (red<<rs)&red_mask | (green<<green_shift)&green_mask | (blue<<bs)&blue_mask;
@@ -138,6 +183,17 @@ inline color_t video::get_color(colorcomp_t red, colorcomp_t green, colorcomp_t
     }
 }
 
+inline drawing_area::drawing_area(int x, int y, int sizex, int sizey, const drawing_memory &dmem)
+    : start_x(x), start_y(y), size_x(sizex), size_y(sizey), pixel_depth(dmem.pixel_depth),
+    base_index(y*dmem.sizex + x), max_index(dmem.sizex*dmem.sizey), index_stride(dmem.sizex),
+    ptr32(reinterpret_cast<unsigned int*>(dmem.my_address))
+{
+    assert(x < dmem.sizex); assert(y < dmem.sizey);
+    assert(x+sizex <= dmem.sizex); assert(y+sizey <= dmem.sizey);
+
+    index = base_index; // current index
+}
+
 inline void drawing_area::set_pos(int local_x, int local_y)
 {
     index = base_index + local_x + local_y*index_stride;
@@ -155,6 +211,11 @@ inline void drawing_area::put_pixel(color_t color)
     }
 }
 
+inline drawing_area::~drawing_area()
+{
+    update();
+}
+
 #if defined(_WINDOWS) && (defined(VIDEO_WINMAIN) || defined(VIDEO_WINMAIN_ARGS) )
 #include <cstdlib>
 //! define WinMain for subsystem:windows.
diff --git a/examples/common/gui/winvideo.h b/examples/common/gui/winvideo.h
index 589706a..a5a22db 100644
--- a/examples/common/gui/winvideo.h
+++ b/examples/common/gui/winvideo.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/common/gui/xvideo.cpp b/examples/common/gui/xvideo.cpp
index 59b3781..acf99aa 100644
--- a/examples/common/gui/xvideo.cpp
+++ b/examples/common/gui/xvideo.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -26,10 +26,25 @@
     the GNU General Public License.
 */
 
-// Uncomment next line to disable shared memory features if you have not libXext
+// Uncomment next line to disable shared memory features if you do not have libXext
 // (http://www.xfree86.org/current/mit-shm.html)
 //#define X_NOSHMEM
 
+// Note that it may happen that the build environment supports the shared-memory extension
+// (so there's no build-time reason to disable the relevant code by defining X_NOSHMEM),
+// but that using shared memory still fails at run time.
+// This situation will (ultimately) cause the error handler set by XSetErrorHandler()
+// to be invoked with XErrorEvent::minor_code==X_ShmAttach. The code below tries to make
+// such a determination at XShmAttach() time, which seems plausible, but unfortunately
+// it has also been observed in a specific environment that the error may be reported
+// at a later time instead, even after video::init_window() has returned.
+// It is not clear whether this may happen in that way in any environment where it might
+// depend on the kind of display, e.g., local vs. over "ssh -X", so #define'ing X_NOSHMEM
+// may not always be the appropriate solution, therefore an environment variable
+// has been introduced to disable shared memory at run time.
+// A diagnostic has been added to advise the user about possible workarounds.
+// X_ShmAttach macro was changed to 1 due to recent changes to X11/extensions/XShm.h header.
+
 #include "video.h"
 #include <string.h>
 #include <stdio.h>
@@ -50,6 +65,9 @@
 
 static XShmSegmentInfo shmseginfo;
 static Pixmap pixmap = 0;
+static bool already_called_X_ShmAttach = false;
+static bool already_advised_about_NOSHMEM_workarounds = false;
+static const char* NOSHMEM_env_var_name = "TBB_EXAMPLES_X_NOSHMEM";
 #endif
 static char *display_name = NULL;
 static Display *dpy = NULL;
@@ -63,9 +81,9 @@ static XGCValues xgcv;
 static XImage *ximage;
 static int x_error = 0;
 static int vidtype = 3;
-static int g_sizex, g_sizey;
+int g_sizex, g_sizey;
 static video *g_video = 0;
-static unsigned int *g_pImg = 0;
+unsigned int *g_pImg = 0;
 static int g_fps = 0;
 struct timeval g_time;
 static pthread_mutex_t g_mutex = PTHREAD_MUTEX_INITIALIZER;
@@ -79,7 +97,7 @@ video::video()
     g_video = this; title = "Video"; calc_fps = running = false; updating = true;
 }
 
-inline void mask2bits(unsigned int mask, unsigned int &save, char &shift)
+inline void mask2bits(unsigned int mask, unsigned int &save, depth_t &shift)
 {
     save  = mask; if(!mask) { shift = dispdepth/3; return; }
     shift = 0; while(!(mask&1)) ++shift, mask >>= 1;
@@ -87,10 +105,23 @@ inline void mask2bits(unsigned int mask, unsigned int &save, char &shift)
     shift += bits - 8;
 }
 
-int xerr_handler(Display*, XErrorEvent *error)
+int xerr_handler(Display* dpy_, XErrorEvent *error)
 {
     x_error = error->error_code;
     if(g_video) g_video->running = false;
+#ifndef X_NOSHMEM
+    if (error->minor_code==1/*X_ShmAttach*/ && already_called_X_ShmAttach && !already_advised_about_NOSHMEM_workarounds)
+    {
+        char err[256]; XGetErrorText(dpy_, x_error, err, 255);
+        fprintf(stderr, "Warning: Can't attach shared memory to display: %s (%d)\n", err, x_error);
+        fprintf(stderr, "If you are seeing a black output window, try setting %s environment variable to 1"
+                        " to disable shared memory extensions (0 to re-enable, other values undefined),"
+                        " or rebuilding with X_NOSHMEM defined in " __FILE__ "\n", NOSHMEM_env_var_name);
+        already_advised_about_NOSHMEM_workarounds = true;
+    }
+#else
+    (void) dpy_; // warning prevention
+#endif
     return 0;
 }
 
@@ -165,6 +196,9 @@ bool video::init_window(int xsize, int ysize)
     if(XShmQueryExtension(dpy) &&
        XShmQueryVersion(dpy, &major, &minor, &pixmaps))
     { // Shared memory
+        if(NULL!=getenv(NOSHMEM_env_var_name) && 0!=strcmp("0",getenv(NOSHMEM_env_var_name))) {
+            goto generic;
+        }
         shmseginfo.shmid = shmget(IPC_PRIVATE, imgbytes, IPC_CREAT|0777);
         if(shmseginfo.shmid < 0) {
             fprintf(stderr, "Warning: Can't get shared memory: %s\n", strerror(errno));
@@ -183,6 +217,7 @@ bool video::init_window(int xsize, int ysize)
             shmdt(shmseginfo.shmaddr); shmctl(shmseginfo.shmid, IPC_RMID, NULL);
             goto generic;
         }
+        already_called_X_ShmAttach = true;
 
 #ifndef X_NOSHMPIX
         if(pixmaps && XShmPixmapFormat(dpy) == ZPixmap)
@@ -327,7 +362,7 @@ drawing_area::drawing_area(int x, int y, int sizex, int sizey)
     index = base_index; // current index
 }
 
-drawing_area::~drawing_area()
+void drawing_area::update()
 {
     if(!g_video->updating) return;
 #ifndef X_NOSHMEM
diff --git a/examples/common/index.html b/examples/common/index.html
index 305f00d..11c4481 100644
--- a/examples/common/index.html
+++ b/examples/common/index.html
@@ -21,11 +21,15 @@ This code is not intended to be used directly.  It is incorporated automatically
     (<A HREF=../parallel_for/tachyon/index.html>tachyon</A> and <A HREF=../parallel_for/seismic/index.html>seismic</A>)
     for more details.
 </DL>
+<DL>
+<DT><A HREF="utility">utility</A>
+<DD>common driver code for examples.
+</DL>
 
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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 
diff --git a/examples/common/utility/utility.h b/examples/common/utility/utility.h
new file mode 100644
index 0000000..66877fc
--- /dev/null
+++ b/examples/common/utility/utility.h
@@ -0,0 +1,396 @@
+/*
+    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.
+*/
+
+#ifndef UTILITY_H_
+#define UTILITY_H_
+#include <string>
+#include <cstring>
+#include <vector>
+#include <map>
+#include <set>
+#include <algorithm>
+#include <sstream>
+#include <numeric>
+#include <stdexcept>
+#include <memory>
+#include <cassert>
+
+namespace utility{
+    namespace internal{
+        //TODO: add tcs
+        template<class dest_type>
+        dest_type& string_to(std::string const& s, dest_type& result){
+            std::stringstream stream(s);
+            stream>>result;
+            if ((!stream)||(stream.fail())){
+                throw std::invalid_argument("error converting string \""+std::string(s)+"\"");
+            }
+            return result;
+        }
+
+        template<class dest_type>
+        dest_type string_to(std::string const& s){
+            dest_type result;
+            return string_to(s,result);
+        }
+
+
+        template<typename>
+        struct is_bool { enum{value=false};};
+
+        template<>
+        struct is_bool<bool> { enum{value=true};};
+
+        class type_base {
+            type_base& operator=(const type_base&);
+            public:
+            const std::string name;
+            const std::string description;
+
+            type_base (std::string name, std::string description) : name(name), description(description) {}
+            virtual void parse_and_store (const std::string & s)=0;
+            virtual std::string value() const =0;
+            virtual std::auto_ptr<type_base> clone()const =0;
+            virtual ~type_base(){}
+        };
+        template <typename type>
+        class type_impl : public type_base {
+        private:
+            type_impl& operator=(const type_impl&);
+            typedef bool(*validating_function_type)(const type&);
+        private:
+            type & target;
+            validating_function_type validating_function;
+        public:
+            type_impl(std::string name, std::string description, type & target, validating_function_type validating_function = NULL)
+                : type_base (name,description), target(target),validating_function(validating_function)
+            {};
+            void parse_and_store (const std::string & s){
+                try{
+                    const bool is_bool_type =is_bool<type>::value;
+                    if ((is_bool_type)&&(s.empty())){
+                        //to avoid directly assigning true
+                        //(as it will impose additional layer of indirection)
+                        //so, simply pass it as string
+                        internal::string_to("1",target);
+                    }else {
+                        internal::string_to(s,target);
+                    }
+                }catch(std::invalid_argument& ){
+                    std::stringstream str;
+                    str
+                        <<"\""<<s<<"\""<<" is incorrect input for argument "
+                        <<"\""<<name<<"\""
+                    ;
+                    throw std::invalid_argument(str.str());
+                }
+                if (validating_function){
+                    if (!((validating_function)(target))){
+                        std::stringstream str;
+                        str
+                            <<"\""<<target<<"\" is invalid value for argument "
+                            <<"\""<<name<<"\""
+                        ;
+                        throw std::invalid_argument(str.str());
+                    }
+                }
+            }
+            virtual std::string value()const{
+                std::stringstream str;
+                str<<target;
+                return str.str();
+            }
+            virtual std::auto_ptr<type_base> clone()const {
+                return std::auto_ptr<type_base>(new type_impl(*this));
+            }
+        };
+
+        class argument{
+        private:
+            std::auto_ptr<type_base> p_type;
+            bool matched_;
+        public:
+            argument(argument const& other): p_type(other.p_type.get() ? other.p_type->clone():std::auto_ptr<type_base>()),matched_(other.matched_){}
+            argument& operator=(argument a){
+                this->swap(a);
+                return *this;
+            }
+            void swap(argument& other){
+                std::auto_ptr<type_base> tmp; tmp=p_type; p_type=other.p_type; other.p_type=tmp;
+                std::swap(matched_,other.matched_);
+            }
+            template<class type>
+            argument(std::string name, std::string description, type& dest, bool(*validating_function)(const type&)= NULL)
+                :p_type(new type_impl<type>(name,description,dest,validating_function))
+                 ,matched_(false)
+            {}
+            std::string value()const{
+                return p_type->value();
+            }
+            std::string name()const{
+                return p_type->name;
+            }
+            std::string description() const{
+                return p_type->description;
+            }
+            void parse_and_store(const std::string & s){
+                p_type->parse_and_store(s);
+                matched_=true;
+            }
+            bool is_matched() const{return matched_;}
+        };
+
+    }
+    class cli_argument_pack{
+        typedef std::map<std::string,internal::argument> args_map_type;
+        typedef std::vector<std::string> args_display_order_type;
+        typedef std::vector<std::string> positional_arg_names_type;
+    private:
+        args_map_type args_map;
+        args_display_order_type args_display_order;
+        positional_arg_names_type positional_arg_names;
+        std::set<std::string> bool_args_names;
+    private:
+        void add_arg(internal::argument const& a){
+            std::pair<args_map_type::iterator, bool> result = args_map.insert(std::make_pair(a.name(),a));
+            if (!result.second){
+                throw std::invalid_argument("argument with name: \""+a.name()+"\" already registered");
+            }
+            args_display_order.push_back(a.name());
+        }
+    public:
+        template<typename type>
+        cli_argument_pack& arg(type& dest,std::string const& name, std::string const& description, bool(*validate)(const type &)= NULL){
+            internal::argument a(name,description,dest,validate);
+            add_arg(a);
+            if (internal::is_bool<type>::value){
+                bool_args_names.insert(name);
+            }
+            return *this;
+        }
+
+        //Positional means that argument name can be omitted in actual CL
+        //only key to match values for parameters with
+        template<typename type>
+        cli_argument_pack& positional_arg(type& dest,std::string const& name, std::string const& description, bool(*validate)(const type &)= NULL){
+            internal::argument a(name,description,dest,validate);
+            add_arg(a);
+            if (internal::is_bool<type>::value){
+                bool_args_names.insert(name);
+            }
+            positional_arg_names.push_back(name);
+            return *this;
+        }
+
+        void parse(int argc, char const* argv[]){
+            {
+                std::size_t current_positional_index=0;
+                for (int j=1;j<argc;j++){
+                    internal::argument* pa = NULL;
+                    std::string argument_value;
+
+                    const char * const begin=argv[j];
+                    const char * const end=begin+std::strlen(argv[j]);
+
+                    const char * const assign_sign = std::find(begin,end,'=');
+
+                    struct throw_unknow_parameter{ static void _(std::string const& location){
+                        throw std::invalid_argument(std::string("unknown parameter starting at:\"")+location+"\"");
+                    }};
+                    //first try to interpret it like parameter=value string
+                    if (assign_sign!=end){
+                        std::string name_found = std::string(begin,assign_sign);
+                        args_map_type::iterator it = args_map.find(name_found );
+
+                        if(it!=args_map.end()){
+                            pa= &((*it).second);
+                            argument_value = std::string(assign_sign+1,end);
+                        }else {
+                            throw_unknow_parameter::_(argv[j]);
+                        }
+                    }
+                    //then see is it a named flag
+                    else{
+                        args_map_type::iterator it = args_map.find(argv[j] );
+                        if(it!=args_map.end()){
+                            pa= &((*it).second);
+                            argument_value = "";
+                        }
+                        //then try it as positional argument without name specified
+                        else if (current_positional_index < positional_arg_names.size()){
+                            std::stringstream str(argv[j]);
+                            args_map_type::iterator it = args_map.find(positional_arg_names.at(current_positional_index));
+                            //TODO: probably use of smarter assert would help here
+                            assert(it!=args_map.end()/*&&"positional_arg_names and args_map are out of sync"*/);
+                            if (it==args_map.end()){
+                                throw std::logic_error("positional_arg_names and args_map are out of sync");
+                            }
+                            pa= &((*it).second);
+                            argument_value = argv[j];
+
+                            current_positional_index++;
+                        }else {
+                            //TODO: add tc to check
+                            throw_unknow_parameter::_(argv[j]);
+                        }
+                    }
+                    assert(pa);
+                    if (pa->is_matched()){
+                        throw std::invalid_argument(std::string("several values specified for: \"")+pa->name()+"\" argument");
+                    }
+                    pa->parse_and_store(argument_value);
+                }
+            }
+        }
+        std::string usage_string(const std::string& binary_name)const{
+            std::string command_line_params;
+            std::string summary_description;
+
+            for (args_display_order_type::const_iterator it = args_display_order.begin();it!=args_display_order.end();++it){
+                const bool is_bool = (0!=bool_args_names.count((*it)));
+                args_map_type::const_iterator argument_it = args_map.find(*it);
+                //TODO: probably use of smarter assert would help here
+                assert(argument_it!=args_map.end()/*&&"args_display_order and args_map are out of sync"*/);
+                if (argument_it==args_map.end()){
+                    throw std::logic_error("args_display_order and args_map are out of sync");
+                }
+                const internal::argument & a = (*argument_it).second;
+                command_line_params +=" [" + a.name() + (is_bool ?"":"=value")+ "]";
+                summary_description +=" " + a.name() + " - " + a.description() +" ("+a.value() +")" + "\n";
+            }
+
+            std::string positional_arg_cl;
+            for (positional_arg_names_type::const_iterator it = positional_arg_names.begin();it!=positional_arg_names.end();++it){
+                positional_arg_cl +=" ["+(*it);
+            }
+            for (std::size_t i=0;i<positional_arg_names.size();++i){
+                positional_arg_cl+="]";
+            }
+            command_line_params+=positional_arg_cl;
+            std::stringstream str;
+            using std::endl;
+            str << " Program usage is:" << endl
+                 << " " << binary_name << command_line_params
+                 << endl << endl
+                 << " where:" << endl
+                 << summary_description
+            ;
+            return str.str();
+        }
+    };
+}
+
+namespace utility{
+    struct thread_number_range{
+        int (*auto_number_of_threads)();
+        int first;
+        int last;
+
+        thread_number_range( int (*auto_number_of_threads_)(),int low_=1, int high_=-1 )
+            : auto_number_of_threads(auto_number_of_threads_), first(low_), last((high_>-1) ? high_ : auto_number_of_threads_())
+        {
+            if (first>last){
+                throw std::invalid_argument("");
+            }
+        }
+        friend std::istream& operator>>(std::istream& i, thread_number_range& range){
+            try{
+                std::string s;
+                i>>s;
+                struct string_to_number_of_threads{
+                    int auto_value;
+                    string_to_number_of_threads(int auto_value_):auto_value(auto_value_){}
+                    int operator()(const std::string & value)const{
+                        int result=0;
+                        if (value=="auto"){
+                            result = auto_value;
+                        }
+                        else{
+                            internal::string_to(value,result);
+                        }
+                        return result;
+                    }
+                };
+                string_to_number_of_threads string_to_number_of_threads(range.auto_number_of_threads());
+                int low =0;
+                int high=0;
+                std::size_t semicolon = s.find(':');
+                if (semicolon == std::string::npos ){
+                    high= (low = string_to_number_of_threads(s));
+                }else {
+                    //it is a range
+                    std::string::iterator semicolon_it = s.begin()+semicolon;
+                    low  = string_to_number_of_threads(std::string(s.begin(),semicolon_it));
+                    high = string_to_number_of_threads(std::string(semicolon_it+1,s.end()));
+                }
+                range = thread_number_range(range.auto_number_of_threads,low,high);
+            }catch(std::invalid_argument&){
+                i.setstate(std::ios::failbit);
+            }
+            return i;
+        }
+        friend std::ostream& operator<<(std::ostream& o, thread_number_range const& range){
+            o<<range.first<<":"<<range.last;
+            return o;
+        }
+
+    };
+}
+#include <iostream>
+namespace utility{
+    inline void report_elapsed_time(double seconds){
+        std::cout << "elapsed time : "<<seconds<<" seconds \n";
+    }
+}
+#include <cstdlib>
+namespace utility{
+    inline void parse_cli_arguments(int argc, const char* argv[], utility::cli_argument_pack cli_pack){
+        bool show_help = false;
+        cli_pack.arg(show_help,"-h","show this message");
+
+        bool invalid_input=false;
+        try {
+            cli_pack.parse(argc,argv);
+        }catch(std::exception& e){
+            std::cerr
+                    <<"error occurred while parsing command line."<<std::endl
+                    <<"error text:\""<<e.what()<<"\""<<std::endl
+                    <<std::flush;
+            invalid_input =true;
+        }
+        if (show_help || invalid_input){
+            std::cout<<cli_pack.usage_string(argv[0])<<std::flush;
+            std::exit(0);
+        }
+
+    }
+    inline void parse_cli_arguments(int argc, char* argv[], utility::cli_argument_pack cli_pack){
+         parse_cli_arguments(argc, const_cast<const char**>(argv), cli_pack);
+    }
+}
+#endif /* UTILITY_H_ */
diff --git a/examples/concurrent_hash_map/count_strings/Makefile b/examples/concurrent_hash_map/count_strings/Makefile
index ae94214..b24a1f5 100644
--- a/examples/concurrent_hash_map/count_strings/Makefile
+++ b/examples/concurrent_hash_map/count_strings/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -27,6 +27,7 @@
 # GNU Makefile that builds and runs example.
 PROG=count_strings
 ARGS=
+PERF_RUN_ARGS=auto 10000000 silent
 
 # The C++ compiler
 ifneq (,$(shell which icc 2>/dev/null))
@@ -46,3 +47,9 @@ clean:
 
 test:
 	./$(PROG) $(ARGS)
+	
+perf_build: release
+	
+perf_run:
+	./$(PROG) $(PERF_RUN_ARGS)
+
diff --git a/examples/concurrent_hash_map/count_strings/Makefile.windows b/examples/concurrent_hash_map/count_strings/Makefile.windows
index 2f6e6c0..7e183c9 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-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -29,6 +29,7 @@
 # Just specify your program basename
 PROG=Count_Strings
 ARGS=
+PERF_RUN_ARGS=auto 10000000 silent
 
 # The C++ compiler options
 
@@ -37,7 +38,7 @@ CXX1 = $(TBB_CXX)-
 CXX2 = $(CXX1:icl.exe-=icl.exe)
 CXX  = $(CXX2:-=cl.exe)
 
-MYCXXFLAGS = /TP /EHsc /W3 /nologo $(TBB_SECURITY_SWITCH) /D _CONSOLE /D _MBCS /D WIN32 $(CXXFLAGS)
+MYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 $(CXXFLAGS)
 MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)
 
 all: release test
@@ -52,3 +53,7 @@ test:
 compiler_check:
 	@echo compiler_test>compiler_test && @$(CXX) /E compiler_test >nul 2>&1  || echo "$(CXX) command not found. Check if CXX=$(CXX) is set properly"
 	@cmd.exe /C del compiler_test
+perf_build: release
+perf_run:
+	$(PROG) $(PERF_RUN_ARGS)
+
diff --git a/examples/concurrent_hash_map/count_strings/count_strings.cpp b/examples/concurrent_hash_map/count_strings/count_strings.cpp
index 3e4cfa3..f820968 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-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -41,6 +41,7 @@
 #include "tbb/tick_count.h"
 #include "tbb/task_scheduler_init.h"
 #include "tbb/tbb_allocator.h"
+#include "../../common/utility/utility.h"
 
 
 //! String type with scalable allocator.
@@ -52,17 +53,12 @@ using namespace tbb;
 using namespace std;
 
 //! Set to true to counts.
-static bool Verbose = false;
-
-//! Working threads count
-static int NThread = 1;
-
+static bool verbose = false;
+static bool silent = false;
 //! Problem size
 long N = 1000000;
 const int size_factor = 2;
 
-//! Indicates if the number of threads wasn't set explicitly
-static bool is_number_of_threads_set = false;
 //! A concurrent hash table that maps strings to ints.
 typedef concurrent_hash_map<MyString,int> StringTable;
 
@@ -90,20 +86,12 @@ static void CountOccurrences(int nthreads) {
 
     int n = 0;
     for( StringTable::iterator i=table.begin(); i!=table.end(); ++i ) {
-        if( Verbose && nthreads )
+        if( verbose && nthreads )
             printf("%s %d\n",i->first.c_str(),i->second);
         n += i->second;
     }
 
-    if (is_number_of_threads_set) {
-        printf("threads = %d  total = %d  unique = %u  time = %g\n", nthreads, n, unsigned(table.size()), (t1-t0).seconds());
-    } else {
-        if ( nthreads == 1 ) {
-            printf("serial run   total = %d  unique = %u  time = %g\n", n, unsigned(table.size()), (t1-t0).seconds());
-        } else {
-            printf("parallel run total = %d  unique = %u  time = %g\n", n, unsigned(table.size()), (t1-t0).seconds());
-        }
-    }
+    if ( !silent ) printf("total = %d  unique = %u  time = %g\n", n, unsigned(table.size()), (t1-t0).seconds());
 }
 
 /// Generator of random words
@@ -198,51 +186,58 @@ static void CreateData() {
     MyString planet = Data[12]; planet[0] = toupper(planet[0]);
     MyString helloworld = Data[0]; helloworld[0] = toupper(helloworld[0]);
     helloworld += ", "+Data[1]+" "+Data[2]+" "+Data[3]+" "+Data[4]+" "+Data[5];
-    printf("Message from planet '%s': %s!\nAnalyzing whole text...\n", planet.c_str(), helloworld.c_str());
-}
-
-/// Main Driver 
-
-static void ParseCommandLine( int argc, char* argv[] ) {
-    int i = 1;
-    if( i<argc && strcmp( argv[i], "verbose" )==0 ) {
-        Verbose = true;
-        ++i;
-    }
-    if( i<argc )
-        if( !isdigit(argv[i][0]) ) {
-            fprintf(stderr,"Usage: %s [verbose] [number-of-strings] [number-of-threads]\n",argv[0]);
-            exit(1);
-        } else {
-            N = strtol(argv[i++],0,0);
-        }
-    if( i<argc )
-        if( !isdigit(argv[i][0]) ) {
-            fprintf(stderr,"Usage: %s [verbose] [number-of-strings] [number-of-threads]\n",argv[0]);
-            exit(1);
-        } else {
-            NThread = strtol(argv[i++],0,0);
-            is_number_of_threads_set = true;
-        }
+    if ( !silent ) printf("Message from planet '%s': %s!\nAnalyzing whole text...\n", planet.c_str(), helloworld.c_str());
 }
 
 int main( int argc, char* argv[] ) {
-    srand(2);
-    ParseCommandLine( argc, argv );
-    Data = new MyString[N];
-    CreateData();
-    if (is_number_of_threads_set) {
-        task_scheduler_init init(NThread);
-        CountOccurrences(NThread);
-    } else { // Number of threads wasn't set explicitly. Run serial and parallel version
-        { // serial run
-            task_scheduler_init init_serial(1);
-            CountOccurrences(1);
-        }
-        { // parallel run (number of threads is selected automatically)
-            task_scheduler_init init_parallel;
-            CountOccurrences(0);
+    try {
+        tbb::tick_count mainStartTime = tbb::tick_count::now();
+        srand(2);
+
+        //! Working threads count
+        // The 1st argument is the function to obtain 'auto' value; the 2nd is the default value
+        // The example interprets 0 threads as "run serially, then fully subscribed"
+        utility::thread_number_range threads(tbb::task_scheduler_init::default_num_threads,0);
+
+        utility::parse_cli_arguments(argc,argv,
+            utility::cli_argument_pack()
+            //"-h" option for for displaying help is present implicitly
+            .positional_arg(threads,"n-of-threads","number of threads to use; a range of the form low[:high], where low and optional high are non-negative integers or 'auto' for the TBB default.")
+            .positional_arg(N,"n-of-strings","number of strings")
+            .arg(verbose,"verbose","verbose mode")
+            .arg(silent,"silent","no output except elapsed time")
+            );
+
+        if ( silent ) verbose = false;
+
+        Data = new MyString[N];
+        CreateData();
+
+        if ( threads.first ) {
+            for(int p = threads.first;  p <= threads.last; ++p ) {
+                if ( !silent ) printf("threads = %d  ", p );
+                task_scheduler_init init( p );
+                CountOccurrences( p );
+            }
+        } else { // Number of threads wasn't set explicitly. Run serial and parallel version
+            { // serial run
+                if ( !silent ) printf("serial run   ");
+                task_scheduler_init init_serial(1);
+                CountOccurrences(1);
+            }
+            { // parallel run (number of threads is selected automatically)
+                if ( !silent ) printf("parallel run ");
+                task_scheduler_init init_parallel;
+                CountOccurrences(0);
+            }
         }
+
+        delete[] Data;
+
+        utility::report_elapsed_time((tbb::tick_count::now() - mainStartTime).seconds());
+
+        return 0;
+    } catch(std::exception& e) {
+        std::cerr<<"error occurred. error text is :\"" <<e.what()<<"\"\n";
     }
-    delete[] Data;
 }
diff --git a/examples/concurrent_hash_map/count_strings/index.html b/examples/concurrent_hash_map/count_strings/index.html
index e8230a4..f6a0ca1 100644
--- a/examples/concurrent_hash_map/count_strings/index.html
+++ b/examples/concurrent_hash_map/count_strings/index.html
@@ -2,7 +2,8 @@
 <BODY>
 
 <H2>Overview</H2>
-Example program that demonstrates template class concurrent_hash_map.
+The example counts the number of unique words in a text.
+
 
 <H2>Files</H2>
 <DL>
@@ -25,19 +26,25 @@ General build directions can be found <A HREF=../../index.html#build>here</A>.
 
 <H2>Usage</H2>
 <DL>
-<DT><TT>count_strings [verbose] [<I>N</I>] [<I>P</I>]</TT>
-<DD><I>N</I> is the number of strings and <I>P</I> is the number of threads to be used.  The "verbose" option enables printing
-    of extra information during execution.
-<DT>To run a short version of this example, e.g., for use with Intel® Threading Tools:
+<DT><TT>count_strings <I>-h</I></TT>
+<DD>Prints the help for command line options
+<DT><TT>count_strings [<I>n-of-threads</I>=value] [<I>n-of-strings</I>=value] [<I>verbose</I>] [<I>silent</I>]</TT>
+<DT><TT>count_strings [<I>n-of-threads</I> [<I>n-of-strings</I>]] [<I>verbose</I>] [<I>silent</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>
+    <I>n-of-strings</I> is a number of strings.<BR>
+    <I>verbose</I> - enables printing of extra information during execution.<BR>
+    <I>silent</I> - no output except elapsed time.<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 a small number of strings and the desired number of threads, e.g., <TT>count_strings 10000 2</TT>.
+    <BR>Run it with a small number of strings and the desired number of threads, e.g., <TT>count_strings 2 10000</TT>.
 </DL>
 
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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 
diff --git a/examples/concurrent_hash_map/count_strings/xcode/count_strings.xcodeproj/project.pbxproj b/examples/concurrent_hash_map/count_strings/xcode/count_strings.xcodeproj/project.pbxproj
index e0e99c8..339cbea 100644
--- a/examples/concurrent_hash_map/count_strings/xcode/count_strings.xcodeproj/project.pbxproj
+++ b/examples/concurrent_hash_map/count_strings/xcode/count_strings.xcodeproj/project.pbxproj
@@ -28,7 +28,7 @@
 /* Begin PBXFileReference section */
 		8DD76F6C0486A84900D96B5E /* count_strings */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = count_strings; sourceTree = BUILT_PRODUCTS_DIR; };
 		A1F593A50B8F042A00073279 /* count_strings.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = count_strings.cpp; path = ../count_strings.cpp; sourceTree = SOURCE_ROOT; };
-		A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
+		A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -135,12 +135,12 @@
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = count_strings;
 				ZERO_LINK = NO;
 			};
@@ -151,12 +151,12 @@
 			buildSettings = {
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = count_strings;
 				ZERO_LINK = NO;
 			};
@@ -204,12 +204,12 @@
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = count_strings;
 				ZERO_LINK = NO;
 			};
@@ -222,12 +222,12 @@
 				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = count_strings;
 				ZERO_LINK = NO;
 			};
diff --git a/examples/concurrent_hash_map/index.html b/examples/concurrent_hash_map/index.html
index 68305dc..8956f44 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-2010 Intel Corporation.  All Rights Reserved.
+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 
diff --git a/examples/index.html b/examples/index.html
index 1598624..c7efb78 100644
--- a/examples/index.html
+++ b/examples/index.html
@@ -20,6 +20,10 @@ This directory has example usages of Threading Building Blocks.
 <DD>Examples using <CODE>pipeline</CODE>.
 <DT><A HREF="task/index.html">task</A>
 <DD>Examples using raw <CODE>task</CODE> interface.
+<DT><A HREF="task_group/index.html">task_group</A>
+<DD>Examples using <CODE>task_group</CODE> interface.
+<DT><A HREF="task_priority/index.html">task_priority</A>
+<DD>Examples using the task priority feature.
 <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>
@@ -164,7 +168,7 @@ The environment may be set up, for a given type of shell window, by using one of
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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 
diff --git a/examples/parallel_do/index.html b/examples/parallel_do/index.html
index d75ae31..55572f2 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-2010 Intel Corporation.  All Rights Reserved.
+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 
diff --git a/examples/parallel_do/parallel_preorder/Graph.cpp b/examples/parallel_do/parallel_preorder/Graph.cpp
index d664ec5..99fef73 100644
--- a/examples/parallel_do/parallel_preorder/Graph.cpp
+++ b/examples/parallel_do/parallel_preorder/Graph.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -26,9 +26,9 @@
     the GNU General Public License.
 */
 
-#include <cstdio>
 #include <cstdlib>
 #include "Graph.h"
+#include <iostream>
 
 using namespace std;
 
@@ -65,10 +65,10 @@ void Graph::create_random_dag( size_t number_of_nodes ) {
 
 void Graph::print() {
     for( size_t k=0; k<my_vertex_set.size(); ++k ) {
-        printf("Cell %d:",int(k));
+        std::cout<<"Cell "<<k<<":";
         for( size_t j=0; j<my_vertex_set[k].successor.size(); ++j )
-            printf(" %d",int(my_vertex_set[k].successor[j] - &my_vertex_set[0]));
-        printf("\n");
+            std::cout<<" "<<int(my_vertex_set[k].successor[j] - &my_vertex_set[0]);
+        std::cout<<std::endl;
     }
 }
 
diff --git a/examples/parallel_do/parallel_preorder/Graph.h b/examples/parallel_do/parallel_preorder/Graph.h
index 9cf1fe4..ae983c0 100644
--- a/examples/parallel_do/parallel_preorder/Graph.h
+++ b/examples/parallel_do/parallel_preorder/Graph.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 f6b3524..1aca995 100644
--- a/examples/parallel_do/parallel_preorder/Makefile
+++ b/examples/parallel_do/parallel_preorder/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -26,7 +26,8 @@
 
 # GNU Makefile that builds and runs example.
 PROG=parallel_preorder
-ARGS=1:4
+ARGS=
+PERF_RUN_ARGS=auto silent 500000  100
 
 # The C++ compiler
 ifneq (,$(shell which icc 2>/dev/null))
@@ -46,3 +47,9 @@ clean:
 
 test:
 	./$(PROG) $(ARGS)
+	
+perf_build:	release
+
+perf_run:
+	./$(PROG) $(PERF_RUN_ARGS)
+
diff --git a/examples/parallel_do/parallel_preorder/Makefile.windows b/examples/parallel_do/parallel_preorder/Makefile.windows
index 1bf9e6d..d60f15e 100644
--- a/examples/parallel_do/parallel_preorder/Makefile.windows
+++ b/examples/parallel_do/parallel_preorder/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -28,7 +28,8 @@
 
 # Just specify your program basename
 PROG=Parallel_Preorder
-ARGS=1:4
+ARGS=
+PERF_RUN_ARGS=auto silent 500000  100
 
 # Trying to find if icl.exe is set
 CXX1 = $(TBB_CXX)-
@@ -36,7 +37,7 @@ CXX2 = $(CXX1:icl.exe-=icl.exe)
 CXX  = $(CXX2:-=cl.exe)
 
 # The C++ compiler options
-MYCXXFLAGS = /TP /EHsc /W3 /nologo $(TBB_SECURITY_SWITCH) /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_DEPRECATE $(CXXFLAGS)
+MYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_DEPRECATE $(CXXFLAGS)
 MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)
 
 all: release test
@@ -51,3 +52,8 @@ test:
 compiler_check:
 	@echo compiler_test>compiler_test && @$(CXX) /E compiler_test >nul 2>&1  || echo "$(CXX) command not found. Check if CXX=$(CXX) is set properly"
 	@cmd.exe /C del compiler_test
+
+perf_build:	release
+
+perf_run:
+	./$(PROG) $(PERF_RUN_ARGS)
diff --git a/examples/parallel_do/parallel_preorder/Matrix.h b/examples/parallel_do/parallel_preorder/Matrix.h
index b4d91a7..0de3319 100644
--- a/examples/parallel_do/parallel_preorder/Matrix.h
+++ b/examples/parallel_do/parallel_preorder/Matrix.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -27,7 +27,7 @@
 */
 
 class Matrix {
-    static const int n = 10;
+    static const int n = 20;
     float array[n][n];
 public:
     Matrix() {}
diff --git a/examples/parallel_do/parallel_preorder/index.html b/examples/parallel_do/parallel_preorder/index.html
index a276978..31744ce 100644
--- a/examples/parallel_do/parallel_preorder/index.html
+++ b/examples/parallel_do/parallel_preorder/index.html
@@ -39,14 +39,16 @@ if the cell values are changed to type "float".  The reason is twofold.
 
 <H2>Files</H2>
 <DL>
+<DT><A HREF="main.cpp">main.cpp</A>
+<DD>Main program which parses command line options and runs the algorithm with different numbers of threads.
 <DT><A HREF="parallel_preorder.cpp">parallel_preorder.cpp</A>
-<DD>Source code for example.
-<DT><A HREF="Graph.cpp">Graph.cpp</A>
-<DD>Source code for example.
+<DD>Implementation of the parallel preorder traversal algorithm.
 <DT><A HREF="Graph.h">Graph.h</A>
-<DD>Source code for example.
+<DD>Interfaces of the Graph and Cell classes.
+<DT><A HREF="Graph.cpp">Graph.cpp</A>
+<DD>Implementations of the Graph and Cell classes.
 <DT><A HREF="Matrix.h">Matrix.h</A>
-<DD>Source code for example.
+<DD>The Matrix class definition.
 <DT><A HREF="Makefile">Makefile</A>
 <DD>Makefile for building example.
 </DL>
@@ -64,21 +66,24 @@ General build directions can be found <A HREF=../../index.html#build>here</A>.
 
 <H2>Usage</H2>
 <DL>
-<DT><TT>parallel_preorder [<I>M</I>[:<I>N</I>] [<I>Rounds</I> [<I>'pause'</I>]]]</TT>
-<DD><I>M</I> and <I>N</I> are a range of numbers of threads to be used.
-<DD><I>Rounds</I> is the number of rounds the example runs internally. Default value 
-    is 50; reduce it to shorten example run time.
-<DD>If 'pause' is specified, the application will wait for a user to hit return before it exits.
-<DT>To run a short version of this example, e.g., for use with Intel® Threading Tools:
+<DT><TT>parallel_preorder <I>-h</I></TT>
+<DD>Prints the help for command line options
+<DT><TT>parallel_preorder [<I>n-of-threads</I>=value] [<I>n-of-nodes</I>=value] [<I>n-of-traversals</I>=value] [<I>silent</I>] </TT>
+<DT><TT>parallel_preorder [<I>n-of-threads</I> [<I>n-of-nodes</I> [<I>n-of-traversals</I>]]] [<I>silent</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>
+    <I>n-of-nodes</I> is a number of nodes in the graph. Default value is 1000.<BR>
+    <I>n-of-traversals</I> is the number of times to evaluate the graph. Default value is 500.<BR>
+    <I>silent</I> - no output except elapsed time.<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 and smaller number of rounds, e.g., <TT>parallel_preorder 4 5</TT>.
+    <BR>Run it with the desired number of threads and smaller number of traversals, e.g., <TT>parallel_preorder 4 1000 5</TT>.
 </DL>
 
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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 
diff --git a/examples/parallel_do/parallel_preorder/main.cpp b/examples/parallel_do/parallel_preorder/main.cpp
new file mode 100644
index 0000000..913fcd1
--- /dev/null
+++ b/examples/parallel_do/parallel_preorder/main.cpp
@@ -0,0 +1,101 @@
+/*
+    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.
+*/
+
+/* Example program that shows how to use parallel_do to do parallel preorder
+   traversal of a directed acyclic graph. */
+
+#include <cstdlib>
+#include "tbb/task_scheduler_init.h"
+#include "tbb/tick_count.h"
+#include "../../common/utility/utility.h"
+#include <iostream>
+#include <vector>
+#include "Graph.h"
+
+// some forward declarations
+class Cell;
+void ParallelPreorderTraversal( const std::vector<Cell*>& root_set );
+
+//------------------------------------------------------------------------
+// Test driver
+//------------------------------------------------------------------------
+utility::thread_number_range threads(tbb::task_scheduler_init::default_num_threads);
+static unsigned nodes = 1000;
+static unsigned traversals = 500;
+static bool SilentFlag = false;
+
+//! Parse the command line.
+static void ParseCommandLine( int argc, const char* argv[] ) {
+    utility::parse_cli_arguments(
+            argc,argv,
+            utility::cli_argument_pack()
+                //"-h" option for for displaying help is present implicitly
+                .positional_arg(threads,"n-of-threads","number of threads to use; a range of the form low[:high], where low and optional high are non-negative integers or 'auto' for the TBB default.")
+                .positional_arg(nodes,"n-of-nodes","number of nodes in the graph.")
+                .positional_arg(traversals,"n-of-traversals","number of times to evaluate the graph. Reduce it (e.g. to 100) to shorten example run time\n")
+                .arg(SilentFlag,"silent","no output except elapsed time ")
+    );
+}
+
+int main( int argc, const char* argv[] ) {
+    try {
+        tbb::tick_count main_start = tbb::tick_count::now();
+        ParseCommandLine(argc,argv);
+
+        // Start scheduler with given number of threads.
+        for( int p=threads.first; p<=threads.last; ++p ) {
+            tbb::tick_count t0 = tbb::tick_count::now();
+            tbb::task_scheduler_init init(p);
+            srand(2);
+            size_t root_set_size = 0;
+            {
+                Graph g;
+                g.create_random_dag(nodes);
+                std::vector<Cell*> root_set;
+                g.get_root_set(root_set);
+                root_set_size = root_set.size();
+                for( unsigned int trial=0; trial<traversals; ++trial ) {
+                    ParallelPreorderTraversal(root_set);
+                }
+            }
+            tbb::tick_count::interval_t interval = tbb::tick_count::now()-t0;
+            if (!SilentFlag){
+                std::cout
+                    <<interval.seconds()<<" seconds using "<<p<<" threads ("<<root_set_size<<" nodes in root_set)\n";
+            }
+        }
+        utility::report_elapsed_time((tbb::tick_count::now()-main_start).seconds());
+
+        return 0;
+    }catch(std::exception& e){
+        std::cerr
+            << "unexpected error occurred. \n"
+            << "error description: "<<e.what()<<std::endl;
+        return -1;
+    }
+}
diff --git a/examples/parallel_do/parallel_preorder/msvs/parallel_preorder.vcproj b/examples/parallel_do/parallel_preorder/msvs/parallel_preorder.vcproj
index d7bde29..a8aa8af 100644
--- a/examples/parallel_do/parallel_preorder/msvs/parallel_preorder.vcproj
+++ b/examples/parallel_do/parallel_preorder/msvs/parallel_preorder.vcproj
@@ -346,6 +346,10 @@
 				>
 			</File>
 			<File
+				RelativePath="..\main.cpp"
+				>
+			</File>
+			<File
 				RelativePath="..\parallel_preorder.cpp"
 				>
 			</File>
diff --git a/examples/parallel_do/parallel_preorder/parallel_preorder.cpp b/examples/parallel_do/parallel_preorder/parallel_preorder.cpp
index 303054a..700e490 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-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -26,21 +26,11 @@
     the GNU General Public License.
 */
 
-/* Example program that shows how to use parallel_do to do parallel preorder 
-   traversal of a directed acyclic graph. */
-
 #include "tbb/parallel_do.h"
-#include "tbb/atomic.h"
 #include <vector>
 #include <algorithm>
-#include <cstring>
-#include <cstdio>
 #include "Graph.h"
 
-using namespace std;
-
-//! Number of trials. Can be changed from command line
-int ntrial = 50;
 
 class Body {
 public:
@@ -64,118 +54,8 @@ public:
     }
 };   
 
-void ParallelPreorderTraversal( const vector<Cell*>& root_set ) {
+void ParallelPreorderTraversal( const std::vector<Cell*>& root_set ) {
     tbb::parallel_do(root_set.begin(), root_set.end(),Body());
 }
 
-//------------------------------------------------------------------------
-// Test driver
-//------------------------------------------------------------------------
-
-#include <cctype>
-#include "tbb/task_scheduler_init.h"
-#include "tbb/tick_count.h"
-
-//! A closed range of int.
-struct IntRange {
-    int low;
-    int high;
-    void set_from_string( const char* s );
-    IntRange( int low_, int high_ ) : low(low_), high(high_) {}
-};
-
-void IntRange::set_from_string( const char* s ) {
-    char* end;
-    high = low = strtol(s,&end,0);
-    switch( *end ) {
-    case ':': 
-        high = strtol(end+1,0,0); 
-        break;
-    case '\0':
-        break;
-    default:
-        printf("unexpected character = %c\n",*end);
-    }
-}
-
-//! Number of threads to use.
-static IntRange NThread(1,4);
 
-//! If true, then at end wait for user to hit return
-static bool PauseFlag = false;
-
-//! Displays usage message
-void Usage(char * argv0) {
-    fprintf(stderr, "Usage: %s [nthread [ntrials ['pause']]]\n", argv0);
-    fprintf(stderr, "where nthread is a non-negative integer, or range of the form low:high [%d:%d]\n", NThread.low, NThread.high);
-    fprintf(stderr, "ntrials is a positive integer. Default value is 50, reduce it (e.g. to 5) to shorten example run time\n");
-    fprintf(stderr, "The application waits for user to hit return if 'pause' is specified\n");
-}
-
-//! Parse the command line.
-static void ParseCommandLine( int argc, char* argv[] ) {
-    int i = 1;
-        if( i<argc && !isdigit(argv[i][0]) ) { 
-        // Command line is garbled.
-        Usage(argv[0]);
-        exit(1);
-    }
-    if( i<argc )
-        NThread.set_from_string(argv[i++]);
-    if( i<argc && !isdigit(argv[i][0]) ) { 
-        // Command line is garbled.
-        Usage(argv[0]);
-        exit(1);
-    }
-    if (i<argc) {
-        ntrial = strtol(argv[i++], 0, 0);
-    }
-    if (ntrial == 0) {
-        // Command line is garbled.
-        Usage(argv[0]);
-        exit(1);
-    }
-    if (i<argc && strcmp( argv[i], "pause" )==0 ) {
-        PauseFlag = true;
-    }
-}
-
-int main( int argc, char* argv[] ) {
-    ParseCommandLine(argc,argv);
-
-    // Start scheduler with given number of threads.
-    for( int p=NThread.low; p<=NThread.high; ++p ) {
-        tbb::task_scheduler_init init(p);
-        srand(2);
-        tbb::tick_count::interval_t interval;
-        size_t total_root_set_size = 0;
-        for( int trial=0; trial<ntrial; ++trial ) {
-            Graph g;
-            g.create_random_dag(1000);
-            vector<Cell*> root_set;
-            g.get_root_set(root_set);
-            total_root_set_size += root_set.size();
-
-            tbb::tick_count t0 = tbb::tick_count::now();
-            for( int i=0; i<10; ++i ) {
-                ParallelPreorderTraversal(root_set);
-            }
-            tbb::tick_count t1 = tbb::tick_count::now();
-
-            interval += t1-t0;
-        }
-        printf("%g seconds using %d threads (average of %g nodes in root_set)\n",interval.seconds(),p,(double)total_root_set_size/ntrial);
-    }
-
-    if (PauseFlag) {
-        printf ("Press return key to exit");
-        char c;
-        int n = scanf("%c", &c);
-        if( n!=1 ) {
-            fprintf(stderr,"Fatal error: unexpected end of input\n");
-            exit(1);
-        }
-    }
-
-    return 0;
-}
diff --git a/examples/parallel_do/parallel_preorder/xcode/parallel_preorder.xcodeproj/project.pbxproj b/examples/parallel_do/parallel_preorder/xcode/parallel_preorder.xcodeproj/project.pbxproj
index d82d821..3c39a52 100644
--- a/examples/parallel_do/parallel_preorder/xcode/parallel_preorder.xcodeproj/project.pbxproj
+++ b/examples/parallel_do/parallel_preorder/xcode/parallel_preorder.xcodeproj/project.pbxproj
@@ -11,6 +11,7 @@
 		05593AAB0B8F55D500DE73AB /* parallel_preorder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593AA70B8F55D500DE73AB /* parallel_preorder.cpp */; };
 		A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
 		A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+		EAD808FA13051AB300FE8C7C /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAD808F913051AB300FE8C7C /* main.cpp */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXCopyFilesBuildPhase section */
@@ -32,7 +33,8 @@
 		05593AA60B8F55D500DE73AB /* Matrix.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Matrix.h; path = ../Matrix.h; sourceTree = SOURCE_ROOT; };
 		05593AA70B8F55D500DE73AB /* parallel_preorder.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = parallel_preorder.cpp; path = ../parallel_preorder.cpp; sourceTree = SOURCE_ROOT; };
 		8DD76F6C0486A84900D96B5E /* parallel_preorder */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = parallel_preorder; sourceTree = BUILT_PRODUCTS_DIR; };
-		A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
+		A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; };
+		EAD808F913051AB300FE8C7C /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = ../main.cpp; sourceTree = SOURCE_ROOT; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -60,6 +62,7 @@
 		08FB7795FE84155DC02AAC07 /* Source */ = {
 			isa = PBXGroup;
 			children = (
+				EAD808F913051AB300FE8C7C /* main.cpp */,
 				05593AA70B8F55D500DE73AB /* parallel_preorder.cpp */,
 				05593AA40B8F55D500DE73AB /* Graph.cpp */,
 				05593AA50B8F55D500DE73AB /* Graph.h */,
@@ -129,6 +132,7 @@
 			files = (
 				05593AA80B8F55D500DE73AB /* Graph.cpp in Sources */,
 				05593AAB0B8F55D500DE73AB /* parallel_preorder.cpp in Sources */,
+				EAD808FA13051AB300FE8C7C /* main.cpp in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -143,12 +147,12 @@
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = parallel_preorder;
 				ZERO_LINK = NO;
 			};
@@ -159,12 +163,12 @@
 			buildSettings = {
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = parallel_preorder;
 				ZERO_LINK = NO;
 			};
@@ -212,12 +216,12 @@
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = parallel_preorder;
 				ZERO_LINK = NO;
 			};
@@ -230,12 +234,12 @@
 				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = parallel_preorder;
 				ZERO_LINK = NO;
 			};
diff --git a/examples/parallel_for/game_of_life.NET/Makefile b/examples/parallel_for/game_of_life.NET/Makefile
deleted file mode 100644
index 0defaf5..0000000
--- a/examples/parallel_for/game_of_life.NET/Makefile
+++ /dev/null
@@ -1,46 +0,0 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
-#
-# This file is part of Threading Building Blocks.
-#
-# Threading Building Blocks is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public License
-# version 2 as published by the Free Software Foundation.
-#
-# Threading Building Blocks is distributed in the hope that it will be
-# useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Threading Building Blocks; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-#
-# As a special exception, you may use this file as part of a free software
-# library without restriction.  Specifically, if other files instantiate
-# templates or use macros or inline functions from this file, or you compile
-# this file and link it with other files to produce an executable, this
-# file does not by itself cause the resulting executable to be covered by
-# the GNU General Public License.  This exception does not however
-# invalidate any other reasons why the executable file might be covered by
-# the GNU General Public License.
-
-# GNU Makefile that builds and runs example.
-PROG=game_of_life
-ARGS=2:4 -t 5
-ifneq (,$(shell which icc 2>/dev/null))
-CXX=icc
-endif # icc
-
-all:	release test
-
-release: src/Evolution.cpp src/Update_state.cpp src/Game_of_life.cpp
-	$(CXX) -O2 -DNDEBUG -D_CONSOLE $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)
-
-debug: src/Evolution.cpp src/Update_state.cpp src/Game_of_life.cpp
-	$(CXX) -O0 -D_CONSOLE -g -DTBB_DO_ASSERT $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)
-
-clean:
-	rm -f $(PROG) *.o *.d
-
-test:
-	./$(PROG) $(ARGS)
diff --git a/examples/parallel_for/game_of_life.NET/Makefile.windows b/examples/parallel_for/game_of_life.NET/Makefile.windows
deleted file mode 100644
index 8ba2821..0000000
--- a/examples/parallel_for/game_of_life.NET/Makefile.windows
+++ /dev/null
@@ -1,49 +0,0 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
-#
-# This file is part of Threading Building Blocks.
-#
-# Threading Building Blocks is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public License
-# version 2 as published by the Free Software Foundation.
-#
-# Threading Building Blocks is distributed in the hope that it will be
-# useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Threading Building Blocks; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-#
-# As a special exception, you may use this file as part of a free software
-# library without restriction.  Specifically, if other files instantiate
-# templates or use macros or inline functions from this file, or you compile
-# this file and link it with other files to produce an executable, this
-# file does not by itself cause the resulting executable to be covered by
-# the GNU General Public License.  This exception does not however
-# invalidate any other reasons why the executable file might be covered by
-# the GNU General Public License.
-
-# Common Makefile that builds and runs example.
-
-# Just specify your program basename
-PROG=game_of_life
-ARGS=2:4 -t 5
-
-# Trying to find if icl.exe is set
-CXX  = cl.exe
-
-# The C++ compiler options
-MYCXXFLAGS = /TP /EHsc /W3 /nologo $(TBB_SECURITY_SWITCH) /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_DEPRECATE $(CXXFLAGS)
-MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)
-
-all: release test
-release: 
-	$(CXX) ./src/Evolution.cpp ./src/Game_of_life.cpp ./src/Update_state.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
-debug: 
-	$(CXX) ./src/Evolution.cpp ./src/Game_of_life.cpp ./src/Update_state.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:
-	$(PROG) $(ARGS)
-
diff --git a/examples/parallel_for/game_of_life.NET/index.html b/examples/parallel_for/game_of_life.NET/index.html
deleted file mode 100644
index 35e643a..0000000
--- a/examples/parallel_for/game_of_life.NET/index.html
+++ /dev/null
@@ -1,51 +0,0 @@
-<HTML>
-<BODY>
-
-<H2>Overview</H2>
-The "Game of life" example demonstrates interoperability of TBB and .NET. 
-<br>This program runs 2 simultaneous instances of the classic Conway's "Game of Life". 
-One of these instances uses serial calculations to update the board. The other one calculates in parallel with TBB.
-The visualization is written in managed C++ and uses .NET CLR.
-
-<H2>Source Files</H2>
-<DL>
-<DT><A HREF="src/Form1.h">Form1.h</A>, <A HREF="src/Board.h">Board.h</A>
-<DD>Header files for GUI classes.
-<DT><A HREF="src/Evolution.h">Evolution.h</A>, <A HREF="src/Evolution.cpp">Evolution.cpp</A>
-<DD>Contain class hierarchy to implement game evolution in serial and parallel.
-<DT><A HREF="src/Update_state.cpp">Update_state.cpp </A>
-<DD>Implements 2 approaches for calculating steps in the program: with the use of SSE intrinsics, and ordinary C++ code.
-<DT><A HREF="src/Game_of_life.cpp">Game_of_life.cpp </A>
-<DD>Contains program entry point and other source not related to logical structure of the example.
-</DL>
-
-<H2>Directories</H2>
-<DL>
-<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.
-</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-2010 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
-registered trademarks or trademarks of Intel Corporation or its 
-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/parallel_for/game_of_life.NET/src/AssemblyInfo.cpp b/examples/parallel_for/game_of_life.NET/src/AssemblyInfo.cpp
deleted file mode 100644
index fc77a19..0000000
--- a/examples/parallel_for/game_of_life.NET/src/AssemblyInfo.cpp
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks.
-
-    Threading Building Blocks is free software; you can redistribute it
-    and/or modify it under the terms of the GNU General Public License
-    version 2 as published by the Free Software Foundation.
-
-    Threading Building Blocks is distributed in the hope that it will be
-    useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-    of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with Threading Building Blocks; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    As a special exception, you may use this file as part of a free software
-    library without restriction.  Specifically, if other files instantiate
-    templates or use macros or inline functions from this file, or you compile
-    this file and link it with other files to produce an executable, this
-    file does not by itself cause the resulting executable to be covered by
-    the GNU General Public License.  This exception does not however
-    invalidate any other reasons why the executable file might be covered by
-    the GNU General Public License.
-*/
-
-using namespace System;
-using namespace System::Reflection;
-using namespace System::Runtime::CompilerServices;
-using namespace System::Runtime::InteropServices;
-using namespace System::Security::Permissions;
-
-//
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-//
-[assembly:AssemblyTitleAttribute("Automata")];
-[assembly:AssemblyDescriptionAttribute("")];
-[assembly:AssemblyConfigurationAttribute("")];
-[assembly:AssemblyCompanyAttribute("")];
-[assembly:AssemblyProductAttribute("Automata")];
-[assembly:AssemblyCopyrightAttribute("Copyright (c)  2007")];
-[assembly:AssemblyTrademarkAttribute("")];
-[assembly:AssemblyCultureAttribute("")];
-
-//
-// Version information for an assembly consists of the following four values:
-//
-//      Major Version
-//      Minor Version
-//      Build Number
-//      Revision
-//
-// You can specify all the value or you can default the Revision and Build Numbers
-// by using the '*' as shown below:
-
-[assembly:AssemblyVersionAttribute("1.0.*")];
-
-[assembly:ComVisible(false)];
-
-[assembly:CLSCompliantAttribute(true)];
-
-[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)];
diff --git a/examples/parallel_for/game_of_life.NET/src/Board.h b/examples/parallel_for/game_of_life.NET/src/Board.h
deleted file mode 100644
index c64129a..0000000
--- a/examples/parallel_for/game_of_life.NET/src/Board.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks.
-
-    Threading Building Blocks is free software; you can redistribute it
-    and/or modify it under the terms of the GNU General Public License
-    version 2 as published by the Free Software Foundation.
-
-    Threading Building Blocks is distributed in the hope that it will be
-    useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-    of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with Threading Building Blocks; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    As a special exception, you may use this file as part of a free software
-    library without restriction.  Specifically, if other files instantiate
-    templates or use macros or inline functions from this file, or you compile
-    this file and link it with other files to produce an executable, this
-    file does not by itself cause the resulting executable to be covered by
-    the GNU General Public License.  This exception does not however
-    invalidate any other reasons why the executable file might be covered by
-    the GNU General Public License.
-*/
-
-#ifndef __BOARD_H__ 
-#define __BOARD_H__
-
-#define WIN32_LEAN_AND_MEAN
-
-#ifndef _CONSOLE
-#include <windows.h>
-
-using namespace System;
-using namespace System::ComponentModel;
-using namespace System::Collections;
-using namespace System::Windows::Forms;
-using namespace System::Data;
-using namespace System::Drawing;
-#define LabelPtr Label^
-#define BoardPtr Board^
-#else
-#define LabelPtr int*
-#define BoardPtr Board*
-#endif
-
-struct Matrix 
-{
-    int width;
-    int height;
-    char* data;
-};
-
-#ifndef _CONSOLE
-public ref class Board : public System::Windows::Forms::UserControl
-#else
-class Board
-#endif
-    {
-    public:
-        Board(int width, int height, int squareSize, LabelPtr counter);        
-        virtual ~Board();
-        void seed(int s);
-        void seed(const BoardPtr s);
-#ifndef _CONSOLE
-    protected: 
-        virtual void OnPaint(PaintEventArgs^ e) override;        
-        void Board::draw(Graphics^ g);
-
-    private:
-        System::ComponentModel::Container ^components;
-
-#pragma region Windows Form Designer generated code
-        void InitializeComponent(void)
-        {
-            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
-        }
-#pragma endregion
-
-    private: delegate void drawDelegate(Int32);
-    public:
-        //! Called from the Evolution thread
-        void draw( Int32 nCurIteration )
-        {
-            if (this->InvokeRequired)
-            {
-                drawDelegate^ d = gcnew drawDelegate(this, &Board::draw);
-                IAsyncResult^ result = BeginInvoke(d, nCurIteration);
-                EndInvoke(result);
-                return;
-            }
-            m_counter->Text = nCurIteration.ToString();
-            Invalidate();
-        }
-#endif
-    public:
-        Matrix *m_matrix;    
-
-    private:
-#ifndef _CONSOLE
-        SolidBrush^ m_occupiedBrush;
-        SolidBrush^ m_freeBrush;
-        Graphics^ m_graphics;
-        Graphics^ m_mem_dc;
-        Bitmap^ m_bmp;
-#endif
-        int m_width;
-        int m_height;
-        int m_squareSize;
-        LabelPtr m_counter;
-    };
-#endif
diff --git a/examples/parallel_for/game_of_life.NET/src/Evolution.cpp b/examples/parallel_for/game_of_life.NET/src/Evolution.cpp
deleted file mode 100644
index dff5cdb..0000000
--- a/examples/parallel_for/game_of_life.NET/src/Evolution.cpp
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks.
-
-    Threading Building Blocks is free software; you can redistribute it
-    and/or modify it under the terms of the GNU General Public License
-    version 2 as published by the Free Software Foundation.
-
-    Threading Building Blocks is distributed in the hope that it will be
-    useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-    of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with Threading Building Blocks; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    As a special exception, you may use this file as part of a free software
-    library without restriction.  Specifically, if other files instantiate
-    templates or use macros or inline functions from this file, or you compile
-    this file and link it with other files to produce an executable, this
-    file does not by itself cause the resulting executable to be covered by
-    the GNU General Public License.  This exception does not however
-    invalidate any other reasons why the executable file might be covered by
-    the GNU General Public License.
-*/
-
-/*
-    Evolution.cpp: implementation file for evolution classes; evolution 
-                  classes do looped evolution of patterns in a defined 
-                  2 dimensional space
-*/
-
-#include "Evolution.h"
-#include "Board.h"
-
-#ifdef USE_SSE
-#define GRAIN_SIZE 14
-#else
-#define GRAIN_SIZE 4000
-#endif
-#define TIME_SLICE 330
-
-/*
-    Evolution
-*/
-
-/**
-    Evolution::UpdateMatrix() - moves the calculated destination data 
-    to the source data block. No destination zeroing is required since it will 
-    be completely overwritten during the next calculation cycle.
-**/
-void Evolution::UpdateMatrix()
-{
-    memcpy(m_matrix->data, m_dest, m_size);
-}
-
-/*
-    SequentialEvolution
-*/
-
-//! SequentialEvolution::Run - begins looped evolution
-#ifndef _CONSOLE
-void SequentialEvolution::Run()
-{
-#else
-void SequentialEvolution::Run(double execution_time, int nthread)
-{
-    printf("Starting game (Sequential evolution)\n");
-#endif
-
-    m_nIteration = 0;
-    m_serial_time = 0;
-    tbb::tick_count t0 = tbb::tick_count::now();
-    while (!m_done)
-    {
-        if( !is_paused ) 
-        {
-            tbb::tick_count t = tbb::tick_count::now();
-            Step();
-            tbb::tick_count t1 = tbb::tick_count::now();
-            ++m_nIteration;
-            double  work_time = (t1-t0).seconds();
-#ifndef _CONSOLE
-            if ( work_time * 1000 < TIME_SLICE )
-                continue;
-            m_serial_time += work_time;
-            m_board->draw(m_nIteration);
-#else
-            m_serial_time += work_time;
-#endif
-        }
-        //! Let the parallel algorithm work uncontended almost the same time
-        //! as the serial one. See ParallelEvolution::Run() as well.
-#ifndef _CONSOLE
-        m_evt_start_parallel->Set();
-        m_evt_start_serial->WaitOne();
-        t0 = tbb::tick_count::now();
-#else
-        t0 = tbb::tick_count::now();
-        if(m_serial_time > execution_time)
-        {
-            printf("iterations count = %d time = %g\n", m_nIteration, m_serial_time);
-            break;
-        }
-#endif
-    }
-}
-
-//! SequentialEvolution::Step() - override of step method
-void SequentialEvolution::Step()
-{
-        if( !is_paused ) 
-    {
-#ifdef USE_SSE
-    UpdateState(m_matrix, m_matrix->data, 0, m_matrix->height);
-#else
-    UpdateState(m_matrix, m_dest, 0, (m_matrix->width * m_matrix->height)-1);
-    UpdateMatrix();
-#endif
-        }
-}
-
-/*
-    ParallelEvolution
-*/
-
-//! SequentialEvolution::Run - begins looped evolution
-#ifndef _CONSOLE
-void ParallelEvolution::Run()
-{
-#else
-void ParallelEvolution::Run(double execution_time, int nthread)
-{
-    if(nthread == tbb::task_scheduler_init::automatic)
-        printf("Starting game (Parallel evolution for automatic number of thread(s))\n");
-    else
-        printf("Starting game (Parallel evolution for %d thread(s))\n", nthread);
-#endif
-
-    m_nIteration = 0;
-    m_parallel_time = 0;
-
-#ifndef _CONSOLE
-    //! start task scheduler as necessary
-    if (m_pInit == NULL)
-    {
-        m_pInit = new tbb::task_scheduler_init();
-    }
-    m_evt_start_parallel->WaitOne();
-#else
-    tbb::task_scheduler_init init(nthread);
-#endif
-
-    double  work_time = m_serial_time;
-    tbb::tick_count t0 = tbb::tick_count::now();
-
-    while (!m_done)
-    {
-        if( !is_paused ) 
-        {
-            tbb::tick_count t = tbb::tick_count::now();
-            Step();
-            tbb::tick_count t1 = tbb::tick_count::now();
-            ++m_nIteration;
-            double real_work_time = (t1-t0).seconds();
-#ifndef _CONSOLE
-            if ( real_work_time < work_time )
-                continue;
-            m_parallel_time += real_work_time;
-            m_board->draw(m_nIteration); 
-#else
-            m_parallel_time += real_work_time;
-#endif
-        }
-        //! Let the serial algorithm work the same time as the parallel one.
-#ifndef _CONSOLE
-        m_evt_start_serial->Set();
-        m_evt_start_parallel->WaitOne();
-
-        work_time = m_serial_time - m_parallel_time;
-        t0 = tbb::tick_count::now();
-#else
-        t0 = tbb::tick_count::now();
-        if(m_parallel_time > execution_time)
-        {
-            printf("iterations count = %d time = %g\n", m_nIteration, m_parallel_time);
-            init.terminate();
-            break;
-        }
-#endif
-    }
-}
-
-/**
-    class tbb_parallel_task
-    
-    TBB requires a class for parallel loop implementations. The actual 
-    loop "chunks" are performed using the () operator of the class. 
-    The blocked_range contains the range to calculate. Please see the 
-    TBB documentation for more information.
-**/
-#ifndef _CONSOLE
-public class tbb_parallel_task
-#else
-class tbb_parallel_task
-#endif
-{
-public:
-    static void set_values (Matrix* source, char* dest)
-    {
-        m_source = source;
-        m_dest = dest;
-        return;
-    }
-
-    void operator()( const tbb::blocked_range<size_t>& r ) const 
-    {
-        int begin = (int)r.begin();            //! capture lower range number for this chunk
-        int end = (int)r.end();                //! capture upper range number for this chunk
-        UpdateState(m_source, m_dest, begin, end);
-    }
-
-    tbb_parallel_task () {}
-
-private:
-    static Matrix* m_source;
-    static char* m_dest;
-};
-
-Matrix* tbb_parallel_task::m_source;
-char* tbb_parallel_task::m_dest;
-
-//! ParallelEvolution::Step() - override of Step method
-void ParallelEvolution::Step()
-{
-    size_t begin = 0;                   //! beginning cell position
-#ifdef USE_SSE
-    size_t end = m_matrix->height;      //! ending cell position
-#else
-    size_t end = m_size-1;              //! ending cell position
-#endif
-
-    //! set matrix pointers
-    tbb_parallel_task::set_values(m_matrix, m_dest);
-
-    //! do calculation loop
-    parallel_for (tbb::blocked_range<size_t> (begin, end, GRAIN_SIZE), tbb_parallel_task());
-    UpdateMatrix();
-}
diff --git a/examples/parallel_for/game_of_life.NET/src/Evolution.h b/examples/parallel_for/game_of_life.NET/src/Evolution.h
deleted file mode 100644
index 48a06a2..0000000
--- a/examples/parallel_for/game_of_life.NET/src/Evolution.h
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks.
-
-    Threading Building Blocks is free software; you can redistribute it
-    and/or modify it under the terms of the GNU General Public License
-    version 2 as published by the Free Software Foundation.
-
-    Threading Building Blocks is distributed in the hope that it will be
-    useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-    of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with Threading Building Blocks; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    As a special exception, you may use this file as part of a free software
-    library without restriction.  Specifically, if other files instantiate
-    templates or use macros or inline functions from this file, or you compile
-    this file and link it with other files to produce an executable, this
-    file does not by itself cause the resulting executable to be covered by
-    the GNU General Public License.  This exception does not however
-    invalidate any other reasons why the executable file might be covered by
-    the GNU General Public License.
-*/
-
-/** 
-    Evolution.h: Header file for evolution classes; evolution classes do 
-    looped evolution of patterns in a defined 2 dimensional space 
-**/
-
-#ifndef __EVOLUTION_H__
-#define __EVOLUTION_H__
-
-#include "Board.h"
-#include <string.h>
-#include <stdlib.h>
-#include <stdio.h>
-
-#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"
-#include "tbb/tick_count.h"
-
-#ifndef _CONSOLE
-#include <windows.h>
-using namespace System::Threading;
-#else
-typedef unsigned int Int32;
-#endif
-
-void UpdateState(Matrix * m_matrix, char * dest ,int begin, int end);
-
-/**
-    class Evolution - base class for SequentialEvolution and ParallelEvolution
-**/
-#ifndef _CONSOLE
-public ref class Evolution abstract
-#else
-class Evolution
-#endif
-{
-public:
-    Evolution( Matrix *m,                //! beginning matrix including initial pattern
-               BoardPtr board              //! the board to update
-             ) : m_matrix(m), m_board(board), 
-                 m_size(m_matrix->height * m_matrix->width), m_done(false)
-    {
-        //! allocate memory for second matrix data block
-        m_dest = new char[m_size];
-        is_paused = false;
-#ifdef _CONSOLE
-        m_serial_time = 0;
-#endif
-    }
-
-    virtual ~Evolution()
-    {
-        delete[] m_dest;
-    }
-
-    //! Run() - begins looped evolution
-#ifndef _CONSOLE
-    virtual void Run() = 0;
-#else
-    virtual void Run(double execution_time, int nthread) = 0;
-#endif
-
-    //! Quit() - tell the thread to terminate
-    virtual void Quit() { m_done = true; }
-    
-    //! Step() - performs a single evolutionary generation computation on the game matrix
-    virtual void Step() = 0;
-
-    //! SetPause() - change condition of variable is_paused
-    virtual void SetPause(bool condition)
-    {
-        if ( condition == true )
-            is_paused = true;
-        else
-            is_paused = false;
-    }
-    
-protected:
-    /** 
-        UpdateMatrix() - moves the previous destination data to the source 
-        data block and zeros out destination.
-    **/
-    void UpdateMatrix();
-
-protected:
-    Matrix*         m_matrix;       //! Pointer to initial matrix
-    char*           m_dest;         //! Pointer to calculation destination data    
-    BoardPtr        m_board;        //! The game board to update
-    int             m_size;         //! size of the matrix data block
-    volatile bool   m_done;         //! a flag used to terminate the thread
-    Int32           m_nIteration;   //! current calculation cycle index
-    volatile bool   is_paused;      //! is needed to perform next iteration
-    
-    //! Calculation time of the sequential version (since the start), seconds.
-    /**
-        This member is updated by the sequential version and read by parallel,
-        so no synchronization is necessary.
-    **/
-#ifndef _CONSOLE
-    static volatile double m_serial_time = 0;
-
-    static System::Threading::AutoResetEvent    ^m_evt_start_serial = gcnew AutoResetEvent(false),
-                                                ^m_evt_start_parallel = gcnew AutoResetEvent(false);
-#else
-    double m_serial_time;
-#endif
-};
-
-/**
-    class SequentialEvolution - derived from Evolution - calculate life generations serially
-**/
-#ifndef _CONSOLE
-public ref class SequentialEvolution: public Evolution
-#else
-class SequentialEvolution: public Evolution
-#endif
-{
-public:
-    SequentialEvolution(Matrix *m, BoardPtr board)
-                       : Evolution(m, board)
-    {}
-#ifndef _CONSOLE        
-    virtual void Run() override;
-    virtual void Step() override;
-#else
-    virtual void Run(double execution_time, int nthread);
-    virtual void Step();
-#endif
-
-};
-
-/**
-    class ParallelEvolution - derived from Evolution - calculate life generations
-    in parallel using Intel's TBB package
-**/
-#ifndef _CONSOLE
-public ref class ParallelEvolution: public Evolution
-#else
-class ParallelEvolution: public Evolution
-#endif
-{
-public:
-
-    ParallelEvolution(Matrix *m, BoardPtr board)
-                     : Evolution(m, board),
-                       m_parallel_time(0)
-    {
-        // instantiate a task_scheduler_init object and save a pointer to it
-        m_pInit = NULL;
-    }
-    
-    ~ParallelEvolution()
-    {
-        //! delete task_scheduler_init object
-        if (m_pInit != NULL)
-            delete m_pInit;
-    }
-#ifndef _CONSOLE
-    virtual void Run() override;
-    virtual void Step() override;
-#else
-    virtual void Run(double execution_time, int nthread);
-    virtual void Step();
-#endif
-    
-
-private:
-    tbb::task_scheduler_init* m_pInit;
-
-    double m_parallel_time;
-};
-
-#endif
diff --git a/examples/parallel_for/game_of_life.NET/src/Form1.h b/examples/parallel_for/game_of_life.NET/src/Form1.h
deleted file mode 100644
index 97563b1..0000000
--- a/examples/parallel_for/game_of_life.NET/src/Form1.h
+++ /dev/null
@@ -1,314 +0,0 @@
-/*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks.
-
-    Threading Building Blocks is free software; you can redistribute it
-    and/or modify it under the terms of the GNU General Public License
-    version 2 as published by the Free Software Foundation.
-
-    Threading Building Blocks is distributed in the hope that it will be
-    useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-    of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with Threading Building Blocks; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    As a special exception, you may use this file as part of a free software
-    library without restriction.  Specifically, if other files instantiate
-    templates or use macros or inline functions from this file, or you compile
-    this file and link it with other files to produce an executable, this
-    file does not by itself cause the resulting executable to be covered by
-    the GNU General Public License.  This exception does not however
-    invalidate any other reasons why the executable file might be covered by
-    the GNU General Public License.
-*/
-
-#ifndef _CONSOLE
-#ifndef __FORM1_H__
-#define __FORM1_H__
-
-#include <time.h>
-#include "Board.h"
-#include "Evolution.h"
-
-#define BOARD_SQUARE_SIZE 2
-
-    using namespace System;
-    using namespace System::ComponentModel;
-    using namespace System::Collections;
-    using namespace System::Windows::Forms;
-    using namespace System::Data;
-    using namespace System::Drawing;
-
-    public ref class Form1 : public System::Windows::Forms::Form
-    {
-    public:
-        Form1(void)
-        {
-            InitializeComponent();
-
-            FormBorderStyle = System::Windows::Forms::FormBorderStyle::FixedDialog;
-            ClientSize = System::Drawing::Size(1206, 600+m_ribbonHeight+menuStrip1->Height);
-
-            int boardWidth = (ClientRectangle.Width/2-m_sepWidth/2)/BOARD_SQUARE_SIZE;
-            int boardHeight = (ClientRectangle.Height-menuStrip1->Height-m_ribbonHeight)/BOARD_SQUARE_SIZE;
-
-            m_board1 = gcnew Board(boardWidth, boardHeight, BOARD_SQUARE_SIZE, seqGen);
-            m_board2 = gcnew Board(boardWidth, boardHeight, BOARD_SQUARE_SIZE, parGen);
-            
-            Controls->Add(m_board1);
-            Controls->Add(m_board2);
-
-            m_board1->Location = System::Drawing::Point(2, m_ribbonHeight + menuStrip1->Height);
-            m_board2->Location = System::Drawing::Point(2 + boardWidth*BOARD_SQUARE_SIZE + m_sepWidth/2, m_ribbonHeight + menuStrip1->Height);
-
-            m_seq = gcnew SequentialEvolution(m_board1->m_matrix, m_board1);
-            m_par = gcnew ParallelEvolution(m_board2->m_matrix, m_board2);
-
-            m_seqThread = gcnew Thread(gcnew ThreadStart(m_seq, &SequentialEvolution::Run));
-            m_parThread = gcnew Thread(gcnew ThreadStart(m_par, &ParallelEvolution::Run));        
-
-            Thread::CurrentThread->Priority = ThreadPriority::AboveNormal;
-
-            m_suspend = true;
-        }
-    protected:
-        ~Form1()
-        {
-            if (components)
-            {
-                delete components;
-            }
-        }
-    private: System::Windows::Forms::MenuStrip^  menuStrip1;
-    private: System::Windows::Forms::ToolStripMenuItem^  fileToolStripMenuItem;
-    private: System::Windows::Forms::ToolStripMenuItem^  exitToolStripMenuItem;
-    private: System::Windows::Forms::ToolStripMenuItem^  gameToolStripMenuItem;
-    private: System::Windows::Forms::ToolStripMenuItem^  seedToolStripMenuItem;
-    private: System::Windows::Forms::ToolStripMenuItem^  runToolStripMenuItem;
-    private: System::Windows::Forms::ToolStripMenuItem^  pauseToolStripMenuItem;
-    private: Board^ m_board1;
-    private: Board^ m_board2;
-    private: System::Windows::Forms::Label^  Sequential;
-    private: System::Windows::Forms::Label^  label1;
-    private: static const int m_sepWidth = 5;
-    private: static const int m_ribbonHeight = 26;
-    private: SequentialEvolution^ m_seq;
-    private: ParallelEvolution^ m_par;
-    private: Thread^ m_seqThread;
-    private: Thread^ m_parThread;
-    private: System::Windows::Forms::Label^  seqGen;
-    private: System::Windows::Forms::Label^  parGen;
-    private: bool m_suspend;
-
-    private:
-        System::ComponentModel::Container ^components;
-
-#pragma region Windows Form Designer generated code
-        void InitializeComponent(void)
-        {
-            this->menuStrip1 = (gcnew System::Windows::Forms::MenuStrip());
-            this->fileToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
-            this->exitToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
-            this->gameToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
-            this->seedToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
-            this->runToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
-            this->pauseToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
-            this->Sequential = (gcnew System::Windows::Forms::Label());
-            this->label1 = (gcnew System::Windows::Forms::Label());
-            this->seqGen = (gcnew System::Windows::Forms::Label());
-            this->parGen = (gcnew System::Windows::Forms::Label());
-            this->menuStrip1->SuspendLayout();
-            this->SuspendLayout();
-            // 
-            // menuStrip1
-            // 
-            this->menuStrip1->Items->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(2) 
-                {this->fileToolStripMenuItem, this->gameToolStripMenuItem});
-            this->menuStrip1->Location = System::Drawing::Point(0, 0);
-            this->menuStrip1->Name = L"menuStrip1";
-            this->menuStrip1->Padding = System::Windows::Forms::Padding(8, 2, 0, 2);
-            this->menuStrip1->Size = System::Drawing::Size(1600, 26);
-            this->menuStrip1->TabIndex = 0;
-            this->menuStrip1->Text = L"menuStrip1";
-            this->menuStrip1->ItemClicked += gcnew System::Windows::Forms::ToolStripItemClickedEventHandler(this, &Form1::menuStrip1_ItemClicked);
-            // 
-            // fileToolStripMenuItem
-            // 
-            this->fileToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(1) {this->exitToolStripMenuItem});
-            this->fileToolStripMenuItem->Name = L"fileToolStripMenuItem";
-            this->fileToolStripMenuItem->Size = System::Drawing::Size(40, 22);
-            this->fileToolStripMenuItem->Text = L"File";
-            // 
-            // exitToolStripMenuItem
-            // 
-            this->exitToolStripMenuItem->Name = L"exitToolStripMenuItem";
-            this->exitToolStripMenuItem->Size = System::Drawing::Size(99, 22);
-            this->exitToolStripMenuItem->Text = L"Exit";
-            this->exitToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::OnExit);
-            // 
-            // gameToolStripMenuItem
-            // 
-            this->gameToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(3) {this->seedToolStripMenuItem, 
-                this->runToolStripMenuItem, this->pauseToolStripMenuItem});
-            this->gameToolStripMenuItem->Name = L"gameToolStripMenuItem";
-            this->gameToolStripMenuItem->Size = System::Drawing::Size(59, 22);
-            this->gameToolStripMenuItem->Text = L"Game";
-            // 
-            // seedToolStripMenuItem
-            // 
-            this->seedToolStripMenuItem->Name = L"seedToolStripMenuItem";
-            this->seedToolStripMenuItem->Size = System::Drawing::Size(115, 22);
-            this->seedToolStripMenuItem->Text = L"Seed";
-            this->seedToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::OnSeed);
-            // 
-            // runToolStripMenuItem
-            // 
-            this->runToolStripMenuItem->Enabled = false;
-            this->runToolStripMenuItem->Name = L"runToolStripMenuItem";
-            this->runToolStripMenuItem->Size = System::Drawing::Size(115, 22);
-            this->runToolStripMenuItem->Text = L"Run";
-            this->runToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::OnRun);
-            // 
-            // pauseToolStripMenuItem
-            // 
-            this->pauseToolStripMenuItem->Enabled = false;
-            this->pauseToolStripMenuItem->Name = L"pauseToolStripMenuItem";
-            this->pauseToolStripMenuItem->Size = System::Drawing::Size(115, 22);
-            this->pauseToolStripMenuItem->Text = L"Pause";
-            this->pauseToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::OnPauseResume);
-            // 
-            // Sequential
-            // 
-            this->Sequential->AutoSize = true;
-            this->Sequential->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, 
-                static_cast<System::Byte>(0)));
-            this->Sequential->Location = System::Drawing::Point(12, 32);
-            this->Sequential->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
-            this->Sequential->Name = L"Sequential";
-            this->Sequential->Size = System::Drawing::Size(239, 18);
-            this->Sequential->TabIndex = 1;
-            this->Sequential->Text = L"Sequential Algorithm      generation:";
-            // 
-            // label1
-            // 
-            this->label1->AutoSize = true;
-            this->label1->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, 
-                static_cast<System::Byte>(0)));
-            this->label1->Location = System::Drawing::Point(813, 32);
-            this->label1->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
-            this->label1->Name = L"label1";
-            this->label1->Size = System::Drawing::Size(219, 18);
-            this->label1->TabIndex = 2;
-            this->label1->Text = L"Parallel Algorithm     generation: ";
-            // 
-            // seqGen
-            // 
-            this->seqGen->AutoSize = true;
-            this->seqGen->Location = System::Drawing::Point(289, 35);
-            this->seqGen->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
-            this->seqGen->Name = L"seqGen";
-            this->seqGen->Size = System::Drawing::Size(16, 17);
-            this->seqGen->TabIndex = 3;
-            this->seqGen->Text = L"0";
-            // 
-            // parGen
-            // 
-            this->parGen->AutoSize = true;
-            this->parGen->Location = System::Drawing::Point(1068, 35);
-            this->parGen->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
-            this->parGen->Name = L"parGen";
-            this->parGen->Size = System::Drawing::Size(16, 17);
-            this->parGen->TabIndex = 4;
-            this->parGen->Text = L"0";
-            // 
-            // Form1
-            // 
-            this->AutoScaleDimensions = System::Drawing::SizeF(8, 16);
-            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
-            this->ClientSize = System::Drawing::Size(1600, 738);
-            this->Controls->Add(this->parGen);
-            this->Controls->Add(this->seqGen);
-            this->Controls->Add(this->label1);
-            this->Controls->Add(this->Sequential);
-            this->Controls->Add(this->menuStrip1);
-            this->MainMenuStrip = this->menuStrip1;
-            this->Margin = System::Windows::Forms::Padding(4);
-            this->MaximizeBox = false;
-            this->Name = L"Form1";
-            this->Text = L"Game of Life";
-            this->menuStrip1->ResumeLayout(false);
-            this->menuStrip1->PerformLayout();
-            this->ResumeLayout(false);
-            this->PerformLayout();
-
-        }
-#pragma endregion    
-    protected: 
-        void CloseApp ()
-        {
-            m_seq->Quit();
-            m_par->Quit();
-            //! Perform a very ungracious exit, should coordinate the threads
-            System::Environment::Exit(0);            
-        }
-    
-    protected: 
-        virtual void OnPaint(PaintEventArgs^ e) override
-        {
-        }
-
-        virtual void OnFormClosing(FormClosingEventArgs^ e) override
-        { 
-            CloseApp();
-        }
-    
-        void OnExit(System::Object^ sender, System::EventArgs^ e)
-        {                
-            CloseApp();
-        }
-
-        void OnSeed(System::Object^ sender, System::EventArgs^ e)
-        {
-            this->seedToolStripMenuItem->Enabled = false;
-            this->runToolStripMenuItem->Enabled = true;            
-            time_t now = time(NULL);
-            this->m_board1->seed((int)now);
-            this->m_board2->seed(this->m_board1);
-            this->Invalidate();
-        }
-
-        void OnRun(System::Object^ sender, System::EventArgs^ e)
-        {    
-            this->runToolStripMenuItem->Enabled = false;        
-            this->pauseToolStripMenuItem->Enabled = true;
-            m_seqThread->Start();
-            m_parThread->Start();    
-        }
-
-        void OnPauseResume(System::Object^ sender, System::EventArgs^ e)
-        {    
-            if (m_suspend)
-            {
-                m_seq->SetPause(true);
-                m_par->SetPause(true);
-                this->pauseToolStripMenuItem->Text = L"Resume";
-            }
-            else
-            {
-                m_seq->SetPause(false);
-                m_par->SetPause(false);            
-                this->pauseToolStripMenuItem->Text = L"Pause";
-            }
-            m_suspend = !m_suspend;
-        }
-
-    private: 
-        System::Void menuStrip1_ItemClicked(System::Object^  sender, System::Windows::Forms::ToolStripItemClickedEventArgs^  e) 
-        {}
-};
-#endif
-#endif
diff --git a/examples/parallel_for/game_of_life.NET/src/Game_of_life.cpp b/examples/parallel_for/game_of_life.NET/src/Game_of_life.cpp
deleted file mode 100644
index 5657a05..0000000
--- a/examples/parallel_for/game_of_life.NET/src/Game_of_life.cpp
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks.
-
-    Threading Building Blocks is free software; you can redistribute it
-    and/or modify it under the terms of the GNU General Public License
-    version 2 as published by the Free Software Foundation.
-
-    Threading Building Blocks is distributed in the hope that it will be
-    useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-    of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with Threading Building Blocks; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    As a special exception, you may use this file as part of a free software
-    library without restriction.  Specifically, if other files instantiate
-    templates or use macros or inline functions from this file, or you compile
-    this file and link it with other files to produce an executable, this
-    file does not by itself cause the resulting executable to be covered by
-    the GNU General Public License.  This exception does not however
-    invalidate any other reasons why the executable file might be covered by
-    the GNU General Public License.
-*/
-
-/* 
-    Game_of_life.cpp : 
-                      main project file.
-*/
-#include "Board.h"
-#include "Form1.h"
-
-#define WIN32_LEAN_AND_MEAN
-
-#ifndef _CONSOLE
-#include <windows.h>
-#else
-#include <iostream>
-#include <sstream>
-#include <time.h>
-#include "Evolution.h"
-
-#define BOARD_SQUARE_SIZE 2
-
-int low;                            //! lower range limit of threads
-int high;                           //! high range limit of threads
-double execution_time;              //! time for game of life iterations
-#endif
-
-Board::Board(int width, int height, int squareSize, LabelPtr counter)
-: m_width(width), m_height(height), m_squareSize(squareSize), m_counter(counter)
-{
-#ifndef _CONSOLE
-    InitializeComponent();
-    DoubleBuffered = true;
-
-    this->Width = m_squareSize*width;
-    this->Height = m_squareSize*height;
-#endif
-    m_matrix = new Matrix();
-    m_matrix->width = width;
-    m_matrix->height = height;
-    m_matrix->data = new char[width*height];
-    memset(m_matrix->data, 0, width*height);
-#ifndef _CONSOLE
-    m_occupiedBrush = gcnew SolidBrush(Color::Black);
-    m_freeBrush = gcnew SolidBrush(Color::LightGray);
-    
-    m_graphics = CreateGraphics();
-    m_bmp = gcnew Bitmap(Width, Height);
-    m_mem_dc = Graphics::FromImage(m_bmp);
-#endif
-}
-
-Board::~Board()
-{
-#ifndef _CONSOLE
-    if (components)
-    {
-        delete components;
-    }
-#endif
-    delete[] m_matrix->data;
-    delete m_matrix;
-}
-
-void Board::seed(int s)
-{        
-    srand(s);
-    for (int j=0; j<m_height; j++)
-    {
-        for (int i=0; i<m_width; i++)
-        {        
-            int x = rand()/(int)(((unsigned)RAND_MAX + 1) / 100);
-            m_matrix->data[i+j*m_width] = x>75? 1: 0;               // 25% occupied
-        }
-    }
-#ifndef _CONSOLE
-    Invalidate();
-#endif
-}
-
-void Board::seed( const BoardPtr src )
-{        
-            memcpy(m_matrix->data, src->m_matrix->data, m_height*m_width);
-#ifndef _CONSOLE
-    Invalidate();
-#endif
-}
-
-#ifndef _CONSOLE
-void Board::draw(Graphics^ g)
-{
-    m_mem_dc->FillRectangle(m_freeBrush, Drawing::Rectangle(0, 0, m_width*m_squareSize, m_height*m_squareSize));
-    for (int j=0; j<m_height; j++)
-    {
-        for (int i=0; i<m_width; i++)
-        {    
-            if ( m_matrix->data[i+j*m_width] )
-            {
-                m_mem_dc->FillRectangle(m_occupiedBrush, Drawing::Rectangle(i*m_squareSize, j*m_squareSize, m_squareSize, m_squareSize));
-            }
-        }
-    }
-    g->DrawImage(m_bmp, 0, 0);
-}
-
-void Board::OnPaint(PaintEventArgs^ e)
-{
-    draw(e->Graphics);
-}
-
-[STAThreadAttribute]
-int main(array<System::String ^> ^args)
-{
-    // Enabling Windows XP visual effects before any controls are created
-    Application::EnableVisualStyles();
-    Application::SetCompatibleTextRenderingDefault(false); 
-
-    // Create the main window and run it
-    Application::Run(gcnew Form1());
-    return 0;
-}
-#else
-
-//! Print usage of this program
-void PrintUsage() 
-{
-    printf("Usage: gol [M[:N] -t execution_time]\nM and N are a range of numbers of threads to be used.\nexecution_time is a time (in sec) for execution game_of_life iterations\n");
-    printf("Default values:\nM:\t\tautomatic\nN:\t\tM\nexecution_time:\t10\n");
-}
-
-//! Parse command line
-bool ParseCommandLine(int argc, char * argv []) 
-{
-    char* s = argv[1];
-    char* end;
-    //! command line without parameters
-    if(argc == 1)
-    {
-        low = tbb::task_scheduler_init::automatic;
-        high = low;
-        execution_time = 5;
-        return true;
-    }
-    //! command line with parameters
-    if(argc != 4)
-    {
-        PrintUsage();
-        return false;
-    }
-    if(std::string("-t") != argv[argc-2])
-    //! process M[:N] parameter
-    high = strtol(s,&end,0);
-    low = strtol(s,&end,0);
-    switch( *end ) 
-    {
-        case ':': 
-            high = strtol(end+1,0,0); 
-            break;
-        case '\0':
-            break;
-        default:
-            PrintUsage();
-            return false;
-    }
-    if (high < low)
-    {
-        std::cout << "Set correct range. Current range: " << low << ":" << high << std::endl;
-        PrintUsage();
-        return false;
-
-    }
-    //! process execution_time parameter
-    execution_time = strtol(argv[argc-1],&end,0);
-    return true;
-}
-
-int main( int argc, char* argv[] ) 
-{
-    if(!ParseCommandLine( argc, argv ))
-        return 1;
-    SequentialEvolution* m_seq;
-    ParallelEvolution* m_par;
-    Board* m_board1;
-    Board* m_board2; 
-    int* count = NULL;
-   
-    int boardWidth = 300;
-    int boardHeight = 300;
-
-    m_board1 = new Board(boardWidth, boardHeight, BOARD_SQUARE_SIZE, count);
-    m_board2 = new Board(boardWidth, boardHeight, BOARD_SQUARE_SIZE, count);
-
-    time_t now = time(NULL);
-    printf("Generate Game of life board\n");
-    m_board1->seed((int)now);
-    m_board2->seed(m_board1);
-
-    m_seq = new SequentialEvolution(m_board1->m_matrix, m_board1);
-    m_seq->Run(execution_time, 1);
-    delete m_seq;
-
-    m_par = new ParallelEvolution(m_board2->m_matrix, m_board2);
-    for( int p = low; p <= high; ++p ) 
-    {
-        m_par->Run(execution_time, p);
-    }
-    delete m_par;
-
-    delete m_board1;
-    delete m_board2;
-    return 0;
-}
-#endif
diff --git a/examples/parallel_for/game_of_life.NET/src/Update_state.cpp b/examples/parallel_for/game_of_life.NET/src/Update_state.cpp
deleted file mode 100644
index 84439b9..0000000
--- a/examples/parallel_for/game_of_life.NET/src/Update_state.cpp
+++ /dev/null
@@ -1,410 +0,0 @@
-/*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks.
-
-    Threading Building Blocks is free software; you can redistribute it
-    and/or modify it under the terms of the GNU General Public License
-    version 2 as published by the Free Software Foundation.
-
-    Threading Building Blocks is distributed in the hope that it will be
-    useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-    of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with Threading Building Blocks; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    As a special exception, you may use this file as part of a free software
-    library without restriction.  Specifically, if other files instantiate
-    templates or use macros or inline functions from this file, or you compile
-    this file and link it with other files to produce an executable, this
-    file does not by itself cause the resulting executable to be covered by
-    the GNU General Public License.  This exception does not however
-    invalidate any other reasons why the executable file might be covered by
-    the GNU General Public License.
-*/
-
-#include "Evolution.h"
-
-#ifdef USE_SSE 
-/* Update states with SSE */
-
-#include <xmmintrin.h>
-#include <emmintrin.h>
-
-inline void create_record( char * src, unsigned * dst, unsigned width)
-{
-    dst[0] |= src[width - 1];
-    for( unsigned a=0; a<31u; ++a )
-        dst[0] |= src[a]<<(a+1);
-    unsigned a;
-    for( a=31u; a<width; ++a )
-        dst[(a+1)/32u] |= src[a]<<((a+1)%32u);
-    dst[(a+1)/32u] |= src[0]<<((a+1)%32u);
-}
-
-inline void sum_offset( __m128i * X, __m128i * A, __m128i * B, __m128i * C, 
-                        unsigned size_sse_ar, unsigned shift )
-{
-    for(unsigned i=0; i<size_sse_ar; ++i) 
-    {
-        __m128i tmp = _mm_and_si128(A[i],X[shift + i]);    
-        A[i]=_mm_xor_si128(A[i],X[shift + i]);    
-        C[i]=_mm_or_si128(C[i],_mm_and_si128(B[i],tmp));
-        B[i]=_mm_xor_si128(B[i],tmp);
-    }
-}
-
-inline void shift_left2D( __m128i * X, unsigned height, unsigned size_sse_row )
-{
-    for( unsigned b=0; b<height; ++b ) 
-    {
-        unsigned ind = b*size_sse_row;
-        unsigned x0 = X[ind].m128i_u32[0] & 1;
-
-        X[ind] =_mm_or_si128( _mm_srli_epi16(X[ind],1), 
-            _mm_slli_epi16( _mm_srli_si128( X[ind], 2), 15) );
-    
-        unsigned x1 = X[ind + 1].m128i_u32[0] & 1;
-        X[ind+1] =_mm_or_si128( _mm_srli_epi16( X[ind+1],1), 
-            _mm_slli_epi16( _mm_srli_si128( X[ind+1], 2), 15) );
-        X[ind].m128i_u32[3] |= x1<<31;
-        
-        unsigned x2 = X[ind + 2].m128i_u32[0] & 1;
-        X[ind+2] =_mm_or_si128( _mm_srli_epi16( X[ind+2],1), 
-            _mm_slli_epi16( _mm_srli_si128( X[ind+2], 2), 15) );
-        X[ind+1].m128i_u32[3] |= x2<<31;
-        
-        unsigned* dst = (unsigned*)&X[ind];
-        dst[301/32u] |= x0<<(301%32u);
-   }
-}
-
-inline void shift_right2D( __m128i * X, unsigned height, unsigned size_sse_row )
-{
-    for( unsigned b=0; b<height; ++b ) 
-    {
-        unsigned ind = b*size_sse_row;
-
-        unsigned x0 = X[ind].m128i_u32[3]; x0>>=31;
-        X[ind] =_mm_or_si128( _mm_slli_epi16(X[ind],1), 
-            _mm_srli_epi16( _mm_slli_si128( X[ind], 2), 15) );
-            
-        unsigned x1 = X[ind + 1].m128i_u32[3]; x1>>=31;
-        X[ind + 1] =_mm_or_si128( _mm_slli_epi16(X[ind + 1],1),
-                _mm_srli_epi16( _mm_slli_si128( X[ind + 1], 2), 15) );
-        X[ind + 1].m128i_u32[0] |= x0;
-                
-        unsigned* dst = (unsigned*)&X[ind];
-        unsigned x2 = dst[301/32u] & (1<<(301%32u)); x2>>=(301%32u);
-        X[ind + 2] =_mm_or_si128( _mm_slli_epi16(X[ind + 2],1),
-            _mm_srli_epi16( _mm_slli_si128( X[ind + 2], 2), 15) );        
-        X[ind + 2].m128i_u32[0] |= x1;    
-        X[ind].m128i_u32[0] |= x2;
-   }
-}
-
-void UpdateState(Matrix * m_matrix, char * dest ,int begin, int end)
-{
-    //300/128 + 1 =3, 3*300=900
-    unsigned size_sse_row = m_matrix->width/128 + 1; //3
-    unsigned size_sse_ar=size_sse_row * (end - begin); 
-    __m128i X[906], A[900], B[900], C[900];
-    char * mas  = m_matrix->data;
-    
-    for( unsigned i=0; i<size_sse_ar; ++i)
-    {
-        A[i].m128i_u32[0]=0;A[i].m128i_u32[1]=0;A[i].m128i_u32[2]=0;A[i].m128i_u32[3]=0;
-        B[i].m128i_u32[0]=0;B[i].m128i_u32[1]=0;B[i].m128i_u32[2]=0;B[i].m128i_u32[3]=0;
-        C[i].m128i_u32[0]=0;C[i].m128i_u32[1]=0;C[i].m128i_u32[2]=0;C[i].m128i_u32[3]=0;    
-    }
-
-    for( unsigned i=0; i<size_sse_ar+6; ++i)
-    {
-        X[i].m128i_u32[0]=0;X[i].m128i_u32[1]=0;X[i].m128i_u32[2]=0;X[i].m128i_u32[3]=0;
-    }
-
-    // create X[] with bounds
-    unsigned height = end - begin;
-    unsigned width = m_matrix->width;
-    for( unsigned b = 0 ; b < height; ++b ) 
-    {
-        char* src = &mas[(b + begin)*width];
-        unsigned* dst = (unsigned*)&X[(b+1)*size_sse_row];
-        create_record(src, dst, width);
-    }
-    // create high row in X[]
-    char * src;
-    if(begin == 0) 
-    {
-        src = &mas[(m_matrix->height-1)*width];
-    }
-    else 
-    {
-        src = &mas[(begin-1)*width];
-    }
-    unsigned* dst = (unsigned*)X;
-    create_record(src, dst, width);
-    
-    //create lower row in X[]
-    if(end == m_matrix->height ) 
-    {
-        src = mas;
-    }        
-    else 
-    {
-        src = &mas[end*width];
-    }
-    dst = (unsigned*)&X[(height+1)*size_sse_row];
-    create_record(src, dst, width);
-    
-    //sum( C, B, A, X+offset_for_upwards ); high-left friend
-    sum_offset(X,A,B,C,size_sse_ar, 0);
-    
-    //sum( C, B, A, X+offset_for_no_vertical_shift );
-    sum_offset(X,A,B,C,size_sse_ar, size_sse_row);
-    
-    //sum( C, B, A, X+offset_for_downwards );
-    sum_offset(X,A,B,C,size_sse_ar, 2*size_sse_row);
-
-    //shift_left( X ); (when view 2D) in our logic it is in right
-    height = end - begin + 2;
-    shift_left2D( X, height, size_sse_row);
-
-    //sum( C, B, A, X+offset_for_upwards ); high-left friend
-    sum_offset(X,A,B,C,size_sse_ar, 0);
-
-    //sum( C, B, A, X+offset_for_downwards );
-    sum_offset(X,A,B,C,size_sse_ar, 2*size_sse_row);
-
-    //shift_left( X ); (view in 2D) in our logic it is right shift
-    height = end - begin + 2;
-    shift_left2D( X, height, size_sse_row);
-    
-    //sum( C, B, A, X+offset_for_upwards ); high-right friend
-    sum_offset(X,A,B,C,size_sse_ar, 0);
-    
-    //sum( C, B, A, X+offset_for_no_vertical_shift ); right friend
-    sum_offset(X,A,B,C,size_sse_ar, size_sse_row);    
-    
-    //sum( C, B, A, X+offset_for_downwards ); right down friend
-    sum_offset(X,A,B,C,size_sse_ar, 2*size_sse_row);
-
-    //shift_right( X ); (when view in 2D) in our case it left shift.
-    height = end - begin + 2;
-    shift_right2D( X, height, size_sse_row);
-    
-    //X = (X|A)&B&~C (done bitwise over the arrays) 
-    unsigned shift = size_sse_row;
-    for(unsigned i=0; i<size_sse_ar; ++i) 
-    {
-        C[i].m128i_u32[0] = ~C[i].m128i_u32[0];
-        C[i].m128i_u32[1] = ~C[i].m128i_u32[1];
-        C[i].m128i_u32[2] = ~C[i].m128i_u32[2];
-        C[i].m128i_u32[3] = ~C[i].m128i_u32[3];
-        X[shift + i] = _mm_and_si128(_mm_and_si128(_mm_or_si128(X[shift + i],
-            A[i]),B[i]),C[i]);    
-    }
-
-    height = end - begin;
-    width=m_matrix->width;
-    for( unsigned b=0; b<height; ++b ) 
-    {
-        char* dst = &dest[(b+begin)*width];
-        unsigned* src = (unsigned*)&X[(b+1)*size_sse_row];
-        for( unsigned a=0; a<width; ++a )
-        {
-            unsigned c = src[a/32u] & 1<<(a%32u);
-            dst[a] = c>>(a%32u);
-        }
-    }
-}
-#else 
-/* end SSE block */
-
-// ----------------------------------------------------------------------
-// GetAdjacentCellState() - returns the state (value) of the specified 
-// adjacent cell of the current cell "cellNumber"
-char GetAdjacentCellState(
-                                char* source,      // pointer to source data block
-                                int x,             // logical width of field
-                                int y,             // logical height of field
-                                int cellNumber,    // number of cell position to examine
-                                int cp             // which adjacent position
-                               )
-{
-/* 
-cp 
-*-- cp=1 ... --- cp=8 (summary: -1-2-3-
--x-          -x-                -4-x-5-
----          --*                -6-7-8- )
-*/
-    char cellState = 0;        // return value
-
-    // set up boundary flags to trigger field-wrap logic
-    bool onTopRow = false;
-    bool onBottomRow = false;
-    bool onLeftColumn = false;
-    bool onRightColumn = false;
-
-    // check to see if cell is on top row
-    if (cellNumber < x)
-    {
-        onTopRow = true;
-    }
-    // check to see if cell is on bottom row
-    if ((x*y)-cellNumber <= x)
-    {
-        onBottomRow = true;
-    }
-    // check to see if cell is on left column
-    if (cellNumber%x == 0)
-    {
-        onLeftColumn = true;
-    }
-    // check to see if cell is on right column
-    if ((cellNumber+1)%x == 0)
-    {
-        onRightColumn = true;
-    }
-
-    switch (cp)
-    {
-        case 1:
-            if (onTopRow && onLeftColumn)
-            {
-                return *(source+((x*y)-1));
-            }
-            if (onTopRow && !onLeftColumn)
-            {
-                return *(source+(((x*y)-x)+(cellNumber-1)));
-            }
-            if (onLeftColumn && !onTopRow)
-            {
-                return *(source+(cellNumber-1));
-            }
-            return *((source+cellNumber)-(x+1));
-
-        case 2:
-            if (onTopRow)
-            {
-                return *(source+(((x*y)-x)+cellNumber));
-            }
-            return *((source+cellNumber)-x);
-
-        case 3:
-            if (onTopRow && onRightColumn)
-            {
-                return *(source+((x*y)-x));
-            }
-            if (onTopRow && !onRightColumn)
-            {
-                return *(source+(((x*y)-x)+(cellNumber+1)));
-            }
-            if (onRightColumn && !onTopRow)
-            {
-                return *(source+((cellNumber-(x*2))+1));
-            }
-            return *(source+(cellNumber-(x-1)));
-
-        case 4:
-            if (onRightColumn)
-            {
-                return *(source+(cellNumber-(x-1)));
-            }
-            return *(source+(cellNumber+1));
-
-        case 5:
-            if (onBottomRow && onRightColumn)
-            {
-                return *source;
-            }
-            if (onBottomRow && !onRightColumn)
-            {
-                return *(source+((cellNumber-((x*y)-x))+1));
-            }
-            if (onRightColumn && !onBottomRow)
-            {
-                return *(source+(cellNumber+1));
-            }
-            return *(source+(((cellNumber+x))+1));
-
-        case 6:
-            if (onBottomRow)
-            {
-                return *(source+(cellNumber-((x*y)-x)));
-            }
-            return *(source+(cellNumber+x));
-
-        case 7:
-            if (onBottomRow && onLeftColumn)
-            {
-                return *(source+(x-1));
-            }
-            if (onBottomRow && !onLeftColumn)
-            {
-                return *(source+(cellNumber-((x*y)-x)-1));
-            }
-            if (onLeftColumn && !onBottomRow)
-            {
-                return *(source+(cellNumber+((x*2)-1)));
-            }
-            return *(source+(cellNumber+(x-1)));
-
-        case 8:
-            if (onLeftColumn)
-            {
-                return *(source+(cellNumber+(x-1)));
-            }
-            return *(source+(cellNumber-1));
-    }
-    return cellState;
-}
-
-char CheckCell(Matrix * m_matrix, int cellNumber)
-{
-    char total = 0;
-    char* source = m_matrix->data;
-    //look around to find cell's with status "alive"
-    for(int i=1; i<9; i++)
-    {
-        total += GetAdjacentCellState(source, m_matrix->width, m_matrix->height, cellNumber, i);
-    }
-    // if the number of adjacent live cells is < 2 or > 3, the result is a dead 
-    // cell regardless of its current state. (A live cell dies of loneliness if it
-    // has less than 2 neighbors, and of overcrowding if it has more than 3; a new
-    // cell is born in an empty spot only if it has exactly 3 neighbors.
-    if (total < 2 || total > 3)
-    {
-        return 0;
-    }
-
-    // if we get here and the cell position holds a living cell, it stays alive
-    if (*(source+cellNumber))
-    {
-        return 1;
-    }
-
-    // we have an empty position. If there are only 2 neighbors, the position stays
-    // empty.
-    if (total == 2)
-    {
-        return 0;
-    }
-
-    // we have an empty position and exactly 3 neighbors. A cell is born.
-    return 1;
-}
-
-void UpdateState(Matrix * m_matrix, char * dest ,int begin, int end)
-{
-        for (int i=begin; i<=end; i++)
-        {
-            *(dest+i) = CheckCell(m_matrix, i);
-        }
-}
-
-#endif 
-/* end non-SSE block */
diff --git a/examples/parallel_for/game_of_life/Makefile b/examples/parallel_for/game_of_life/Makefile
new file mode 100644
index 0000000..dd68eac
--- /dev/null
+++ b/examples/parallel_for/game_of_life/Makefile
@@ -0,0 +1,46 @@
+# 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.
+
+# GNU Makefile that builds and runs example.
+PROG=game_of_life
+ARGS=2:4 -t 5
+ifneq (,$(shell which icc 2>/dev/null))
+CXX=icc
+endif # icc
+
+all:	release test
+
+release: src/Evolution.cpp src/Update_state.cpp src/Game_of_life.cpp
+	$(CXX) -O2 -DNDEBUG -D_CONSOLE $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)
+
+debug: src/Evolution.cpp src/Update_state.cpp src/Game_of_life.cpp
+	$(CXX) -O0 -D_CONSOLE -g -DTBB_DO_ASSERT $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)
+
+clean:
+	rm -f $(PROG) *.o *.d
+
+test:
+	./$(PROG) $(ARGS)
diff --git a/examples/parallel_for/game_of_life/Makefile.windows b/examples/parallel_for/game_of_life/Makefile.windows
new file mode 100644
index 0000000..6a5ad9a
--- /dev/null
+++ b/examples/parallel_for/game_of_life/Makefile.windows
@@ -0,0 +1,49 @@
+# 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.
+
+# Common Makefile that builds and runs example.
+
+# Just specify your program basename
+PROG=game_of_life
+ARGS=2:4 -t 5
+
+# Trying to find if icl.exe is set
+CXX  = 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: 
+	$(CXX) ./src/Evolution.cpp ./src/Game_of_life.cpp ./src/Update_state.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+debug: 
+	$(CXX) ./src/Evolution.cpp ./src/Game_of_life.cpp ./src/Update_state.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:
+	$(PROG) $(ARGS)
+
diff --git a/examples/parallel_for/game_of_life/index.html b/examples/parallel_for/game_of_life/index.html
new file mode 100644
index 0000000..cbb1d00
--- /dev/null
+++ b/examples/parallel_for/game_of_life/index.html
@@ -0,0 +1,55 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+The "Game of life" example demonstrates interoperability of TBB and .NET. 
+<br>This program runs 2 simultaneous instances of the classic Conway's "Game of Life". 
+One of these instances uses serial calculations to update the board. The other one calculates in parallel with TBB.
+The visualization is written in managed C++ and uses .NET CLR.
+
+<H2>Source Files</H2>
+<DL>
+<DT><A HREF="src/Form1.h">Form1.h</A>, <A HREF="src/Board.h">Board.h</A>
+<DD>Header files for GUI classes.
+<DT><A HREF="src/Evolution.h">Evolution.h</A>, <A HREF="src/Evolution.cpp">Evolution.cpp</A>
+<DD>Contain class hierarchy to implement game evolution in serial and parallel.
+<DT><A HREF="src/Update_state.cpp">Update_state.cpp </A>
+<DD>Implements 2 approaches for calculating steps in the program: with the use of SSE intrinsics, and ordinary C++ code.
+<DT><A HREF="src/Game_of_life.cpp">Game_of_life.cpp </A>
+<DD>Contains program entry point and other source not related to logical structure of the example.
+<DT><A HREF="Makefile">Makefile</A>
+<DD>Makefile for building example.
+</DL>
+
+<H2>Directories</H2>
+<DL>
+<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.
+<DT><A HREF="xcode">xcode</A>
+<DD>Contains Mac OS* Xcode* workspace for building and running the example.
+</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.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation 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/parallel_for/game_of_life.NET/msvs/Game_of_life.sln b/examples/parallel_for/game_of_life/msvs/Game_of_life.sln
similarity index 100%
rename from examples/parallel_for/game_of_life.NET/msvs/Game_of_life.sln
rename to examples/parallel_for/game_of_life/msvs/Game_of_life.sln
diff --git a/examples/parallel_for/game_of_life.NET/msvs/Game_of_life.vcproj b/examples/parallel_for/game_of_life/msvs/Game_of_life.vcproj
similarity index 100%
rename from examples/parallel_for/game_of_life.NET/msvs/Game_of_life.vcproj
rename to examples/parallel_for/game_of_life/msvs/Game_of_life.vcproj
diff --git a/examples/parallel_for/game_of_life.NET/msvs/app.ico b/examples/parallel_for/game_of_life/msvs/app.ico
similarity index 100%
rename from examples/parallel_for/game_of_life.NET/msvs/app.ico
rename to examples/parallel_for/game_of_life/msvs/app.ico
diff --git a/examples/parallel_for/game_of_life.NET/msvs/app.rc b/examples/parallel_for/game_of_life/msvs/app.rc
similarity index 100%
rename from examples/parallel_for/game_of_life.NET/msvs/app.rc
rename to examples/parallel_for/game_of_life/msvs/app.rc
diff --git a/examples/parallel_for/game_of_life.NET/msvs/resource.h b/examples/parallel_for/game_of_life/msvs/resource.h
similarity index 100%
rename from examples/parallel_for/game_of_life.NET/msvs/resource.h
rename to examples/parallel_for/game_of_life/msvs/resource.h
diff --git a/examples/parallel_for/game_of_life/src/AssemblyInfo.cpp b/examples/parallel_for/game_of_life/src/AssemblyInfo.cpp
new file mode 100644
index 0000000..79a2884
--- /dev/null
+++ b/examples/parallel_for/game_of_life/src/AssemblyInfo.cpp
@@ -0,0 +1,66 @@
+/*
+    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.
+*/
+
+using namespace System;
+using namespace System::Reflection;
+using namespace System::Runtime::CompilerServices;
+using namespace System::Runtime::InteropServices;
+using namespace System::Security::Permissions;
+
+//
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+//
+[assembly:AssemblyTitleAttribute("Automata")];
+[assembly:AssemblyDescriptionAttribute("")];
+[assembly:AssemblyConfigurationAttribute("")];
+[assembly:AssemblyCompanyAttribute("")];
+[assembly:AssemblyProductAttribute("Automata")];
+[assembly:AssemblyCopyrightAttribute("Copyright (c)  2007")];
+[assembly:AssemblyTrademarkAttribute("")];
+[assembly:AssemblyCultureAttribute("")];
+
+//
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version
+//      Build Number
+//      Revision
+//
+// You can specify all the value or you can default the Revision and Build Numbers
+// by using the '*' as shown below:
+
+[assembly:AssemblyVersionAttribute("1.0.*")];
+
+[assembly:ComVisible(false)];
+
+[assembly:CLSCompliantAttribute(true)];
+
+[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)];
diff --git a/examples/parallel_for/game_of_life/src/Board.h b/examples/parallel_for/game_of_life/src/Board.h
new file mode 100644
index 0000000..f3e3efb
--- /dev/null
+++ b/examples/parallel_for/game_of_life/src/Board.h
@@ -0,0 +1,115 @@
+/*
+    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.
+*/
+
+#ifndef __BOARD_H__ 
+#define __BOARD_H__
+
+#define WIN32_LEAN_AND_MEAN
+
+#ifndef _CONSOLE
+#include <windows.h>
+
+using namespace System;
+using namespace System::ComponentModel;
+using namespace System::Collections;
+using namespace System::Windows::Forms;
+using namespace System::Data;
+using namespace System::Drawing;
+#define LabelPtr Label^
+#define BoardPtr Board^
+#else
+#define LabelPtr int*
+#define BoardPtr Board*
+#endif
+
+struct Matrix 
+{
+    int width;
+    int height;
+    char* data;
+};
+
+#ifndef _CONSOLE
+public ref class Board : public System::Windows::Forms::UserControl
+#else
+class Board
+#endif
+    {
+    public:
+        Board(int width, int height, int squareSize, LabelPtr counter);        
+        virtual ~Board();
+        void seed(int s);
+        void seed(const BoardPtr s);
+#ifndef _CONSOLE
+    protected: 
+        virtual void OnPaint(PaintEventArgs^ e) override;        
+        void Board::draw(Graphics^ g);
+
+    private:
+        System::ComponentModel::Container ^components;
+
+#pragma region Windows Form Designer generated code
+        void InitializeComponent(void)
+        {
+            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
+        }
+#pragma endregion
+
+    private: delegate void drawDelegate(Int32);
+    public:
+        //! Called from the Evolution thread
+        void draw( Int32 nCurIteration )
+        {
+            if (this->InvokeRequired)
+            {
+                drawDelegate^ d = gcnew drawDelegate(this, &Board::draw);
+                IAsyncResult^ result = BeginInvoke(d, nCurIteration);
+                EndInvoke(result);
+                return;
+            }
+            m_counter->Text = nCurIteration.ToString();
+            Invalidate();
+        }
+#endif
+    public:
+        Matrix *m_matrix;    
+
+    private:
+#ifndef _CONSOLE
+        SolidBrush^ m_occupiedBrush;
+        SolidBrush^ m_freeBrush;
+        Graphics^ m_graphics;
+        Graphics^ m_mem_dc;
+        Bitmap^ m_bmp;
+#endif
+        int m_width;
+        int m_height;
+        int m_squareSize;
+        LabelPtr m_counter;
+    };
+#endif
diff --git a/examples/parallel_for/game_of_life/src/Evolution.cpp b/examples/parallel_for/game_of_life/src/Evolution.cpp
new file mode 100644
index 0000000..392aff8
--- /dev/null
+++ b/examples/parallel_for/game_of_life/src/Evolution.cpp
@@ -0,0 +1,251 @@
+/*
+    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.
+*/
+
+/*
+    Evolution.cpp: implementation file for evolution classes; evolution 
+                  classes do looped evolution of patterns in a defined 
+                  2 dimensional space
+*/
+
+#include "Evolution.h"
+#include "Board.h"
+
+#ifdef USE_SSE
+#define GRAIN_SIZE 14
+#else
+#define GRAIN_SIZE 4000
+#endif
+#define TIME_SLICE 330
+
+/*
+    Evolution
+*/
+
+/**
+    Evolution::UpdateMatrix() - moves the calculated destination data 
+    to the source data block. No destination zeroing is required since it will 
+    be completely overwritten during the next calculation cycle.
+**/
+void Evolution::UpdateMatrix()
+{
+    memcpy(m_matrix->data, m_dest, m_size);
+}
+
+/*
+    SequentialEvolution
+*/
+
+//! SequentialEvolution::Run - begins looped evolution
+#ifndef _CONSOLE
+void SequentialEvolution::Run()
+{
+#else
+void SequentialEvolution::Run(double execution_time, int nthread)
+{
+    printf("Starting game (Sequential evolution)\n");
+#endif
+
+    m_nIteration = 0;
+    m_serial_time = 0;
+    tbb::tick_count t0 = tbb::tick_count::now();
+    while (!m_done)
+    {
+        if( !is_paused ) 
+        {
+            tbb::tick_count t = tbb::tick_count::now();
+            Step();
+            tbb::tick_count t1 = tbb::tick_count::now();
+            ++m_nIteration;
+            double  work_time = (t1-t0).seconds();
+#ifndef _CONSOLE
+            if ( work_time * 1000 < TIME_SLICE )
+                continue;
+            m_serial_time += work_time;
+            m_board->draw(m_nIteration);
+#else
+            m_serial_time += work_time;
+#endif
+        }
+        //! Let the parallel algorithm work uncontended almost the same time
+        //! as the serial one. See ParallelEvolution::Run() as well.
+#ifndef _CONSOLE
+        m_evt_start_parallel->Set();
+        m_evt_start_serial->WaitOne();
+        t0 = tbb::tick_count::now();
+#else
+        t0 = tbb::tick_count::now();
+        if(m_serial_time > execution_time)
+        {
+            printf("iterations count = %d time = %g\n", m_nIteration, m_serial_time);
+            break;
+        }
+#endif
+    }
+}
+
+//! SequentialEvolution::Step() - override of step method
+void SequentialEvolution::Step()
+{
+        if( !is_paused ) 
+    {
+#ifdef USE_SSE
+    UpdateState(m_matrix, m_matrix->data, 0, m_matrix->height);
+#else
+    UpdateState(m_matrix, m_dest, 0, (m_matrix->width * m_matrix->height)-1);
+    UpdateMatrix();
+#endif
+        }
+}
+
+/*
+    ParallelEvolution
+*/
+
+//! SequentialEvolution::Run - begins looped evolution
+#ifndef _CONSOLE
+void ParallelEvolution::Run()
+{
+#else
+void ParallelEvolution::Run(double execution_time, int nthread)
+{
+    if(nthread == tbb::task_scheduler_init::automatic)
+        printf("Starting game (Parallel evolution for automatic number of thread(s))\n");
+    else
+        printf("Starting game (Parallel evolution for %d thread(s))\n", nthread);
+#endif
+
+    m_nIteration = 0;
+    m_parallel_time = 0;
+
+#ifndef _CONSOLE
+    //! start task scheduler as necessary
+    if (m_pInit == NULL)
+    {
+        m_pInit = new tbb::task_scheduler_init();
+    }
+    m_evt_start_parallel->WaitOne();
+#else
+    tbb::task_scheduler_init init(nthread);
+#endif
+
+    double  work_time = m_serial_time;
+    tbb::tick_count t0 = tbb::tick_count::now();
+
+    while (!m_done)
+    {
+        if( !is_paused ) 
+        {
+            tbb::tick_count t = tbb::tick_count::now();
+            Step();
+            tbb::tick_count t1 = tbb::tick_count::now();
+            ++m_nIteration;
+            double real_work_time = (t1-t0).seconds();
+#ifndef _CONSOLE
+            if ( real_work_time < work_time )
+                continue;
+            m_parallel_time += real_work_time;
+            m_board->draw(m_nIteration); 
+#else
+            m_parallel_time += real_work_time;
+#endif
+        }
+        //! Let the serial algorithm work the same time as the parallel one.
+#ifndef _CONSOLE
+        m_evt_start_serial->Set();
+        m_evt_start_parallel->WaitOne();
+
+        work_time = m_serial_time - m_parallel_time;
+        t0 = tbb::tick_count::now();
+#else
+        t0 = tbb::tick_count::now();
+        if(m_parallel_time > execution_time)
+        {
+            printf("iterations count = %d time = %g\n", m_nIteration, m_parallel_time);
+            init.terminate();
+            break;
+        }
+#endif
+    }
+}
+
+/**
+    class tbb_parallel_task
+    
+    TBB requires a class for parallel loop implementations. The actual 
+    loop "chunks" are performed using the () operator of the class. 
+    The blocked_range contains the range to calculate. Please see the 
+    TBB documentation for more information.
+**/
+#ifndef _CONSOLE
+public class tbb_parallel_task
+#else
+class tbb_parallel_task
+#endif
+{
+public:
+    static void set_values (Matrix* source, char* dest)
+    {
+        m_source = source;
+        m_dest = dest;
+        return;
+    }
+
+    void operator()( const tbb::blocked_range<size_t>& r ) const 
+    {
+        int begin = (int)r.begin();            //! capture lower range number for this chunk
+        int end = (int)r.end();                //! capture upper range number for this chunk
+        UpdateState(m_source, m_dest, begin, end);
+    }
+
+    tbb_parallel_task () {}
+
+private:
+    static Matrix* m_source;
+    static char* m_dest;
+};
+
+Matrix* tbb_parallel_task::m_source;
+char* tbb_parallel_task::m_dest;
+
+//! ParallelEvolution::Step() - override of Step method
+void ParallelEvolution::Step()
+{
+    size_t begin = 0;                   //! beginning cell position
+#ifdef USE_SSE
+    size_t end = m_matrix->height;      //! ending cell position
+#else
+    size_t end = m_size-1;              //! ending cell position
+#endif
+
+    //! set matrix pointers
+    tbb_parallel_task::set_values(m_matrix, m_dest);
+
+    //! do calculation loop
+    parallel_for (tbb::blocked_range<size_t> (begin, end, GRAIN_SIZE), tbb_parallel_task());
+    UpdateMatrix();
+}
diff --git a/examples/parallel_for/game_of_life/src/Evolution.h b/examples/parallel_for/game_of_life/src/Evolution.h
new file mode 100644
index 0000000..62357e5
--- /dev/null
+++ b/examples/parallel_for/game_of_life/src/Evolution.h
@@ -0,0 +1,204 @@
+/*
+    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.
+*/
+
+/** 
+    Evolution.h: Header file for evolution classes; evolution classes do 
+    looped evolution of patterns in a defined 2 dimensional space 
+**/
+
+#ifndef __EVOLUTION_H__
+#define __EVOLUTION_H__
+
+#include "Board.h"
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#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"
+#include "tbb/tick_count.h"
+
+#ifndef _CONSOLE
+#include <windows.h>
+using namespace System::Threading;
+#else
+typedef unsigned int Int32;
+#endif
+
+void UpdateState(Matrix * m_matrix, char * dest ,int begin, int end);
+
+/**
+    class Evolution - base class for SequentialEvolution and ParallelEvolution
+**/
+#ifndef _CONSOLE
+public ref class Evolution abstract
+#else
+class Evolution
+#endif
+{
+public:
+    Evolution( Matrix *m,                //! beginning matrix including initial pattern
+               BoardPtr board              //! the board to update
+             ) : m_matrix(m), m_board(board), 
+                 m_size(m_matrix->height * m_matrix->width), m_done(false)
+    {
+        //! allocate memory for second matrix data block
+        m_dest = new char[m_size];
+        is_paused = false;
+#ifdef _CONSOLE
+        m_serial_time = 0;
+#endif
+    }
+
+    virtual ~Evolution()
+    {
+        delete[] m_dest;
+    }
+
+    //! Run() - begins looped evolution
+#ifndef _CONSOLE
+    virtual void Run() = 0;
+#else
+    virtual void Run(double execution_time, int nthread) = 0;
+#endif
+
+    //! Quit() - tell the thread to terminate
+    virtual void Quit() { m_done = true; }
+    
+    //! Step() - performs a single evolutionary generation computation on the game matrix
+    virtual void Step() = 0;
+
+    //! SetPause() - change condition of variable is_paused
+    virtual void SetPause(bool condition)
+    {
+        if ( condition == true )
+            is_paused = true;
+        else
+            is_paused = false;
+    }
+    
+protected:
+    /** 
+        UpdateMatrix() - moves the previous destination data to the source 
+        data block and zeros out destination.
+    **/
+    void UpdateMatrix();
+
+protected:
+    Matrix*         m_matrix;       //! Pointer to initial matrix
+    char*           m_dest;         //! Pointer to calculation destination data    
+    BoardPtr        m_board;        //! The game board to update
+    int             m_size;         //! size of the matrix data block
+    volatile bool   m_done;         //! a flag used to terminate the thread
+    Int32           m_nIteration;   //! current calculation cycle index
+    volatile bool   is_paused;      //! is needed to perform next iteration
+    
+    //! Calculation time of the sequential version (since the start), seconds.
+    /**
+        This member is updated by the sequential version and read by parallel,
+        so no synchronization is necessary.
+    **/
+#ifndef _CONSOLE
+    static volatile double m_serial_time = 0;
+
+    static System::Threading::AutoResetEvent    ^m_evt_start_serial = gcnew AutoResetEvent(false),
+                                                ^m_evt_start_parallel = gcnew AutoResetEvent(false);
+#else
+    double m_serial_time;
+#endif
+};
+
+/**
+    class SequentialEvolution - derived from Evolution - calculate life generations serially
+**/
+#ifndef _CONSOLE
+public ref class SequentialEvolution: public Evolution
+#else
+class SequentialEvolution: public Evolution
+#endif
+{
+public:
+    SequentialEvolution(Matrix *m, BoardPtr board)
+                       : Evolution(m, board)
+    {}
+#ifndef _CONSOLE        
+    virtual void Run() override;
+    virtual void Step() override;
+#else
+    virtual void Run(double execution_time, int nthread);
+    virtual void Step();
+#endif
+
+};
+
+/**
+    class ParallelEvolution - derived from Evolution - calculate life generations
+    in parallel using Intel's TBB package
+**/
+#ifndef _CONSOLE
+public ref class ParallelEvolution: public Evolution
+#else
+class ParallelEvolution: public Evolution
+#endif
+{
+public:
+
+    ParallelEvolution(Matrix *m, BoardPtr board)
+                     : Evolution(m, board),
+                       m_parallel_time(0)
+    {
+        // instantiate a task_scheduler_init object and save a pointer to it
+        m_pInit = NULL;
+    }
+    
+    ~ParallelEvolution()
+    {
+        //! delete task_scheduler_init object
+        if (m_pInit != NULL)
+            delete m_pInit;
+    }
+#ifndef _CONSOLE
+    virtual void Run() override;
+    virtual void Step() override;
+#else
+    virtual void Run(double execution_time, int nthread);
+    virtual void Step();
+#endif
+    
+
+private:
+    tbb::task_scheduler_init* m_pInit;
+
+    double m_parallel_time;
+};
+
+#endif
diff --git a/examples/parallel_for/game_of_life/src/Form1.h b/examples/parallel_for/game_of_life/src/Form1.h
new file mode 100644
index 0000000..59bcfba
--- /dev/null
+++ b/examples/parallel_for/game_of_life/src/Form1.h
@@ -0,0 +1,314 @@
+/*
+    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.
+*/
+
+#ifndef _CONSOLE
+#ifndef __FORM1_H__
+#define __FORM1_H__
+
+#include <time.h>
+#include "Board.h"
+#include "Evolution.h"
+
+#define BOARD_SQUARE_SIZE 2
+
+    using namespace System;
+    using namespace System::ComponentModel;
+    using namespace System::Collections;
+    using namespace System::Windows::Forms;
+    using namespace System::Data;
+    using namespace System::Drawing;
+
+    public ref class Form1 : public System::Windows::Forms::Form
+    {
+    public:
+        Form1(void)
+        {
+            InitializeComponent();
+
+            FormBorderStyle = System::Windows::Forms::FormBorderStyle::FixedDialog;
+            ClientSize = System::Drawing::Size(1206, 600+m_ribbonHeight+menuStrip1->Height);
+
+            int boardWidth = (ClientRectangle.Width/2-m_sepWidth/2)/BOARD_SQUARE_SIZE;
+            int boardHeight = (ClientRectangle.Height-menuStrip1->Height-m_ribbonHeight)/BOARD_SQUARE_SIZE;
+
+            m_board1 = gcnew Board(boardWidth, boardHeight, BOARD_SQUARE_SIZE, seqGen);
+            m_board2 = gcnew Board(boardWidth, boardHeight, BOARD_SQUARE_SIZE, parGen);
+            
+            Controls->Add(m_board1);
+            Controls->Add(m_board2);
+
+            m_board1->Location = System::Drawing::Point(2, m_ribbonHeight + menuStrip1->Height);
+            m_board2->Location = System::Drawing::Point(2 + boardWidth*BOARD_SQUARE_SIZE + m_sepWidth/2, m_ribbonHeight + menuStrip1->Height);
+
+            m_seq = gcnew SequentialEvolution(m_board1->m_matrix, m_board1);
+            m_par = gcnew ParallelEvolution(m_board2->m_matrix, m_board2);
+
+            m_seqThread = gcnew Thread(gcnew ThreadStart(m_seq, &SequentialEvolution::Run));
+            m_parThread = gcnew Thread(gcnew ThreadStart(m_par, &ParallelEvolution::Run));        
+
+            Thread::CurrentThread->Priority = ThreadPriority::AboveNormal;
+
+            m_suspend = true;
+        }
+    protected:
+        ~Form1()
+        {
+            if (components)
+            {
+                delete components;
+            }
+        }
+    private: System::Windows::Forms::MenuStrip^  menuStrip1;
+    private: System::Windows::Forms::ToolStripMenuItem^  fileToolStripMenuItem;
+    private: System::Windows::Forms::ToolStripMenuItem^  exitToolStripMenuItem;
+    private: System::Windows::Forms::ToolStripMenuItem^  gameToolStripMenuItem;
+    private: System::Windows::Forms::ToolStripMenuItem^  seedToolStripMenuItem;
+    private: System::Windows::Forms::ToolStripMenuItem^  runToolStripMenuItem;
+    private: System::Windows::Forms::ToolStripMenuItem^  pauseToolStripMenuItem;
+    private: Board^ m_board1;
+    private: Board^ m_board2;
+    private: System::Windows::Forms::Label^  Sequential;
+    private: System::Windows::Forms::Label^  label1;
+    private: static const int m_sepWidth = 5;
+    private: static const int m_ribbonHeight = 26;
+    private: SequentialEvolution^ m_seq;
+    private: ParallelEvolution^ m_par;
+    private: Thread^ m_seqThread;
+    private: Thread^ m_parThread;
+    private: System::Windows::Forms::Label^  seqGen;
+    private: System::Windows::Forms::Label^  parGen;
+    private: bool m_suspend;
+
+    private:
+        System::ComponentModel::Container ^components;
+
+#pragma region Windows Form Designer generated code
+        void InitializeComponent(void)
+        {
+            this->menuStrip1 = (gcnew System::Windows::Forms::MenuStrip());
+            this->fileToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
+            this->exitToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
+            this->gameToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
+            this->seedToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
+            this->runToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
+            this->pauseToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
+            this->Sequential = (gcnew System::Windows::Forms::Label());
+            this->label1 = (gcnew System::Windows::Forms::Label());
+            this->seqGen = (gcnew System::Windows::Forms::Label());
+            this->parGen = (gcnew System::Windows::Forms::Label());
+            this->menuStrip1->SuspendLayout();
+            this->SuspendLayout();
+            // 
+            // menuStrip1
+            // 
+            this->menuStrip1->Items->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(2) 
+                {this->fileToolStripMenuItem, this->gameToolStripMenuItem});
+            this->menuStrip1->Location = System::Drawing::Point(0, 0);
+            this->menuStrip1->Name = L"menuStrip1";
+            this->menuStrip1->Padding = System::Windows::Forms::Padding(8, 2, 0, 2);
+            this->menuStrip1->Size = System::Drawing::Size(1600, 26);
+            this->menuStrip1->TabIndex = 0;
+            this->menuStrip1->Text = L"menuStrip1";
+            this->menuStrip1->ItemClicked += gcnew System::Windows::Forms::ToolStripItemClickedEventHandler(this, &Form1::menuStrip1_ItemClicked);
+            // 
+            // fileToolStripMenuItem
+            // 
+            this->fileToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(1) {this->exitToolStripMenuItem});
+            this->fileToolStripMenuItem->Name = L"fileToolStripMenuItem";
+            this->fileToolStripMenuItem->Size = System::Drawing::Size(40, 22);
+            this->fileToolStripMenuItem->Text = L"File";
+            // 
+            // exitToolStripMenuItem
+            // 
+            this->exitToolStripMenuItem->Name = L"exitToolStripMenuItem";
+            this->exitToolStripMenuItem->Size = System::Drawing::Size(99, 22);
+            this->exitToolStripMenuItem->Text = L"Exit";
+            this->exitToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::OnExit);
+            // 
+            // gameToolStripMenuItem
+            // 
+            this->gameToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(3) {this->seedToolStripMenuItem, 
+                this->runToolStripMenuItem, this->pauseToolStripMenuItem});
+            this->gameToolStripMenuItem->Name = L"gameToolStripMenuItem";
+            this->gameToolStripMenuItem->Size = System::Drawing::Size(59, 22);
+            this->gameToolStripMenuItem->Text = L"Game";
+            // 
+            // seedToolStripMenuItem
+            // 
+            this->seedToolStripMenuItem->Name = L"seedToolStripMenuItem";
+            this->seedToolStripMenuItem->Size = System::Drawing::Size(115, 22);
+            this->seedToolStripMenuItem->Text = L"Seed";
+            this->seedToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::OnSeed);
+            // 
+            // runToolStripMenuItem
+            // 
+            this->runToolStripMenuItem->Enabled = false;
+            this->runToolStripMenuItem->Name = L"runToolStripMenuItem";
+            this->runToolStripMenuItem->Size = System::Drawing::Size(115, 22);
+            this->runToolStripMenuItem->Text = L"Run";
+            this->runToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::OnRun);
+            // 
+            // pauseToolStripMenuItem
+            // 
+            this->pauseToolStripMenuItem->Enabled = false;
+            this->pauseToolStripMenuItem->Name = L"pauseToolStripMenuItem";
+            this->pauseToolStripMenuItem->Size = System::Drawing::Size(115, 22);
+            this->pauseToolStripMenuItem->Text = L"Pause";
+            this->pauseToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::OnPauseResume);
+            // 
+            // Sequential
+            // 
+            this->Sequential->AutoSize = true;
+            this->Sequential->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, 
+                static_cast<System::Byte>(0)));
+            this->Sequential->Location = System::Drawing::Point(12, 32);
+            this->Sequential->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
+            this->Sequential->Name = L"Sequential";
+            this->Sequential->Size = System::Drawing::Size(239, 18);
+            this->Sequential->TabIndex = 1;
+            this->Sequential->Text = L"Sequential Algorithm      generation:";
+            // 
+            // label1
+            // 
+            this->label1->AutoSize = true;
+            this->label1->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, 
+                static_cast<System::Byte>(0)));
+            this->label1->Location = System::Drawing::Point(813, 32);
+            this->label1->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
+            this->label1->Name = L"label1";
+            this->label1->Size = System::Drawing::Size(219, 18);
+            this->label1->TabIndex = 2;
+            this->label1->Text = L"Parallel Algorithm     generation: ";
+            // 
+            // seqGen
+            // 
+            this->seqGen->AutoSize = true;
+            this->seqGen->Location = System::Drawing::Point(289, 35);
+            this->seqGen->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
+            this->seqGen->Name = L"seqGen";
+            this->seqGen->Size = System::Drawing::Size(16, 17);
+            this->seqGen->TabIndex = 3;
+            this->seqGen->Text = L"0";
+            // 
+            // parGen
+            // 
+            this->parGen->AutoSize = true;
+            this->parGen->Location = System::Drawing::Point(1068, 35);
+            this->parGen->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
+            this->parGen->Name = L"parGen";
+            this->parGen->Size = System::Drawing::Size(16, 17);
+            this->parGen->TabIndex = 4;
+            this->parGen->Text = L"0";
+            // 
+            // Form1
+            // 
+            this->AutoScaleDimensions = System::Drawing::SizeF(8, 16);
+            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
+            this->ClientSize = System::Drawing::Size(1600, 738);
+            this->Controls->Add(this->parGen);
+            this->Controls->Add(this->seqGen);
+            this->Controls->Add(this->label1);
+            this->Controls->Add(this->Sequential);
+            this->Controls->Add(this->menuStrip1);
+            this->MainMenuStrip = this->menuStrip1;
+            this->Margin = System::Windows::Forms::Padding(4);
+            this->MaximizeBox = false;
+            this->Name = L"Form1";
+            this->Text = L"Game of Life";
+            this->menuStrip1->ResumeLayout(false);
+            this->menuStrip1->PerformLayout();
+            this->ResumeLayout(false);
+            this->PerformLayout();
+
+        }
+#pragma endregion    
+    protected: 
+        void CloseApp ()
+        {
+            m_seq->Quit();
+            m_par->Quit();
+            //! Perform a very ungracious exit, should coordinate the threads
+            System::Environment::Exit(0);            
+        }
+    
+    protected: 
+        virtual void OnPaint(PaintEventArgs^ e) override
+        {
+        }
+
+        virtual void OnFormClosing(FormClosingEventArgs^ e) override
+        { 
+            CloseApp();
+        }
+    
+        void OnExit(System::Object^ sender, System::EventArgs^ e)
+        {                
+            CloseApp();
+        }
+
+        void OnSeed(System::Object^ sender, System::EventArgs^ e)
+        {
+            this->seedToolStripMenuItem->Enabled = false;
+            this->runToolStripMenuItem->Enabled = true;            
+            time_t now = time(NULL);
+            this->m_board1->seed((int)now);
+            this->m_board2->seed(this->m_board1);
+            this->Invalidate();
+        }
+
+        void OnRun(System::Object^ sender, System::EventArgs^ e)
+        {    
+            this->runToolStripMenuItem->Enabled = false;        
+            this->pauseToolStripMenuItem->Enabled = true;
+            m_seqThread->Start();
+            m_parThread->Start();    
+        }
+
+        void OnPauseResume(System::Object^ sender, System::EventArgs^ e)
+        {    
+            if (m_suspend)
+            {
+                m_seq->SetPause(true);
+                m_par->SetPause(true);
+                this->pauseToolStripMenuItem->Text = L"Resume";
+            }
+            else
+            {
+                m_seq->SetPause(false);
+                m_par->SetPause(false);            
+                this->pauseToolStripMenuItem->Text = L"Pause";
+            }
+            m_suspend = !m_suspend;
+        }
+
+    private: 
+        System::Void menuStrip1_ItemClicked(System::Object^  sender, System::Windows::Forms::ToolStripItemClickedEventArgs^  e) 
+        {}
+};
+#endif
+#endif
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
new file mode 100644
index 0000000..da3d783
--- /dev/null
+++ b/examples/parallel_for/game_of_life/src/Game_of_life.cpp
@@ -0,0 +1,238 @@
+/*
+    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.
+*/
+
+/* 
+    Game_of_life.cpp : 
+                      main project file.
+*/
+#include "Board.h"
+#include "Form1.h"
+
+#define WIN32_LEAN_AND_MEAN
+
+#ifndef _CONSOLE
+#include <windows.h>
+#else
+#include <iostream>
+#include <sstream>
+#include <time.h>
+#include "Evolution.h"
+
+#define BOARD_SQUARE_SIZE 2
+
+int low;                            //! lower range limit of threads
+int high;                           //! high range limit of threads
+double execution_time;              //! time for game of life iterations
+#endif
+
+Board::Board(int width, int height, int squareSize, LabelPtr counter)
+: m_width(width), m_height(height), m_squareSize(squareSize), m_counter(counter)
+{
+#ifndef _CONSOLE
+    InitializeComponent();
+    DoubleBuffered = true;
+
+    this->Width = m_squareSize*width;
+    this->Height = m_squareSize*height;
+#endif
+    m_matrix = new Matrix();
+    m_matrix->width = width;
+    m_matrix->height = height;
+    m_matrix->data = new char[width*height];
+    memset(m_matrix->data, 0, width*height);
+#ifndef _CONSOLE
+    m_occupiedBrush = gcnew SolidBrush(Color::Black);
+    m_freeBrush = gcnew SolidBrush(Color::LightGray);
+    
+    m_graphics = CreateGraphics();
+    m_bmp = gcnew Bitmap(Width, Height);
+    m_mem_dc = Graphics::FromImage(m_bmp);
+#endif
+}
+
+Board::~Board()
+{
+#ifndef _CONSOLE
+    if (components)
+    {
+        delete components;
+    }
+#endif
+    delete[] m_matrix->data;
+    delete m_matrix;
+}
+
+void Board::seed(int s)
+{        
+    srand(s);
+    for (int j=0; j<m_height; j++)
+    {
+        for (int i=0; i<m_width; i++)
+        {        
+            int x = rand()/(int)(((unsigned)RAND_MAX + 1) / 100);
+            m_matrix->data[i+j*m_width] = x>75? 1: 0;               // 25% occupied
+        }
+    }
+#ifndef _CONSOLE
+    Invalidate();
+#endif
+}
+
+void Board::seed( const BoardPtr src )
+{        
+            memcpy(m_matrix->data, src->m_matrix->data, m_height*m_width);
+#ifndef _CONSOLE
+    Invalidate();
+#endif
+}
+
+#ifndef _CONSOLE
+void Board::draw(Graphics^ g)
+{
+    m_mem_dc->FillRectangle(m_freeBrush, Drawing::Rectangle(0, 0, m_width*m_squareSize, m_height*m_squareSize));
+    for (int j=0; j<m_height; j++)
+    {
+        for (int i=0; i<m_width; i++)
+        {    
+            if ( m_matrix->data[i+j*m_width] )
+            {
+                m_mem_dc->FillRectangle(m_occupiedBrush, Drawing::Rectangle(i*m_squareSize, j*m_squareSize, m_squareSize, m_squareSize));
+            }
+        }
+    }
+    g->DrawImage(m_bmp, 0, 0);
+}
+
+void Board::OnPaint(PaintEventArgs^ e)
+{
+    draw(e->Graphics);
+}
+
+[STAThreadAttribute]
+int main(array<System::String ^> ^args)
+{
+    // Enabling Windows XP visual effects before any controls are created
+    Application::EnableVisualStyles();
+    Application::SetCompatibleTextRenderingDefault(false); 
+
+    // Create the main window and run it
+    Application::Run(gcnew Form1());
+    return 0;
+}
+#else
+
+//! Print usage of this program
+void PrintUsage() 
+{
+    printf("Usage: gol [M[:N] -t execution_time]\nM and N are a range of numbers of threads to be used.\nexecution_time is a time (in sec) for execution game_of_life iterations\n");
+    printf("Default values:\nM:\t\tautomatic\nN:\t\tM\nexecution_time:\t10\n");
+}
+
+//! Parse command line
+bool ParseCommandLine(int argc, char * argv []) 
+{
+    char* s = argv[1];
+    char* end;
+    //! command line without parameters
+    if(argc == 1)
+    {
+        low = tbb::task_scheduler_init::automatic;
+        high = low;
+        execution_time = 5;
+        return true;
+    }
+    //! command line with parameters
+    if(argc != 4)
+    {
+        PrintUsage();
+        return false;
+    }
+    if(std::string("-t") != argv[argc-2])
+    //! process M[:N] parameter
+    high = strtol(s,&end,0);
+    low = strtol(s,&end,0);
+    switch( *end ) 
+    {
+        case ':': 
+            high = strtol(end+1,0,0); 
+            break;
+        case '\0':
+            break;
+        default:
+            PrintUsage();
+            return false;
+    }
+    if (high < low)
+    {
+        std::cout << "Set correct range. Current range: " << low << ":" << high << std::endl;
+        PrintUsage();
+        return false;
+
+    }
+    //! process execution_time parameter
+    execution_time = strtol(argv[argc-1],&end,0);
+    return true;
+}
+
+int main( int argc, char* argv[] ) 
+{
+    if(!ParseCommandLine( argc, argv ))
+        return 1;
+    SequentialEvolution* m_seq;
+    ParallelEvolution* m_par;
+    Board* m_board1;
+    Board* m_board2; 
+    int* count = NULL;
+   
+    int boardWidth = 300;
+    int boardHeight = 300;
+
+    m_board1 = new Board(boardWidth, boardHeight, BOARD_SQUARE_SIZE, count);
+    m_board2 = new Board(boardWidth, boardHeight, BOARD_SQUARE_SIZE, count);
+
+    time_t now = time(NULL);
+    printf("Generate Game of life board\n");
+    m_board1->seed((int)now);
+    m_board2->seed(m_board1);
+
+    m_seq = new SequentialEvolution(m_board1->m_matrix, m_board1);
+    m_seq->Run(execution_time, 1);
+    delete m_seq;
+
+    m_par = new ParallelEvolution(m_board2->m_matrix, m_board2);
+    for( int p = low; p <= high; ++p ) 
+    {
+        m_par->Run(execution_time, p);
+    }
+    delete m_par;
+
+    delete m_board1;
+    delete m_board2;
+    return 0;
+}
+#endif
diff --git a/examples/parallel_for/game_of_life/src/Update_state.cpp b/examples/parallel_for/game_of_life/src/Update_state.cpp
new file mode 100644
index 0000000..3f55559
--- /dev/null
+++ b/examples/parallel_for/game_of_life/src/Update_state.cpp
@@ -0,0 +1,410 @@
+/*
+    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.
+*/
+
+#include "Evolution.h"
+
+#ifdef USE_SSE 
+/* Update states with SSE */
+
+#include <xmmintrin.h>
+#include <emmintrin.h>
+
+inline void create_record( char * src, unsigned * dst, unsigned width)
+{
+    dst[0] |= src[width - 1];
+    for( unsigned a=0; a<31u; ++a )
+        dst[0] |= src[a]<<(a+1);
+    unsigned a;
+    for( a=31u; a<width; ++a )
+        dst[(a+1)/32u] |= src[a]<<((a+1)%32u);
+    dst[(a+1)/32u] |= src[0]<<((a+1)%32u);
+}
+
+inline void sum_offset( __m128i * X, __m128i * A, __m128i * B, __m128i * C, 
+                        unsigned size_sse_ar, unsigned shift )
+{
+    for(unsigned i=0; i<size_sse_ar; ++i) 
+    {
+        __m128i tmp = _mm_and_si128(A[i],X[shift + i]);    
+        A[i]=_mm_xor_si128(A[i],X[shift + i]);    
+        C[i]=_mm_or_si128(C[i],_mm_and_si128(B[i],tmp));
+        B[i]=_mm_xor_si128(B[i],tmp);
+    }
+}
+
+inline void shift_left2D( __m128i * X, unsigned height, unsigned size_sse_row )
+{
+    for( unsigned b=0; b<height; ++b ) 
+    {
+        unsigned ind = b*size_sse_row;
+        unsigned x0 = X[ind].m128i_u32[0] & 1;
+
+        X[ind] =_mm_or_si128( _mm_srli_epi16(X[ind],1), 
+            _mm_slli_epi16( _mm_srli_si128( X[ind], 2), 15) );
+    
+        unsigned x1 = X[ind + 1].m128i_u32[0] & 1;
+        X[ind+1] =_mm_or_si128( _mm_srli_epi16( X[ind+1],1), 
+            _mm_slli_epi16( _mm_srli_si128( X[ind+1], 2), 15) );
+        X[ind].m128i_u32[3] |= x1<<31;
+        
+        unsigned x2 = X[ind + 2].m128i_u32[0] & 1;
+        X[ind+2] =_mm_or_si128( _mm_srli_epi16( X[ind+2],1), 
+            _mm_slli_epi16( _mm_srli_si128( X[ind+2], 2), 15) );
+        X[ind+1].m128i_u32[3] |= x2<<31;
+        
+        unsigned* dst = (unsigned*)&X[ind];
+        dst[301/32u] |= x0<<(301%32u);
+   }
+}
+
+inline void shift_right2D( __m128i * X, unsigned height, unsigned size_sse_row )
+{
+    for( unsigned b=0; b<height; ++b ) 
+    {
+        unsigned ind = b*size_sse_row;
+
+        unsigned x0 = X[ind].m128i_u32[3]; x0>>=31;
+        X[ind] =_mm_or_si128( _mm_slli_epi16(X[ind],1), 
+            _mm_srli_epi16( _mm_slli_si128( X[ind], 2), 15) );
+            
+        unsigned x1 = X[ind + 1].m128i_u32[3]; x1>>=31;
+        X[ind + 1] =_mm_or_si128( _mm_slli_epi16(X[ind + 1],1),
+                _mm_srli_epi16( _mm_slli_si128( X[ind + 1], 2), 15) );
+        X[ind + 1].m128i_u32[0] |= x0;
+                
+        unsigned* dst = (unsigned*)&X[ind];
+        unsigned x2 = dst[301/32u] & (1<<(301%32u)); x2>>=(301%32u);
+        X[ind + 2] =_mm_or_si128( _mm_slli_epi16(X[ind + 2],1),
+            _mm_srli_epi16( _mm_slli_si128( X[ind + 2], 2), 15) );        
+        X[ind + 2].m128i_u32[0] |= x1;    
+        X[ind].m128i_u32[0] |= x2;
+   }
+}
+
+void UpdateState(Matrix * m_matrix, char * dest ,int begin, int end)
+{
+    //300/128 + 1 =3, 3*300=900
+    unsigned size_sse_row = m_matrix->width/128 + 1; //3
+    unsigned size_sse_ar=size_sse_row * (end - begin); 
+    __m128i X[906], A[900], B[900], C[900];
+    char * mas  = m_matrix->data;
+    
+    for( unsigned i=0; i<size_sse_ar; ++i)
+    {
+        A[i].m128i_u32[0]=0;A[i].m128i_u32[1]=0;A[i].m128i_u32[2]=0;A[i].m128i_u32[3]=0;
+        B[i].m128i_u32[0]=0;B[i].m128i_u32[1]=0;B[i].m128i_u32[2]=0;B[i].m128i_u32[3]=0;
+        C[i].m128i_u32[0]=0;C[i].m128i_u32[1]=0;C[i].m128i_u32[2]=0;C[i].m128i_u32[3]=0;    
+    }
+
+    for( unsigned i=0; i<size_sse_ar+6; ++i)
+    {
+        X[i].m128i_u32[0]=0;X[i].m128i_u32[1]=0;X[i].m128i_u32[2]=0;X[i].m128i_u32[3]=0;
+    }
+
+    // create X[] with bounds
+    unsigned height = end - begin;
+    unsigned width = m_matrix->width;
+    for( unsigned b = 0 ; b < height; ++b ) 
+    {
+        char* src = &mas[(b + begin)*width];
+        unsigned* dst = (unsigned*)&X[(b+1)*size_sse_row];
+        create_record(src, dst, width);
+    }
+    // create high row in X[]
+    char * src;
+    if(begin == 0) 
+    {
+        src = &mas[(m_matrix->height-1)*width];
+    }
+    else 
+    {
+        src = &mas[(begin-1)*width];
+    }
+    unsigned* dst = (unsigned*)X;
+    create_record(src, dst, width);
+    
+    //create lower row in X[]
+    if(end == m_matrix->height ) 
+    {
+        src = mas;
+    }        
+    else 
+    {
+        src = &mas[end*width];
+    }
+    dst = (unsigned*)&X[(height+1)*size_sse_row];
+    create_record(src, dst, width);
+    
+    //sum( C, B, A, X+offset_for_upwards ); high-left friend
+    sum_offset(X,A,B,C,size_sse_ar, 0);
+    
+    //sum( C, B, A, X+offset_for_no_vertical_shift );
+    sum_offset(X,A,B,C,size_sse_ar, size_sse_row);
+    
+    //sum( C, B, A, X+offset_for_downwards );
+    sum_offset(X,A,B,C,size_sse_ar, 2*size_sse_row);
+
+    //shift_left( X ); (when view 2D) in our logic it is in right
+    height = end - begin + 2;
+    shift_left2D( X, height, size_sse_row);
+
+    //sum( C, B, A, X+offset_for_upwards ); high-left friend
+    sum_offset(X,A,B,C,size_sse_ar, 0);
+
+    //sum( C, B, A, X+offset_for_downwards );
+    sum_offset(X,A,B,C,size_sse_ar, 2*size_sse_row);
+
+    //shift_left( X ); (view in 2D) in our logic it is right shift
+    height = end - begin + 2;
+    shift_left2D( X, height, size_sse_row);
+    
+    //sum( C, B, A, X+offset_for_upwards ); high-right friend
+    sum_offset(X,A,B,C,size_sse_ar, 0);
+    
+    //sum( C, B, A, X+offset_for_no_vertical_shift ); right friend
+    sum_offset(X,A,B,C,size_sse_ar, size_sse_row);    
+    
+    //sum( C, B, A, X+offset_for_downwards ); right down friend
+    sum_offset(X,A,B,C,size_sse_ar, 2*size_sse_row);
+
+    //shift_right( X ); (when view in 2D) in our case it left shift.
+    height = end - begin + 2;
+    shift_right2D( X, height, size_sse_row);
+    
+    //X = (X|A)&B&~C (done bitwise over the arrays) 
+    unsigned shift = size_sse_row;
+    for(unsigned i=0; i<size_sse_ar; ++i) 
+    {
+        C[i].m128i_u32[0] = ~C[i].m128i_u32[0];
+        C[i].m128i_u32[1] = ~C[i].m128i_u32[1];
+        C[i].m128i_u32[2] = ~C[i].m128i_u32[2];
+        C[i].m128i_u32[3] = ~C[i].m128i_u32[3];
+        X[shift + i] = _mm_and_si128(_mm_and_si128(_mm_or_si128(X[shift + i],
+            A[i]),B[i]),C[i]);    
+    }
+
+    height = end - begin;
+    width=m_matrix->width;
+    for( unsigned b=0; b<height; ++b ) 
+    {
+        char* dst = &dest[(b+begin)*width];
+        unsigned* src = (unsigned*)&X[(b+1)*size_sse_row];
+        for( unsigned a=0; a<width; ++a )
+        {
+            unsigned c = src[a/32u] & 1<<(a%32u);
+            dst[a] = c>>(a%32u);
+        }
+    }
+}
+#else 
+/* end SSE block */
+
+// ----------------------------------------------------------------------
+// GetAdjacentCellState() - returns the state (value) of the specified 
+// adjacent cell of the current cell "cellNumber"
+char GetAdjacentCellState(
+                                char* source,      // pointer to source data block
+                                int x,             // logical width of field
+                                int y,             // logical height of field
+                                int cellNumber,    // number of cell position to examine
+                                int cp             // which adjacent position
+                               )
+{
+/* 
+cp 
+*-- cp=1 ... --- cp=8 (summary: -1-2-3-
+-x-          -x-                -4-x-5-
+---          --*                -6-7-8- )
+*/
+    char cellState = 0;        // return value
+
+    // set up boundary flags to trigger field-wrap logic
+    bool onTopRow = false;
+    bool onBottomRow = false;
+    bool onLeftColumn = false;
+    bool onRightColumn = false;
+
+    // check to see if cell is on top row
+    if (cellNumber < x)
+    {
+        onTopRow = true;
+    }
+    // check to see if cell is on bottom row
+    if ((x*y)-cellNumber <= x)
+    {
+        onBottomRow = true;
+    }
+    // check to see if cell is on left column
+    if (cellNumber%x == 0)
+    {
+        onLeftColumn = true;
+    }
+    // check to see if cell is on right column
+    if ((cellNumber+1)%x == 0)
+    {
+        onRightColumn = true;
+    }
+
+    switch (cp)
+    {
+        case 1:
+            if (onTopRow && onLeftColumn)
+            {
+                return *(source+((x*y)-1));
+            }
+            if (onTopRow && !onLeftColumn)
+            {
+                return *(source+(((x*y)-x)+(cellNumber-1)));
+            }
+            if (onLeftColumn && !onTopRow)
+            {
+                return *(source+(cellNumber-1));
+            }
+            return *((source+cellNumber)-(x+1));
+
+        case 2:
+            if (onTopRow)
+            {
+                return *(source+(((x*y)-x)+cellNumber));
+            }
+            return *((source+cellNumber)-x);
+
+        case 3:
+            if (onTopRow && onRightColumn)
+            {
+                return *(source+((x*y)-x));
+            }
+            if (onTopRow && !onRightColumn)
+            {
+                return *(source+(((x*y)-x)+(cellNumber+1)));
+            }
+            if (onRightColumn && !onTopRow)
+            {
+                return *(source+((cellNumber-(x*2))+1));
+            }
+            return *(source+(cellNumber-(x-1)));
+
+        case 4:
+            if (onRightColumn)
+            {
+                return *(source+(cellNumber-(x-1)));
+            }
+            return *(source+(cellNumber+1));
+
+        case 5:
+            if (onBottomRow && onRightColumn)
+            {
+                return *source;
+            }
+            if (onBottomRow && !onRightColumn)
+            {
+                return *(source+((cellNumber-((x*y)-x))+1));
+            }
+            if (onRightColumn && !onBottomRow)
+            {
+                return *(source+(cellNumber+1));
+            }
+            return *(source+(((cellNumber+x))+1));
+
+        case 6:
+            if (onBottomRow)
+            {
+                return *(source+(cellNumber-((x*y)-x)));
+            }
+            return *(source+(cellNumber+x));
+
+        case 7:
+            if (onBottomRow && onLeftColumn)
+            {
+                return *(source+(x-1));
+            }
+            if (onBottomRow && !onLeftColumn)
+            {
+                return *(source+(cellNumber-((x*y)-x)-1));
+            }
+            if (onLeftColumn && !onBottomRow)
+            {
+                return *(source+(cellNumber+((x*2)-1)));
+            }
+            return *(source+(cellNumber+(x-1)));
+
+        case 8:
+            if (onLeftColumn)
+            {
+                return *(source+(cellNumber+(x-1)));
+            }
+            return *(source+(cellNumber-1));
+    }
+    return cellState;
+}
+
+char CheckCell(Matrix * m_matrix, int cellNumber)
+{
+    char total = 0;
+    char* source = m_matrix->data;
+    //look around to find cell's with status "alive"
+    for(int i=1; i<9; i++)
+    {
+        total += GetAdjacentCellState(source, m_matrix->width, m_matrix->height, cellNumber, i);
+    }
+    // if the number of adjacent live cells is < 2 or > 3, the result is a dead 
+    // cell regardless of its current state. (A live cell dies of loneliness if it
+    // has less than 2 neighbors, and of overcrowding if it has more than 3; a new
+    // cell is born in an empty spot only if it has exactly 3 neighbors.
+    if (total < 2 || total > 3)
+    {
+        return 0;
+    }
+
+    // if we get here and the cell position holds a living cell, it stays alive
+    if (*(source+cellNumber))
+    {
+        return 1;
+    }
+
+    // we have an empty position. If there are only 2 neighbors, the position stays
+    // empty.
+    if (total == 2)
+    {
+        return 0;
+    }
+
+    // we have an empty position and exactly 3 neighbors. A cell is born.
+    return 1;
+}
+
+void UpdateState(Matrix * m_matrix, char * dest ,int begin, int end)
+{
+        for (int i=begin; i<=end; i++)
+        {
+            *(dest+i) = CheckCell(m_matrix, i);
+        }
+}
+
+#endif 
+/* end non-SSE block */
diff --git a/examples/parallel_for/game_of_life/xcode/game_of_life.xcodeproj/project.pbxproj b/examples/parallel_for/game_of_life/xcode/game_of_life.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..7eed01d
--- /dev/null
+++ b/examples/parallel_for/game_of_life/xcode/game_of_life.xcodeproj/project.pbxproj
@@ -0,0 +1,318 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 42;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		612CD8DD11F573FC00A587B2 /* Game_of_life.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 612CD8DB11F573FC00A587B2 /* Game_of_life.cpp */; };
+		612CD8DE11F573FC00A587B2 /* Update_state.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 612CD8DC11F573FC00A587B2 /* Update_state.cpp */; };
+		612CD8E111F5742000A587B2 /* Evolution.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 612CD8E011F5742000A587B2 /* Evolution.cpp */; };
+		A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+		A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+		8DD76F690486A84900D96B5E /* CopyFiles */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 12;
+			dstPath = "";
+			dstSubfolderSpec = 16;
+			files = (
+				A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+		612CD8DB11F573FC00A587B2 /* Game_of_life.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Game_of_life.cpp; path = ../src/Game_of_life.cpp; sourceTree = SOURCE_ROOT; };
+		612CD8DC11F573FC00A587B2 /* Update_state.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Update_state.cpp; path = ../src/Update_state.cpp; sourceTree = SOURCE_ROOT; };
+		612CD8E011F5742000A587B2 /* Evolution.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Evolution.cpp; path = ../src/Evolution.cpp; sourceTree = SOURCE_ROOT; };
+		8DD76F6C0486A84900D96B5E /* game_of_life */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = game_of_life; sourceTree = BUILT_PRODUCTS_DIR; };
+		A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		8DD76F660486A84900D96B5E /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		08FB7794FE84155DC02AAC07 /* game_of_life */ = {
+			isa = PBXGroup;
+			children = (
+				08FB7795FE84155DC02AAC07 /* Source */,
+				A1F593B20B8F06F900073279 /* External Frameworks and Libraries */,
+				1AB674ADFE9D54B511CA2CBB /* Products */,
+			);
+			name = game_of_life;
+			sourceTree = "<group>";
+		};
+		08FB7795FE84155DC02AAC07 /* Source */ = {
+			isa = PBXGroup;
+			children = (
+				612CD8E011F5742000A587B2 /* Evolution.cpp */,
+				612CD8DB11F573FC00A587B2 /* Game_of_life.cpp */,
+				612CD8DC11F573FC00A587B2 /* Update_state.cpp */,
+			);
+			name = Source;
+			sourceTree = "<group>";
+		};
+		1AB674ADFE9D54B511CA2CBB /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				8DD76F6C0486A84900D96B5E /* game_of_life */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {
+			isa = PBXGroup;
+			children = (
+				A1F593B30B8F06F900073279 /* libtbb.dylib */,
+			);
+			name = "External Frameworks and Libraries";
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		8DD76F620486A84900D96B5E /* game_of_life */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "game_of_life" */;
+			buildPhases = (
+				8DD76F640486A84900D96B5E /* Sources */,
+				8DD76F660486A84900D96B5E /* Frameworks */,
+				8DD76F690486A84900D96B5E /* CopyFiles */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = game_of_life;
+			productInstallPath = "$(HOME)/bin";
+			productName = game_of_life;
+			productReference = 8DD76F6C0486A84900D96B5E /* game_of_life */;
+			productType = "com.apple.product-type.tool";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		08FB7793FE84155DC02AAC07 /* Project object */ = {
+			isa = PBXProject;
+			buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "game_of_life" */;
+			compatibilityVersion = "Xcode 2.4";
+			hasScannedForEncodings = 1;
+			mainGroup = 08FB7794FE84155DC02AAC07 /* game_of_life */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				8DD76F620486A84900D96B5E /* game_of_life */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+		8DD76F640486A84900D96B5E /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				612CD8DD11F573FC00A587B2 /* Game_of_life.cpp in Sources */,
+				612CD8DE11F573FC00A587B2 /* Update_state.cpp in Sources */,
+				612CD8E111F5742000A587B2 /* Evolution.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_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = _CONSOLE;
+				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
+				INSTALL_PATH = "$(HOME)/bin";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					../../../../lib,
+				);
+				PRODUCT_NAME = game_of_life;
+				ZERO_LINK = NO;
+			};
+			name = Debug;
+		};
+		1DEB923308733DC60010E9CD /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_PREPROCESSOR_DEFINITIONS = _CONSOLE;
+				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
+				INSTALL_PATH = "$(HOME)/bin";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					../../../../lib,
+				);
+				PRODUCT_NAME = game_of_life;
+				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;
+				PREBINDING = NO;
+				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;
+				PREBINDING = NO;
+				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+				SYMROOT = "/tmp/tbb-$(USER)";
+			};
+			name = Release;
+		};
+		A1F593C60B8F0E6E00073279 /* Debug64 */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)";
+				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = _CONSOLE;
+				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
+				INSTALL_PATH = "$(HOME)/bin";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					../../../../lib,
+				);
+				PRODUCT_NAME = game_of_life;
+				ZERO_LINK = NO;
+			};
+			name = Debug64;
+		};
+		A1F593C70B8F0E6E00073279 /* Release64 */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)";
+				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
+				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_PREPROCESSOR_DEFINITIONS = _CONSOLE;
+				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
+				INSTALL_PATH = "$(HOME)/bin";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					../../../../lib,
+				);
+				PRODUCT_NAME = game_of_life;
+				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";
+				PREBINDING = NO;
+				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";
+				PREBINDING = NO;
+				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 "game_of_life" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				1DEB923208733DC60010E9CD /* Debug */,
+				A1F593C60B8F0E6E00073279 /* Debug64 */,
+				1DEB923308733DC60010E9CD /* Release */,
+				A1F593C70B8F0E6E00073279 /* Release64 */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "game_of_life" */ = {
+			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/parallel_for/index.html b/examples/parallel_for/index.html
index 6924f7a..86e978d 100644
--- a/examples/parallel_for/index.html
+++ b/examples/parallel_for/index.html
@@ -12,14 +12,14 @@ This directory has examples of the template <code>parallel_for</code>.
 <DD>Parallel 2-D raytracer/renderer.
 <DT><A HREF="polygon_overlay/index.html">polygon_overlay</A>
 <DD>Simple polygon overlay.
-<DT><A HREF="game_of_life.NET/index.html">game_of_life</A>
+<DT><A HREF="game_of_life/index.html">game_of_life</A>
 <DD>Simple Game of life overlay.
 </DL>
 
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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 
diff --git a/examples/parallel_for/polygon_overlay/Makefile b/examples/parallel_for/polygon_overlay/Makefile
index 418dad1..ae18695 100644
--- a/examples/parallel_for/polygon_overlay/Makefile
+++ b/examples/parallel_for/polygon_overlay/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/parallel_for/polygon_overlay/Makefile.windows b/examples/parallel_for/polygon_overlay/Makefile.windows
index 3dd0008..a2c9707 100644
--- a/examples/parallel_for/polygon_overlay/Makefile.windows
+++ b/examples/parallel_for/polygon_overlay/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 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 999bb63..70b8ccc 100644
--- a/examples/parallel_for/polygon_overlay/index.html
+++ b/examples/parallel_for/polygon_overlay/index.html
@@ -118,7 +118,7 @@ named pover.exe.  To run these executables directly, use one or more of the foll
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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 
diff --git a/examples/parallel_for/polygon_overlay/polymain.cpp b/examples/parallel_for/polygon_overlay/polymain.cpp
index e70e9e7..eab2b23 100644
--- a/examples/parallel_for/polygon_overlay/polymain.cpp
+++ b/examples/parallel_for/polygon_overlay/polymain.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 f5dc943..88ce6fb 100644
--- a/examples/parallel_for/polygon_overlay/polymain.h
+++ b/examples/parallel_for/polygon_overlay/polymain.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 47bbdc9..9fa7c0b 100644
--- a/examples/parallel_for/polygon_overlay/polyover.cpp
+++ b/examples/parallel_for/polygon_overlay/polyover.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 cca20f6..4345d38 100644
--- a/examples/parallel_for/polygon_overlay/polyover.h
+++ b/examples/parallel_for/polygon_overlay/polyover.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 0b38705..52ff5cc 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-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 abcb9a1..d6b0c84 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-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 d680401..ab81956 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-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 ff70bf3..b6e36f6 100644
--- a/examples/parallel_for/polygon_overlay/rpolygon.h
+++ b/examples/parallel_for/polygon_overlay/rpolygon.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/polygon_overlay/xcode/PolygonOverlay.xcodeproj/project.pbxproj b/examples/parallel_for/polygon_overlay/xcode/PolygonOverlay.xcodeproj/project.pbxproj
index a8a1e5f..0d4575c 100644
--- a/examples/parallel_for/polygon_overlay/xcode/PolygonOverlay.xcodeproj/project.pbxproj
+++ b/examples/parallel_for/polygon_overlay/xcode/PolygonOverlay.xcodeproj/project.pbxproj
@@ -50,8 +50,8 @@
 		6A6DAA950DA2C0B3008D95BD /* rpolygon.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = rpolygon.h; path = ../rpolygon.h; sourceTree = SOURCE_ROOT; };
 		8D0C4E960486CD37000505A6 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
 		8D0C4E970486CD37000505A6 /* PolygonOverlay.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PolygonOverlay.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		A18D2A330B861B99007D8D2C /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
-		A1976AD90DF6A6910032C3EA /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbbmalloc.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbbmalloc.dylib; sourceTree = "<absolute>"; };
+		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>"; };
@@ -220,11 +220,11 @@
 				GCC_MODEL_TUNING = "";
 				GCC_OPTIMIZATION_LEVEL = 0;
 				INSTALL_PATH = "$(HOME)/Applications";
+				HEADER_SEARCH_PATHS = ../../../../include;
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					../../../../lib,
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = PolygonOverlay;
 				GCC_VERSION = 4.0;
 			};
@@ -236,11 +236,11 @@
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
 				GCC_MODEL_TUNING = "";
 				INSTALL_PATH = "$(HOME)/Applications";
+				HEADER_SEARCH_PATHS = ../../../../include;
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					../../../../lib,
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = PolygonOverlay;
 				GCC_VERSION = 4.0;
 			};
diff --git a/examples/parallel_for/seismic/Makefile b/examples/parallel_for/seismic/Makefile
index deca9f1..b5e700c 100644
--- a/examples/parallel_for/seismic/Makefile
+++ b/examples/parallel_for/seismic/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/parallel_for/seismic/Makefile.windows b/examples/parallel_for/seismic/Makefile.windows
index 3ee3a98..3b00698 100644
--- a/examples/parallel_for/seismic/Makefile.windows
+++ b/examples/parallel_for/seismic/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/parallel_for/seismic/SeismicSimulation.cpp b/examples/parallel_for/seismic/SeismicSimulation.cpp
index 4902b6b..985af68 100644
--- a/examples/parallel_for/seismic/SeismicSimulation.cpp
+++ b/examples/parallel_for/seismic/SeismicSimulation.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 2b98f28..ff3e812 100644
--- a/examples/parallel_for/seismic/index.html
+++ b/examples/parallel_for/seismic/index.html
@@ -92,7 +92,7 @@ user interface:
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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 
diff --git a/examples/parallel_for/seismic/xcode/SeismicSimulation.xcodeproj/project.pbxproj b/examples/parallel_for/seismic/xcode/SeismicSimulation.xcodeproj/project.pbxproj
index 26c1a6c..8179416 100644
--- a/examples/parallel_for/seismic/xcode/SeismicSimulation.xcodeproj/project.pbxproj
+++ b/examples/parallel_for/seismic/xcode/SeismicSimulation.xcodeproj/project.pbxproj
@@ -37,7 +37,7 @@
 		32DBCF6D0370B57F00C91783 /* SeismicSimulation.pch */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SeismicSimulation.pch; sourceTree = "<group>"; };
 		8D0C4E960486CD37000505A6 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
 		8D0C4E970486CD37000505A6 /* SeismicSimulation.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SeismicSimulation.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		A18D2A330B861B99007D8D2C /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
+		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>"; };
@@ -196,11 +196,11 @@
 				GCC_MODEL_TUNING = "";
 				GCC_OPTIMIZATION_LEVEL = 0;
 				INSTALL_PATH = "$(HOME)/Applications";
+				HEADER_SEARCH_PATHS = ../../../../include;
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					../../../../lib,
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = SeismicSimulation;
 				GCC_VERSION = 4.0;
 			};
@@ -212,11 +212,11 @@
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
 				GCC_MODEL_TUNING = "";
 				INSTALL_PATH = "$(HOME)/Applications";
+				HEADER_SEARCH_PATHS = ../../../../include;
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					../../../../lib,
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = SeismicSimulation;
 				GCC_VERSION = 4.0;
 			};
diff --git a/examples/parallel_for/tachyon/Makefile b/examples/parallel_for/tachyon/Makefile
index d0b2ffb..848fbd4 100644
--- a/examples/parallel_for/tachyon/Makefile
+++ b/examples/parallel_for/tachyon/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/parallel_for/tachyon/Makefile.windows b/examples/parallel_for/tachyon/Makefile.windows
index 161cc0d..cbdd2f1 100644
--- a/examples/parallel_for/tachyon/Makefile.windows
+++ b/examples/parallel_for/tachyon/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 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 2e410c8..151255b 100644
--- a/examples/parallel_for/tachyon/index.html
+++ b/examples/parallel_for/tachyon/index.html
@@ -151,7 +151,7 @@ named tachyon.<<I>version</I>>.exe.  To run these executables directly, us
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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 
diff --git a/examples/parallel_for/tachyon/msvs/tachyon.serial.vcproj b/examples/parallel_for/tachyon/msvs/tachyon.serial.vcproj
index 9292a1b..a81953e 100644
--- a/examples/parallel_for/tachyon/msvs/tachyon.serial.vcproj
+++ b/examples/parallel_for/tachyon/msvs/tachyon.serial.vcproj
@@ -68,6 +68,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
+				AdditionalDependencies="$(OutDir)tachyon.common.lib"
 				LinkIncremental="1"
 				GenerateDebugInformation="true"
 				SubSystem="2"
@@ -149,6 +150,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
+				AdditionalDependencies="$(OutDir)tachyon.common.lib"
 				LinkIncremental="1"
 				GenerateDebugInformation="true"
 				SubSystem="2"
@@ -230,6 +232,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
+				AdditionalDependencies="$(OutDir)tachyon.common.lib"
 				LinkIncremental="1"
 				GenerateDebugInformation="true"
 				SubSystem="2"
@@ -311,6 +314,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
+				AdditionalDependencies="$(OutDir)tachyon.common.lib"
 				LinkIncremental="1"
 				GenerateDebugInformation="true"
 				SubSystem="2"
@@ -393,6 +397,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
+				AdditionalDependencies="$(OutDir)tachyon.common.lib"
 				LinkIncremental="1"
 				AdditionalLibraryDirectories="$(DXSDK_DIR)\lib\x86"
 				GenerateDebugInformation="true"
@@ -475,6 +480,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
+				AdditionalDependencies="$(OutDir)tachyon.common.lib"
 				LinkIncremental="1"
 				AdditionalLibraryDirectories="$(DXSDK_DIR)\lib\x64"
 				GenerateDebugInformation="true"
@@ -559,6 +565,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
+				AdditionalDependencies="$(OutDir)tachyon.common.lib"
 				LinkIncremental="1"
 				AdditionalLibraryDirectories="$(DXSDK_DIR)\lib\x86"
 				GenerateDebugInformation="true"
@@ -641,6 +648,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
+				AdditionalDependencies="$(OutDir)tachyon.common.lib"
 				LinkIncremental="1"
 				AdditionalLibraryDirectories="$(DXSDK_DIR)\lib\x64"
 				GenerateDebugInformation="true"
diff --git a/examples/parallel_for/tachyon/msvs/tachyon.tbb.vcproj b/examples/parallel_for/tachyon/msvs/tachyon.tbb.vcproj
index 99fb5ef..96a2dda 100644
--- a/examples/parallel_for/tachyon/msvs/tachyon.tbb.vcproj
+++ b/examples/parallel_for/tachyon/msvs/tachyon.tbb.vcproj
@@ -69,7 +69,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="tbb_debug.lib"
+				AdditionalDependencies="tbb_debug.lib $(OutDir)tachyon.common.lib"
 				LinkIncremental="1"
 				AdditionalLibraryDirectories="$(TBB30_INSTALL_DIR)\lib\ia32\vc_mt;$(TBB30_INSTALL_DIR)\lib\ia32\vc8"
 				GenerateDebugInformation="true"
@@ -155,7 +155,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="tbb_debug.lib"
+				AdditionalDependencies="tbb_debug.lib $(OutDir)tachyon.common.lib"
 				LinkIncremental="1"
 				AdditionalLibraryDirectories="$(TBB30_INSTALL_DIR)\lib\intel64\vc_mt;$(TBB30_INSTALL_DIR)\lib\intel64\vc8"
 				GenerateDebugInformation="true"
@@ -241,7 +241,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="tbb.lib"
+				AdditionalDependencies="tbb.lib $(OutDir)tachyon.common.lib"
 				LinkIncremental="1"
 				AdditionalLibraryDirectories="$(TBB30_INSTALL_DIR)\lib\ia32\vc_mt;$(TBB30_INSTALL_DIR)\lib\ia32\vc8"
 				GenerateDebugInformation="true"
@@ -327,7 +327,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="tbb.lib"
+				AdditionalDependencies="tbb.lib $(OutDir)tachyon.common.lib"
 				LinkIncremental="1"
 				AdditionalLibraryDirectories="$(TBB30_INSTALL_DIR)\lib\intel64\vc_mt;$(TBB30_INSTALL_DIR)\lib\intel64\vc8"
 				GenerateDebugInformation="true"
@@ -414,7 +414,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="tbb.lib"
+				AdditionalDependencies="tbb.lib $(OutDir)tachyon.common.lib"
 				LinkIncremental="1"
 				AdditionalLibraryDirectories="$(TBB30_INSTALL_DIR)\lib\ia32\vc_mt;$(TBB30_INSTALL_DIR)\lib\ia32\vc8;$(DXSDK_DIR)\lib\x86"
 				GenerateDebugInformation="true"
@@ -500,7 +500,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="tbb.lib"
+				AdditionalDependencies="tbb.lib $(OutDir)tachyon.common.lib"
 				LinkIncremental="1"
 				AdditionalLibraryDirectories="$(TBB30_INSTALL_DIR)\lib\intel64\vc_mt;$(TBB30_INSTALL_DIR)\lib\intel64\vc8;$(DXSDK_DIR)\lib\x64"
 				GenerateDebugInformation="true"
@@ -588,7 +588,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="tbb_debug.lib"
+				AdditionalDependencies="tbb_debug.lib $(OutDir)tachyon.common.lib"
 				LinkIncremental="1"
 				AdditionalLibraryDirectories="$(TBB30_INSTALL_DIR)\lib\ia32\vc_mt;$(TBB30_INSTALL_DIR)\lib\ia32\vc8;$(DXSDK_DIR)\lib\x86"
 				GenerateDebugInformation="true"
@@ -674,7 +674,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="tbb_debug.lib"
+				AdditionalDependencies="tbb_debug.lib $(OutDir)tachyon.common.lib"
 				LinkIncremental="1"
 				AdditionalLibraryDirectories="$(TBB30_INSTALL_DIR)\lib\intel64\vc_mt;$(TBB30_INSTALL_DIR)\lib\intel64\vc8;$(DXSDK_DIR)\lib\x64"
 				GenerateDebugInformation="true"
diff --git a/examples/parallel_for/tachyon/msvs/tachyon.tbb1d.vcproj b/examples/parallel_for/tachyon/msvs/tachyon.tbb1d.vcproj
index feac325..a16037e 100644
--- a/examples/parallel_for/tachyon/msvs/tachyon.tbb1d.vcproj
+++ b/examples/parallel_for/tachyon/msvs/tachyon.tbb1d.vcproj
@@ -69,7 +69,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="tbb_debug.lib"
+				AdditionalDependencies="tbb_debug.lib $(OutDir)tachyon.common.lib"
 				LinkIncremental="1"
 				AdditionalLibraryDirectories="$(TBB30_INSTALL_DIR)\lib\ia32\vc_mt;$(TBB30_INSTALL_DIR)\lib\ia32\vc8"
 				GenerateDebugInformation="true"
@@ -155,7 +155,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="tbb_debug.lib"
+				AdditionalDependencies="tbb_debug.lib $(OutDir)tachyon.common.lib"
 				LinkIncremental="1"
 				AdditionalLibraryDirectories="$(TBB30_INSTALL_DIR)\lib\intel64\vc_mt;$(TBB30_INSTALL_DIR)\lib\intel64\vc8"
 				GenerateDebugInformation="true"
@@ -241,7 +241,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="tbb.lib"
+				AdditionalDependencies="tbb.lib $(OutDir)tachyon.common.lib"
 				LinkIncremental="1"
 				AdditionalLibraryDirectories="$(TBB30_INSTALL_DIR)\lib\ia32\vc_mt;$(TBB30_INSTALL_DIR)\lib\ia32\vc8"
 				GenerateDebugInformation="true"
@@ -327,7 +327,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="tbb.lib"
+				AdditionalDependencies="tbb.lib $(OutDir)tachyon.common.lib"
 				LinkIncremental="1"
 				AdditionalLibraryDirectories="$(TBB30_INSTALL_DIR)\lib\intel64\vc_mt;$(TBB30_INSTALL_DIR)\lib\intel64\vc8"
 				GenerateDebugInformation="true"
@@ -414,7 +414,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="tbb.lib"
+				AdditionalDependencies="tbb.lib $(OutDir)tachyon.common.lib"
 				LinkIncremental="1"
 				AdditionalLibraryDirectories="$(TBB30_INSTALL_DIR)\lib\ia32\vc_mt;$(TBB30_INSTALL_DIR)\lib\ia32\vc8;$(DXSDK_DIR)\lib\x86"
 				GenerateDebugInformation="true"
@@ -500,7 +500,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="tbb.lib"
+				AdditionalDependencies="tbb.lib $(OutDir)tachyon.common.lib"
 				LinkIncremental="1"
 				AdditionalLibraryDirectories="$(TBB30_INSTALL_DIR)\lib\intel64\vc_mt;$(TBB30_INSTALL_DIR)\lib\intel64\vc8;$(DXSDK_DIR)\lib\x64"
 				GenerateDebugInformation="true"
@@ -588,7 +588,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="tbb_debug.lib"
+				AdditionalDependencies="tbb_debug.lib $(OutDir)tachyon.common.lib"
 				LinkIncremental="1"
 				AdditionalLibraryDirectories="$(TBB30_INSTALL_DIR)\lib\ia32\vc_mt;$(TBB30_INSTALL_DIR)\lib\ia32\vc8;$(DXSDK_DIR)\lib\x86"
 				GenerateDebugInformation="true"
@@ -674,7 +674,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="tbb_debug.lib"
+				AdditionalDependencies="tbb_debug.lib $(OutDir)tachyon.common.lib"
 				LinkIncremental="1"
 				AdditionalLibraryDirectories="$(TBB30_INSTALL_DIR)\lib\intel64\vc_mt;$(TBB30_INSTALL_DIR)\lib\intel64\vc8;$(DXSDK_DIR)\lib\x64"
 				GenerateDebugInformation="true"
diff --git a/examples/parallel_for/tachyon/src/api.cpp b/examples/parallel_for/tachyon/src/api.cpp
index 8f3c00e..127d019 100644
--- a/examples/parallel_for/tachyon/src/api.cpp
+++ b/examples/parallel_for/tachyon/src/api.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/api.h b/examples/parallel_for/tachyon/src/api.h
index bcabb2a..8bed972 100644
--- a/examples/parallel_for/tachyon/src/api.h
+++ b/examples/parallel_for/tachyon/src/api.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/apigeom.cpp b/examples/parallel_for/tachyon/src/apigeom.cpp
index d6b69a1..b7d99a8 100644
--- a/examples/parallel_for/tachyon/src/apigeom.cpp
+++ b/examples/parallel_for/tachyon/src/apigeom.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/apitrigeom.cpp b/examples/parallel_for/tachyon/src/apitrigeom.cpp
index 57221c7..c5220d6 100644
--- a/examples/parallel_for/tachyon/src/apitrigeom.cpp
+++ b/examples/parallel_for/tachyon/src/apitrigeom.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/apitrigeom.h b/examples/parallel_for/tachyon/src/apitrigeom.h
index bf9dabb..64fae4f 100644
--- a/examples/parallel_for/tachyon/src/apitrigeom.h
+++ b/examples/parallel_for/tachyon/src/apitrigeom.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 2361cd5..b524d5f 100644
--- a/examples/parallel_for/tachyon/src/bndbox.cpp
+++ b/examples/parallel_for/tachyon/src/bndbox.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/bndbox.h b/examples/parallel_for/tachyon/src/bndbox.h
index fbac4a0..891d487 100644
--- a/examples/parallel_for/tachyon/src/bndbox.h
+++ b/examples/parallel_for/tachyon/src/bndbox.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/box.cpp b/examples/parallel_for/tachyon/src/box.cpp
index a961284..be8ecd5 100644
--- a/examples/parallel_for/tachyon/src/box.cpp
+++ b/examples/parallel_for/tachyon/src/box.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/box.h b/examples/parallel_for/tachyon/src/box.h
index a0c2f38..22f59b2 100644
--- a/examples/parallel_for/tachyon/src/box.h
+++ b/examples/parallel_for/tachyon/src/box.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/camera.cpp b/examples/parallel_for/tachyon/src/camera.cpp
index 17b6966..342a3c1 100644
--- a/examples/parallel_for/tachyon/src/camera.cpp
+++ b/examples/parallel_for/tachyon/src/camera.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/camera.h b/examples/parallel_for/tachyon/src/camera.h
index bda8973..ef6d6a9 100644
--- a/examples/parallel_for/tachyon/src/camera.h
+++ b/examples/parallel_for/tachyon/src/camera.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/coordsys.cpp b/examples/parallel_for/tachyon/src/coordsys.cpp
index f801cdc..c7db36b 100644
--- a/examples/parallel_for/tachyon/src/coordsys.cpp
+++ b/examples/parallel_for/tachyon/src/coordsys.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/coordsys.h b/examples/parallel_for/tachyon/src/coordsys.h
index 91ce397..3d7b459 100644
--- a/examples/parallel_for/tachyon/src/coordsys.h
+++ b/examples/parallel_for/tachyon/src/coordsys.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/cylinder.cpp b/examples/parallel_for/tachyon/src/cylinder.cpp
index 3601137..e96a54c 100644
--- a/examples/parallel_for/tachyon/src/cylinder.cpp
+++ b/examples/parallel_for/tachyon/src/cylinder.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/cylinder.h b/examples/parallel_for/tachyon/src/cylinder.h
index 606d6f1..56e3311 100644
--- a/examples/parallel_for/tachyon/src/cylinder.h
+++ b/examples/parallel_for/tachyon/src/cylinder.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/extvol.cpp b/examples/parallel_for/tachyon/src/extvol.cpp
index e44a2ab..42f3bfc 100644
--- a/examples/parallel_for/tachyon/src/extvol.cpp
+++ b/examples/parallel_for/tachyon/src/extvol.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/extvol.h b/examples/parallel_for/tachyon/src/extvol.h
index be9ceaa..f593f6d 100644
--- a/examples/parallel_for/tachyon/src/extvol.h
+++ b/examples/parallel_for/tachyon/src/extvol.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/getargs.cpp b/examples/parallel_for/tachyon/src/getargs.cpp
index 9b50535..16379ad 100644
--- a/examples/parallel_for/tachyon/src/getargs.cpp
+++ b/examples/parallel_for/tachyon/src/getargs.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/getargs.h b/examples/parallel_for/tachyon/src/getargs.h
index b4b31e8..bcf5d7f 100644
--- a/examples/parallel_for/tachyon/src/getargs.h
+++ b/examples/parallel_for/tachyon/src/getargs.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/global.cpp b/examples/parallel_for/tachyon/src/global.cpp
index 73d8f46..248d05f 100644
--- a/examples/parallel_for/tachyon/src/global.cpp
+++ b/examples/parallel_for/tachyon/src/global.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/global.h b/examples/parallel_for/tachyon/src/global.h
index ccf4ccf..a43edf2 100644
--- a/examples/parallel_for/tachyon/src/global.h
+++ b/examples/parallel_for/tachyon/src/global.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/grid.cpp b/examples/parallel_for/tachyon/src/grid.cpp
index 4569f99..c614975 100644
--- a/examples/parallel_for/tachyon/src/grid.cpp
+++ b/examples/parallel_for/tachyon/src/grid.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/grid.h b/examples/parallel_for/tachyon/src/grid.h
index 04f1e83..2790683 100644
--- a/examples/parallel_for/tachyon/src/grid.h
+++ b/examples/parallel_for/tachyon/src/grid.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/imageio.cpp b/examples/parallel_for/tachyon/src/imageio.cpp
index 947ced8..95425a1 100644
--- a/examples/parallel_for/tachyon/src/imageio.cpp
+++ b/examples/parallel_for/tachyon/src/imageio.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/imageio.h b/examples/parallel_for/tachyon/src/imageio.h
index 4fca979..dbcbea8 100644
--- a/examples/parallel_for/tachyon/src/imageio.h
+++ b/examples/parallel_for/tachyon/src/imageio.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/imap.cpp b/examples/parallel_for/tachyon/src/imap.cpp
index ae539f1..b2699f4 100644
--- a/examples/parallel_for/tachyon/src/imap.cpp
+++ b/examples/parallel_for/tachyon/src/imap.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/imap.h b/examples/parallel_for/tachyon/src/imap.h
index 8cea78a..593ac44 100644
--- a/examples/parallel_for/tachyon/src/imap.h
+++ b/examples/parallel_for/tachyon/src/imap.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/intersect.cpp b/examples/parallel_for/tachyon/src/intersect.cpp
index f31527c..aeb240b 100644
--- a/examples/parallel_for/tachyon/src/intersect.cpp
+++ b/examples/parallel_for/tachyon/src/intersect.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/intersect.h b/examples/parallel_for/tachyon/src/intersect.h
index 579126c..b75f602 100644
--- a/examples/parallel_for/tachyon/src/intersect.h
+++ b/examples/parallel_for/tachyon/src/intersect.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/jpeg.cpp b/examples/parallel_for/tachyon/src/jpeg.cpp
index 30ecd82..c17fc7d 100644
--- a/examples/parallel_for/tachyon/src/jpeg.cpp
+++ b/examples/parallel_for/tachyon/src/jpeg.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/jpeg.h b/examples/parallel_for/tachyon/src/jpeg.h
index 2f3da6e..54136da 100644
--- a/examples/parallel_for/tachyon/src/jpeg.h
+++ b/examples/parallel_for/tachyon/src/jpeg.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/light.cpp b/examples/parallel_for/tachyon/src/light.cpp
index 816175a..9d10488 100644
--- a/examples/parallel_for/tachyon/src/light.cpp
+++ b/examples/parallel_for/tachyon/src/light.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/light.h b/examples/parallel_for/tachyon/src/light.h
index 7f12f76..a1e1006 100644
--- a/examples/parallel_for/tachyon/src/light.h
+++ b/examples/parallel_for/tachyon/src/light.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/machine.h b/examples/parallel_for/tachyon/src/machine.h
index a8ed0fb..ed7e570 100644
--- a/examples/parallel_for/tachyon/src/machine.h
+++ b/examples/parallel_for/tachyon/src/machine.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/macros.h b/examples/parallel_for/tachyon/src/macros.h
index b463ec3..1705ff9 100644
--- a/examples/parallel_for/tachyon/src/macros.h
+++ b/examples/parallel_for/tachyon/src/macros.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/objbound.cpp b/examples/parallel_for/tachyon/src/objbound.cpp
index c988600..655cc34 100644
--- a/examples/parallel_for/tachyon/src/objbound.cpp
+++ b/examples/parallel_for/tachyon/src/objbound.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/objbound.h b/examples/parallel_for/tachyon/src/objbound.h
index 9094537..1e6ea69 100644
--- a/examples/parallel_for/tachyon/src/objbound.h
+++ b/examples/parallel_for/tachyon/src/objbound.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/parse.cpp b/examples/parallel_for/tachyon/src/parse.cpp
index 23185a8..afa2bd7 100644
--- a/examples/parallel_for/tachyon/src/parse.cpp
+++ b/examples/parallel_for/tachyon/src/parse.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -61,6 +61,19 @@
  *  $Id: parse.cpp,v 1.3 2007-02-22 17:54:15 dpoulsen Exp $
  */
 
+// Try preventing lots of GCC warnings about ignored results of fscanf etc.
+#if !__INTEL_COMPILER
+
+#if __GNUC__<4 || __GNUC__==4 && __GNUC_MINOR__<5
+// For older versions of GCC, disable use of __wur in GLIBC
+#define _FORTIFY_SOURCE 0
+#else
+// Starting from 4.5, GCC has a suppression option
+#pragma GCC diagnostic ignored "-Wunused-result"
+#endif
+
+#endif //__INTEL_COMPILER
+
 #include <stdio.h>
 #include <math.h>
 #include <string.h>
diff --git a/examples/parallel_for/tachyon/src/parse.h b/examples/parallel_for/tachyon/src/parse.h
index 6387103..de2ac7b 100644
--- a/examples/parallel_for/tachyon/src/parse.h
+++ b/examples/parallel_for/tachyon/src/parse.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/plane.cpp b/examples/parallel_for/tachyon/src/plane.cpp
index 2c4be49..4131cca 100644
--- a/examples/parallel_for/tachyon/src/plane.cpp
+++ b/examples/parallel_for/tachyon/src/plane.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/plane.h b/examples/parallel_for/tachyon/src/plane.h
index 5902d90..1301176 100644
--- a/examples/parallel_for/tachyon/src/plane.h
+++ b/examples/parallel_for/tachyon/src/plane.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/ppm.cpp b/examples/parallel_for/tachyon/src/ppm.cpp
index 274bd7f..c0578f7 100644
--- a/examples/parallel_for/tachyon/src/ppm.cpp
+++ b/examples/parallel_for/tachyon/src/ppm.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -65,6 +65,19 @@
    truecolor sort of file..  Probably won't implement any decent checking
    at this point, probably choke on things like the # comments.. */
 
+// Try preventing lots of GCC warnings about ignored results of fscanf etc.
+#if !__INTEL_COMPILER
+
+#if __GNUC__<4 || __GNUC__==4 && __GNUC_MINOR__<5
+// For older versions of GCC, disable use of __wur in GLIBC
+#define _FORTIFY_SOURCE 0
+#else
+// Starting from 4.5, GCC has a suppression option
+#pragma GCC diagnostic ignored "-Wunused-result"
+#endif
+
+#endif //__INTEL_COMPILER
+
 #include <stdio.h>
 #include "machine.h"
 #include "types.h"
diff --git a/examples/parallel_for/tachyon/src/ppm.h b/examples/parallel_for/tachyon/src/ppm.h
index c7256f7..2386c57 100644
--- a/examples/parallel_for/tachyon/src/ppm.h
+++ b/examples/parallel_for/tachyon/src/ppm.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/pthread.cpp b/examples/parallel_for/tachyon/src/pthread.cpp
index db51022..fc020b6 100644
--- a/examples/parallel_for/tachyon/src/pthread.cpp
+++ b/examples/parallel_for/tachyon/src/pthread.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 12c64ea..702c0ff 100644
--- a/examples/parallel_for/tachyon/src/pthread.h
+++ b/examples/parallel_for/tachyon/src/pthread.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 da8316b..65ef85d 100644
--- a/examples/parallel_for/tachyon/src/quadric.cpp
+++ b/examples/parallel_for/tachyon/src/quadric.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/quadric.h b/examples/parallel_for/tachyon/src/quadric.h
index 91370b1..1e09ff3 100644
--- a/examples/parallel_for/tachyon/src/quadric.h
+++ b/examples/parallel_for/tachyon/src/quadric.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/render.cpp b/examples/parallel_for/tachyon/src/render.cpp
index 5608703..0f15846 100644
--- a/examples/parallel_for/tachyon/src/render.cpp
+++ b/examples/parallel_for/tachyon/src/render.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 db7377c..38da384 100644
--- a/examples/parallel_for/tachyon/src/render.h
+++ b/examples/parallel_for/tachyon/src/render.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/ring.cpp b/examples/parallel_for/tachyon/src/ring.cpp
index f5d6f94..d4e75a5 100644
--- a/examples/parallel_for/tachyon/src/ring.cpp
+++ b/examples/parallel_for/tachyon/src/ring.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/ring.h b/examples/parallel_for/tachyon/src/ring.h
index 4c4d8ea..4bc04f8 100644
--- a/examples/parallel_for/tachyon/src/ring.h
+++ b/examples/parallel_for/tachyon/src/ring.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/shade.cpp b/examples/parallel_for/tachyon/src/shade.cpp
index 8a4bd74..4fb74da 100644
--- a/examples/parallel_for/tachyon/src/shade.cpp
+++ b/examples/parallel_for/tachyon/src/shade.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/shade.h b/examples/parallel_for/tachyon/src/shade.h
index c91d4f4..c210e5f 100644
--- a/examples/parallel_for/tachyon/src/shade.h
+++ b/examples/parallel_for/tachyon/src/shade.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/sphere.cpp b/examples/parallel_for/tachyon/src/sphere.cpp
index 881e95d..2d23a67 100644
--- a/examples/parallel_for/tachyon/src/sphere.cpp
+++ b/examples/parallel_for/tachyon/src/sphere.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/sphere.h b/examples/parallel_for/tachyon/src/sphere.h
index a8e7722..ebf6af7 100644
--- a/examples/parallel_for/tachyon/src/sphere.h
+++ b/examples/parallel_for/tachyon/src/sphere.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/texture.cpp b/examples/parallel_for/tachyon/src/texture.cpp
index d044faf..1c49016 100644
--- a/examples/parallel_for/tachyon/src/texture.cpp
+++ b/examples/parallel_for/tachyon/src/texture.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/texture.h b/examples/parallel_for/tachyon/src/texture.h
index c6da2fa..b7c5383 100644
--- a/examples/parallel_for/tachyon/src/texture.h
+++ b/examples/parallel_for/tachyon/src/texture.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/tgafile.cpp b/examples/parallel_for/tachyon/src/tgafile.cpp
index e193a0a..8eee052 100644
--- a/examples/parallel_for/tachyon/src/tgafile.cpp
+++ b/examples/parallel_for/tachyon/src/tgafile.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/tgafile.h b/examples/parallel_for/tachyon/src/tgafile.h
index 0f5bed6..e7572a1 100644
--- a/examples/parallel_for/tachyon/src/tgafile.h
+++ b/examples/parallel_for/tachyon/src/tgafile.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/trace.h b/examples/parallel_for/tachyon/src/trace.h
index d5e851c..4d1c9a8 100644
--- a/examples/parallel_for/tachyon/src/trace.h
+++ b/examples/parallel_for/tachyon/src/trace.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/trace.serial.cpp b/examples/parallel_for/tachyon/src/trace.serial.cpp
index ab1f68c..bb3f743 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-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 bfe687e..e3f832b 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-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/trace.tbb1d.cpp b/examples/parallel_for/tachyon/src/trace.tbb1d.cpp
index 7b19674..701ff44 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-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/trace_rest.cpp b/examples/parallel_for/tachyon/src/trace_rest.cpp
index 66cc8d5..d3c43c5 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-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/triangle.cpp b/examples/parallel_for/tachyon/src/triangle.cpp
index 948b55c..96b9df4 100644
--- a/examples/parallel_for/tachyon/src/triangle.cpp
+++ b/examples/parallel_for/tachyon/src/triangle.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/triangle.h b/examples/parallel_for/tachyon/src/triangle.h
index 3d383db..328cf5c 100644
--- a/examples/parallel_for/tachyon/src/triangle.h
+++ b/examples/parallel_for/tachyon/src/triangle.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/types.h b/examples/parallel_for/tachyon/src/types.h
index e853406..ec9457c 100644
--- a/examples/parallel_for/tachyon/src/types.h
+++ b/examples/parallel_for/tachyon/src/types.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/ui.cpp b/examples/parallel_for/tachyon/src/ui.cpp
index 7d0605b..8826c75 100644
--- a/examples/parallel_for/tachyon/src/ui.cpp
+++ b/examples/parallel_for/tachyon/src/ui.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/ui.h b/examples/parallel_for/tachyon/src/ui.h
index ae2764d..c15daeb 100644
--- a/examples/parallel_for/tachyon/src/ui.h
+++ b/examples/parallel_for/tachyon/src/ui.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/util.cpp b/examples/parallel_for/tachyon/src/util.cpp
index 01e9bc9..1c70d28 100644
--- a/examples/parallel_for/tachyon/src/util.cpp
+++ b/examples/parallel_for/tachyon/src/util.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 cf3e197..ad71b14 100644
--- a/examples/parallel_for/tachyon/src/util.h
+++ b/examples/parallel_for/tachyon/src/util.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/vector.cpp b/examples/parallel_for/tachyon/src/vector.cpp
index c75fd1e..2ef46b3 100644
--- a/examples/parallel_for/tachyon/src/vector.cpp
+++ b/examples/parallel_for/tachyon/src/vector.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/vector.h b/examples/parallel_for/tachyon/src/vector.h
index 089ebec..fe77ab2 100644
--- a/examples/parallel_for/tachyon/src/vector.h
+++ b/examples/parallel_for/tachyon/src/vector.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/video.cpp b/examples/parallel_for/tachyon/src/video.cpp
index f7c795b..113c1b1 100644
--- a/examples/parallel_for/tachyon/src/video.cpp
+++ b/examples/parallel_for/tachyon/src/video.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/video.h b/examples/parallel_for/tachyon/src/video.h
index 1e8652c..67a721c 100644
--- a/examples/parallel_for/tachyon/src/video.h
+++ b/examples/parallel_for/tachyon/src/video.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/src/vol.cpp b/examples/parallel_for/tachyon/src/vol.cpp
index 7397039..0879b45 100644
--- a/examples/parallel_for/tachyon/src/vol.cpp
+++ b/examples/parallel_for/tachyon/src/vol.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 168efa4..fc786e8 100644
--- a/examples/parallel_for/tachyon/src/vol.h
+++ b/examples/parallel_for/tachyon/src/vol.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/project.pbxproj b/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/project.pbxproj
index e1669c6..4842dde 100644
--- a/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/project.pbxproj
+++ b/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/project.pbxproj
@@ -171,7 +171,7 @@
 		8D0C4E960486CD37000505A6 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
 		A117DC7A0B8DC08100F62CED /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; };
 		A117DC7F0B8DC09300F62CED /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; };
-		A117DC830B8DC0DE00F62CED /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
+		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; };
@@ -715,16 +715,17 @@
 				GCC_OPTIMIZATION_LEVEL = 0;
 				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 = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INFOPLIST_FILE = Info.plist;
 				INSTALL_PATH = "$(HOME)/Applications";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					../../../../lib,
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PREBINDING = NO;
 				PRODUCT_NAME = "tachyon-tbb1d";
-				GCC_VERSION = 4.0;
 				WRAPPER_EXTENSION = app;
 				ZERO_LINK = NO;
 			};
@@ -739,16 +740,17 @@
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
 				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 = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INFOPLIST_FILE = Info.plist;
 				INSTALL_PATH = "$(HOME)/Applications";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					../../../../lib,
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PREBINDING = NO;
 				PRODUCT_NAME = "tachyon-tbb1d";
-				GCC_VERSION = 4.0;
 				WRAPPER_EXTENSION = app;
 				ZERO_LINK = NO;
 			};
@@ -765,11 +767,12 @@
 				GCC_OPTIMIZATION_LEVEL = 0;
 				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 = 4.0;
 				INFOPLIST_FILE = Info.plist;
 				INSTALL_PATH = "$(HOME)/Applications";
 				PREBINDING = NO;
 				PRODUCT_NAME = "tachyon-serial";
-				GCC_VERSION = 4.0;
 				WRAPPER_EXTENSION = app;
 				ZERO_LINK = NO;
 			};
@@ -784,11 +787,12 @@
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
 				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 = 4.0;
 				INFOPLIST_FILE = Info.plist;
 				INSTALL_PATH = "$(HOME)/Applications";
 				PREBINDING = NO;
 				PRODUCT_NAME = "tachyon-serial";
-				GCC_VERSION = 4.0;
 				WRAPPER_EXTENSION = app;
 				ZERO_LINK = NO;
 			};
@@ -806,15 +810,15 @@
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = tachyon.pch;
+				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INFOPLIST_FILE = Info.plist;
 				INSTALL_PATH = "$(HOME)/Applications";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					../../../../lib,
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = "tachyon-tbb";
-				GCC_VERSION = 4.0;
 				WRAPPER_EXTENSION = app;
 				ZERO_LINK = NO;
 			};
@@ -829,15 +833,15 @@
 				GCC_MODEL_TUNING = "";
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = tachyon.pch;
+				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INFOPLIST_FILE = Info.plist;
 				INSTALL_PATH = "$(HOME)/Applications";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					../../../../lib,
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = "tachyon-tbb";
-				GCC_VERSION = 4.0;
 				WRAPPER_EXTENSION = app;
 				ZERO_LINK = NO;
 			};
@@ -850,12 +854,12 @@
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_ENABLE_SSE3_EXTENSIONS = YES;
 				GCC_MODEL_TUNING = "";
-				GCC_PREPROCESSOR_DEFINITIONS = "DEFAULT_MODELFILE=\"/Library/Frameworks/TBB.framework/Versions/Current/examples/parallel_for/tachyon/dat/balls.dat\"";
+				GCC_PREPROCESSOR_DEFINITIONS = "DEFAULT_MODELFILE=\"$(SOURCE_ROOT)/../dat/balls.dat\"";
+				GCC_VERSION = 4.0;
 				GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				PREBINDING = NO;
-				GCC_VERSION = 4.0;
 				SYMROOT = "/tmp/tbb-$(USER)";
 			};
 			name = Debug;
@@ -867,12 +871,12 @@
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_ENABLE_SSE3_EXTENSIONS = YES;
 				GCC_MODEL_TUNING = "";
-				GCC_PREPROCESSOR_DEFINITIONS = "DEFAULT_MODELFILE=\"/Library/Frameworks/TBB.framework/Versions/Current/examples/parallel_for/tachyon/dat/balls.dat\"";
+				GCC_PREPROCESSOR_DEFINITIONS = "DEFAULT_MODELFILE=\"$(SOURCE_ROOT)/../dat/balls.dat\"";
+				GCC_VERSION = 4.0;
 				GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				PREBINDING = NO;
-				GCC_VERSION = 4.0;
 				SYMROOT = "/tmp/tbb-$(USER)";
 			};
 			name = Release;
diff --git a/examples/parallel_reduce/convex_hull/Makefile b/examples/parallel_reduce/convex_hull/Makefile
index 5a13928..7ea2ca5 100644
--- a/examples/parallel_reduce/convex_hull/Makefile
+++ b/examples/parallel_reduce/convex_hull/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 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 1ee01d1..586e946 100644
--- a/examples/parallel_reduce/convex_hull/Makefile.windows
+++ b/examples/parallel_reduce/convex_hull/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -34,7 +34,7 @@ CXX2 = $(CXX1:icl.exe-=icl.exe)
 CXX  = $(CXX2:-=cl.exe)
 
 # The C++ compiler options
-MYCXXFLAGS = /TP /EHsc /W3 /nologo $(TBB_SECURITY_SWITCH) /D _CONSOLE /D _MBCS /D WIN32 $(CXXFLAGS)
+MYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 /D _SCL_SECURE_NO_DEPRECATE $(CXXFLAGS)
 MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)
 
 all: release test
diff --git a/examples/parallel_reduce/convex_hull/convex_hull.h b/examples/parallel_reduce/convex_hull/convex_hull.h
index e1a61e8..b58f2c9 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-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -29,7 +29,6 @@
 #ifndef __CONVEX_HULL_H__
 #define __CONVEX_HULL_H__
 
-#define _SCL_SECURE_NO_DEPRECATE
 #include <cstdlib>
 #include <iostream>
 #include <iomanip>
@@ -134,17 +133,17 @@ namespace util {
         point() : x(T()), y(T()) {}
         point(T _x, T _y) : x(_x), y(_y) {}
         //why do we need below line? it fails to compile with suncc
-	    //point(const point<T>& _P) : x(_P.x), y(_P.y) {} 
-	};
+        //point(const point<T>& _P) : x(_P.x), y(_P.y) {} 
+    };
 
     int random(unsigned int& rseed) {
-#if __linux__ || __APPLE__ || __FreeBSD__ 
+#if __linux__ || __APPLE__ || __FreeBSD__ || __NetBSD__
             return rand_r(&rseed);
 #elif _WIN32 || __sun
             return rand();
 #else
 #error Unknown/unsupported OS?
-#endif // __linux__ || __APPLE__ || __FreeBSD__ 
+#endif // OS selection
     }
 
     template < typename T >
diff --git a/examples/parallel_reduce/convex_hull/convex_hull_bench.cpp b/examples/parallel_reduce/convex_hull/convex_hull_bench.cpp
index e391b19..118a5ad 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-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -30,6 +30,7 @@
     This file contains a few implementations, so it may look overly complicated.
     The most efficient implementation is also separated into convex_hull_sample.cpp
 */
+#include <cassert>
 #include "convex_hull.h"
 
 typedef util::point<double> point_t;
@@ -42,25 +43,9 @@ typedef util::point<double> point_t;
 
 typedef std::vector< point_t > pointVec_t;
 
-// C++ style serial code
-
-class FillRNDPointsVector : public std::unary_function<point_t&, void> {
-    unsigned int rseed;
-    size_t       count;
-public:
-    FillRNDPointsVector() : rseed(1), count(0) {}
+void serial_initialize(pointVec_t &points);
 
-    void operator()(point_t& p) {
-        p = util::GenerateRNDPoint<double>(count, rseed);
-    }
-};
-
-void initialize(pointVec_t &points) {
-    points.clear();
-    points.resize(cfg::MAXPOINTS);
-
-    std::for_each(points.begin(), points.end(), FillRNDPointsVector());
-}
+// C++ style serial code
 
 class FindXExtremum : public std::unary_function<const point_t&, void> {
 public:
@@ -91,6 +76,7 @@ private:
         case maxX:
             return p.x>extrXPoint.x; break;
         }
+        return false; // avoid warning
     }
 };
 
@@ -145,17 +131,15 @@ point_t divide(const pointVec_t &P, pointVec_t &P_reduced, const point_t &p1, co
 }
 
 void divide_and_conquer(const pointVec_t &P, pointVec_t &H, point_t p1, point_t p2) {
-    if (P.size()<2) {
+    assert(P.size() >= 2);
+    pointVec_t P_reduced;
+    pointVec_t H1, H2;
+    point_t p_far = divide(P, P_reduced, p1, p2);
+    if (P_reduced.size()<2) {
         H.push_back(p1);
-        H.insert(H.end(), P.begin(), P.end());
+        H.insert(H.end(), P_reduced.begin(), P_reduced.end());
     }
     else {
-        pointVec_t P_reduced;
-        pointVec_t H1, H2;
-        point_t p_far;
-
-        p_far = divide(P, P_reduced, p1, p2);
-
         divide_and_conquer(P_reduced, H1, p1, p_far);
         divide_and_conquer(P_reduced, H2, p_far, p2);
 
@@ -165,8 +149,10 @@ void divide_and_conquer(const pointVec_t &P, pointVec_t &H, point_t p1, point_t
 }
 
 void quickhull(const pointVec_t &points, pointVec_t &hull) {
-    hull.clear();
-
+    if (points.size() < 2) {
+        hull.insert(hull.end(), points.begin(), points.end());
+        return;
+    }
     point_t p_maxx = extremum<FindXExtremum::maxX>(points);
     point_t p_minx = extremum<FindXExtremum::minX>(points);
 
@@ -188,13 +174,13 @@ int main(int argc, char* argv[]) {
     std::cout << "Starting serial version of QUICK HULL algorithm" << std::endl;
 
     tm_init = util::gettime();
-    initialize(points);
+    serial_initialize(points);
+    tm_start = util::gettime();
+    std::cout << "Init time: " << util::time_diff(tm_init, tm_start) << "  Points in input: " << points.size() << "\n";
     tm_start = util::gettime();
     quickhull(points, hull);
     tm_end = util::gettime();
-
-    util::WriteResults(1, util::time_diff(tm_init, tm_start),
-        util::time_diff(tm_start, tm_end));
+    std::cout << "Serial time: " << util::time_diff(tm_start, tm_end) << "  Points in hull: " << hull.size() << "\n";
 }
 
 #else // USETBB - parallel version of Quick Hull algorithm
@@ -238,6 +224,8 @@ void appendVector(mutex_t& insertMutex, const point_t* src, size_t srcSize,
 
 #endif // USECONCVEC
 
+void serial_initialize(pointVec_t &points);
+
 class FillRNDPointsVector {
     pointVec_t          &points;
     mutable unsigned int rseed;
@@ -305,13 +293,12 @@ mutex_t FillRNDPointsVector_buf::insertMutex = mutex_t();
 
 template<typename BodyType>
 void initialize(pointVec_t &points) {
-    points.clear();
-
     // In the buffered version, a temporary storage for as much as grainSize elements 
     // is allocated inside the body. Since auto_partitioner may increase effective
     // range size which would cause a crash, simple partitioner has to be used.
+
     tbb::parallel_for(range_t(0, cfg::MAXPOINTS, BodyType::grainSize),
-                      BodyType(points), tbb::simple_partitioner());
+    BodyType(points), tbb::simple_partitioner());
 }
 
 class FindXExtremum {
@@ -517,25 +504,26 @@ point_t divide(const pointVec_t &P, pointVec_t &P_reduced,
 
 void divide_and_conquer(const pointVec_t &P, pointVec_t &H,
                         point_t p1, point_t p2, bool buffered) {
-    if (P.size()<2) {
+    assert(P.size() >= 2);
+    pointVec_t P_reduced;
+    pointVec_t H1, H2;
+    point_t p_far;
+    
+    if(buffered) {
+        p_far = divide<SplitByCP_buf>(P, P_reduced, p1, p2);
+    } else {
+        p_far = divide<SplitByCP>(P, P_reduced, p1, p2);
+    }
+
+    if (P_reduced.size()<2) {
         H.push_back(p1);
 #if USECONCVEC
-        appendVector(P, H);
+        appendVector(P_reduced, H);
 #else // insert into STD::VECTOR
-        H.insert(H.end(), P.begin(), P.end());
+        H.insert(H.end(), P_reduced.begin(), P_reduced.end());
 #endif
     }
     else {
-        pointVec_t P_reduced;
-        pointVec_t H1, H2;
-        point_t p_far;
-
-        if(buffered) {
-            p_far = divide<SplitByCP_buf>(P, P_reduced, p1, p2);
-        } else {
-            p_far = divide<SplitByCP>(P, P_reduced, p1, p2);
-        }
-
         divide_and_conquer(P_reduced, H1, p1, p_far, buffered);
         divide_and_conquer(P_reduced, H2, p_far, p2, buffered);
 
@@ -550,7 +538,14 @@ void divide_and_conquer(const pointVec_t &P, pointVec_t &H,
 }
 
 void quickhull(const pointVec_t &points, pointVec_t &hull, bool buffered) {
-    hull.clear();
+    if (points.size() < 2) {
+#if USECONCVEC
+        appendVector(points, hull);
+#else // STD::VECTOR
+        hull.insert(hull.end(), points.begin(), points.end());
+#endif // USECONCVEC
+        return;
+    }
 
     point_t p_maxx = extremum<FindXExtremum::maxX>(points);
     point_t p_minx = extremum<FindXExtremum::minX>(points);
@@ -573,69 +568,71 @@ int main(int argc, char* argv[]) {
     pointVec_t      hull;
     int             nthreads;
     util::my_time_t tm_init, tm_start, tm_end;
-    pointVec_t      tmp_points;
 
 #if USECONCVEC
-    std::cout << "Starting TBB unbufferred push_back version of QUICK HULL algorithm" << std::endl;
+    std::cout << "Starting TBB unbuffered push_back version of QUICK HULL algorithm" << std::endl;
 #else
-    std::cout << "Starting STL locked unbufferred push_back version of QUICK HULL algorithm" << std::endl;
+    std::cout << "Starting STL locked unbuffered push_back version of QUICK HULL algorithm" << std::endl;
 #endif // USECONCVEC
 
+#if INIT_ONCE
+    tm_init = util::gettime();
+    serial_initialize(points);
+    tm_start = util::gettime();
+    std::cout << "Serial init time: " << util::time_diff(tm_init, tm_start) << "  Points in input: " << points.size() << "\n";
+
+#endif
+
     for(nthreads=cfg::NUM_THREADS_START; nthreads<=cfg::NUM_THREADS_END;
         ++nthreads) {
         tbb::task_scheduler_init init(nthreads);
-#if INIT_ONCE
-        if(nthreads==cfg::NUM_THREADS_START) {
-            tm_init = util::gettime();
-            initialize<FillRNDPointsVector>(points);
-        }
-        else /* timing generation for stats, but use original data set */ {
-            tm_init = util::gettime();
-            initialize<FillRNDPointsVector>(tmp_points);
-        }
-#else
+#if !INIT_ONCE
+        points.clear();
         tm_init = util::gettime();
         initialize<FillRNDPointsVector>(points);
-#endif // INIT_ONCE
+        tm_start = util::gettime();
+        std::cout << "Parallel init time on " << nthreads << " threads: " << util::time_diff(tm_init, tm_start) << "  Points in input: " << points.size() << "\n";
+#endif // !INIT_ONCE
         tm_start = util::gettime();
         quickhull(points, hull, false);
         tm_end = util::gettime();
-
-        util::WriteResults(nthreads, util::time_diff(tm_init, tm_start),
-            util::time_diff(tm_start, tm_end));
+        std::cout << "Time on " << nthreads << " threads: " << util::time_diff(tm_start, tm_end) << "  Points in hull: " << hull.size() << "\n";
+        hull.clear();
     }
 
 #if USECONCVEC 
-    std::cout << "Starting TBB bufferred version of QUICK HULL algorithm" << std::endl;
+    std::cout << "Starting TBB buffered version of QUICK HULL algorithm" << std::endl;
 #else
-    std::cout << "Starting STL locked bufferred version of QUICK HULL algorithm" << std::endl;
+    std::cout << "Starting STL locked buffered version of QUICK HULL algorithm" << std::endl;
 #endif
 
     for(nthreads=cfg::NUM_THREADS_START; nthreads<=cfg::NUM_THREADS_END;
         ++nthreads) {
         tbb::task_scheduler_init init(nthreads);
-#if INIT_ONCE
-        if(nthreads==cfg::NUM_THREADS_START) {
-            tm_init = util::gettime();
-            initialize<FillRNDPointsVector_buf>(points);
-        }
-        else /* timing generation for stats, but use original data set */ {
-            tm_init = util::gettime();
-            initialize<FillRNDPointsVector_buf>(tmp_points);
-        }
-#else
+#if !INIT_ONCE
+        points.clear();
         tm_init = util::gettime();
         initialize<FillRNDPointsVector_buf>(points);
-#endif // INIT_ONCE
+        tm_start = util::gettime();
+        std::cout << "Init time on " << nthreads << " threads: " << util::time_diff(tm_init, tm_start) << "  Points in input: " << points.size() << "\n";
+#endif // !INIT_ONCE
         tm_start = util::gettime();
         quickhull(points, hull, true);
         tm_end = util::gettime();
-
-        util::WriteResults(nthreads, util::time_diff(tm_init, tm_start),
-            util::time_diff(tm_start, tm_end));
+        std::cout << "Time on " << nthreads << " threads: " << util::time_diff(tm_start, tm_end) << "  Points in hull: " << hull.size() << "\n";
+        hull.clear();
     }    
 
     return 0;
 }
 
 #endif // USETBB
+
+void serial_initialize(pointVec_t &points) {
+    points.resize(cfg::MAXPOINTS);
+
+    unsigned int rseed=1;
+    for(size_t i=0, count=0; long(i)<cfg::MAXPOINTS; ++i) {
+        points[i] = util::GenerateRNDPoint<double>(count, rseed);
+    }
+}
diff --git a/examples/parallel_reduce/convex_hull/convex_hull_sample.cpp b/examples/parallel_reduce/convex_hull/convex_hull_sample.cpp
index aeaf7f0..44e2774 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-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -34,6 +34,7 @@
     - INIT_ONCE defined to 0
     - only buffered version is used
 */
+#include <cassert>
 #include "convex_hull.h"
 
 #include "tbb/task_scheduler_init.h"
@@ -43,6 +44,8 @@
 #include "tbb/tick_count.h"
 #include "tbb/concurrent_vector.h"
 
+#define INIT_ONCE 1
+
 typedef util::point<double>               point_t;
 typedef tbb::concurrent_vector< point_t > pointVec_t;
 typedef tbb::blocked_range<size_t>        range_t;
@@ -78,9 +81,16 @@ public:
     }
 };
 
-void initialize(pointVec_t &points) {
-    points.clear();
+void serial_initialize(pointVec_t &points) {
+    points.resize(cfg::MAXPOINTS);
+
+    unsigned int rseed=1;
+    for(size_t i=0, count=0; long(i)<cfg::MAXPOINTS; ++i) {
+        points[i] = util::GenerateRNDPoint<double>(count, rseed);
+    }
+}
 
+void initialize(pointVec_t &points) {
     // In the buffered version, a temporary storage for as much as grainSize elements 
     // is allocated inside the body. Since auto_partitioner may increase effective
     // range size which would cause a crash, simple partitioner has to be used.
@@ -220,16 +230,15 @@ point_t divide(const pointVec_t &P, pointVec_t &P_reduced,
 
 void divide_and_conquer(const pointVec_t &P, pointVec_t &H,
                             point_t p1, point_t p2) {
-    if (P.size()<2) {
+    assert(P.size() >= 2);
+    pointVec_t P_reduced;
+    pointVec_t H1, H2;
+    point_t p_far = divide(P, P_reduced, p1, p2);
+    if (P_reduced.size()<2) {
         H.push_back(p1);
-        appendVector(P, H);
+        appendVector(P_reduced, H);
     }
     else {
-        pointVec_t P_reduced;
-        pointVec_t H1, H2;
-
-        point_t p_far = divide(P, P_reduced, p1, p2);
-
         divide_and_conquer(P_reduced, H1, p1, p_far);
         divide_and_conquer(P_reduced, H2, p_far, p2);
 
@@ -239,7 +248,10 @@ void divide_and_conquer(const pointVec_t &P, pointVec_t &H,
 }
 
 void quickhull(const pointVec_t &points, pointVec_t &hull) {
-    hull.clear();
+    if (points.size() < 2) {
+        appendVector(points, hull);
+        return;
+    }
 
     point_t p_maxx = extremum<FindXExtremum::maxX>(points);
     point_t p_minx = extremum<FindXExtremum::minX>(points);
@@ -255,24 +267,33 @@ void quickhull(const pointVec_t &points, pointVec_t &hull) {
 int main(int argc, char* argv[]) {
     util::ParseInputArgs(argc, argv);
 
-    pointVec_t      points;
+    pointVec_t      points, tmp_points;
     pointVec_t      hull;
     int             nthreads;
     util::my_time_t tm_init, tm_start, tm_end;
 
-    std::cout << " Starting TBB-bufferred version of QUICK HULL algorithm" << std::endl;
+    std::cout << "Starting TBB-buffered version of QUICK HULL algorithm" << std::endl;
+
+    tm_init = util::gettime();
+    serial_initialize(points);
+    tm_start = util::gettime();
+    std::cout << "Serial init time: " << util::time_diff(tm_init, tm_start) << "  Points in input: " << points.size() << "\n";
 
     for(nthreads=cfg::NUM_THREADS_START; nthreads<=cfg::NUM_THREADS_END;
         ++nthreads) {
         tbb::task_scheduler_init init(nthreads);
+#if !INIT_ONCE
+        tmp_points.clear();
         tm_init = util::gettime();
-        initialize(points);
+        initialize(tmp_points);
+        tm_start = util::gettime();
+        std::cout << "Init time on " << nthreads << " threads: " << util::time_diff(tm_init, tm_start) << " Points in input: " << points.size() << "\n";
+#endif
         tm_start = util::gettime();
         quickhull(points, hull);
         tm_end = util::gettime();
-
-        util::WriteResults(nthreads, util::time_diff(tm_init, tm_start),
-            util::time_diff(tm_start, tm_end));
+        std::cout << "Time on " << nthreads << " threads: " << util::time_diff(tm_start, tm_end) << " Points in hull: " << hull.size() << "\n";
+        hull.clear();
     }
 
     return 0;
diff --git a/examples/parallel_reduce/convex_hull/index.html b/examples/parallel_reduce/convex_hull/index.html
index 946c2e1..10e9a5e 100644
--- a/examples/parallel_reduce/convex_hull/index.html
+++ b/examples/parallel_reduce/convex_hull/index.html
@@ -42,7 +42,7 @@ General build directions can be found <A HREF=../../index.html#build>here</A>.
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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 
diff --git a/examples/parallel_reduce/convex_hull/xcode/convex_hull.xcodeproj/project.pbxproj b/examples/parallel_reduce/convex_hull/xcode/convex_hull.xcodeproj/project.pbxproj
index 3f808bd..2f168e9 100644
--- a/examples/parallel_reduce/convex_hull/xcode/convex_hull.xcodeproj/project.pbxproj
+++ b/examples/parallel_reduce/convex_hull/xcode/convex_hull.xcodeproj/project.pbxproj
@@ -42,7 +42,7 @@
 		A14611490B94631F000C6B18 /* convex_hull_bench.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = convex_hull_bench.cpp; path = ../convex_hull_bench.cpp; sourceTree = SOURCE_ROOT; };
 		A146114C0B9463CB000C6B18 /* convex_hull.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = convex_hull.h; path = ../convex_hull.h; sourceTree = SOURCE_ROOT; };
 		A1F593A50B8F042A00073279 /* convex_hull_sample.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = convex_hull_sample.cpp; path = ../convex_hull_sample.cpp; sourceTree = SOURCE_ROOT; };
-		A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
+		A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; };
 		A1F594EB0B8F4B5600073279 /* convex_hull_bench */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = convex_hull_bench; sourceTree = BUILT_PRODUCTS_DIR; };
 		A1F594FA0B8F4EE000073279 /* convex_hull_sample */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = convex_hull_sample; sourceTree = BUILT_PRODUCTS_DIR; };
 /* End PBXFileReference section */
@@ -188,12 +188,12 @@
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = convex_hull_sample;
 				ZERO_LINK = NO;
 			};
@@ -204,12 +204,12 @@
 			buildSettings = {
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = convex_hull_sample;
 				ZERO_LINK = NO;
 			};
@@ -257,12 +257,12 @@
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = convex_hull_sample;
 				ZERO_LINK = NO;
 			};
@@ -275,12 +275,12 @@
 				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = convex_hull_sample;
 				ZERO_LINK = NO;
 			};
@@ -337,12 +337,12 @@
 				GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PREBINDING = NO;
 				PRODUCT_NAME = convex_hull_bench;
 				ZERO_LINK = NO;
@@ -359,12 +359,12 @@
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PREBINDING = NO;
 				PRODUCT_NAME = convex_hull_bench;
 				ZERO_LINK = NO;
@@ -378,12 +378,12 @@
 				GCC_ENABLE_FIX_AND_CONTINUE = NO;
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PREBINDING = NO;
 				PRODUCT_NAME = convex_hull_bench;
 				ZERO_LINK = NO;
@@ -398,12 +398,12 @@
 				GCC_ENABLE_FIX_AND_CONTINUE = NO;
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PREBINDING = NO;
 				PRODUCT_NAME = convex_hull_bench;
 				ZERO_LINK = NO;
diff --git a/examples/parallel_reduce/index.html b/examples/parallel_reduce/index.html
index 419d320..0104b53 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-2010 Intel Corporation.  All Rights Reserved.
+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 
diff --git a/examples/parallel_reduce/primes/Makefile b/examples/parallel_reduce/primes/Makefile
index be9ff9a..f0a0eca 100644
--- a/examples/parallel_reduce/primes/Makefile
+++ b/examples/parallel_reduce/primes/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -26,7 +26,8 @@
 
 # GNU Makefile that builds and runs example.
 PROG=primes
-ARGS=100000000 0:4
+ARGS=
+PERF_RUN_ARGS=silent  auto 1000000000 1000 20
 
 # The C++ compiler
 ifneq (,$(shell which icc 2>/dev/null))
@@ -35,14 +36,18 @@ endif # icc
 
 all:	release test
 
-release: *.cpp
+release: main.cpp primes.cpp 
 	$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)
 
-debug: *.cpp
+debug: main.cpp primes.cpp
 	$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)
 
 clean:
 	$(RM) $(PROG) *.o *.d
 
-test:
+test: 
 	./$(PROG) $(ARGS)
+
+perf_build: release
+
+perf_run:
diff --git a/examples/parallel_reduce/primes/Makefile.windows b/examples/parallel_reduce/primes/Makefile.windows
index 396325e..a901b22 100644
--- a/examples/parallel_reduce/primes/Makefile.windows
+++ b/examples/parallel_reduce/primes/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -28,7 +28,8 @@
 
 # Just specify your program basename
 PROG=Primes
-ARGS=100000000 0:4
+ARGS=0:auto
+PERF_RUN_ARGS=silent  auto 1000000000 1000 20
 
 # Trying to find if icl.exe is set
 CXX1 = $(TBB_CXX)-
@@ -36,18 +37,24 @@ CXX2 = $(CXX1:icl.exe-=icl.exe)
 CXX  = $(CXX2:-=cl.exe)
 
 # The C++ compiler options
-MYCXXFLAGS = /TP /EHsc /W3 /nologo $(TBB_SECURITY_SWITCH) /D _CONSOLE /D _MBCS /D WIN32 $(CXXFLAGS)
+MYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 $(CXXFLAGS)
 MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)
 
 all: release test
 release: compiler_check
-	$(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+	$(CXX) main.cpp primes.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
 debug: compiler_check
-	$(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+	$(CXX) main.cpp primes.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)
+
+perf_build: release
+
+perf_run:
+	./$(PROG) $(PERF_RUN_ARGS)
+
 compiler_check:
 	@echo compiler_test>compiler_test && @$(CXX) /E compiler_test >nul 2>&1  || echo "$(CXX) command not found. Check if CXX=$(CXX) is set properly"
 	@cmd.exe /C del compiler_test
diff --git a/examples/parallel_reduce/primes/index.html b/examples/parallel_reduce/primes/index.html
index 16ed353..b346129 100644
--- a/examples/parallel_reduce/primes/index.html
+++ b/examples/parallel_reduce/primes/index.html
@@ -6,8 +6,12 @@ Parallel version of the Sieve of Eratosthenes.
 
 <H2>Files</H2>
 <DL>
+<DT><A HREF="main.cpp">main.cpp</A>
+<DD>Main program which parses command line options and runs the algorithm with different numbers of threads.
+<DT><A HREF="primes.h">primes.h</A>
+<DD>The Sieve of Eratosthenes interface.
 <DT><A HREF="primes.cpp">primes.cpp</A>
-<DD>Source code for example.
+<DD>The Sieve of Eratosthenes implementation.
 <DT><A HREF="Makefile">Makefile</A>
 <DD>Makefile for building example.
 </DL>
@@ -25,20 +29,26 @@ General build directions can be found <A HREF=../../index.html#build>here</A>.
 
 <H2>Usage</H2>
 <DL>
-<DT><TT>primes [<I>S</I>] [<I>M</I>[:<I>N</I>]] [<I>G</I>]</TT>
-<DD><I>S</I> is the problem size (number of primes).
-    <I>M</I> and <I>N</I> are a range of numbers of threads to be used.
-    <I>G</I> is an optional grain size.
-<DT>To run a short version of this example, e.g., for use with Intel® Threading Tools:
+<DT><TT>primes <I>-h</I></TT>
+<DD>Prints the help for command line options
+<DT><TT>primes [<I>n-of-threads</I>=value] [<I>number</I>=value] [<I>grain-size</I>=value] [<I>n-of-repeats</I>=value] [<I>silent</I>]</TT>
+<DT><TT>primes [<I>n-of-threads</I> [<I>number</I> [<I>grain-size</I> [<I>n-of-repeats</I>]]]][<I>silent</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>
+    <I>number</I> is an upper bound of range to search primes in, must be a positive integer.<BR>
+    <I>grain-size</I> is an optional grain size, must be a positive integer. <BR>
+    <I>n-of-repeats</I> is a number of the calculation repeats, must be a positive integer.<BR>
+    <I>silent</I> - no output except elapsed time.<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 a small problem size and the desired number of threads, e.g., <TT>primes 100000 4</TT>.
+    <BR>Run it with a small problem size and the desired number of threads, e.g., <TT>primes 4 100000</TT>.
 </DL>
 
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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 
diff --git a/examples/parallel_reduce/primes/main.cpp b/examples/parallel_reduce/primes/main.cpp
new file mode 100644
index 0000000..36a1b84
--- /dev/null
+++ b/examples/parallel_reduce/primes/main.cpp
@@ -0,0 +1,119 @@
+/*
+    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.
+*/
+
+#include "primes.h"
+#include <cstdlib>
+#include <cstdio>
+#include <cstring>
+#include <cctype>
+#include <utility>
+#include <iostream>
+#include <sstream>
+#include "tbb/tick_count.h"
+
+#include "../../common/utility/utility.h"
+
+struct RunOptions{
+    //! NumberType of threads to use.
+    utility::thread_number_range threads;
+    //whether to suppress additional output
+    bool silentFlag;
+    //
+    NumberType n;
+    //! Grain size parameter
+    NumberType grainSize;
+    // number of time to repeat calculation
+    NumberType repeatNumber;
+
+    RunOptions(utility::thread_number_range threads, NumberType grainSize, NumberType n, bool silentFlag, NumberType repeatNumber)
+        : threads(threads), grainSize(grainSize), n(n), silentFlag(silentFlag), repeatNumber(repeatNumber)
+    {}
+};
+
+int get_default_num_threads() {
+    static int threads = 0;
+    if ( threads == 0 )
+        threads = tbb::task_scheduler_init::default_num_threads();
+    return threads;
+}
+
+//! Parse the command line.
+static RunOptions ParseCommandLine( int argc, const char* argv[] ) {
+    utility::thread_number_range threads( get_default_num_threads, 0, get_default_num_threads() );
+    NumberType grainSize = 1000;
+    bool silent = false;
+    NumberType number = 100000000;
+    NumberType repeatNumber = 1;
+
+    utility::parse_cli_arguments(argc,argv,
+        utility::cli_argument_pack()
+            //"-h" option for for displaying help is present implicitly
+            .positional_arg(threads,"n-of-threads","number of threads to use; a range of the form low[:high], where low and optional high are non-negative integers or 'auto' for the TBB default.")
+            .positional_arg(number,"number","upper bound of range to search primes in, must be a positive integer")
+            .positional_arg(grainSize,"grain-size","must be a positive integer")
+            .positional_arg(repeatNumber,"n-of-repeats","repeat the calculation this number of times, must be a positive integer")
+            .arg(silent,"silent","no output except elapsed time")
+    );
+
+    RunOptions options(threads,grainSize, number, silent, repeatNumber);
+    return options;
+}
+
+int main( int argc, const char* argv[] ) {
+    tbb::tick_count mainBeginMark = tbb::tick_count::now();
+    RunOptions options =ParseCommandLine(argc,argv);
+
+    // Try different numbers of threads
+    for( int p=options.threads.first; p<=options.threads.last; ++p ) {
+        for (NumberType i=0; i<options.repeatNumber;++i){
+            tbb::tick_count iterationBeginMark = tbb::tick_count::now();
+            NumberType count = 0;
+            NumberType n = options.n;
+            if( p==0 ) {
+                count = SerialCountPrimes(n);
+            } else {
+                NumberType grainSize = options.grainSize;
+                count = ParallelCountPrimes(n, p, grainSize);
+            }
+            tbb::tick_count iterationEndMark = tbb::tick_count::now();
+            if (!options.silentFlag){
+                std::cout
+                        <<"#primes from [2.." <<options.n<<"] = " << count
+                        <<" ("<<(iterationEndMark-iterationBeginMark).seconds()<< " sec with "
+                ;
+                if( 0 != p )
+                    std::cout<<p<<"-way parallelism";
+                else
+                    std::cout<<"serial code";
+                std::cout<<")\n" ;
+            }
+        }
+    }
+    utility::report_elapsed_time((tbb::tick_count::now()-mainBeginMark).seconds());
+    return 0;
+}
diff --git a/examples/parallel_reduce/primes/msvs/primes.vcproj b/examples/parallel_reduce/primes/msvs/primes.vcproj
index af4378b..9fa0671 100644
--- a/examples/parallel_reduce/primes/msvs/primes.vcproj
+++ b/examples/parallel_reduce/primes/msvs/primes.vcproj
@@ -342,9 +342,17 @@
 			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
 			>
 			<File
+				RelativePath="..\main.cpp"
+				>
+			</File>
+			<File
 				RelativePath="..\primes.cpp"
 				>
 			</File>
+			<File
+				RelativePath="..\primes.h"
+				>
+			</File>
 		</Filter>
 		<File
 			RelativePath="..\index.html"
diff --git a/examples/parallel_reduce/primes/primes.cpp b/examples/parallel_reduce/primes/primes.cpp
index 70d510a..b6c9882 100644
--- a/examples/parallel_reduce/primes/primes.cpp
+++ b/examples/parallel_reduce/primes/primes.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -32,6 +32,9 @@
 // The parallel version demonstrates how to use parallel_reduce,
 // and in particular how to exploit lazy splitting.
 
+#include "primes.h"
+
+#include <algorithm>
 #include <cassert>
 #include <cstdio>
 #include <cstring>
@@ -40,21 +43,15 @@
 #include <cctype>
 #include "tbb/parallel_reduce.h"
 #include "tbb/task_scheduler_init.h"
-#include "tbb/tick_count.h"
 
 using namespace std;
-using namespace tbb;
-
-typedef unsigned long Number;
 
 //! If true, then print primes on stdout.
-static bool PrintPrimes = false;
+static bool printPrimes = false;
 
-//! Grainsize parameter
-static Number GrainSize = 1000;
 
 class Multiples {
-    inline Number strike( Number start, Number limit, Number stride ) {
+    inline NumberType strike( NumberType start, NumberType limit, NumberType stride ) {
         // Hoist "my_is_composite" into register for sake of speed.
         bool* is_composite = my_is_composite;
         assert( stride>=2 );
@@ -68,28 +65,26 @@ class Multiples {
     //! Indexes into window
     /** my_striker[k] is an index into my_composite corresponding to
         an odd multiple multiple of my_factor[k]. */
-    Number* my_striker;
+    NumberType* my_striker;
 
     //! Prime numbers less than m.
-    Number* my_factor;
+    NumberType* my_factor;
 public:
-    //! Number of factors in my_factor.
-    Number n_factor;
-    Number m;
-    Multiples( Number n ) : 
-        is_forked_copy(false) 
-    {
-        m = Number(sqrt(double(n)));
+    //! NumberType of factors in my_factor.
+    NumberType n_factor;
+    NumberType m;
+    Multiples( NumberType n ) {
+        m = NumberType(sqrt(double(n)));
         // Round up to even
         m += m&1;
         my_is_composite = new bool[m/2];
-        my_striker = new Number[m/2];
-        my_factor = new Number[m/2];
+        my_striker = new NumberType[m/2];
+        my_factor = new NumberType[m/2];
         n_factor = 0;
         memset( my_is_composite, 0, m/2 );
-        for( Number i=3; i<m; i+=2 ) {
+        for( NumberType i=3; i<m; i+=2 ) {
             if( !my_is_composite[i/2] ) {
-                if( PrintPrimes )
+                if( printPrimes )
                     printf("%d\n",(int)i);
                 my_striker[n_factor] = strike( i/2, m/2, i );
                 my_factor[n_factor++] = i;
@@ -99,15 +94,15 @@ public:
 
     //! Find primes in range [start,window_size), advancing my_striker as we go.
     /** Returns number of primes found. */
-    Number find_primes_in_window( Number start, Number window_size ) {
+    NumberType find_primes_in_window( NumberType start, NumberType window_size ) {
         bool* is_composite = my_is_composite;
         memset( is_composite, 0, window_size/2 );
         for( size_t k=0; k<n_factor; ++k )
             my_striker[k] = strike( my_striker[k]-m/2, window_size/2, my_factor[k] );
-        Number count = 0;
-        for( Number k=0; k<window_size/2; ++k ) {
+        NumberType count = 0;
+        for( NumberType k=0; k<window_size/2; ++k ) {
             if( !is_composite[k] ) {
-                if( PrintPrimes )
+                if( printPrimes )
                     printf("%ld\n",long(start+2*k+1));
                 ++count;
             }
@@ -116,8 +111,7 @@ public:
     }
 
     ~Multiples() {
-        if( !is_forked_copy )
-            delete[] my_factor;
+        delete[] my_factor;
         delete[] my_striker;
         delete[] my_is_composite;
     }
@@ -126,33 +120,43 @@ public:
     // Begin extra members required by parallel version
     //------------------------------------------------------------------------
 
-    //! True if this instance was forked from another instance.
-    const bool is_forked_copy;
-
-    Multiples( const Multiples& f, split ) :
+    // Splitting constructor
+    Multiples( const Multiples& f, tbb::split ) :
         n_factor(f.n_factor),
         m(f.m),
         my_is_composite(NULL),
         my_striker(NULL),
-        my_factor(f.my_factor),
-        is_forked_copy(true)
+        my_factor(f.my_factor)
     {}
 
     bool is_initialized() const {
         return my_is_composite!=NULL;
     }
 
-    void initialize( Number start ) { 
+    void initialize( NumberType start ) { 
         assert( start>=1 );
         my_is_composite = new bool[m/2];
-        my_striker = new Number[m/2];
+        my_striker = new NumberType[m/2];
         for( size_t k=0; k<n_factor; ++k ) {
-            Number f = my_factor[k];
-            Number p = (start-1)/f*f % m;
+            NumberType f = my_factor[k];
+            NumberType p = (start-1)/f*f % m;
             my_striker[k] = (p&1 ? p+2*f : p+f)/2;
             assert( m/2<=my_striker[k] );
         }
     }
+
+    // Move other to *this.
+    void move( Multiples& other ) {
+        // The swap moves the contents of other to *this and causes the old contents
+        // of *this to be deleted later when other is destroyed.
+        std::swap( my_striker, other.my_striker );
+        std::swap( my_is_composite, other.my_is_composite );
+        // other.my_factor is a shared pointer that was copied by the splitting constructor.
+        // Set it to NULL to prevent premature deletion by the destructor of ~other.
+        assert(my_factor==other.my_factor);
+        other.my_factor = NULL;
+    }
+
     //------------------------------------------------------------------------
     // End extra methods required by parallel version
     //------------------------------------------------------------------------
@@ -160,16 +164,16 @@ public:
 
 //! Count number of primes between 0 and n
 /** This is the serial version. */
-Number SerialCountPrimes( Number n ) {
+NumberType SerialCountPrimes( NumberType n ) {
     // Two is special case
-    Number count = n>=2;
+    NumberType count = n>=2;
     if( n>=3 ) {
         Multiples multiples(n);
         count += multiples.n_factor;
-        if( PrintPrimes ) 
+        if( printPrimes ) 
             printf("---\n");
-        Number window_size = multiples.m;
-        for( Number j=multiples.m; j<=n; j+=window_size ) { 
+        NumberType window_size = multiples.m;
+        for( NumberType j=multiples.m; j<=n; j+=window_size ) { 
             if( j+window_size>n+1 ) 
                 window_size = n+1-j;
             count += multiples.find_primes_in_window( j, window_size );
@@ -181,16 +185,16 @@ Number SerialCountPrimes( Number n ) {
 //! Range of a sieve window.
 class SieveRange {
     //! Width of full-size window into sieve.
-    const Number my_stride;
+    const NumberType my_stride;
 
     //! Always multiple of my_stride
-    Number my_begin;
+    NumberType my_begin;
 
     //! One past last number in window.
-    Number my_end;
+    NumberType my_end;
 
     //! Width above which it is worth forking.
-    const Number my_grainsize;
+    const NumberType my_grainsize;
 
     bool assert_okay() const {
         assert( my_begin%my_stride==0 );
@@ -204,14 +208,14 @@ public:
     //------------------------------------------------------------------------
     bool is_divisible() const {return my_end-my_begin>my_grainsize;}
     bool empty() const {return my_end<=my_begin;}
-    SieveRange( SieveRange& r, split ) : 
+    SieveRange( SieveRange& r, tbb::split ) :
         my_stride(r.my_stride), 
         my_grainsize(r.my_grainsize),
         my_end(r.my_end)
     {
         assert( r.is_divisible() );
         assert( r.assert_okay() );
-        Number middle = r.my_begin + (r.my_end-r.my_begin+r.my_stride-1)/2;
+        NumberType middle = r.my_begin + (r.my_end-r.my_begin+r.my_stride-1)/2;
         middle = middle/my_stride*my_stride;
         my_begin = middle;
         r.my_end = middle;
@@ -221,9 +225,9 @@ public:
     //------------------------------------------------------------------------
     // End of signatures required by parallel_reduce
     //------------------------------------------------------------------------
-    Number begin() const {return my_begin;}
-    Number end() const {return my_end;}
-    SieveRange( Number begin, Number end, Number stride, Number grainsize ) :
+    NumberType begin() const {return my_begin;}
+    NumberType end() const {return my_end;}
+    SieveRange( NumberType begin, NumberType end, NumberType stride, NumberType grainsize ) :
         my_begin(begin),
         my_end(end),
         my_stride(stride),      
@@ -238,14 +242,14 @@ public:
     Each subsieve handles a subrange of [0..n]. */
 class Sieve {
 public:
-    //! Prime multiples to consider, and working storage for this subsieve.
-    Multiples multiples;
+    //! Prime Multiples to consider, and working storage for this subsieve.
+    ::Multiples multiples;
 
-    //! Number of primes found so far by this subsieve.
-    Number count;
+    //! NumberType of primes found so far by this subsieve.
+    NumberType count;
 
     //! Construct Sieve for counting primes in [0..n].
-    Sieve( Number n ) : 
+    Sieve( NumberType n ) :
         multiples(n),
         count(0)
     {}
@@ -254,18 +258,18 @@ public:
     // Begin signatures required by parallel_reduce
     //------------------------------------------------------------------------
     void operator()( const SieveRange& r ) {
-        Number m = multiples.m;
+        NumberType m = multiples.m;
         if( multiples.is_initialized() ) { 
-            // Simply reuse "multiples" structure from previous window
+            // Simply reuse "Multiples" structure from previous window
             // This works because parallel_reduce always applies
             // *this from left to right.
         } else {
-            // Need to initialize "multiples" because *this is a forked copy
+            // Need to initialize "Multiples" because *this is a forked copy
             // that needs to be set up to start at r.begin().
             multiples.initialize( r.begin() );
         }
-        Number window_size = m;
-        for( Number j=r.begin(); j<r.end(); j+=window_size ) { 
+        NumberType window_size = m;
+        for( NumberType j=r.begin(); j<r.end(); j+=window_size ) { 
             assert( j%multiples.m==0 );
             if( j+window_size>r.end() ) 
                 window_size = r.end()-j;
@@ -274,9 +278,12 @@ public:
     }
     void join( Sieve& other ) {
         count += other.count;
+        // Final value of multiples needs to final value of other.mulitiples,
+        // so that *this can correcty process next window to right.
+        multiples.move( other.multiples );
     }
-    Sieve( Sieve& other, split ) : 
-        multiples(other.multiples,split()),
+    Sieve( Sieve& other, tbb::split ) :
+        multiples(other.multiples,tbb::split()),
         count(0)
     {}
     //------------------------------------------------------------------------
@@ -286,118 +293,22 @@ public:
 
 //! Count number of primes between 0 and n
 /** This is the parallel version. */
-Number ParallelCountPrimes( Number n ) {
+NumberType ParallelCountPrimes( NumberType n , int number_of_threads, NumberType grain_size ) {
+    tbb::task_scheduler_init init(number_of_threads);
+
     // Two is special case
-    Number count = n>=2;
+    NumberType count = n>=2;
     if( n>=3 ) {
         Sieve s(n);
         count += s.multiples.n_factor;
-        if( PrintPrimes ) 
+        if( printPrimes )
             printf("---\n");
+        using namespace tbb;
         // Explicit grain size and simple_partitioner() used here instead of automatic grainsize 
-        // determination becase we want SieveRange to be decomposed down to GrainSize or smaller.  
+        // determination becase we want SieveRange to be decomposed down to grainSize or smaller.  
         // Doing so improves odds that the working set fits in cache when evaluating Sieve::operator().
-        parallel_reduce( SieveRange( s.multiples.m, n, s.multiples.m, GrainSize ), s, simple_partitioner() );
+        parallel_reduce( SieveRange( s.multiples.m, n, s.multiples.m, grain_size ), s, simple_partitioner() );
         count += s.count;
     }
     return count;
 }
-
-//------------------------------------------------------------------------
-// Code below this line constitutes the driver that calls SerialCountPrimes
-// and ParallelCountPrimes.
-//------------------------------------------------------------------------
-
-//! A closed range of Number.
-struct NumberRange {
-    Number low;
-    Number high;
-    void set_from_string( const char* s );
-    NumberRange( Number low_, Number high_ ) : low(low_), high(high_) {}
-};
-
-void NumberRange::set_from_string( const char* s ) {
-    char* end;
-    high = low = strtol(s,&end,0);
-    switch( *end ) {
-    case ':': 
-        high = strtol(end+1,0,0); 
-        break;
-    case '\0':
-        break;
-    default:
-        printf("unexpected character = %c\n",*end);
-    }
-    
-}
-
-//! Number of threads to use.
-static NumberRange NThread(0,4);
-
-//! If true, then at end wait for user to hit return
-static bool PauseFlag = false;
-
-//! Parse the command line.
-static Number ParseCommandLine( int argc, char* argv[] ) {
-    Number n = 100000000;
-    int i = 1;
-    if( i<argc && strcmp( argv[i], "pause" )==0 ) {
-        PauseFlag = true;
-        ++i;
-    }
-    if( i<argc && !isdigit(argv[i][0]) ) { 
-        // Command line is garbled.
-        fprintf(stderr,"Usage: %s [['pause'] n [nthread [grainsize]]]\n", argv[0]);
-        fprintf(stderr,"where n is a positive integer [%lu]\n",n);
-        fprintf(stderr,"      nthread is a non-negative integer, or range of the form low:high [%ld:%lu]\n",NThread.low,NThread.high);
-        fprintf(stderr,"      grainsize is an optional postive integer [%lu]\n",GrainSize);
-        exit(1);
-    }
-    if( i<argc )
-        n = strtol(argv[i++],0,0);
-    if( i<argc )
-        NThread.set_from_string(argv[i++]);
-    if( i<argc )
-        GrainSize = strtol(argv[i++],0,0);
-    return n;
-}
-
-static void WaitForUser() {
-    char c;
-    printf("Press return to continue\n");
-    do {
-        c = getchar();
-    } while( c!='\n' );
-}
-
-int main( int argc, char* argv[] ) {
-    Number n = ParseCommandLine(argc,argv);
-
-    // Try different numbers of threads
-    for( Number p=NThread.low; p<=NThread.high; ++p ) {
-        task_scheduler_init init(task_scheduler_init::deferred);
-        // If p!=0, we are doing a parallel run
-        if( p ) 
-            init.initialize(p);
-
-        Number count;
-        tick_count t0 = tick_count::now();
-        if( p==0 ) {
-            count = SerialCountPrimes(n);
-        } else {
-            count = ParallelCountPrimes(n);
-        }
-        tick_count t1 = tick_count::now();
-
-        printf("#primes from [2..%lu] = %lu (%.2f sec with ",
-            (unsigned long)n, (unsigned long)count, (t1-t0).seconds());
-        if( p ) 
-            printf("%lu-way parallelism)\n", p );
-        else 
-            printf("serial code)\n");
-    }
-    if( PauseFlag ) {
-        WaitForUser();
-    }
-    return 0;
-}
diff --git a/examples/parallel_reduce/primes/primes.h b/examples/parallel_reduce/primes/primes.h
new file mode 100644
index 0000000..3a6fdf4
--- /dev/null
+++ b/examples/parallel_reduce/primes/primes.h
@@ -0,0 +1,46 @@
+/*
+    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.
+*/
+
+#ifndef PRIMES_H_
+#define PRIMES_H_
+
+
+#include "tbb/task_scheduler_init.h"
+#include <cstddef>
+typedef std::size_t NumberType;
+
+//! Count number of primes between 0 and n
+/** This is the serial version. */
+NumberType SerialCountPrimes( NumberType n);
+
+//! Count number of primes between 0 and n
+/** This is the parallel version. */
+NumberType ParallelCountPrimes( NumberType n, int numberOfThreads= tbb::task_scheduler_init::automatic, NumberType grainSize = 1000);
+
+
+#endif /* PRIMES_H_ */
diff --git a/examples/parallel_reduce/primes/xcode/primes.xcodeproj/project.pbxproj b/examples/parallel_reduce/primes/xcode/primes.xcodeproj/project.pbxproj
index 515f685..b0e86a9 100644
--- a/examples/parallel_reduce/primes/xcode/primes.xcodeproj/project.pbxproj
+++ b/examples/parallel_reduce/primes/xcode/primes.xcodeproj/project.pbxproj
@@ -10,6 +10,7 @@
 		A1F593A60B8F042A00073279 /* primes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* primes.cpp */; };
 		A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
 		A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+		EA8D882D1301731B00385DE1 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA8D882C1301731B00385DE1 /* main.cpp */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXCopyFilesBuildPhase section */
@@ -28,7 +29,9 @@
 /* Begin PBXFileReference section */
 		8DD76F6C0486A84900D96B5E /* primes */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = primes; sourceTree = BUILT_PRODUCTS_DIR; };
 		A1F593A50B8F042A00073279 /* primes.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = primes.cpp; path = ../primes.cpp; sourceTree = SOURCE_ROOT; };
-		A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
+		A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; };
+		EA8D882B130172E400385DE1 /* primes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = primes.h; path = ../primes.h; sourceTree = SOURCE_ROOT; };
+		EA8D882C1301731B00385DE1 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = ../main.cpp; sourceTree = SOURCE_ROOT; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -56,6 +59,8 @@
 		08FB7795FE84155DC02AAC07 /* Source */ = {
 			isa = PBXGroup;
 			children = (
+				EA8D882C1301731B00385DE1 /* main.cpp */,
+				EA8D882B130172E400385DE1 /* primes.h */,
 				A1F593A50B8F042A00073279 /* primes.cpp */,
 			);
 			name = Source;
@@ -121,6 +126,7 @@
 			buildActionMask = 2147483647;
 			files = (
 				A1F593A60B8F042A00073279 /* primes.cpp in Sources */,
+				EA8D882D1301731B00385DE1 /* main.cpp in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -135,12 +141,12 @@
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = primes;
 				ZERO_LINK = NO;
 			};
@@ -151,12 +157,12 @@
 			buildSettings = {
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = primes;
 				ZERO_LINK = NO;
 			};
@@ -204,12 +210,12 @@
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = primes;
 				ZERO_LINK = NO;
 			};
@@ -222,12 +228,12 @@
 				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = primes;
 				ZERO_LINK = NO;
 			};
diff --git a/examples/pipeline/index.html b/examples/pipeline/index.html
index 45d3735..c268b91 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-2010 Intel Corporation.  All Rights Reserved.
+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 
diff --git a/examples/pipeline/square/Makefile b/examples/pipeline/square/Makefile
index dc361c3..fde2bb6 100644
--- a/examples/pipeline/square/Makefile
+++ b/examples/pipeline/square/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 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 58c0b27..0f804ad 100644
--- a/examples/pipeline/square/Makefile.windows
+++ b/examples/pipeline/square/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -36,7 +36,7 @@ CXX2 = $(CXX1:icl.exe-=icl.exe)
 CXX  = $(CXX2:-=cl.exe)
 
 # The C++ compiler options
-MYCXXFLAGS = /TP /EHsc /W3 /nologo $(TBB_SECURITY_SWITCH) /D _CONSOLE /D _MBCS /D WIN32 $(CXXFLAGS) /D _CRT_SECURE_NO_DEPRECATE
+MYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 $(CXXFLAGS) /D _CRT_SECURE_NO_DEPRECATE
 MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)
 SQUARE = square.cpp
 
diff --git a/examples/pipeline/square/gen_input.cpp b/examples/pipeline/square/gen_input.cpp
index 0b4525f..8223294 100644
--- a/examples/pipeline/square/gen_input.cpp
+++ b/examples/pipeline/square/gen_input.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 2280f9a..8f3d5bc 100644
--- a/examples/pipeline/square/index.html
+++ b/examples/pipeline/square/index.html
@@ -56,7 +56,7 @@ Two additional targets for this example:
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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 
diff --git a/examples/pipeline/square/square.cpp b/examples/pipeline/square/square.cpp
index 53a87ad..fe7f48c 100644
--- a/examples/pipeline/square/square.cpp
+++ b/examples/pipeline/square/square.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/pipeline/square/xcode/square.xcodeproj/project.pbxproj b/examples/pipeline/square/xcode/square.xcodeproj/project.pbxproj
index 42a859f..fe4eff4 100644
--- a/examples/pipeline/square/xcode/square.xcodeproj/project.pbxproj
+++ b/examples/pipeline/square/xcode/square.xcodeproj/project.pbxproj
@@ -41,7 +41,7 @@
 		6DA3F3E20DE5D34A0039CADE /* gen-input */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "gen-input"; sourceTree = BUILT_PRODUCTS_DIR; };
 		8DD76F6C0486A84900D96B5E /* square */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = square; sourceTree = BUILT_PRODUCTS_DIR; };
 		A1F593A50B8F042A00073279 /* square.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = square.cpp; path = ../square.cpp; sourceTree = SOURCE_ROOT; };
-		A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
+		A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -209,12 +209,12 @@
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = square;
 				ZERO_LINK = NO;
 			};
@@ -225,12 +225,12 @@
 			buildSettings = {
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = square;
 				ZERO_LINK = NO;
 			};
@@ -340,12 +340,12 @@
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = square;
 				ZERO_LINK = NO;
 			};
@@ -358,12 +358,12 @@
 				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = square;
 				ZERO_LINK = NO;
 			};
diff --git a/examples/task/index.html b/examples/task/index.html
index 0365ea0..6e10299 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-2010 Intel Corporation.  All Rights Reserved.
+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 
diff --git a/examples/task/tree_sum/Makefile b/examples/task/tree_sum/Makefile
index 395e2eb..5ad6b80 100644
--- a/examples/task/tree_sum/Makefile
+++ b/examples/task/tree_sum/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 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 b925faf..fd3b482 100644
--- a/examples/task/tree_sum/Makefile.windows
+++ b/examples/task/tree_sum/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -36,7 +36,7 @@ CXX2 = $(CXX1:icl.exe-=icl.exe)
 CXX  = $(CXX2:-=cl.exe)
 
 # The C++ compiler options
-MYCXXFLAGS = /TP /EHsc /W3 /nologo $(TBB_SECURITY_SWITCH) /D _CONSOLE /D _MBCS /D WIN32 $(CXXFLAGS)
+MYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 $(CXXFLAGS)
 MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)
 
 all: release test
diff --git a/examples/task/tree_sum/OptimizedParallelSumTree.cpp b/examples/task/tree_sum/OptimizedParallelSumTree.cpp
index 306e25a..b74b391 100644
--- a/examples/task/tree_sum/OptimizedParallelSumTree.cpp
+++ b/examples/task/tree_sum/OptimizedParallelSumTree.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/task/tree_sum/SerialSumTree.cpp b/examples/task/tree_sum/SerialSumTree.cpp
index 01cfeb2..2fa7314 100644
--- a/examples/task/tree_sum/SerialSumTree.cpp
+++ b/examples/task/tree_sum/SerialSumTree.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 a97df6c..13bfb9a 100644
--- a/examples/task/tree_sum/SimpleParallelSumTree.cpp
+++ b/examples/task/tree_sum/SimpleParallelSumTree.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 b789977..d03efb0 100644
--- a/examples/task/tree_sum/common.h
+++ b/examples/task/tree_sum/common.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 1f211b5..52eb389 100644
--- a/examples/task/tree_sum/index.html
+++ b/examples/task/tree_sum/index.html
@@ -63,7 +63,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-2010 Intel Corporation.  All Rights Reserved.
+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 
diff --git a/examples/task/tree_sum/main.cpp b/examples/task/tree_sum/main.cpp
index 3b687eb..ac9b06a 100644
--- a/examples/task/tree_sum/main.cpp
+++ b/examples/task/tree_sum/main.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/task/tree_sum/xcode/tree_sum.xcodeproj/project.pbxproj b/examples/task/tree_sum/xcode/tree_sum.xcodeproj/project.pbxproj
index 0ee269a..e2600b9 100644
--- a/examples/task/tree_sum/xcode/tree_sum.xcodeproj/project.pbxproj
+++ b/examples/task/tree_sum/xcode/tree_sum.xcodeproj/project.pbxproj
@@ -37,9 +37,9 @@
 		05593A0D0B8F4F4500DE73AB /* OptimizedParallelSumTree.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = OptimizedParallelSumTree.cpp; path = ../OptimizedParallelSumTree.cpp; sourceTree = SOURCE_ROOT; };
 		05593A0E0B8F4F4500DE73AB /* SerialSumTree.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = SerialSumTree.cpp; path = ../SerialSumTree.cpp; sourceTree = SOURCE_ROOT; };
 		05593A0F0B8F4F4500DE73AB /* SimpleParallelSumTree.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = SimpleParallelSumTree.cpp; path = ../SimpleParallelSumTree.cpp; sourceTree = SOURCE_ROOT; };
-		05593A150B8F4F5D00DE73AB /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbbmalloc.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbbmalloc.dylib; sourceTree = "<absolute>"; };
+		05593A150B8F4F5D00DE73AB /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbbmalloc.dylib; path = ../../../../lib/libtbbmalloc.dylib; sourceTree = SOURCE_ROOT; };
 		05593A4A0B8F51E000DE73AB /* tree_sum */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = tree_sum; sourceTree = BUILT_PRODUCTS_DIR; };
-		A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
+		A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -155,14 +155,12 @@
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_2)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
-				LIBRARY_SEARCH_PATHS_QUOTED_2 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = tree_sum;
 				ZERO_LINK = NO;
 			};
@@ -173,14 +171,12 @@
 			buildSettings = {
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_2)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
-				LIBRARY_SEARCH_PATHS_QUOTED_2 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = tree_sum;
 				ZERO_LINK = NO;
 			};
@@ -228,14 +224,12 @@
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_2)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
-				LIBRARY_SEARCH_PATHS_QUOTED_2 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = tree_sum;
 				ZERO_LINK = NO;
 			};
@@ -248,14 +242,12 @@
 				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_2)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
-				LIBRARY_SEARCH_PATHS_QUOTED_2 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = tree_sum;
 				ZERO_LINK = NO;
 			};
diff --git a/examples/task_group/index.html b/examples/task_group/index.html
index 0765067..7656b53 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-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/examples/task_group/sudoku/Makefile b/examples/task_group/sudoku/Makefile
index ed50f3a..180d19f 100644
--- a/examples/task_group/sudoku/Makefile
+++ b/examples/task_group/sudoku/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -29,6 +29,9 @@ PROG=sudoku
 ARGS=input1 4 0 -p
 
 # The C++ compiler
+ifneq (,$(shell which icc 2>/dev/null))
+CXX=icc
+endif # which icc
 ifeq ($(CXX),icc)
 CXX0XFLAGS=-std=c++0x -D_TBB_CPP0X
 endif # icc
diff --git a/examples/task_group/sudoku/Makefile.windows b/examples/task_group/sudoku/Makefile.windows
index 1406a79..246377f 100644
--- a/examples/task_group/sudoku/Makefile.windows
+++ b/examples/task_group/sudoku/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -36,7 +36,7 @@ CXX2 = $(CXX1:icl.exe-=icl.exe)
 CXX  = $(CXX2:-=cl.exe)
 
 # The C++ compiler options
-MYCXXFLAGS = /TP /EHsc /W3 /nologo $(TBB_SECURITY_SWITCH) /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_DEPRECATE $(CXXFLAGS)
+MYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_DEPRECATE $(CXXFLAGS)
 MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)
 
 all: release test
diff --git a/examples/task_group/sudoku/index.html b/examples/task_group/sudoku/index.html
index 110820f..4067e3c 100644
--- a/examples/task_group/sudoku/index.html
+++ b/examples/task_group/sudoku/index.html
@@ -33,6 +33,8 @@ how to use the task_group interface.
 <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.
+<DT><A HREF="xcode">xcode</A>
+<DD>Contains Mac OS* Xcode* workspace for building and running the example.
 </DL>
 
 <H2>To Build</H2>
@@ -56,7 +58,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-2010 Intel Corporation.  All Rights Reserved.
+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
diff --git a/examples/task_group/sudoku/sudoku.cpp b/examples/task_group/sudoku/sudoku.cpp
index 3ba2fa1..4640c4e 100644
--- a/examples/task_group/sudoku/sudoku.cpp
+++ b/examples/task_group/sudoku/sudoku.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/task_group/sudoku/xcode/sudoku.xcodeproj/project.pbxproj b/examples/task_group/sudoku/xcode/sudoku.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..a333167
--- /dev/null
+++ b/examples/task_group/sudoku/xcode/sudoku.xcodeproj/project.pbxproj
@@ -0,0 +1,306 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 42;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		A1F593A60B8F042A00073279 /* sudoku.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* sudoku.cpp */; };
+		A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+		A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+		8DD76F690486A84900D96B5E /* CopyFiles */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 12;
+			dstPath = "";
+			dstSubfolderSpec = 16;
+			files = (
+				A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+		8DD76F6C0486A84900D96B5E /* Sudoku */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Sudoku; sourceTree = BUILT_PRODUCTS_DIR; };
+		A1F593A50B8F042A00073279 /* sudoku.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = sudoku.cpp; path = ../sudoku.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 */
+
+/* Begin PBXFrameworksBuildPhase section */
+		8DD76F660486A84900D96B5E /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		08FB7794FE84155DC02AAC07 /* Sudoku */ = {
+			isa = PBXGroup;
+			children = (
+				08FB7795FE84155DC02AAC07 /* Source */,
+				A1F593B20B8F06F900073279 /* External Frameworks and Libraries */,
+				1AB674ADFE9D54B511CA2CBB /* Products */,
+			);
+			name = Sudoku;
+			sourceTree = "<group>";
+		};
+		08FB7795FE84155DC02AAC07 /* Source */ = {
+			isa = PBXGroup;
+			children = (
+				A1F593A50B8F042A00073279 /* sudoku.cpp */,
+			);
+			name = Source;
+			sourceTree = "<group>";
+		};
+		1AB674ADFE9D54B511CA2CBB /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				8DD76F6C0486A84900D96B5E /* Sudoku */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {
+			isa = PBXGroup;
+			children = (
+				A1F593B30B8F06F900073279 /* libtbb.dylib */,
+			);
+			name = "External Frameworks and Libraries";
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		8DD76F620486A84900D96B5E /* Sudoku */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "Sudoku" */;
+			buildPhases = (
+				8DD76F640486A84900D96B5E /* Sources */,
+				8DD76F660486A84900D96B5E /* Frameworks */,
+				8DD76F690486A84900D96B5E /* CopyFiles */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = Sudoku;
+			productInstallPath = "$(HOME)/bin";
+			productName = Sudoku;
+			productReference = 8DD76F6C0486A84900D96B5E /* Sudoku */;
+			productType = "com.apple.product-type.tool";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		08FB7793FE84155DC02AAC07 /* Project object */ = {
+			isa = PBXProject;
+			buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "Sudoku" */;
+			compatibilityVersion = "Xcode 2.4";
+			hasScannedForEncodings = 1;
+			mainGroup = 08FB7794FE84155DC02AAC07 /* Sudoku */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				8DD76F620486A84900D96B5E /* Sudoku */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+		8DD76F640486A84900D96B5E /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				A1F593A60B8F042A00073279 /* sudoku.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_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
+				INSTALL_PATH = "$(HOME)/bin";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"../../../../lib",
+				);
+				PRODUCT_NAME = Sudoku;
+				ZERO_LINK = NO;
+			};
+			name = Debug;
+		};
+		1DEB923308733DC60010E9CD /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
+				INSTALL_PATH = "$(HOME)/bin";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"../../../../lib",
+				);
+				PRODUCT_NAME = Sudoku;
+				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;
+				PREBINDING = NO;
+				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;
+				PREBINDING = NO;
+				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+				SYMROOT = "/tmp/tbb-$(USER)";
+			};
+			name = Release;
+		};
+		A1F593C60B8F0E6E00073279 /* Debug64 */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)";
+				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
+				INSTALL_PATH = "$(HOME)/bin";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"../../../../lib",
+				);
+				PRODUCT_NAME = Sudoku;
+				ZERO_LINK = NO;
+			};
+			name = Debug64;
+		};
+		A1F593C70B8F0E6E00073279 /* Release64 */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)";
+				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
+				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
+				INSTALL_PATH = "$(HOME)/bin";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"../../../../lib",
+				);
+				PRODUCT_NAME = Sudoku;
+				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";
+				PREBINDING = NO;
+				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";
+				PREBINDING = NO;
+				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 "Sudoku" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				1DEB923208733DC60010E9CD /* Debug */,
+				A1F593C60B8F0E6E00073279 /* Debug64 */,
+				1DEB923308733DC60010E9CD /* Release */,
+				A1F593C70B8F0E6E00073279 /* Release64 */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "Sudoku" */ = {
+			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/task_priority/fractal/Makefile b/examples/task_priority/fractal/Makefile
new file mode 100644
index 0000000..227ee71
--- /dev/null
+++ b/examples/task_priority/fractal/Makefile
@@ -0,0 +1,73 @@
+# 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.
+
+# GNU Makefile that builds and runs example.
+NAME=Fractal
+ARGS=auto
+PERF_RUN_ARGS=auto 1 1000000 silent
+
+# The C++ compiler
+ifneq (,$(shell which icc 2>/dev/null))
+CXX=icc
+endif # icc
+
+include ../../common/gui/Makefile.gmake
+
+SOURCES= ../../common/gui/$(UI)video.cpp fractal.cpp main.cpp
+
+CXXFLAGS += -DTBB_PREVIEW_TASK_PRIORITY
+
+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
+
+release: $(SOURCES) resources
+	$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(EXE) $(SOURCES) -ltbb_preview $(LIBS)
+
+debug: resources
+	$(CXX) -g -O0 -DTBB_USE_DEBUG $(CXXFLAGS) -o $(EXE) $(SOURCES) -ltbb_preview_debug $(LIBS)
+
+clean:
+	$(RM) $(EXE) *.o *.d
+ifeq ($(UI),mac)
+	rm -rf $(NAME).app
+endif
+
+test:
+ifeq ($(UI),mac)
+	export DYLD_LIBRARY_PATH="$(DYLD_LIBRARY_PATH):$(TBBLIBSPATH)"; ./$(EXE) $(ARGS)
+else
+	./$(EXE) $(ARGS)
+endif
+
+perf_build: release
+
+perf_run:
diff --git a/examples/task_priority/fractal/Makefile.windows b/examples/task_priority/fractal/Makefile.windows
new file mode 100644
index 0000000..88764a7
--- /dev/null
+++ b/examples/task_priority/fractal/Makefile.windows
@@ -0,0 +1,73 @@
+# 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.
+
+# Common Makefile that builds and runs example.
+
+# Just specify your program basename
+PROG=Fractal
+ARGS=auto
+PERF_RUN_ARGS=auto 1 1000000 silent
+
+# Trying to find if icl.exe is set
+CXX1 = $(TBB_CXX)-
+CXX2 = $(CXX1:icl.exe-=icl.exe)
+CXX  = $(CXX2:-=cl.exe)
+# Uncomment one of next lines to choose user interface type (console, gdiplus, direct draw)
+#UI = con
+UI = gdi
+#UI = dd
+
+# Machine architecture, auto-detected from TBB_TARGET_ARCH by default
+# Use XARCH variable to change it. See index.html for more information
+ARCH0 = $(TBB_TARGET_ARCH)-
+ARCH1 = $(ARCH0:ia32-=x86)
+ARCH2 = $(ARCH1:intel64-=AMD64)
+XARCH = $(ARCH2:-=x86)
+
+MAKEINC = ../../common/gui/Makefile.win
+SOURCES = fractal.cpp main.cpp 
+
+CXXFLAGS += /DTBB_PREVIEW_TASK_PRIORITY
+ 
+all: release test
+release: compiler_check
+	@$(MAKE) -f $(MAKEINC) UI=$(UI) CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)" LFLAGS="$(LDFLAGS) tbb_preview.lib $(LIBS)" XARCH=$(XARCH) RCNAME=gui SOURCE="$(SOURCES)" EXE=$(PROG).exe build_one
+debug: compiler_check
+	@$(MAKE) -f $(MAKEINC) UI=$(UI) DEBUG=_debug CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS) /D TBB_USE_DEBUG" LFLAGS="$(LDFLAGS) tbb_preview_debug.lib $(LIBS)" XARCH=$(XARCH) RCNAME=gui SOURCE="$(SOURCES)" EXE=$(PROG).exe build_one
+clean:
+	@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest msvs\gui.res
+test:
+	$(PROG) $(ARGS)
+
+perf_build: compiler_check
+	@$(MAKE) -f $(MAKEINC) UI=con CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)" LFLAGS="$(LDFLAGS) tbb_preview.lib $(LIBS)" XARCH=$(XARCH) RCNAME=gui SOURCE="$(SOURCES) " EXE=$(PROG).exe build_one
+perf_run:
+	$(PROG) $(PERF_RUN_ARGS)
+
+compiler_check:
+	@echo compiler_test>compiler_test && @$(CXX) /E compiler_test >nul 2>&1  || echo "$(CXX) command not found. Check if CXX=$(CXX) is set properly"
+	@cmd.exe /C del compiler_test
+
diff --git a/examples/task_priority/fractal/fractal.cpp b/examples/task_priority/fractal/fractal.cpp
new file mode 100644
index 0000000..36c0dd8
--- /dev/null
+++ b/examples/task_priority/fractal/fractal.cpp
@@ -0,0 +1,265 @@
+/*
+    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.
+*/
+
+#include "fractal.h"
+
+#include "tbb/compat/thread"
+#include "tbb/parallel_for.h"
+#include "tbb/blocked_range2d.h"
+#include "tbb/task_scheduler_init.h"
+#include "tbb/tick_count.h"
+
+#include <math.h>
+#include <stdio.h>
+
+video *v;
+extern bool silent;
+extern int grain_size;
+
+color_t fractal::calc_one_pixel(int x0, int y0) {
+    int iter;
+    double fx0, fy0, xtemp, x, y, mu;
+
+    color_t color;
+
+    fx0 = (double)x0 - (double) size_x / 2.0;
+    fy0 = (double)y0 - (double) size_y / 2.0;
+    fx0 = fx0 / magn + cx;
+    fy0 = fy0 / magn + cy;
+
+    iter = 0; x = 0; y = 0;
+
+    while (((x*x + y*y) <= 4) && (iter < max_iterations)) { 
+        xtemp = x*x - y*y + fx0;
+        y = 2*x*y + fy0;
+        x = xtemp;
+        iter++;
+    }
+
+    if (iter == max_iterations) {
+        // point corresponds to the mandelbrot set
+        color = v->get_color(255, 255, 255);
+        return color;
+    }
+
+    // compute again but with exponent calculation at each iteration
+    // it's all for coloring point outside the mandelbrot set
+    iter = 0; x = 0; y = 0;
+    mu = 0;
+    while (((x*x + y*y) <= 4) && (iter < max_iterations)) { 
+        xtemp = x*x - y*y + fx0;
+        y = 2*x*y + fy0;
+        x = xtemp;
+        mu += exp(-sqrt(x*x+y*y));
+        iter++;
+    }
+
+    int b = 256*mu;
+    int g = (b/8);
+    int r = (g/16);
+
+    b = b>255 ? 255 : b;
+    g = g>255 ? 255 : g;
+    r = r>255 ? 255 : r;
+
+    color = v->get_color(r, g, b);
+    return color;
+}
+
+void fractal::clear() {
+    drawing_area area( off_x, off_y, size_x, size_y, dm) ;
+
+    // fill the rendering area with black color
+    for (int y=0; y<size_y; ++y) {
+        area.set_pos( 0, y );
+        for (int x=0; x<size_x; ++x) {
+            area.put_pixel( v->get_color(0, 0, 0) );
+        }
+    }
+}
+
+void fractal::draw_border( bool is_active ) {
+    color_t color = is_active ? v->get_color(0, 255, 0) // green color
+                                : v->get_color(96, 128, 96); // green-gray color
+
+    // top border
+    drawing_area area0( off_x-1, off_y-1, size_x+2, 1, dm );
+    for (int i=-1; i<size_x+1; ++i)
+        area0.put_pixel(color);
+    // bottom border
+    drawing_area area1( off_x-1, off_y+size_y, size_x+2, 1, dm );
+    for (int i=-1; i<size_x+1; ++i)
+        area1.put_pixel(color);
+    // left border
+    drawing_area area2( off_x-1, off_y, 1, size_y+2, dm );
+    for (int i=0; i<size_y; ++i)
+        area2.set_pixel(0, i, color);
+    // right border
+    drawing_area area3( size_x+off_x, off_y, 1, size_y+2, dm );
+    for (int i=0; i<size_y; ++i)
+        area3.set_pixel(0, i, color);
+}
+
+void fractal::render_rect( int x0, int y0, int x1, int y1 ) {
+    // render the specified rectangle area
+    drawing_area area(off_x+x0, off_y+y0, x1-x0, y1-y0, dm);
+    for ( int y=y0; y<y1; ++y ) {
+        area.set_pos( 0, y-y0 );
+        for ( int x=x0; x<x1; ++x ) {
+            area.put_pixel( calc_one_pixel( x, y ) );
+        }
+    }
+}
+
+class fractal_body {
+    fractal &f;
+public:
+    void operator()( tbb::blocked_range2d<int> &r ) const {
+        if ( v->next_frame() )
+            f.render_rect( r.cols().begin(), r.rows().begin(), r.cols().end(), r.rows().end() );
+    }
+
+    fractal_body( fractal &f ) : f(f) {
+    }
+};
+
+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);
+}
+
+void fractal::run( tbb::task_group_context &context ) {
+    clear();
+    render( context );
+}
+
+bool fractal::check_point( int x, int y ) {
+    return x >= off_x && x <= off_x+size_x && 
+            y >= off_y && y <= off_y+size_y;
+}
+
+void fractal_group::calc_fractal( int num ) {
+    // calculate the fractal
+    fractal &f = num ? f1 : f0;
+
+    tbb::tick_count t0 = tbb::tick_count::now();
+    while ( v->next_frame() && num_frames[num] != 0 ) {
+        f.run( context[num] );
+        if ( num_frames[num]>0 ) num_frames[num] -= 1;
+    }
+    tbb::tick_count t1 = tbb::tick_count::now();
+
+    if ( !silent ) {
+        printf("  %s fractal finished. Time: %g\n", num ? "Second" : "First", (t1-t0).seconds());
+    }
+}
+
+void fg_thread_func(fractal_group *fg) {
+    // initialize the task scheduler for the second thread
+    tbb::task_scheduler_init init( fg->get_num_threads() );
+    // calculate the second fractal
+    fg->calc_fractal( 1 );
+}
+
+void fractal_group::set_priorities() {
+    // set the high priority for the active area and the normal priority for another area
+    context[active].set_priority( tbb::priority_high );
+    context[active^1].set_priority( tbb::priority_normal );
+}
+
+void fractal_group::run( bool create_second_fractal ) {
+    // initialize task scheduler
+    tbb::task_scheduler_init init( num_threads );
+
+    // create contexts to manage fractal priorities
+    context = new tbb::task_group_context[2];
+
+    set_priorities();
+    draw_borders();
+
+    // the second fractal is calculating on separated thread
+    std::thread *fg_thread = 0;
+    if ( create_second_fractal ) fg_thread = new std::thread( fg_thread_func, this );
+
+    // calculate the first fractal
+    calc_fractal( 0 );
+
+    if ( fg_thread ) {
+        // wait for second fractal
+        fg_thread->join();
+        delete fg_thread;
+    }
+
+    delete[] context;
+}
+
+void fractal_group::draw_borders() {
+    f0.draw_border( active==0 );
+    f1.draw_border( active==1 );
+}
+
+fractal_group::fractal_group( const drawing_memory &_dm, int _num_threads, int _max_iterations, int _num_frames ) : f0(_dm), f1(_dm), num_threads(_num_threads) {
+    // set rendering areas
+    f0.size_x = f1.size_x = _dm.sizex/2-4;
+    f0.size_y = f1.size_y = _dm.sizey-4;
+    f0.off_x = f0.off_y = f1.off_y = 2;
+    f1.off_x = f0.size_x+4+2;
+
+    // set fractals parameters
+    f0.cx = -0.6f; f0.cy = 0.0f; f0.magn = 200.0f;
+    f1.cx = -0.6f; f1.cy = 0.0f; f1.magn = 200.0f;
+    f0.max_iterations = f1.max_iterations = _max_iterations;
+
+    // initially the first fractal is active
+    active = 0;
+
+    num_frames[0] = num_frames[1] = _num_frames;
+}
+
+void fractal_group::mouse_click(int x, int y) {
+    // assumption that the point is not inside any fratal area
+    int new_active = -1;
+
+    // check if the point is inside the first fractal area
+    if ( f0.check_point( x, y ) ) {
+        new_active = 0;
+    } else {
+        // check if the point is inside the second fractal area
+        if ( f1.check_point( x, y ) ) {
+            new_active = 1;
+        }
+    }
+
+    if ( new_active != -1 && new_active != active ) {
+        // change the priorities
+        active = new_active;
+        set_priorities();
+        draw_borders();
+    }
+}
diff --git a/examples/task_priority/fractal/fractal.h b/examples/task_priority/fractal/fractal.h
new file mode 100644
index 0000000..e3ea789
--- /dev/null
+++ b/examples/task_priority/fractal/fractal.h
@@ -0,0 +1,112 @@
+/*
+    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.
+*/
+
+#ifndef FRACTAL_H_
+#define FRACTAL_H_
+
+#include "../../common/gui/video.h"
+
+#include "tbb/task.h"
+#include "tbb/task_scheduler_init.h"
+
+//! Fractal class
+class fractal {
+    //! Left corner of the fractal area
+    int off_x, off_y;
+    //! Size of the fractal area
+    int size_x, size_y;
+
+    //! Fractal properties
+    float cx, cy;
+    float magn;
+    int max_iterations;
+
+    //! Drawing memory object for rendering
+    const drawing_memory &dm;
+
+    //! One pixel calculation routine
+    color_t calc_one_pixel(int x, int y);
+    //! Clears the fractal area
+    void clear();
+    //! Draws the border around the fractal area
+    void draw_border( bool is_active );
+    //! Renders the fractal
+    void render( tbb::task_group_context &context );
+    //! Check if the point is inside the fractal area
+    bool check_point( int x, int y);
+
+public:
+    //! Constructor
+    fractal( const drawing_memory &dm ) : dm(dm) {}
+    //! Runs the fractal calculation
+    void run( tbb::task_group_context &context );
+    //! Renders the fractal rectangular area
+    void render_rect(int x0, int y0, int x1, int y1);
+
+    friend class fractal_group;
+};
+
+//! The group of fractals
+class fractal_group {
+    //! Fractals defenition
+    fractal f0, f1;
+    //! Number of frames to calculate
+    int num_frames[2];
+    //! Task group contexts to manage prioroties
+    tbb::task_group_context *context;
+
+    //! Border type enumeration
+    enum BORDER_TYPE {
+        BORDER_INACTIVE = 0,
+        BORDER_ACTIVE
+    };
+
+    //! The number of the threads
+    int num_threads;
+    //! The active (high priority) fractal number
+    int active;
+
+    //! Draws the borders around the fractals
+    void draw_borders();
+    //! Sets priorities for fractals calculations
+    void set_priorities();
+
+public:
+    //! Constructor
+    fractal_group( const drawing_memory &_dm, int num_threads = tbb::task_scheduler_init::automatic, int max_iterations = 100000, int num_frames = 1);
+    //! Run calculation
+    void run( bool create_second_fractal=true );
+    //! Mouse event handler
+    void mouse_click(int x, int y);
+    //! Fractal calculation routine
+    void calc_fractal( int num );
+     //! Get number of threads
+    int get_num_threads() const { return num_threads; }
+};
+
+#endif /* FRACTAL_H_ */
diff --git a/examples/task_priority/fractal/fractal_video.h b/examples/task_priority/fractal/fractal_video.h
new file mode 100644
index 0000000..6608ba9
--- /dev/null
+++ b/examples/task_priority/fractal/fractal_video.h
@@ -0,0 +1,74 @@
+/*
+    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.
+*/
+
+#ifndef FRACTAL_VIDEO_H_
+#define FRACTAL_VIDEO_H_
+
+#include "../../common/gui/video.h"
+#include "fractal.h"
+
+extern video *v;
+extern bool single;
+
+class fractal_video : public video
+{
+    fractal_group *fg;
+
+private:
+    void on_mouse( int x, int y, int key ) {
+        if( key == 1 ) {
+            if ( fg ) {
+                fg->mouse_click( x, y );
+            }
+        }
+    }
+
+    void on_key( int key ) {
+        switch ( key&0xff ) {
+        case 27: running = false;
+        }
+    }
+
+    void on_process() {
+        if ( fg ) {
+            fg->run( !single );
+        }
+    }
+
+public:
+    fractal_video() :fg(0) {
+        title = "Fractal Example";
+        v = this;
+    }
+
+    void set_fractal_group( fractal_group &_fg ) {
+        fg = &_fg;
+    }
+};
+
+#endif /* FRACTAL_VIDEO_H_ */
diff --git a/examples/task_priority/fractal/index.html b/examples/task_priority/fractal/index.html
new file mode 100644
index 0000000..ed194c1
--- /dev/null
+++ b/examples/task_priority/fractal/index.html
@@ -0,0 +1,66 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+The example calculates two classical Mandelbrot fractals with different priorities. 
+The application window is divided into two areas where fractals are rendered. With mouse click on an area the user can change the priority of the calculating fractal. In the clicked area the fractal priority is changed to be "high" and the priority of the other fractal is changed to "normal".
+The example also has the console mode but in this mode the priorities could not be changed during execution.
+
+
+<H2>Files</H2>
+<DL>
+<DT><A HREF="main.cpp">main.cpp</A>
+<DD>Main program which parses command line options and runs the fractals calculation in GUI or Console mode.
+<DT><A HREF="fractal.h">fractal.h</A>
+<DD>Interfaces of fractal and fractal_group classes.
+<DT><A HREF="fractal.cpp">fractal.cpp</A>
+<DD>Implementations of fractal and fractal_group classes.
+<DT><A HREF="fractal_video.h">fractal_video.h</A>
+<DD>GUI mode support interface.
+<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* 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>
+
+<H2>To Build</H2>
+General build directions can be found <A HREF=../../index.html#build>here</A>.
+
+<H2>Usage</H2>
+<DL>
+<DT><TT>fractal <I>-h</I></TT>
+<DD>Prints the help for command line options
+<DT><TT>fractal [<I>n-of-threads=value</I>] [<I>n-of-frames=value</I>] [<I>max-of-iterations=value</I>] [<I>grain-size=value</I>] [<I>silent</I>] [<I>single</I>]</TT>
+<DT><TT>fractal [<I>n-of-threads</I> [<I>n-of-frames</I> [<I>max-of-iterations</I> [<I>grain-size</I>]]]] [<I>silent</I>] [<I>single</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>
+    <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>silent</I> - no output except elapsed time.<BR>
+    <I>single</I> - process only one fractal.<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 a small fractal iterations number and the desired number of threads, e.g., <TT>fractal 4 1 10000</TT>.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<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.
+</BODY>
+</HTML>
+
diff --git a/examples/task_priority/fractal/main.cpp b/examples/task_priority/fractal/main.cpp
new file mode 100644
index 0000000..caf97e1
--- /dev/null
+++ b/examples/task_priority/fractal/main.cpp
@@ -0,0 +1,98 @@
+/*
+    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 VIDEO_WINMAIN_ARGS
+
+#include <stdio.h>
+#include <iostream>
+
+#include "fractal.h"
+#include "fractal_video.h"
+
+#include "tbb/tick_count.h"
+#include "tbb/task_scheduler_init.h"
+
+#include "../../common/utility/utility.h"
+
+bool silent = false;
+bool single = false;
+int grain_size = 8;
+
+int main(int argc, char *argv[])
+{
+    try{
+        tbb::tick_count mainStartTime = tbb::tick_count::now();
+
+        // It is used for console mode for test with different number of threads and also has
+        // meaning for GUI: threads.first  - use separate event/updating loop thread (>0) or not (0).
+        //                  threads.second - initialization value for scheduler
+        utility::thread_number_range threads( tbb::task_scheduler_init::default_num_threads );
+        int num_frames = -1;
+        int max_iterations = 1000000;
+
+        // command line parsing
+        utility::parse_cli_arguments(argc,argv,
+            utility::cli_argument_pack()
+            //"-h" option for for displaying help is present implicitly
+            .positional_arg(threads,"n-of-threads","number of threads to use; a range of the form low[:high], where low and optional high are non-negative integers or 'auto' for the TBB default.")
+            .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(silent, "silent", "no output except elapsed time")
+            .arg(single, "single", "process only one fractal")
+        );
+
+        fractal_video video;
+
+        // video layer init
+        if ( video.init_window(1024, 512) ) {
+            video.calc_fps = false;
+            video.threaded = threads.first > 0;
+            // initialize fractal group
+            fractal_group fg( video.get_drawing_memory(), threads.last, max_iterations, num_frames );
+            video.set_fractal_group( fg );
+            // main loop
+            video.main_loop();
+        }
+        else if ( video.init_console() ) {
+            // in console mode we always have limited number of frames
+            num_frames = num_frames<0 ? 1 : num_frames;
+            for(int p = threads.first;  p <= threads.last; ++p ) {
+                if ( !silent ) printf("Threads = %d\n", p);
+                fractal_group fg( video.get_drawing_memory(), p, max_iterations, num_frames );
+                fg.run( !single );
+            }
+        }
+        video.terminate();
+        utility::report_elapsed_time((tbb::tick_count::now() - mainStartTime).seconds());
+        return 0;
+    } catch ( std::exception& e ) {
+        std::cerr<<"error occurred. error text is :\"" <<e.what()<<"\"\n";
+        return 1;
+    }
+}
diff --git a/examples/task_priority/fractal/msvs/fractal.icproj b/examples/task_priority/fractal/msvs/fractal.icproj
new file mode 100644
index 0000000..00085e0
--- /dev/null
+++ b/examples/task_priority/fractal/msvs/fractal.icproj
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+	ProjectType="Intel C++ Project"
+	Version="11.1"
+	Name="fractal"
+	ProjectGUID="{5C4ACAE3-8686-4046-A5FD-D0DC8755D263}"
+	VCNestedProjectGUID="{3AA40693-F93D-4D4B-B32E-068F511A2527}"
+	VCNestedProjectFileName="fractal.vcproj">
+	<Configurations/>
+	<Files/>
+</VisualStudioProject>
diff --git a/examples/task_priority/fractal/msvs/fractal.vcproj b/examples/task_priority/fractal/msvs/fractal.vcproj
new file mode 100644
index 0000000..ad51ac6
--- /dev/null
+++ b/examples/task_priority/fractal/msvs/fractal.vcproj
@@ -0,0 +1,832 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8,00"
+	Name="fractal"
+	ProjectGUID="{3AA40693-F93D-4D4B-B32E-068F511A2527}"
+	RootNamespace="fractal"
+	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"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				OmitFramePointers="true"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories=""$(TBB30_INSTALL_DIR)\include""
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG;TBB_PREVIEW_TASK_PRIORITY"
+				RuntimeLibrary="3"
+				EnableFunctionLevelLinking="true"
+				UsePrecompiledHeader="0"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="tbb_preview_debug.lib"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="$(TBB30_INSTALL_DIR)\lib\ia32\vc_mt;$(TBB30_INSTALL_DIR)\lib\ia32\vc8"
+				GenerateDebugInformation="true"
+				SubSystem="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 "$(TBB30_INSTALL_DIR)\examples\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"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				OmitFramePointers="true"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories=""$(TBB30_INSTALL_DIR)\include""
+				PreprocessorDefinitions="WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG;TBB_PREVIEW_TASK_PRIORITY"
+				RuntimeLibrary="3"
+				EnableFunctionLevelLinking="true"
+				UsePrecompiledHeader="0"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="tbb_preview_debug.lib"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="$(TBB30_INSTALL_DIR)\lib\intel64\vc_mt;$(TBB30_INSTALL_DIR)\lib\intel64\vc8"
+				GenerateDebugInformation="true"
+				SubSystem="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 "$(TBB30_INSTALL_DIR)\examples\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"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				FavorSizeOrSpeed="1"
+				OmitFramePointers="true"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories=""$(TBB30_INSTALL_DIR)\include""
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;TBB_PREVIEW_TASK_PRIORITY"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				UsePrecompiledHeader="0"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="tbb_preview.lib"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="$(TBB30_INSTALL_DIR)\lib\ia32\vc_mt;$(TBB30_INSTALL_DIR)\lib\ia32\vc8"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				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 "$(TBB30_INSTALL_DIR)\examples\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"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				FavorSizeOrSpeed="1"
+				OmitFramePointers="true"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories=""$(TBB30_INSTALL_DIR)\include""
+				PreprocessorDefinitions="WIN64;NDEBUG;_WINDOWS;TBB_PREVIEW_TASK_PRIORITY"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				UsePrecompiledHeader="0"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="tbb_preview.lib"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="$(TBB30_INSTALL_DIR)\lib\intel64\vc_mt;$(TBB30_INSTALL_DIR)\lib\intel64\vc8"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				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 "$(TBB30_INSTALL_DIR)\examples\common\copy_libraries.bat"  intel64 release "$(OutDir)""
+			/>
+		</Configuration>
+		<Configuration
+			Name="DDRelease|Win32"
+			OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+			IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="..\..\..\common\gui\dxcheck.bat"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				FavorSizeOrSpeed="1"
+				OmitFramePointers="true"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories=""$(TBB30_INSTALL_DIR)\include";"$(DXSDK_DIR)\include""
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;TBB_PREVIEW_TASK_PRIORITY"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				UsePrecompiledHeader="0"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="tbb_preview.lib"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="$(TBB30_INSTALL_DIR)\lib\ia32\vc_mt;$(TBB30_INSTALL_DIR)\lib\ia32\vc8;$(DXSDK_DIR)\lib\x86"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				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 "$(TBB30_INSTALL_DIR)\examples\common\copy_libraries.bat"  ia32 release "$(OutDir)""
+			/>
+		</Configuration>
+		<Configuration
+			Name="DDRelease|x64"
+			OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+			IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="..\..\..\common\gui\dxcheck.bat"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				FavorSizeOrSpeed="1"
+				OmitFramePointers="true"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories=""$(TBB30_INSTALL_DIR)\include";"$(DXSDK_DIR)\include""
+				PreprocessorDefinitions="WIN64;NDEBUG;_WINDOWS;TBB_PREVIEW_TASK_PRIORITY"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				UsePrecompiledHeader="0"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="tbb_preview.lib"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="$(TBB30_INSTALL_DIR)\lib\intel64\vc_mt;$(TBB30_INSTALL_DIR)\lib\intel64\vc8;$(DXSDK_DIR)\lib\x64"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				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 "$(TBB30_INSTALL_DIR)\examples\common\copy_libraries.bat"  intel64 release "$(OutDir)""
+			/>
+		</Configuration>
+		<Configuration
+			Name="DDDebug|Win32"
+			OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+			IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="..\..\..\common\gui\dxcheck.bat"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				OmitFramePointers="true"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories=""$(TBB30_INSTALL_DIR)\include";"$(DXSDK_DIR)\include""
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG;TBB_PREVIEW_TASK_PRIORITY"
+				RuntimeLibrary="3"
+				EnableFunctionLevelLinking="true"
+				UsePrecompiledHeader="0"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="tbb_preview_debug.lib"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="$(TBB30_INSTALL_DIR)\lib\ia32\vc_mt;$(TBB30_INSTALL_DIR)\lib\ia32\vc8;$(DXSDK_DIR)\lib\x86"
+				GenerateDebugInformation="true"
+				SubSystem="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 "$(TBB30_INSTALL_DIR)\examples\common\copy_libraries.bat"  ia32 debug "$(OutDir)""
+			/>
+		</Configuration>
+		<Configuration
+			Name="DDDebug|x64"
+			OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+			IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="..\..\..\common\gui\dxcheck.bat"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				OmitFramePointers="true"
+				WholeProgramOptimization="true"
+				AdditionalIncludeDirectories=""$(TBB30_INSTALL_DIR)\include";"$(DXSDK_DIR)\include""
+				PreprocessorDefinitions="WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG;TBB_PREVIEW_TASK_PRIORITY"
+				RuntimeLibrary="3"
+				EnableFunctionLevelLinking="true"
+				UsePrecompiledHeader="0"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="tbb_preview_debug.lib"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="$(TBB30_INSTALL_DIR)\lib\intel64\vc_mt;$(TBB30_INSTALL_DIR)\lib\intel64\vc8;$(DXSDK_DIR)\lib\x64"
+				GenerateDebugInformation="true"
+				SubSystem="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 "$(TBB30_INSTALL_DIR)\examples\common\copy_libraries.bat"  intel64 debug "$(OutDir)""
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;h;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\fractal.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\fractal.h"
+				>
+			</File>
+			<File
+				RelativePath="..\fractal_video.h"
+				>
+			</File>
+			<File
+				RelativePath="..\main.cpp"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+			<File
+				RelativePath=".\gui.ico"
+				>
+			</File>
+			<File
+				RelativePath=".\gui.rc"
+				>
+			</File>
+			<File
+				RelativePath=".\resource.h"
+				>
+			</File>
+			<File
+				RelativePath=".\small.ico"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Video Layer"
+			>
+			<File
+				RelativePath="..\..\..\common\gui\ddvideo.cpp"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\..\..\common\gui\gdivideo.cpp"
+				>
+				<FileConfiguration
+					Name="DDRelease|Win32"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="DDRelease|x64"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="DDDebug|Win32"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="DDDebug|x64"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\..\..\common\gui\video.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\common\gui\winvideo.h"
+				>
+			</File>
+		</Filter>
+		<File
+			RelativePath="..\index.html"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/examples/task_priority/fractal/msvs/fractal_cl.sln b/examples/task_priority/fractal/msvs/fractal_cl.sln
new file mode 100644
index 0000000..f63faf4
--- /dev/null
+++ b/examples/task_priority/fractal/msvs/fractal_cl.sln
@@ -0,0 +1,37 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fractal", "fractal.vcproj", "{3AA40693-F93D-4D4B-B32E-068F511A2527}"
+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
+		GDI Debug|Win32 = GDI Debug|Win32
+		GDI Debug|x64 = GDI Debug|x64
+		GDI Release|Win32 = GDI Release|Win32
+		GDI Release|x64 = GDI Release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DD Debug|Win32.ActiveCfg = DDDebug|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DD Debug|Win32.Build.0 = DDDebug|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DD Debug|x64.ActiveCfg = Debug|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DD Debug|x64.Build.0 = Debug|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DD Release|Win32.ActiveCfg = DDRelease|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DD Release|Win32.Build.0 = DDRelease|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DD Release|x64.ActiveCfg = Release|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DD Release|x64.Build.0 = Release|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.GDI Debug|Win32.ActiveCfg = Debug|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.GDI Debug|Win32.Build.0 = Debug|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.GDI Debug|x64.ActiveCfg = Debug|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.GDI Debug|x64.Build.0 = Debug|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.GDI Release|Win32.ActiveCfg = Release|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.GDI Release|Win32.Build.0 = Release|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.GDI Release|x64.ActiveCfg = Release|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.GDI Release|x64.Build.0 = Release|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/examples/task_priority/fractal/msvs/fractal_icl.sln b/examples/task_priority/fractal/msvs/fractal_icl.sln
new file mode 100644
index 0000000..100bb4e
--- /dev/null
+++ b/examples/task_priority/fractal/msvs/fractal_icl.sln
@@ -0,0 +1,45 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{EAF909A5-FA59-4C3D-9431-0FCC20D5BCF9}") = "fractal", "fractal.icproj", "{5C4ACAE3-8686-4046-A5FD-D0DC8755D263}"
+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
+		GDI Debug|Win32 = GDI Debug|Win32
+		GDI Debug|x64 = GDI Debug|x64
+		GDI Release|Win32 = GDI Release|Win32
+		GDI Release|x64 = GDI Release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{5C4ACAE3-8686-4046-A5FD-D0DC8755D263}.DD Debug|Win32.ActiveCfg = DDDebug|Win32
+		{5C4ACAE3-8686-4046-A5FD-D0DC8755D263}.DD Debug|Win32.Build.0 = DDDebug|Win32
+		{5C4ACAE3-8686-4046-A5FD-D0DC8755D263}.DD Debug|x64.ActiveCfg = DDDebug|x64
+		{5C4ACAE3-8686-4046-A5FD-D0DC8755D263}.DD Debug|x64.Build.0 = DDDebug|x64
+		{5C4ACAE3-8686-4046-A5FD-D0DC8755D263}.DD Release|Win32.ActiveCfg = DDRelease|Win32
+		{5C4ACAE3-8686-4046-A5FD-D0DC8755D263}.DD Release|Win32.Build.0 = DDRelease|Win32
+		{5C4ACAE3-8686-4046-A5FD-D0DC8755D263}.DD Release|x64.ActiveCfg = DDRelease|x64
+		{5C4ACAE3-8686-4046-A5FD-D0DC8755D263}.DD Release|x64.Build.0 = DDRelease|x64
+		{5C4ACAE3-8686-4046-A5FD-D0DC8755D263}.GDI Debug|Win32.ActiveCfg = Debug|Win32
+		{5C4ACAE3-8686-4046-A5FD-D0DC8755D263}.GDI Debug|Win32.Build.0 = Debug|Win32
+		{5C4ACAE3-8686-4046-A5FD-D0DC8755D263}.GDI Debug|x64.ActiveCfg = Debug|x64
+		{5C4ACAE3-8686-4046-A5FD-D0DC8755D263}.GDI Debug|x64.Build.0 = Debug|x64
+		{5C4ACAE3-8686-4046-A5FD-D0DC8755D263}.GDI Release|Win32.ActiveCfg = Release|Win32
+		{5C4ACAE3-8686-4046-A5FD-D0DC8755D263}.GDI Release|Win32.Build.0 = Release|Win32
+		{5C4ACAE3-8686-4046-A5FD-D0DC8755D263}.GDI Release|x64.ActiveCfg = Release|x64
+		{5C4ACAE3-8686-4046-A5FD-D0DC8755D263}.GDI Release|x64.Build.0 = Release|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DD Debug|Win32.ActiveCfg = Debug|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DD Debug|x64.ActiveCfg = Debug|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DD Release|Win32.ActiveCfg = Release|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.DD Release|x64.ActiveCfg = Release|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.GDI Debug|Win32.ActiveCfg = Debug|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.GDI Debug|x64.ActiveCfg = Debug|x64
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.GDI Release|Win32.ActiveCfg = Release|Win32
+		{3AA40693-F93D-4D4B-B32E-068F511A2527}.GDI Release|x64.ActiveCfg = Release|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/examples/task_priority/fractal/msvs/gui.ico b/examples/task_priority/fractal/msvs/gui.ico
new file mode 100644
index 0000000..d551aa3
Binary files /dev/null and b/examples/task_priority/fractal/msvs/gui.ico differ
diff --git a/examples/task_priority/fractal/msvs/gui.rc b/examples/task_priority/fractal/msvs/gui.rc
new file mode 100644
index 0000000..5a13d04
--- /dev/null
+++ b/examples/task_priority/fractal/msvs/gui.rc
@@ -0,0 +1,90 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#define APSTUDIO_HIDDEN_SYMBOLS
+#include "windows.h"
+#undef APSTUDIO_HIDDEN_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDI_GUI   ICON                    "gui.ico"
+IDI_SMALL               ICON                    "small.ico"
+
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE 
+BEGIN
+    "resource.h\0"
+END
+
+2 TEXTINCLUDE 
+BEGIN
+    "#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
+    "#include ""windows.h""\r\n"
+    "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE 
+BEGIN
+    "\r\n"
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// String Table
+//
+
+STRINGTABLE 
+BEGIN
+    IDS_APP_TITLE           "gui"
+    IDC_GUI   "GUI"
+END
+
+#endif    // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+
diff --git a/examples/task_priority/fractal/msvs/resource.h b/examples/task_priority/fractal/msvs/resource.h
new file mode 100644
index 0000000..ef7ac10
--- /dev/null
+++ b/examples/task_priority/fractal/msvs/resource.h
@@ -0,0 +1,8 @@
+#define IDC_MYICON                      2
+#define IDD_GUI                         102
+#define IDS_APP_TITLE                   103
+#define IDI_GUI                         107
+#define IDI_SMALL                       108
+#define IDC_GUI                         109
+#define IDR_MAINFRAME                   128
+#define IDC_STATIC                      -1
diff --git a/examples/task_priority/fractal/msvs/small.ico b/examples/task_priority/fractal/msvs/small.ico
new file mode 100644
index 0000000..d551aa3
Binary files /dev/null and b/examples/task_priority/fractal/msvs/small.ico differ
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
new file mode 100644
index 0000000..c4b887e
--- /dev/null
+++ b/examples/task_priority/fractal/xcode/English.lproj/main.nib/classes.nib
@@ -0,0 +1,8 @@
+<?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
new file mode 100644
index 0000000..c1c84a1
--- /dev/null
+++ b/examples/task_priority/fractal/xcode/English.lproj/main.nib/info.nib
@@ -0,0 +1,18 @@
+<?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
new file mode 100644
index 0000000..480a6ef
--- /dev/null
+++ b/examples/task_priority/fractal/xcode/English.lproj/main.nib/objects.xib
@@ -0,0 +1,36 @@
+<?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
new file mode 100644
index 0000000..f57a03f
--- /dev/null
+++ b/examples/task_priority/fractal/xcode/Info.plist
@@ -0,0 +1,26 @@
+<?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
new file mode 100644
index 0000000..1f2ec31
--- /dev/null
+++ b/examples/task_priority/fractal/xcode/fractal.pch
@@ -0,0 +1,5 @@
+//
+// 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
new file mode 100644
index 0000000..a2cccaf
--- /dev/null
+++ b/examples/task_priority/fractal/xcode/fractal.xcodeproj/project.pbxproj
@@ -0,0 +1,302 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 42;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		A12649490B8392750091D5AD /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1E3E7BC0B3AD4EC007C3AB5 /* OpenGL.framework */; };
+		A126495E0B83936D0091D5AD /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8D0C4E960486CD37000505A6 /* Info.plist */; };
+		A18D2A340B861B99007D8D2C /* libtbb_preview.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A18D2A330B861B99007D8D2C /* libtbb_preview.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_preview.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A18D2A330B861B99007D8D2C /* libtbb_preview.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 */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+		A18D2A370B861BB7007D8D2C /* CopyFiles */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 2147483647;
+			dstPath = "";
+			dstSubfolderSpec = 16;
+			files = (
+				A1D44D9A0B861E8A0006E401 /* libtbb_preview.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_preview.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb_preview.dylib; path = ../../../../lib/libtbb_preview.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>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		8D0C4E910486CD37000505A6 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				A1E3E7BD0B3AD4EC007C3AB5 /* OpenGL.framework in Frameworks */,
+				A12649490B8392750091D5AD /* OpenGL.framework in Frameworks */,
+				A18D2A340B861B99007D8D2C /* libtbb_preview.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 /* fractal.app */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		20286C29FDCF999611CA2CEA /* fractal */ = {
+			isa = PBXGroup;
+			children = (
+				20286C2AFDCF999611CA2CEA /* Sources */,
+				20286C2CFDCF999611CA2CEA /* Resources */,
+				20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */,
+				195DF8CFFE9D517E11CA2CBB /* Products */,
+			);
+			name = fractal;
+			sourceTree = "<group>";
+		};
+		20286C2AFDCF999611CA2CEA /* Sources */ = {
+			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 */,
+			);
+			name = Sources;
+			sourceTree = "<group>";
+		};
+		20286C2CFDCF999611CA2CEA /* Resources */ = {
+			isa = PBXGroup;
+			children = (
+				EA135D09130D0AA200807847 /* main.nib */,
+				8D0C4E960486CD37000505A6 /* Info.plist */,
+			);
+			name = Resources;
+			sourceTree = "<group>";
+		};
+		20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */ = {
+			isa = PBXGroup;
+			children = (
+				A18D2A330B861B99007D8D2C /* libtbb_preview.dylib */,
+				A1A8F4300B8B4EA8001C55B1 /* Carbon.framework */,
+				A1A8F41D0B8B4DBE001C55B1 /* AGL.framework */,
+				A1E3E7BC0B3AD4EC007C3AB5 /* OpenGL.framework */,
+			);
+			name = "External Frameworks and Libraries";
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		8D0C4E890486CD37000505A6 /* fractal */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = C0E91AC508A95435008D54AB /* Build configuration list for PBXNativeTarget "fractal" */;
+			buildPhases = (
+				8D0C4E8C0486CD37000505A6 /* Resources */,
+				8D0C4E8F0486CD37000505A6 /* Sources */,
+				8D0C4E910486CD37000505A6 /* Frameworks */,
+				A18D2A370B861BB7007D8D2C /* CopyFiles */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = fractal;
+			productInstallPath = "$(HOME)/Applications";
+			productName = fractal;
+			productReference = 8D0C4E970486CD37000505A6 /* fractal.app */;
+			productType = "com.apple.product-type.application";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		20286C28FDCF999611CA2CEA /* Project object */ = {
+			isa = PBXProject;
+			buildConfigurationList = C0E91AC908A95435008D54AB /* Build configuration list for PBXProject "fractal" */;
+			compatibilityVersion = "Xcode 2.4";
+			hasScannedForEncodings = 1;
+			mainGroup = 20286C29FDCF999611CA2CEA /* fractal */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				8D0C4E890486CD37000505A6 /* fractal */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+		8D0C4E8C0486CD37000505A6 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				A126495E0B83936D0091D5AD /* Info.plist in Resources */,
+				EA135D0B130D0AA200807847 /* main.nib in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		8D0C4E8F0486CD37000505A6 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				A1F591AC0B8DFC9600073279 /* macvideo.cpp in Sources */,
+				EA135CEA130D076D00807847 /* fractal.cpp in Sources */,
+				EA135CEB130D076D00807847 /* main.cpp in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+		EA135D09130D0AA200807847 /* main.nib */ = {
+			isa = PBXVariantGroup;
+			children = (
+				EA135D0A130D0AA200807847 /* English */,
+			);
+			name = main.nib;
+			sourceTree = "<group>";
+		};
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+		C0E91AC608A95435008D54AB /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = "";
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = fractal.pch;
+				GCC_PREPROCESSOR_DEFINITIONS = TBB_PREVIEW_TASK_PRIORITY;
+				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
+				INSTALL_PATH = "$(HOME)/Applications";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					../../../../lib,
+				);
+				PRODUCT_NAME = fractal;
+			};
+			name = Debug;
+		};
+		C0E91AC708A95435008D54AB /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_MODEL_TUNING = "";
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = fractal.pch;
+				GCC_PREPROCESSOR_DEFINITIONS = TBB_PREVIEW_TASK_PRIORITY;
+				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
+				INSTALL_PATH = "$(HOME)/Applications";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					../../../../lib,
+				);
+				OTHER_CPLUSPLUSFLAGS = "";
+				PRODUCT_NAME = fractal;
+				PUBLIC_HEADERS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/Headers";
+				STRIPFLAGS = "";
+			};
+			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 = 4.0;
+				GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
+				MACH_O_TYPE = mh_execute;
+				PREBINDING = NO;
+				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+				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 = 4.0;
+				GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
+				MACH_O_TYPE = mh_execute;
+				PREBINDING = NO;
+				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+				SYMROOT = "/tmp/tbb-$(USER)";
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		C0E91AC508A95435008D54AB /* Build configuration list for PBXNativeTarget "fractal" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				C0E91AC608A95435008D54AB /* Debug */,
+				C0E91AC708A95435008D54AB /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		C0E91AC908A95435008D54AB /* Build configuration list for PBXProject "fractal" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				C0E91ACA08A95435008D54AB /* Debug */,
+				C0E91ACB08A95435008D54AB /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 20286C28FDCF999611CA2CEA /* Project object */;
+}
diff --git a/examples/task_priority/index.html b/examples/task_priority/index.html
new file mode 100644
index 0000000..69277bf
--- /dev/null
+++ b/examples/task_priority/index.html
@@ -0,0 +1,24 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+This directory has examples of how to use the task priority feature.
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="fractal/index.html">fractal</A>
+<DD>The example calculates two classical Mandelbrot fractals with different priorities.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<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.
+</BODY>
+</HTML>
diff --git a/examples/test_all/fibonacci/Fibonacci.cpp b/examples/test_all/fibonacci/Fibonacci.cpp
index 9077906..8af28a4 100644
--- a/examples/test_all/fibonacci/Fibonacci.cpp
+++ b/examples/test_all/fibonacci/Fibonacci.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 526b2b9..63e90bc 100644
--- a/examples/test_all/fibonacci/Makefile
+++ b/examples/test_all/fibonacci/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 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 f79c429..d250393 100644
--- a/examples/test_all/fibonacci/Makefile.windows
+++ b/examples/test_all/fibonacci/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -36,7 +36,7 @@ CXX2 = $(CXX1:icl.exe-=icl.exe)
 CXX  = $(CXX2:-=cl.exe)
 
 # The C++ compiler options
-MYCXXFLAGS = /TP /EHsc /W3 /nologo $(TBB_SECURITY_SWITCH) /D _CONSOLE /D _MBCS /D WIN32 $(CXXFLAGS)
+MYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 $(CXXFLAGS)
 MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)
 
 all: release test
diff --git a/examples/test_all/fibonacci/index.html b/examples/test_all/fibonacci/index.html
index 3e1e2ac..8c0ead6 100644
--- a/examples/test_all/fibonacci/index.html
+++ b/examples/test_all/fibonacci/index.html
@@ -41,7 +41,7 @@ General build directions can be found <A HREF=../../index.html#build>here</A>.
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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 
diff --git a/examples/test_all/fibonacci/xcode/fibonacci.xcodeproj/project.pbxproj b/examples/test_all/fibonacci/xcode/fibonacci.xcodeproj/project.pbxproj
index 280ad7e..f6957d7 100644
--- a/examples/test_all/fibonacci/xcode/fibonacci.xcodeproj/project.pbxproj
+++ b/examples/test_all/fibonacci/xcode/fibonacci.xcodeproj/project.pbxproj
@@ -28,7 +28,7 @@
 /* Begin PBXFileReference section */
 		8DD76F6C0486A84900D96B5E /* Fibonacci */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Fibonacci; sourceTree = BUILT_PRODUCTS_DIR; };
 		A1F593A50B8F042A00073279 /* Fibonacci.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = Fibonacci.cpp; path = ../Fibonacci.cpp; sourceTree = SOURCE_ROOT; };
-		A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
+		A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -135,12 +135,12 @@
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = Fibonacci;
 				ZERO_LINK = NO;
 			};
@@ -151,12 +151,12 @@
 			buildSettings = {
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = Fibonacci;
 				ZERO_LINK = NO;
 			};
@@ -204,12 +204,12 @@
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = Fibonacci;
 				ZERO_LINK = NO;
 			};
@@ -222,12 +222,12 @@
 				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
 				GCC_VERSION = 4.0;
+				HEADER_SEARCH_PATHS = ../../../../include;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+					"../../../../lib",
 				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
 				PRODUCT_NAME = Fibonacci;
 				ZERO_LINK = NO;
 			};
diff --git a/examples/test_all/index.html b/examples/test_all/index.html
index 84ea458..527650c 100644
--- a/examples/test_all/index.html
+++ b/examples/test_all/index.html
@@ -13,7 +13,7 @@ This directory contains programs that exercise all the components of Threading B
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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 
diff --git a/include/index.html b/include/index.html
index dddfb9d..98353f0 100644
--- a/include/index.html
+++ b/include/index.html
@@ -13,7 +13,7 @@ Include files for Threading Building Blocks.
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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 
diff --git a/include/tbb/_aggregator_internal.h b/include/tbb/_aggregator_internal.h
new file mode 100644
index 0000000..9d71182
--- /dev/null
+++ b/include/tbb/_aggregator_internal.h
@@ -0,0 +1,148 @@
+/*
+    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.
+*/
+
+#ifndef __TBB_aggregator_internal_H
+#define __TBB_aggregator_internal_H
+
+#include "atomic.h"
+#include "tbb_profiling.h"
+
+namespace tbb {
+namespace interface6 {
+namespace internal {
+
+using namespace tbb::internal;
+
+//! aggregated_operation base class
+template <typename Derived>
+class aggregated_operation {
+ public:
+    uintptr_t status;
+    Derived *next;
+    aggregated_operation() : status(0), next(NULL) {}
+};
+
+//! Aggregator base class
+/** An aggregator for collecting operations coming from multiple sources and executing
+    them serially on a single thread.  operation_type must be derived from
+    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 >
+class aggregator {
+ public:
+    aggregator() : handler_busy(false) { pending_operations = NULL; }
+    ~aggregator() {}
+
+    void initialize_handler(handler_type h) { handle_operations = h; }
+
+    //! Place operation in list
+    /** Place operation in list and either handle list or wait for operation to
+        complete.  */
+    void execute(operation_type *op) {
+        operation_type *res;
+
+        // ITT note: &(op->status) tag is used to cover accesses to this op node. 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->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,
+            // which this waiting handler thread will try to set before entering
+            // handle_operations.
+            call_itt_notify(acquired, &pending_operations);
+            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(0));
+            itt_load_word_with_acquire(op->status);
+        }
+    }
+
+ private:
+    //! An atomically updated list (aka mailbox) of pending operations
+    atomic<operation_type *> pending_operations;
+    //! Controls thread access to handle_operations
+    uintptr_t handler_busy;
+    handler_type handle_operations;
+
+    //! Trigger the handling of operations when the handler is free
+    void start_handle_operations() {
+        operation_type *op_list;
+
+        // ITT note: &handler_busy tag covers access to pending_operations 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 pending_operations have been handled by the
+        // owner of this aggregator.
+        call_itt_notify(prepare, &handler_busy);
+        // get the 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: &pending_operations tag covers access to the handler_busy flag
+        // itself. Capturing the state of the pending_operations signifies that
+        // handler_busy has been set and a new active handler will now process that list's
+        // operations.
+        call_itt_notify(releasing, &pending_operations);
+        // grab pending_operations
+        op_list = pending_operations.fetch_and_store(NULL);
+
+        // handle all the operations
+        handle_operations(op_list);
+
+        // release the handler
+        itt_store_word_with_release(handler_busy, uintptr_t(0));
+    }
+};
+
+} // namespace internal
+} // namespace interface6
+
+namespace internal {
+    using interface6::internal::aggregated_operation;
+    using interface6::internal::aggregator;
+} // namespace internal
+
+} // namespace tbb
+
+#endif
diff --git a/include/tbb/_concurrent_queue_internal.h b/include/tbb/_concurrent_queue_internal.h
index a7bbbb8..72754e1 100644
--- a/include/tbb/_concurrent_queue_internal.h
+++ b/include/tbb/_concurrent_queue_internal.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -35,6 +35,7 @@
 #include "spin_mutex.h"
 #include "cache_aligned_allocator.h"
 #include "tbb_exception.h"
+#include "tbb_profiling.h"
 #include <new>
 
 #if !TBB_USE_EXCEPTIONS && _MSC_VER
@@ -49,7 +50,6 @@
     #pragma warning (pop)
 #endif
 
-
 namespace tbb {
 
 #if !__TBB_TEMPLATE_FRIENDS_BROKEN
@@ -145,7 +145,7 @@ private:
 #endif
 
 //! A queue using simple locking.
-/** For efficient, this class has no constructor.  
+/** For efficiency, this class has no constructor.
     The caller is expected to zero-initialize it. */
 template<typename T>
 class micro_queue : no_copy {
@@ -238,8 +238,9 @@ void micro_queue<T>::push( const void* item, ticket k, concurrent_queue_base_v3<
         p->mask = 0;
         p->next = NULL;
     }
-    
+
     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 );
@@ -252,14 +253,15 @@ void micro_queue<T>::push( const void* item, ticket k, concurrent_queue_base_v3<
     } else {
         p = tail_page;
     }
-   
     __TBB_TRY {
         copy_item( *p, index, item );
         // If no exception was thrown, mark item as present.
-        p->mask |= uintptr_t(1)<<index;
+        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; 
     } __TBB_CATCH (...) {
         ++base.my_rep->n_invalid_entries;
+        call_itt_notify(releasing, &tail_counter);
         tail_counter += concurrent_queue_rep_base::n_queue; 
         __TBB_RETHROW();
     }
@@ -269,7 +271,9 @@ template<typename T>
 bool micro_queue<T>::pop( void* dst, ticket k, concurrent_queue_base_v3<T>& base ) {
     k &= -concurrent_queue_rep_base::n_queue;
     if( head_counter!=k ) spin_wait_until_eq( head_counter, k );
+    call_itt_notify(acquired, &head_counter);
     if( tail_counter==k ) spin_wait_while_eq( tail_counter, k );
+    call_itt_notify(acquired, &tail_counter);
     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);
@@ -332,7 +336,7 @@ void micro_queue<T>::invalidate_page_and_rethrow( ticket k ) {
     page* invalid_page = (page*)uintptr_t(1);
     {
         spin_mutex::scoped_lock lock( page_mutex );
-        tail_counter = k+concurrent_queue_rep_base::n_queue+1;
+        itt_store_word_with_release(tail_counter, k+concurrent_queue_rep_base::n_queue+1);
         page* q = tail_page;
         if( is_valid_page(q) )
             q->next = invalid_page;
@@ -380,7 +384,7 @@ micro_queue_pop_finalizer<T>::~micro_queue_pop_finalizer() {
             my_queue.tail_page = NULL;
         }
     }
-    my_queue.head_counter = my_ticket;
+    itt_store_word_with_release(my_queue.head_counter, my_ticket);
     if( is_valid_page(p) ) {
         allocator.deallocate_page( p );
     }
@@ -455,11 +459,11 @@ protected:
     concurrent_queue_base_v3();
 
     /* override */ virtual ~concurrent_queue_base_v3() {
-#if __TBB_USE_ASSERT
+#if TBB_USE_ASSERT
         size_t nq = my_rep->n_queue;
         for( size_t i=0; i<nq; i++ )
             __TBB_ASSERT( my_rep->array[i].tail_page==NULL, "pages were not freed properly" );
-#endif /* __TBB_USE_ASSERT */
+#endif /* TBB_USE_ASSERT */
         cache_aligned_allocator<concurrent_queue_rep<T> >().deallocate(my_rep,1);
     }
 
@@ -648,8 +652,7 @@ protected:
 
     //! Default constructor
     concurrent_queue_iterator_base_v3() : my_rep(NULL), my_item(NULL) {
-#if __GNUC__==4&&__GNUC_MINOR__==3
-        // to get around a possible gcc 4.3 bug
+#if __TBB_GCC_OPTIMIZER_ORDERING_BROKEN
         __asm__ __volatile__("": : :"memory");
 #endif
     }
@@ -753,7 +756,7 @@ public:
 
     //! Iterator assignment
     concurrent_queue_iterator& operator=( const concurrent_queue_iterator& other ) {
-        assign(other);
+        this->assign(other);
         return *this;
     }
 
diff --git a/include/tbb/_concurrent_unordered_internal.h b/include/tbb/_concurrent_unordered_internal.h
index 1348d61..a3a1add 100644
--- a/include/tbb/_concurrent_unordered_internal.h
+++ b/include/tbb/_concurrent_unordered_internal.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -693,7 +693,7 @@ protected:
         : Traits(hc), my_solist(a),
           my_allocator(a), my_maximum_bucket_size((float) initial_bucket_load)
     {
-        __TBB_ASSERT( n_of_buckets, "number of buckets must be greater than 0");
+        if( n_of_buckets == 0) ++n_of_buckets;
         my_number_of_buckets = 1<<__TBB_Log2((uintptr_t)n_of_buckets*2-1); // round up to power of 2
         internal_init();
     }
@@ -701,6 +701,7 @@ protected:
     concurrent_unordered_base(const concurrent_unordered_base& right, const allocator_type& a)
         : Traits(right.my_hash_compare), my_solist(a), my_allocator(a)
     {
+        internal_init();
         internal_copy(right);
     }
 
@@ -901,6 +902,11 @@ public:
 
         // Clear buckets
         internal_clear();
+
+        // Initialize bucket 0
+        __TBB_ASSERT(my_buckets[0] == NULL, NULL);
+        raw_iterator dummy_node = my_solist.raw_begin();
+        set_bucket(0, dummy_node);
     }
 
     // Lookup
@@ -913,9 +919,13 @@ public:
     }
 
     size_type count(const key_type& key) const {
-        paircc_t answer = equal_range(key);
-        size_type item_count = internal_distance(answer.first, answer.second);
-        return item_count;
+        if(allow_multimapping) {
+            paircc_t answer = equal_range(key);
+            size_type item_count = internal_distance(answer.first, answer.second);
+            return item_count;
+        } else {
+            return const_cast<self_type*>(this)->internal_find(key) == end()?0:1;
+        }
     }
 
     std::pair<iterator, iterator> equal_range(const key_type& key) {
@@ -1045,7 +1055,7 @@ private:
         // Allocate an array of segment pointers
         memset(my_buckets, 0, pointers_per_table * sizeof(void *));
 
-        // Insert the first element in the split-ordered list
+        // Initialize bucket 0
         raw_iterator dummy_node = my_solist.raw_begin();
         set_bucket(0, dummy_node);
     }
@@ -1250,9 +1260,7 @@ private:
             {
                 iterator first = my_solist.get_iterator(it);
                 iterator last = first;
-
-                while( last != end() && !my_hash_compare(get_key(*last), key) )
-                    ++last;
+                do ++last; while( allow_multimapping && last != end() && !my_hash_compare(get_key(*last), key) );
                 return pairii_t(first, last);
             }
         }
@@ -1263,11 +1271,8 @@ private:
     // Bucket APIs
     void init_bucket(size_type bucket)
     {
-        // Bucket 0 has no parent. Initialize it and return.
-        if (bucket == 0) {
-            internal_init();
-            return;
-        }
+        // Bucket 0 has no parent.
+        __TBB_ASSERT( bucket != 0, "The first bucket must always be initialized");
 
         size_type parent_bucket = get_parent(bucket);
 
@@ -1287,8 +1292,10 @@ private:
         // Grow the table by a factor of 2 if possible and needed
         if ( ((float) total_elements / (float) current_size) > my_maximum_bucket_size )
         {
-             // Double the size of the hash only if size has not changed inbetween loads
-            __TBB_CompareAndSwapW((uintptr_t*)&my_number_of_buckets, 2 * current_size, current_size );
+            // Double the size of the hash only if size has not changed inbetween loads
+            __TBB_CompareAndSwapW((uintptr_t*)&my_number_of_buckets, uintptr_t(2u*current_size), uintptr_t(current_size) );
+            //Simple "my_number_of_buckets.compare_and_swap( current_size<<1, current_size );" does not work for VC8
+            //due to overzealous compiler warnings in /Wp64 mode
         }
     }
 
@@ -1303,7 +1310,7 @@ private:
     // Dynamic sized array (segments)
     //! @return segment index of given index in the array
     static size_type segment_index_of( size_type index ) {
-        return size_type( __TBB_Log2( index|1 ) );
+        return size_type( __TBB_Log2( uintptr_t(index|1) ) );
     }
 
     //! @return the first array index of given segment
diff --git a/include/tbb/_tbb_windef.h b/include/tbb/_tbb_windef.h
index 7ca1069..dd96c60 100644
--- a/include/tbb/_tbb_windef.h
+++ b/include/tbb/_tbb_windef.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -72,10 +72,14 @@ namespace std {
 
 #if _MSC_VER
     #if !__TBB_NO_IMPLICIT_LINKAGE
-        #ifdef _DEBUG
-            #pragma comment(lib, "tbb_debug.lib")
+        #ifdef __TBB_LIB_NAME
+	        #pragma comment(lib, __TBB_STRING(__TBB_LIB_NAME))
         #else
-            #pragma comment(lib, "tbb.lib")
+			#ifdef _DEBUG
+				#pragma comment(lib, "tbb_debug.lib")
+			#else
+				#pragma comment(lib, "tbb.lib")
+			#endif
         #endif
     #endif
 #endif
diff --git a/include/tbb/aligned_space.h b/include/tbb/aligned_space.h
index 0d76b3f..7d642fb 100644
--- a/include/tbb/aligned_space.h
+++ b/include/tbb/aligned_space.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 dd2cdcc..d360089 100644
--- a/include/tbb/atomic.h
+++ b/include/tbb/atomic.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -61,7 +61,7 @@ enum memory_semantics {
 //! @cond INTERNAL
 namespace internal {
 
-#if __GNUC__ || __SUNPRO_CC
+#if __GNUC__ || __SUNPRO_CC || __IBMCPP__
 #define __TBB_DECL_ATOMIC_FIELD(t,f,a) t f  __attribute__ ((aligned(a)));
 #elif defined(__INTEL_COMPILER)||_MSC_VER >= 1300
 #define __TBB_DECL_ATOMIC_FIELD(t,f,a) __declspec(align(a)) t f;
@@ -92,11 +92,13 @@ struct atomic_rep<4> {       // Specialization
 #endif
     __TBB_DECL_ATOMIC_FIELD(int32_t,value,4)
 };
+#if __TBB_64BIT_ATOMICS
 template<>
 struct atomic_rep<8> {       // Specialization
     typedef int64_t word;
     __TBB_DECL_ATOMIC_FIELD(int64_t,value,8)
 };
+#endif
 
 template<size_t Size, memory_semantics M>
 struct atomic_traits;        // Primary template declared, but not defined.
@@ -138,17 +140,21 @@ __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,__TBB_full_fence)
 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,acquire)
 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,acquire)
 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,acquire)
-__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,acquire)
 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,release)
 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,release)
 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,release)
+#if __TBB_64BIT_ATOMICS
+__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,acquire)
 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,release)
+#endif
 #else
 __TBB_DECL_ATOMIC_PRIMITIVES(1)
 __TBB_DECL_ATOMIC_PRIMITIVES(2)
 __TBB_DECL_ATOMIC_PRIMITIVES(4)
+#if __TBB_64BIT_ATOMICS
 __TBB_DECL_ATOMIC_PRIMITIVES(8)
 #endif
+#endif
 
 //! Additive inverse of 1 for type T.
 /** Various compilers issue various warnings if -1 is used with various integer types.
@@ -275,35 +281,6 @@ public:
     }
 };
 
-#if __TBB_WORDSIZE == 4
-// Plaforms with 32-bit hardware require special effort for 64-bit loads and stores.
-#if defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER>=1400
-
-template<>
-inline atomic_impl<__TBB_LONG_LONG>::operator atomic_impl<__TBB_LONG_LONG>::value_type() const volatile {
-    return __TBB_Load8(&rep.value);
-}
-
-template<>
-inline atomic_impl<unsigned __TBB_LONG_LONG>::operator atomic_impl<unsigned __TBB_LONG_LONG>::value_type() const volatile {
-    return __TBB_Load8(&rep.value);
-}
-
-template<>
-inline atomic_impl<__TBB_LONG_LONG>::value_type atomic_impl<__TBB_LONG_LONG>::store_with_release( value_type rhs ) {
-    __TBB_Store8(&rep.value,rhs);
-    return rhs;
-}
-
-template<>
-inline atomic_impl<unsigned __TBB_LONG_LONG>::value_type atomic_impl<unsigned __TBB_LONG_LONG>::store_with_release( value_type rhs ) {
-    __TBB_Store8(&rep.value,rhs);
-    return rhs;
-}
-
-#endif /* defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER>=1400 */
-#endif /* __TBB_WORDSIZE==4 */
-
 } /* Internal */
 //! @endcond
 
@@ -325,13 +302,11 @@ struct atomic: internal::atomic_impl<T> {
         atomic<T>& operator=( const atomic<T>& rhs ) {store_with_release(rhs); return *this;}  \
     };
 
-#if defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER>=1400
+#if __TBB_64BIT_ATOMICS
+// otherwise size is verified by test_atomic
 __TBB_DECL_ATOMIC(__TBB_LONG_LONG)
 __TBB_DECL_ATOMIC(unsigned __TBB_LONG_LONG)
-#else
-// Some old versions of MVSC cannot correctly compile templates with "long long".
-#endif /* defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER>=1400 */
-
+#endif
 __TBB_DECL_ATOMIC(long)
 __TBB_DECL_ATOMIC(unsigned long)
 
diff --git a/include/tbb/blocked_range.h b/include/tbb/blocked_range.h
index 52c12cc..ccba501 100644
--- a/include/tbb/blocked_range.h
+++ b/include/tbb/blocked_range.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 d541f42..9bd0509 100644
--- a/include/tbb/blocked_range2d.h
+++ b/include/tbb/blocked_range2d.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 b0bfbe0..85a66f1 100644
--- a/include/tbb/blocked_range3d.h
+++ b/include/tbb/blocked_range3d.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 5889682..896a28e 100644
--- a/include/tbb/cache_aligned_allocator.h
+++ b/include/tbb/cache_aligned_allocator.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/combinable.h b/include/tbb/combinable.h
index 5510595..8b3bdef 100644
--- a/include/tbb/combinable.h
+++ b/include/tbb/combinable.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 4f132d2..c73f521 100644
--- a/include/tbb/compat/condition_variable
+++ b/include/tbb/compat/condition_variable
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -30,7 +30,7 @@
 #define __TBB_condition_variable_H
 
 #if _WIN32||_WIN64
-#include <windows.h>
+#include "../machine/windows_api.h"
 
 namespace tbb { 
 namespace interface5 {
@@ -56,7 +56,13 @@ typedef CONDITION_VARIABLE* PCONDITION_VARIABLE;
 #endif
 
 #else /* if not _WIN32||_WIN64 */
+#include <errno.h> // some systems need it for ETIMEDOUT
 #include <pthread.h>
+#if __linux__
+#include <ctime>
+#else /* generic Unix */
+#include <sys/time.h>
+#endif
 #endif /* _WIN32||_WIN64 */
 
 #include "../tbb_stddef.h"
@@ -205,6 +211,7 @@ public:
     //! Does this lock own the mutex?
     bool owns_lock() const { return owns; }
 
+    // TODO: Un-comment 'explicit' when the last non-C++0x compiler support is dropped
     //! Does this lock own the mutex?
     /*explicit*/ operator bool() const { return owns; }
 
@@ -245,12 +252,12 @@ union condvar_impl_t {
     condition_variable_using_event cv_event;
     CONDITION_VARIABLE             cv_native;
 };
-
 void __TBB_EXPORTED_FUNC internal_initialize_condition_variable( condvar_impl_t& cv );
 void __TBB_EXPORTED_FUNC internal_destroy_condition_variable(    condvar_impl_t& cv );
 void __TBB_EXPORTED_FUNC internal_condition_variable_notify_one( condvar_impl_t& cv );
 void __TBB_EXPORTED_FUNC internal_condition_variable_notify_all( condvar_impl_t& cv );
 bool __TBB_EXPORTED_FUNC internal_condition_variable_wait( condvar_impl_t& cv, mutex* mtx, const tick_count::interval_t* i = NULL );
+
 #else /* if !(_WIN32||_WIN64), i.e., POSIX threads */
 typedef pthread_cond_t condvar_impl_t;
 #endif
@@ -372,14 +379,8 @@ inline cv_status condition_variable::wait_for( unique_lock<mutex>& lock, const t
     lock.owns = true;
     return rc;
 }
-#else
-#if __linux__
-#include <ctime>
-#else /* generic Unix */
-#include <sys/time.h>
-#include <errno.h>
-#endif
 
+#else /* !(_WIN32||_WIN64) */
 inline void condition_variable::wait( unique_lock<mutex>& lock )
 {
     __TBB_ASSERT( lock.owns, NULL );
diff --git a/include/tbb/compat/ppl.h b/include/tbb/compat/ppl.h
index f524abf..a474b73 100644
--- a/include/tbb/compat/ppl.h
+++ b/include/tbb/compat/ppl.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 e4d3b32..c4884ec 100644
--- a/include/tbb/compat/thread
+++ b/include/tbb/compat/thread
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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
new file mode 100644
index 0000000..4a4f5f2
--- /dev/null
+++ b/include/tbb/compat/tuple
@@ -0,0 +1,401 @@
+/*
+    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.
+*/
+
+#ifndef __TBB_tuple_H
+#define __TBB_tuple_H
+
+#if !TBB_PREVIEW_TUPLE
+#error Set TBB_PREVIEW_TUPLE to include compat/tuple
+#endif
+
+#include <utility>
+#include "../tbb_stddef.h"
+
+namespace tbb {
+namespace interface5 {
+namespace internal {
+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>
+class tuple;
+
+namespace internal {
+
+// const null_type temp
+inline const null_type cnull() { return null_type(); }
+
+// cons forward declaration
+template <class HT, class TT> struct cons;
+
+// type of a component of the cons
+template<int N, class T>
+struct component {
+    typedef typename T::tail_type next;
+    typedef typename component<N-1,next>::type type;
+};
+
+template<class T>
+struct component<0,T> {
+    typedef typename T::head_type type;
+};
+
+template<>
+struct component<0,null_type> {
+    typedef null_type type;
+};
+
+// const version of component
+
+template<int N, class T>
+struct component<N, const T>
+{
+    typedef typename T::tail_type next;
+    typedef typename component<N-1,next>::type type;
+};
+
+template<class T>
+struct component<0, const T>
+{
+    typedef const typename T::head_type type;
+};
+
+
+// helper class for getting components of cons
+template< int N>
+struct get_helper {
+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<>
+struct get_helper<0> {
+template<class HT, class TT>
+inline static typename component<0, cons<HT,TT> >::type& get(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>
+struct tuple_traits {
+    typedef cons <T0, typename tuple_traits<T1, T2, T3, T4, T5, T6, T7, T8, T9, 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> {
+    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> {
+    typedef null_type U;
+};
+
+
+// core cons defs
+template <class HT, class TT>
+struct cons{
+
+    typedef HT head_type;
+    typedef TT tail_type;
+
+    HT head; 
+    TT tail;
+
+    static const int length = 1 + tail_type::length;
+
+    // default constructors
+    explicit cons() : head(), tail() { }
+
+    // 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, 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 HT1, class TT1>
+    cons(const cons<HT1,TT1>& other) : head(other.head), tail(other.tail) { }
+
+    cons& operator=(const cons& other) { head = other.head; tail = other.tail; return *this; }
+
+    friend bool operator==(const cons& me, const cons& other) {
+        return me.head == other.head && me.tail == other.tail;
+    }
+    friend bool operator<(const cons& me, const cons& other)  {
+        return me.head < other.head || (!(other.head < me.head) && me.tail < other.tail);
+    }
+    friend bool operator>(const cons& me, const cons& other)  { return other<me; }
+    friend bool operator!=(const cons& me, const cons& other) { return !(me==other); }
+    friend bool operator>=(const cons& me, const cons& other) { return !(me<other); }
+    friend bool operator<=(const cons& me, const cons& other) { return !(me>other); }
+
+    template<class HT1, class TT1>
+    friend bool operator==(const cons<HT,TT>& me, const cons<HT1,TT1>& other) {
+        return me.head == other.head && me.tail == other.tail;
+    }
+
+    template<class HT1, class TT1>
+    friend bool operator<(const cons<HT,TT>& me, const cons<HT1,TT1>& other) {
+        return me.head < other.head || (!(other.head < me.head) && me.tail < other.tail);
+    }
+
+    template<class HT1, class TT1>
+    friend bool operator>(const cons<HT,TT>& me, const cons<HT1,TT1>& other) { return other<me; }
+
+    template<class HT1, class TT1>
+    friend bool operator!=(const cons<HT,TT>& me, const cons<HT1,TT1>& other) { return !(me==other); }
+
+    template<class HT1, class TT1>
+    friend bool operator>=(const cons<HT,TT>& me, const cons<HT1,TT1>& other) { return !(me<other); }
+
+    template<class HT1, class TT1>
+    friend bool operator<=(const cons<HT,TT>& me, const cons<HT1,TT1>& other) { return !(me>other); }
+
+
+};  // cons
+
+
+template <class HT>
+struct cons<HT,null_type> { 
+
+    typedef HT head_type;
+    typedef null_type tail_type;
+    static const int length = 1;
+    head_type head; 
+
+    // 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";*/ }
+
+    // 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(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) { }
+
+    // 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) { }
+
+    // copy constructor
+    template<class HT1>
+    cons( const cons<HT1, null_type>& other) : head(other.head) { }
+
+    // assignment operator
+    cons& operator=(const cons& other) { head = other.head; return *this; }
+
+    friend bool operator==(const cons& me, const cons& other) { return me.head == other.head; }
+    friend bool operator<(const cons& me, const cons& other) { return me.head < other.head; }
+    friend bool operator>(const cons& me, const cons& other) { return other<me; }
+    friend bool operator!=(const cons& me, const cons& other) {return !(me==other); }
+    friend bool operator<=(const cons& me, const cons& other) {return !(me>other); }
+    friend bool operator>=(const cons& me, const cons& other) {return !(me<other); }
+
+    template<class HT1>
+    friend bool operator==(const cons<HT,null_type>& me, const cons<HT1,null_type>& other) {
+        return me.head == other.head;
+    }
+
+    template<class HT1>
+    friend bool operator<(const cons<HT,null_type>& me, const cons<HT1,null_type>& other) {
+        return me.head < other.head;
+    }
+
+    template<class HT1>
+    friend bool operator>(const cons<HT,null_type>& me, const cons<HT1,null_type>& other) { return other<me; }
+
+    template<class HT1>
+    friend bool operator!=(const cons<HT,null_type>& me, const cons<HT1,null_type>& other) { return !(me==other); }
+
+    template<class HT1>
+    friend bool operator<=(const cons<HT,null_type>& me, const cons<HT1,null_type>& other) { return !(me>other); }
+
+    template<class HT1>
+    friend bool operator>=(const cons<HT,null_type>& me, const cons<HT1,null_type>& other) { return !(me<other); }
+
+};  // cons
+
+template <>
+struct cons<null_type,null_type> { typedef null_type tail_type; static const int length = 0; };
+
+// wrapper for default constructor
+template<class T>
+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 {
+    // 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 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;
+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)
+          ) :
+        internal::tuple_traits<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9>::U(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9) { }
+
+    template<int N>
+    struct internal_tuple_element {
+        typedef typename internal::component<N,my_cons>::type type;
+    };
+
+    template<int N>
+    typename internal_tuple_element<N>::type& get() { return internal::get_helper<N>::get(*this); }
+
+    template<class U1, class U2>
+    tuple& operator=(const internal::cons<U1,U2>& other) {
+        my_cons::operator=(other);
+        return *this;
+    }
+
+    template<class U1, class U2>
+    tuple& operator=(const std::pair<U1,U2>& other) {
+        // __TBB_ASSERT(tuple_size<value_type>::value == 2, "Invalid size for pair to tuple assignment");
+        this->head = other.first;
+        this->tail.head = other.second;
+        return *this;
+    }
+
+    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);}
+    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);}
+    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) {
+        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) {
+        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) {
+        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) {
+        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) {
+        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) {
+        return static_cast<const my_cons &>(me)<=(other);
+    }
+
+};  // tuple
+
+// 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 {
+    typedef null_type inherited;
+};
+
+// helper classes
+
+template < class T>
+class tuple_size {
+public:
+    static const size_t value = 1 + tuple_size<typename T::tail_type>::value;
+};
+
+template <>
+class tuple_size<tuple<> > { 
+public:
+    static const size_t value = 0;
+};
+
+template <>
+class tuple_size<null_type> {
+public:
+    static const size_t value = 0;
+};
+
+template<int N, class T>
+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>(); }
+
+}  // interface5
+} // tbb
+
+#if TBB_IMPLEMENT_CPP0X
+namespace std {
+using tbb::interface5::tuple;
+using tbb::interface5::tuple_size;
+using tbb::interface5::tuple_element;
+using tbb::interface5::get;
+}
+#endif
+ 
+#endif /* __TBB_tuple_H */
diff --git a/include/tbb/concurrent_hash_map.h b/include/tbb/concurrent_hash_map.h
index 4c01bde..39cc308 100644
--- a/include/tbb/concurrent_hash_map.h
+++ b/include/tbb/concurrent_hash_map.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -51,24 +51,17 @@
 #include "atomic.h"
 #include "aligned_space.h"
 #include "tbb_exception.h"
+#include "tbb_profiling.h"
 #include "_concurrent_unordered_internal.h" // Need tbb_hasher
-#if TBB_USE_PERFORMANCE_WARNINGS
+#if TBB_USE_PERFORMANCE_WARNINGS || __TBB_STATISTICS
 #include <typeinfo>
 #endif
+#if __TBB_STATISTICS
+#include <stdio.h>
+#endif
 
 namespace tbb {
 
-//! @cond INTERNAL
-namespace internal {
-    //! ITT instrumented routine that loads pointer from location pointed to by src.
-    void* __TBB_EXPORTED_FUNC itt_load_pointer_with_acquire_v3( const void* src );
-    //! ITT instrumented routine that stores src into location pointed to by dst.
-    void __TBB_EXPORTED_FUNC itt_store_pointer_with_release_v3( void* dst, void* src );
-    //! Routine that loads pointer from location pointed to by src without causing ITT to report a race.
-    void* __TBB_EXPORTED_FUNC itt_load_pointer_v3( const void* src );
-}
-//! @endcond
-
 //! hash_compare that is default argument for concurrent_hash_map
 template<typename Key>
 struct tbb_hash_compare {
@@ -76,7 +69,7 @@ struct tbb_hash_compare {
     static bool equal( const Key& a, const Key& b ) { return a == b; }
 };
 
-namespace interface4 {
+namespace interface5 {
 
     template<typename Key, typename T, typename HashCompare = tbb_hash_compare<Key>, typename A = tbb_allocator<std::pair<Key, T> > >
     class concurrent_hash_map;
@@ -141,7 +134,11 @@ namespace interface4 {
         atomic<size_type> my_size; // It must be in separate cache line from my_mask due to performance effects
         //! Zero segment
         bucket my_embedded_segment[embedded_buckets];
-
+#if __TBB_STATISTICS
+        atomic<unsigned> my_info_resizes; // concurrent ones
+        mutable atomic<unsigned> my_info_restarts; // race collisions
+        atomic<unsigned> my_info_rehashes;  // invocations of rehash_bucket
+#endif
         //! Constructor
         hash_map_base() {
             std::memset( this, 0, pointers_per_table*sizeof(segment_ptr_t) // 32*4=128   or 64*8=512
@@ -151,6 +148,11 @@ namespace interface4 {
                 my_table[i] = my_embedded_segment + segment_base(i);
             my_mask = embedded_buckets - 1;
             __TBB_ASSERT( embedded_block <= first_block, "The first block number must include embedded blocks");
+#if __TBB_STATISTICS
+            my_info_resizes = 0; // concurrent ones
+            my_info_restarts = 0; // race collisions
+            my_info_rehashes = 0;  // invocations of rehash_bucket
+#endif
         }
 
         //! @return segment index of given index in the array
@@ -209,12 +211,7 @@ namespace interface4 {
                 sz = segment_size( k );
                 segment_ptr_t ptr = alloc.allocate( sz );
                 init_buckets( ptr, sz, is_initial );
-#if TBB_USE_THREADING_TOOLS
-                // TODO: actually, fence and notification are unnecessary here and below
-                itt_store_pointer_with_release_v3( my_table + k, ptr );
-#else
-                my_table[k] = ptr;// my_mask has release fence
-#endif
+                itt_hide_store_word( my_table[k], ptr );
                 sz <<= 1;// double it to get entire capacity of the container
             } else { // the first block
                 __TBB_ASSERT( k == embedded_block, "Wrong segment index" );
@@ -223,17 +220,9 @@ namespace interface4 {
                 init_buckets( ptr, sz - embedded_buckets, is_initial );
                 ptr -= segment_base(embedded_block);
                 for(segment_index_t i = embedded_block; i < first_block; i++) // calc the offsets
-#if TBB_USE_THREADING_TOOLS
-                    itt_store_pointer_with_release_v3( my_table + i, ptr + segment_base(i) );
-#else
-                    my_table[i] = ptr + segment_base(i);
-#endif
+                    itt_hide_store_word( my_table[i], ptr + segment_base(i) );
             }
-#if TBB_USE_THREADING_TOOLS
-            itt_store_pointer_with_release_v3( &my_mask, (void*)(sz-1) );
-#else
-            my_mask = sz - 1;
-#endif
+            itt_store_word_with_release( my_mask, sz-1 );
             watchdog.my_segment_ptr = 0;
         }
 
@@ -252,7 +241,7 @@ namespace interface4 {
             while( segment_ptr_t seg = my_table[++s] )
                 if( seg[h].node_list == rehash_req ) {
                     seg[h].node_list = empty_rehashed;
-                    mark_rehashed_levels( h + segment_base(s) );
+                    mark_rehashed_levels( h + ((hashcode_t)1<<s) ); // optimized segment_base(s)
                 }
         }
 
@@ -260,11 +249,7 @@ namespace interface4 {
         // Splitting into two functions should help inlining
         inline bool check_mask_race( const hashcode_t h, hashcode_t &m ) const {
             hashcode_t m_now, m_old = m;
-#if TBB_USE_THREADING_TOOLS
-            m_now = (hashcode_t) itt_load_pointer_with_acquire_v3( &my_mask );
-#else
-            m_now = my_mask;
-#endif
+            m_now = (hashcode_t) itt_load_word_with_acquire( my_mask );
             if( m_old != m_now )
                 return check_rehashing_collision( h, m_old, m = m_now );
             return false;
@@ -281,12 +266,13 @@ namespace interface4 {
                 m_old = (m_old<<1) - 1; // get full mask from a bit
                 __TBB_ASSERT((m_old&(m_old+1))==0 && m_old <= m, NULL);
                 // check whether it is rehashing/ed
-#if TBB_USE_THREADING_TOOLS
-                if( itt_load_pointer_with_acquire_v3(&( get_bucket(h & m_old)->node_list )) != rehash_req )
-#else
-                if( __TBB_load_with_acquire(get_bucket( h & m_old )->node_list) != rehash_req )
+                if( itt_load_word_with_acquire(get_bucket(h & m_old)->node_list) != rehash_req )
+                {
+#if __TBB_STATISTICS
+                    my_info_restarts++; // race collisions
 #endif
                     return true;
+                }
             }
             return false;
         }
@@ -297,13 +283,9 @@ namespace interface4 {
             add_to_bucket( b, n );
             // check load factor
             if( sz >= mask ) { // TODO: add custom load_factor 
-                segment_index_t new_seg = segment_index_of( mask+1 );
+                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 TBB_USE_THREADING_TOOLS
-                if( !itt_load_pointer_v3(my_table+new_seg)
-#else
-                if( !my_table[new_seg]
-#endif
+                if( !itt_hide_load_word(my_table[new_seg])
                   && __TBB_CompareAndSwapW(&my_table[new_seg], 2, 0) == 0 )
                     return new_seg; // The value must be processed
             }
@@ -375,7 +357,7 @@ namespace interface4 {
         }
 #if !defined(_MSC_VER) || defined(__INTEL_COMPILER)
         template<typename Key, typename T, typename HashCompare, typename A>
-        friend class interface4::concurrent_hash_map;
+        friend class interface5::concurrent_hash_map;
 #else
     public: // workaround
 #endif
@@ -632,33 +614,25 @@ protected:
 
     //! bucket accessor is to find, rehash, acquire a lock, and access a bucket
     class bucket_accessor : public bucket::scoped_t {
-        bool my_is_writer; // TODO: use it from base type
         bucket *my_b;
     public:
         bucket_accessor( concurrent_hash_map *base, const hashcode_t h, bool writer = false ) { acquire( base, h, writer ); }
         //! find a bucket by masked hashcode, optionally rehash, and acquire the lock
         inline void acquire( concurrent_hash_map *base, const hashcode_t h, bool writer = false ) {
             my_b = base->get_bucket( h );
-#if TBB_USE_THREADING_TOOLS
             // TODO: actually, notification is unnecessary here, just hiding double-check
-            if( itt_load_pointer_with_acquire_v3(&my_b->node_list) == internal::rehash_req
-#else
-            if( __TBB_load_with_acquire(my_b->node_list) == internal::rehash_req
-#endif
+            if( itt_load_word_with_acquire(my_b->node_list) == internal::rehash_req
                 && try_acquire( my_b->mutex, /*write=*/true ) )
             {
                 if( my_b->node_list == internal::rehash_req ) base->rehash_bucket( my_b, h ); //recursive rehashing
-                my_is_writer = true;
             }
-            else bucket::scoped_t::acquire( my_b->mutex, /*write=*/my_is_writer = writer );
+            else bucket::scoped_t::acquire( my_b->mutex, writer );
             __TBB_ASSERT( my_b->node_list != internal::rehash_req, NULL);
         }
         //! check whether bucket is locked for write
-        bool is_writer() { return my_is_writer; }
+        bool is_writer() { return bucket::scoped_t::is_writer; }
         //! get bucket pointer
         bucket *operator() () { return my_b; }
-        // TODO: optimize out
-        bool upgrade_to_writer() { my_is_writer = true; return bucket::scoped_t::upgrade_to_writer(); }
     };
 
     // TODO refactor to hash_base
@@ -667,6 +641,9 @@ protected:
         __TBB_ASSERT( h > 1, "The lowermost buckets can't be rehashed" );
         __TBB_store_with_release(b_new->node_list, internal::empty_rehashed); // mark rehashed
         hashcode_t mask = ( 1u<<__TBB_Log2( h ) ) - 1; // get parent mask from the topmost bit
+#if __TBB_STATISTICS
+        my_info_rehashes++; // invocations of rehash_bucket
+#endif
 
         bucket_accessor b_old( this, h & mask );
 
@@ -695,11 +672,9 @@ public:
     
     class accessor;
     //! Combines data access, locking, and garbage collection.
-    class const_accessor {
+    class const_accessor : private node::scoped_t /*which derived from no_copy*/ {
         friend class concurrent_hash_map<Key,T,HashCompare,Allocator>;
         friend class accessor;
-        void operator=( const accessor & ) const; // Deny access
-        const_accessor( const accessor & );       // Deny access
     public:
         //! Type of value
         typedef const typename concurrent_hash_map::value_type value_type;
@@ -710,7 +685,7 @@ public:
         //! Set to null
         void release() {
             if( my_node ) {
-                my_lock.release();
+                node::scoped_t::release();
                 my_node = 0;
             }
         }
@@ -731,11 +706,11 @@ public:
 
         //! Destroy result after releasing the underlying reference.
         ~const_accessor() {
-            my_node = NULL; // my_lock.release() is called in scoped_lock destructor
+            my_node = NULL; // scoped lock's release() is called in its destructor
         }
-    private:
+    protected:
+        bool is_writer() { return node::scoped_t::is_writer; }
         node *my_node;
-        typename node::scoped_t my_lock;
         hashcode_t my_hash;
     };
 
@@ -915,13 +890,13 @@ public:
     //! Erase item by const_accessor.
     /** Return true if item was erased by particularly this call. */
     bool erase( const_accessor& item_accessor ) {
-        return exclude( item_accessor, /*readonly=*/ true );
+        return exclude( item_accessor );
     }
 
     //! Erase item by accessor.
     /** Return true if item was erased by particularly this call. */
     bool erase( accessor& item_accessor ) {
-        return exclude( item_accessor, /*readonly=*/ false );
+        return exclude( item_accessor );
     }
 
 protected:
@@ -929,7 +904,7 @@ protected:
     bool lookup( bool op_insert, const Key &key, const T *t, const_accessor *result, bool write );
 
     //! delete item by accessor
-    bool exclude( const_accessor &item_accessor, bool readonly );
+    bool exclude( const_accessor &item_accessor );
 
     //! Returns an iterator for an item defined by the key, or for the next item after it (if upper==true)
     template<typename I>
@@ -946,21 +921,13 @@ protected:
         Must not be called concurrently with erasure operations. */
     const_pointer internal_fast_find( const Key& key ) const {
         hashcode_t h = my_hash_compare.hash( key );
-#if TBB_USE_THREADING_TOOLS
-        hashcode_t m = (hashcode_t) itt_load_pointer_with_acquire_v3( &my_mask );
-#else
-        hashcode_t m = my_mask;
-#endif
+        hashcode_t m = (hashcode_t) itt_load_word_with_acquire( my_mask );
         node *n;
     restart:
         __TBB_ASSERT((m&(m+1))==0, NULL);
         bucket *b = get_bucket( h & m );
-#if TBB_USE_THREADING_TOOLS
         // TODO: actually, notification is unnecessary here, just hiding double-check
-        if( itt_load_pointer_with_acquire_v3(&b->node_list) == internal::rehash_req )
-#else
-        if( __TBB_load_with_acquire(b->node_list) == internal::rehash_req )
-#endif
+        if( itt_load_word_with_acquire(b->node_list) == internal::rehash_req )
         {
             bucket::scoped_t lock;
             if( lock.try_acquire( b->mutex, /*write=*/true ) ) {
@@ -988,15 +955,11 @@ protected:
 template<typename Key, typename T, typename HashCompare, typename A>
 bool concurrent_hash_map<Key,T,HashCompare,A>::lookup( bool op_insert, const Key &key, const T *t, const_accessor *result, bool write ) {
     __TBB_ASSERT( !result || !result->my_node, NULL );
-    segment_index_t grow_segment;
     bool return_value;
-    node *n, *tmp_n = 0;
     hashcode_t const h = my_hash_compare.hash( key );
-#if TBB_USE_THREADING_TOOLS
-    hashcode_t m = (hashcode_t) itt_load_pointer_with_acquire_v3( &my_mask );
-#else
-    hashcode_t m = my_mask;
-#endif
+    hashcode_t m = (hashcode_t) itt_load_word_with_acquire( my_mask );
+    segment_index_t grow_segment = 0;
+    node *n, *tmp_n = 0;
     restart:
     {//lock scope
         __TBB_ASSERT((m&(m+1))==0, NULL);
@@ -1027,8 +990,6 @@ bool concurrent_hash_map<Key,T,HashCompare,A>::lookup( bool op_insert, const Key
                 grow_segment = insert_new_node( b(), n = tmp_n, m );
                 tmp_n = 0;
                 return_value = true;
-            } else {
-    exists:     grow_segment = 0;
             }
         } else { // find or count
             if( !n ) {
@@ -1037,12 +998,12 @@ bool concurrent_hash_map<Key,T,HashCompare,A>::lookup( bool op_insert, const Key
                 return false;
             }
             return_value = true;
-            grow_segment = 0;
         }
+    exists:
         if( !result ) goto check_growth;
         // TODO: the following seems as generic/regular operation
         // acquire the item
-        if( !result->my_lock.try_acquire( n->mutex, write ) ) {
+        if( !result->try_acquire( n->mutex, write ) ) {
             // we are unlucky, prepare for longer wait
             tbb::internal::atomic_backoff trials;
             do {
@@ -1051,22 +1012,22 @@ bool concurrent_hash_map<Key,T,HashCompare,A>::lookup( bool op_insert, const Key
                     b.release();
                     __TBB_ASSERT( !op_insert || !return_value, "Can't acquire new item in locked bucket?" );
                     __TBB_Yield();
-#if TBB_USE_THREADING_TOOLS
-                    m = (hashcode_t) itt_load_pointer_with_acquire_v3( &my_mask );
-#else
-                    m = my_mask;
-#endif
+                    m = (hashcode_t) itt_load_word_with_acquire( my_mask );
                     goto restart;
                 }
-            } while( !result->my_lock.try_acquire( n->mutex, write ) );
+            } while( !result->try_acquire( n->mutex, write ) );
         }
     }//lock scope
     result->my_node = n;
     result->my_hash = h;
 check_growth:
     // [opt] grow the container
-    if( grow_segment )
+    if( grow_segment ) {
+#if __TBB_STATISTICS
+        my_info_resizes++; // concurrent ones
+#endif
         enable_segment( grow_segment );
+    }
     if( tmp_n ) // if op_insert only
         delete_node( tmp_n );
     return return_value;
@@ -1092,16 +1053,11 @@ std::pair<I, I> concurrent_hash_map<Key,T,HashCompare,A>::internal_equal_range(
 }
 
 template<typename Key, typename T, typename HashCompare, typename A>
-bool concurrent_hash_map<Key,T,HashCompare,A>::exclude( const_accessor &item_accessor, bool readonly ) {
+bool concurrent_hash_map<Key,T,HashCompare,A>::exclude( const_accessor &item_accessor ) {
     __TBB_ASSERT( item_accessor.my_node, NULL );
     node_base *const n = item_accessor.my_node;
-    item_accessor.my_node = NULL; // we ought release accessor anyway
     hashcode_t const h = item_accessor.my_hash;
-#if TBB_USE_THREADING_TOOLS
-    hashcode_t m = (hashcode_t) itt_load_pointer_with_acquire_v3( &my_mask );
-#else
-    hashcode_t m = my_mask;
-#endif
+    hashcode_t m = (hashcode_t) itt_load_word_with_acquire( my_mask );
     do {
         // get bucket
         bucket_accessor b( this, h & m, /*writer=*/true );
@@ -1111,7 +1067,7 @@ bool concurrent_hash_map<Key,T,HashCompare,A>::exclude( const_accessor &item_acc
         if( !*p ) { // someone else was the first
             if( check_mask_race( h, m ) )
                 continue;
-            item_accessor.my_lock.release();
+            item_accessor.release();
             return false;
         }
         __TBB_ASSERT( *p == n, NULL );
@@ -1119,10 +1075,10 @@ bool concurrent_hash_map<Key,T,HashCompare,A>::exclude( const_accessor &item_acc
         my_size--;
         break;
     } while(true);
-    if( readonly ) // need to get exclusive lock
-        item_accessor.my_lock.upgrade_to_writer(); // return value means nothing here
-    item_accessor.my_lock.release();
-    delete_node( n ); // Only one thread can delete it due to write lock on the chain_mutex
+    if( !item_accessor.is_writer() ) // need to get exclusive lock
+        item_accessor.upgrade_to_writer(); // return value means nothing here
+    item_accessor.release();
+    delete_node( n ); // Only one thread can delete it
     return true;
 }
 
@@ -1130,11 +1086,7 @@ template<typename Key, typename T, typename HashCompare, typename A>
 bool concurrent_hash_map<Key,T,HashCompare,A>::erase( const Key &key ) {
     node_base *n;
     hashcode_t const h = my_hash_compare.hash( key );
-#if TBB_USE_THREADING_TOOLS
-    hashcode_t m = (hashcode_t) itt_load_pointer_with_acquire_v3( &my_mask );
-#else
-    hashcode_t m = my_mask;
-#endif
+    hashcode_t m = (hashcode_t) itt_load_word_with_acquire( my_mask );
 restart:
     {//lock scope
         // get bucket
@@ -1244,8 +1196,8 @@ template<typename Key, typename T, typename HashCompare, typename A>
 void concurrent_hash_map<Key,T,HashCompare,A>::clear() {
     hashcode_t m = my_mask;
     __TBB_ASSERT((m&(m+1))==0, NULL);
-#if TBB_USE_ASSERT || TBB_USE_PERFORMANCE_WARNINGS
-#if TBB_USE_PERFORMANCE_WARNINGS
+#if TBB_USE_ASSERT || TBB_USE_PERFORMANCE_WARNINGS || __TBB_STATISTICS
+#if TBB_USE_PERFORMANCE_WARNINGS || __TBB_STATISTICS
     int current_size = int(my_size), buckets = int(m)+1, empty_buckets = 0, overpopulated_buckets = 0; // usage statistics
     static bool reported = false;
 #endif
@@ -1257,7 +1209,7 @@ void concurrent_hash_map<Key,T,HashCompare,A>::clear() {
         node_base *n = bp->node_list;
         __TBB_ASSERT( is_valid(n) || n == internal::empty_rehashed || n == internal::rehash_req, "Broken internal structure" );
         __TBB_ASSERT( *reinterpret_cast<intptr_t*>(&bp->mutex) == 0, "concurrent or unexpectedly terminated operation during clear() execution" );
-#if TBB_USE_PERFORMANCE_WARNINGS
+#if TBB_USE_PERFORMANCE_WARNINGS || __TBB_STATISTICS
         if( n == internal::empty_rehashed ) empty_buckets++;
         else if( n == internal::rehash_req ) buckets--;
         else if( n->next ) overpopulated_buckets++;
@@ -1270,7 +1222,16 @@ void concurrent_hash_map<Key,T,HashCompare,A>::clear() {
         }
 #endif
     }
-#if TBB_USE_PERFORMANCE_WARNINGS
+#if TBB_USE_PERFORMANCE_WARNINGS || __TBB_STATISTICS
+#if __TBB_STATISTICS
+    printf( "items=%d buckets: capacity=%d rehashed=%d empty=%d overpopulated=%d"
+        " concurrent: resizes=%u rehashes=%u restarts=%u\n",
+        current_size, int(m+1), buckets, empty_buckets, overpopulated_buckets,
+        unsigned(my_info_resizes), unsigned(my_info_rehashes), unsigned(my_info_restarts) );
+    my_info_resizes = 0; // concurrent ones
+    my_info_restarts = 0; // race collisions
+    my_info_rehashes = 0;  // invocations of rehash_bucket
+#endif
     if( buckets > current_size) empty_buckets -= buckets - current_size;
     else overpopulated_buckets -= current_size - buckets; // TODO: load_factor?
     if( !reported && buckets >= 512 && ( 2*empty_buckets > current_size || 2*overpopulated_buckets > current_size ) ) {
@@ -1280,7 +1241,7 @@ void concurrent_hash_map<Key,T,HashCompare,A>::clear() {
         reported = true;
     }
 #endif
-#endif//TBB_USE_ASSERT || TBB_USE_PERFORMANCE_WARNINGS
+#endif//TBB_USE_ASSERT || TBB_USE_PERFORMANCE_WARNINGS || __TBB_STATISTICS
     my_size = 0;
     segment_index_t s = segment_index_of( m );
     __TBB_ASSERT( s+1 == pointers_per_table || !my_table[s+1], "wrong mask or concurrent grow" );
@@ -1341,9 +1302,9 @@ void concurrent_hash_map<Key,T,HashCompare,A>::internal_copy(I first, I last) {
     }
 }
 
-} // namespace interface4
+} // namespace interface5
 
-using interface4::concurrent_hash_map;
+using interface5::concurrent_hash_map;
 
 
 template<typename Key, typename T, typename HashCompare, typename A1, typename A2>
diff --git a/include/tbb/concurrent_priority_queue.h b/include/tbb/concurrent_priority_queue.h
new file mode 100644
index 0000000..6c06831
--- /dev/null
+++ b/include/tbb/concurrent_priority_queue.h
@@ -0,0 +1,364 @@
+/*
+    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.
+*/
+
+#ifndef __TBB_concurrent_priority_queue_H
+#define __TBB_concurrent_priority_queue_H
+
+#if !TBB_PREVIEW_CONCURRENT_PRIORITY_QUEUE
+#error Set TBB_PREVIEW_CONCURRENT_PRIORITY_QUEUE to include concurrent_priority_queue.h
+#endif
+
+#include "atomic.h"
+#include "cache_aligned_allocator.h"
+#include "tbb_exception.h"
+#include "tbb_stddef.h"
+#include "tbb_profiling.h"
+#include "_aggregator_internal.h"
+#include <vector>
+#include <iterator>
+#include <functional>
+
+namespace tbb {
+namespace interface5 {
+
+using namespace tbb::internal;
+
+//! Concurrent priority queue
+template <typename T, typename Compare=std::less<T>, typename A=cache_aligned_allocator<T> >
+class concurrent_priority_queue {
+ public:
+    //! Element type in the queue.
+    typedef T value_type;
+
+    //! Reference type
+    typedef T& reference;
+
+    //! Const reference type
+    typedef const T& const_reference;
+
+    //! Integral type for representing size of the queue.
+    typedef size_t size_type;
+
+    //! Difference type for iterator
+    typedef ptrdiff_t difference_type;
+
+    //! Allocator type
+    typedef A allocator_type;
+
+    //! Constructs a new concurrent_priority_queue with default capacity
+    explicit concurrent_priority_queue(const allocator_type& a = allocator_type()) : mark(0), data(a) {
+        my_aggregator.initialize_handler(my_functor_t(this));
+    }
+
+    //! Constructs a new concurrent_priority_queue with init_sz capacity
+    explicit concurrent_priority_queue(size_type init_capacity, const allocator_type& a = allocator_type()) : mark(0), data(a) {
+        data.reserve(init_capacity);
+        my_aggregator.initialize_handler(my_functor_t(this));
+    }
+
+    //! [begin,end) constructor
+    template<typename InputIterator>
+    concurrent_priority_queue(InputIterator begin, InputIterator end, const allocator_type& a = allocator_type()) : data(begin, end, a)
+    {
+        mark = data.size();
+        my_aggregator.initialize_handler(my_functor_t(this));
+        heapify();
+    }
+
+    //! Copy constructor
+    /** State of this queue may not reflect results of pending
+	operations on the copied queue. */
+    explicit concurrent_priority_queue(const concurrent_priority_queue& src) : mark(src.mark), data(src.data.begin(), src.data.end(), src.data.get_allocator())
+    {
+        my_aggregator.initialize_handler(my_functor_t(this));
+        heapify();
+    }
+
+    concurrent_priority_queue(const concurrent_priority_queue& src, const allocator_type& a) : mark(src.mark), data(src.data.begin(), src.data.end(), a)
+    {
+        my_aggregator.initialize_handler(my_functor_t(this));
+        heapify();
+    }
+
+    //! Assignment operator
+    /** State of this queue may not reflect results of pending
+	operations on the copied queue. */
+    concurrent_priority_queue& operator=(const concurrent_priority_queue& src) {
+        if (this != &src) {
+            std::vector<value_type, allocator_type>(src.data.begin(), src.data.end(), src.data.get_allocator()).swap(data);
+            mark = src.mark;
+        }
+        return *this;
+    }
+
+    //! Returns true if empty, false otherwise
+    /** Returned value may not reflect results of pending operations. */
+    bool empty() const { return data.empty(); }
+
+    //! Returns the current number of elements contained in the queue
+    /** Returned value may not reflect results of pending operations. */
+    size_type size() const { return data.size(); }
+
+    //! Returns the current capacity (i.e. allocated storage) of the queue
+    /** Returned value may not reflect results of pending operations. */
+    size_type capacity() const { return data.capacity(); }
+
+    //! Pushes elem onto the queue, increasing capacity of queue if necessary
+    void push(const_reference elem) {
+        cpq_operation op_data(elem, PUSH_OP);
+        my_aggregator.execute(&op_data);
+        if (op_data.status == FAILED) // exception thrown
+            throw_exception(eid_bad_alloc);
+    }
+
+    //! Gets a reference to and removes highest priority element
+    /** If a highest priority element was found, sets elem and returns true,
+        otherwise returns false. */
+    bool try_pop(reference elem) {
+        cpq_operation op_data(POP_OP);
+        op_data.elem = &elem;
+        my_aggregator.execute(&op_data);
+        return op_data.status==SUCCEEDED;
+    }
+
+    //! If current capacity is less than new_cap, increases capacity to new_cap
+    void reserve(size_type new_cap) {
+        cpq_operation op_data(RESERVE_OP);
+        op_data.sz = new_cap;
+        my_aggregator.execute(&op_data);
+        if (op_data.status == FAILED) // exception thrown
+            throw_exception(eid_bad_alloc);
+    }
+
+    //! Clear the queue; not thread-safe
+    /** Resets size, effectively emptying queue; does not free space.
+        May not clear elements added in pending operations. */
+    void clear() {
+        data.clear();
+        mark = 0;
+    }
+
+    //! Shrink queue capacity to current contents; not thread-safe
+    void shrink_to_fit() {
+        std::vector<value_type, allocator_type>(data.begin(), data.end(), data.get_allocator()).swap(data);
+    }
+
+    //! Swap this queue with another; not thread-safe
+    void swap(concurrent_priority_queue& q) {
+        data.swap(q.data);
+        std::swap(mark, q.mark);
+    }
+
+    //! Return allocator object
+    allocator_type get_allocator() const { return data.get_allocator(); }
+
+ private:
+    enum operation_type {INVALID_OP, PUSH_OP, POP_OP, RESERVE_OP};
+    enum operation_status { WAIT=0, SUCCEEDED, FAILED };
+
+    class cpq_operation : public aggregated_operation<cpq_operation> {
+     public:
+        operation_type type;
+        union {
+            value_type *elem;
+            size_type sz;
+        };
+        cpq_operation(const_reference e, operation_type t) :
+            type(t), elem(const_cast<value_type*>(&e)) {}
+        cpq_operation(operation_type t) : type(t) {}
+    };
+
+    class my_functor_t {
+        concurrent_priority_queue<T, Compare, A> *cpq;
+     public:
+        my_functor_t() {}
+        my_functor_t(concurrent_priority_queue<T, Compare, A> *cpq_) : cpq(cpq_) {}
+        void operator()(cpq_operation* op_list) {
+            cpq->handle_operations(op_list);
+        }
+    };
+
+    aggregator< my_functor_t, cpq_operation> my_aggregator;
+    //! Padding added to avoid false sharing
+    char padding1[NFS_MaxLineSize - sizeof(aggregator< my_functor_t, cpq_operation >)];
+    //! The point at which unsorted elements begin
+    size_type mark;
+    Compare compare;
+    //! Padding added to avoid false sharing
+    char padding2[NFS_MaxLineSize - sizeof(size_type) - sizeof(Compare)];
+    //! Storage for the heap of elements in queue, plus unheapified elements
+    /** data has the following structure:
+
+         binary unheapified
+          heap   elements
+        ____|_______|____
+        |       |       |
+        v       v       v
+        [_|...|_|_|...|_| |...| ]
+         0       ^       ^       ^
+                 |       |       |__capacity
+                 |       |__size
+                 |__mark
+                 
+
+        Thus, data stores the binary heap starting at position 0 through
+        mark-1 (it may be empty).  Then there are 0 or more elements 
+        that have not yet been inserted into the heap, in positions 
+        mark through size-1. */
+    std::vector<value_type, allocator_type> data;
+
+    void handle_operations(cpq_operation *op_list) {
+        cpq_operation *tmp, *pop_list=NULL;
+
+        __TBB_ASSERT(mark == data.size(), NULL);
+
+        // first pass processes all constant time operations: pushes,
+        // tops, some pops. Also reserve.
+        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
+            // and perform the associated operation w/o triggering a race condition; the
+            // thread that created the operation is waiting on the status field, so when
+            // this thread is done with the operation, it will perform a
+            // store_with_release to give control back to the waiting thread in
+            // aggregator::insert_operation.
+            call_itt_notify(acquired, &(op_list->status));
+            __TBB_ASSERT(op_list->type != INVALID_OP, NULL);
+            tmp = op_list;
+            op_list = itt_hide_load_word(op_list->next);
+            if (tmp->type == PUSH_OP) {
+                __TBB_TRY {
+                    data.push_back(*(tmp->elem));
+                    itt_store_word_with_release(tmp->status, uintptr_t(SUCCEEDED));
+                } __TBB_CATCH(...) {
+                    itt_store_word_with_release(tmp->status, uintptr_t(FAILED));
+                }
+            }
+            else if (tmp->type == POP_OP) {
+                if (mark < data.size() &&
+                    compare(data[0], data[data.size()-1])) {
+                    // there are newly pushed elems and the last one
+                    // is higher than top
+                    *(tmp->elem) = data[data.size()-1]; // copy the data
+                    itt_store_word_with_release(tmp->status, uintptr_t(SUCCEEDED));
+                    data.pop_back();
+                    __TBB_ASSERT(mark<=data.size(), NULL);
+                }
+                else { // no convenient item to pop; postpone
+                    itt_hide_store_word(tmp->next, pop_list);
+                    pop_list = tmp;
+                }
+            }
+            else {
+                __TBB_ASSERT(tmp->type == RESERVE_OP, NULL);
+                __TBB_TRY {
+                    data.reserve(tmp->sz);
+                    itt_store_word_with_release(tmp->status, uintptr_t(SUCCEEDED));
+                } __TBB_CATCH(...) {
+                    itt_store_word_with_release(tmp->status, uintptr_t(FAILED));
+                }
+            }
+        }
+
+        // second pass processes pop operations
+        while (pop_list) {
+            tmp = pop_list;
+            pop_list = itt_hide_load_word(pop_list->next);
+            __TBB_ASSERT(tmp->type == POP_OP, NULL);
+            if (data.empty()) {
+                itt_store_word_with_release(tmp->status, uintptr_t(FAILED));
+            }
+            else {
+                __TBB_ASSERT(mark<=data.size(), NULL);
+                if (mark < data.size() &&
+                    compare(data[0], data[data.size()-1])) {
+                    // there are newly pushed elems and the last one is
+                    // higher than top
+                    *(tmp->elem) = data[data.size()-1]; // copy the data
+                    itt_store_word_with_release(tmp->status, uintptr_t(SUCCEEDED));
+                    data.pop_back();
+                }
+                else { // extract top and push last element down heap
+                    *(tmp->elem) = data[0]; // copy the data
+                    itt_store_word_with_release(tmp->status, uintptr_t(SUCCEEDED));
+                    reheap();
+                }
+            }
+        }
+
+        // heapify any leftover pushed elements before doing the next
+        // batch of operations
+        if (mark<data.size()) heapify();
+        __TBB_ASSERT(mark == data.size(), NULL);
+    }
+
+    //! Merge unsorted elements into heap
+    void heapify() {
+        if (!mark) mark = 1;
+        for (; mark<data.size(); ++mark) {
+            // for each unheapified element under size
+            size_type cur_pos = mark;
+            value_type to_place = data[mark];
+            do { // push to_place up the heap
+                size_type parent = (cur_pos-1)>>1;
+                if (!compare(data[parent], to_place)) break;
+                data[cur_pos] = data[parent];
+                cur_pos = parent;
+            } while( cur_pos );
+            data[cur_pos] = to_place;
+        }
+    }
+
+    //! Re-heapify after an extraction
+    /** Re-heapify by pushing last element down the heap from the root. */
+    void reheap() {
+        size_type cur_pos=0, child=1;
+
+        while (child < mark) {
+            size_type target = child;
+            if (child+1 < mark && compare(data[child], data[child+1]))
+                ++target;
+            // target now has the higher priority child
+            if (compare(data[target], data[data.size()-1])) break;
+            data[cur_pos] = data[target];
+            cur_pos = target;
+            child = (cur_pos<<1)+1;
+        }
+        data[cur_pos] = data[data.size()-1];
+        data.pop_back();
+        if (mark > data.size()) mark = data.size();
+    }
+};
+
+} // namespace interface5
+
+using interface5::concurrent_priority_queue;
+
+} // namespace tbb
+
+#endif /* __TBB_concurrent_priority_queue_H */
diff --git a/include/tbb/concurrent_queue.h b/include/tbb/concurrent_queue.h
index c137fb3..5ea6909 100644
--- a/include/tbb/concurrent_queue.h
+++ b/include/tbb/concurrent_queue.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -91,14 +91,14 @@ public:
         my_allocator( a )
     {
         for( ; begin != end; ++begin )
-            internal_push(&*begin);
+            this->internal_push(&*begin);
     }
     
     //! Copy constructor
     concurrent_queue( const concurrent_queue& src, const allocator_type& a = allocator_type()) : 
         internal::concurrent_queue_base_v3<T>(), my_allocator( a )
     {
-        assign( src );
+        this->assign( src );
     }
     
     //! Destroy queue
@@ -106,14 +106,14 @@ public:
 
     //! Enqueue an item at tail of queue.
     void push( const T& source ) {
-        internal_push( &source );
+        this->internal_push( &source );
     }
 
     //! Attempt to dequeue an item from head of queue.
     /** Does not wait for item to become available.
         Returns true if successful; false otherwise. */
     bool try_pop( T& result ) {
-        return internal_try_pop( &result );
+        return this->internal_try_pop( &result );
     }
 
     //! Return the number of items in the queue; thread unsafe
@@ -226,7 +226,7 @@ public:
     typedef const T& const_reference;
 
     //! Integral type for representing size of the queue.
-    /** Notice that the size_type is a signed integral type.
+    /** 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. */
     typedef std::ptrdiff_t size_type;
 
@@ -375,7 +375,7 @@ public:
     /** Does not wait for queue to become not full.
         Returns true if item is pushed; false if queue was already full. */
     bool push_if_not_full( const T& source ) {
-        return try_push( source );
+        return this->try_push( source );
     }
 
     //! Attempt to dequeue an item from head of queue.
@@ -384,7 +384,7 @@ public:
         @deprecated Use try_pop()
         */
     bool pop_if_present( T& destination ) {
-        return try_pop( destination );
+        return this->try_pop( destination );
     }
 
     typedef typename concurrent_bounded_queue<T,A>::iterator iterator;
diff --git a/include/tbb/concurrent_unordered_map.h b/include/tbb/concurrent_unordered_map.h
index 2521961..ff13c2a 100644
--- a/include/tbb/concurrent_unordered_map.h
+++ b/include/tbb/concurrent_unordered_map.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 8106eb4..abcc645 100644
--- a/include/tbb/concurrent_vector.h
+++ b/include/tbb/concurrent_vector.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -35,6 +35,7 @@
 #include "cache_aligned_allocator.h"
 #include "blocked_range.h"
 #include "tbb_machine.h"
+#include "tbb_profiling.h"
 #include <new>
 
 #if !TBB_USE_EXCEPTIONS && _MSC_VER
@@ -77,9 +78,6 @@ namespace internal {
     //! Bad allocation marker
     static void *const vector_allocation_error_flag = reinterpret_cast<void*>(size_t(63));
 
-    //! Routine that loads pointer from location pointed to by src without any fence, without causing ITT to report a race.
-    void* __TBB_EXPORTED_FUNC itt_load_pointer_v3( const void* src );
-
     //! Base class of concurrent vector implementation.
     /** @ingroup containers */
     class concurrent_vector_base_v3 {
@@ -898,6 +896,10 @@ private:
     };
 };
 
+#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) 
+#pragma warning (push)
+#pragma warning (disable: 4701) // potentially uninitialized local variable "old"
+#endif
 template<typename T, class A>
 void concurrent_vector<T, A>::shrink_to_fit() {
     internal_segments_table old;
@@ -910,6 +912,9 @@ void concurrent_vector<T, A>::shrink_to_fit() {
         __TBB_RETHROW();
     }
 }
+#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) 
+#pragma warning (pop)
+#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) {
@@ -936,11 +941,7 @@ T& concurrent_vector<T, A>::internal_subscript( size_type index ) const {
     segment_index_t k = segment_base_index_of( j );
     __TBB_ASSERT( (segment_t*)my_segment != my_storage || k < pointers_per_short_table, "index is being allocated" );
     // no need in __TBB_load_with_acquire since thread works in own space or gets 
-#if TBB_USE_THREADING_TOOLS
-    T* array = static_cast<T*>( tbb::internal::itt_load_pointer_v3(&my_segment[k].array));
-#else
-    T* array = static_cast<T*>(my_segment[k].array);
-#endif /* TBB_USE_THREADING_TOOLS */
+    T* array = static_cast<T*>( tbb::internal::itt_hide_load_word(my_segment[k].array));
     __TBB_ASSERT( array != internal::vector_allocation_error_flag, "the instance is broken by bad allocation. Use at() instead" );
     __TBB_ASSERT( array, "index is being allocated" );
     return array[j];
diff --git a/include/tbb/critical_section.h b/include/tbb/critical_section.h
index 6926770..ea712d1 100644
--- a/include/tbb/critical_section.h
+++ b/include/tbb/critical_section.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -30,7 +30,7 @@
 #define _TBB_CRITICAL_SECTION_H_
 
 #if _WIN32||_WIN64
-#include <windows.h>
+#include "machine/windows_api.h"
 #else
 #include <pthread.h>
 #include <errno.h>
diff --git a/include/tbb/enumerable_thread_specific.h b/include/tbb/enumerable_thread_specific.h
index d8d9a23..c45a428 100644
--- a/include/tbb/enumerable_thread_specific.h
+++ b/include/tbb/enumerable_thread_specific.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -33,12 +33,10 @@
 #include "tbb_thread.h"
 #include "cache_aligned_allocator.h"
 #include "aligned_space.h"
-#if __SUNPRO_CC
 #include <string.h>  // for memcpy
-#endif
 
 #if _WIN32||_WIN64
-#include <windows.h>
+#include "machine/windows_api.h"
 #else
 #include <pthread.h>
 #endif
@@ -791,7 +789,6 @@ namespace interface6 {
 
         //! Returns reference to calling thread's local copy, creating one if necessary
         reference local(bool& exists)  {
-            __TBB_ASSERT(ETS_key_type==ets_no_key,"ets_key_per_instance not yet implemented"); 
             void* ptr = this->table_lookup(exists);
             return *(T*)ptr;
         }
diff --git a/include/tbb/graph.h b/include/tbb/graph.h
new file mode 100644
index 0000000..510741c
--- /dev/null
+++ b/include/tbb/graph.h
@@ -0,0 +1,2673 @@
+/*
+    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.
+*/
+
+#ifndef __TBB_graph_H
+#define __TBB_graph_H
+
+#if !TBB_PREVIEW_GRAPH
+#error Set TBB_PREVIEW_GRAPH to include graph.h
+#endif
+
+#include "tbb_stddef.h"
+#include "atomic.h"
+#include "spin_mutex.h"
+#include "null_mutex.h"
+#include "spin_rw_mutex.h"
+#include "null_rw_mutex.h"
+#include "task.h"
+#include "concurrent_vector.h"
+#include "_aggregator_internal.h"
+
+// use the VC10 or gcc version of tuple if it is available.
+#if TBB_IMPLEMENT_CPP0X && (!defined(_MSC_VER) || _MSC_VER < 1600)
+#define TBB_PREVIEW_TUPLE 1
+#include "compat/tuple"
+#else
+#include <tuple>
+#endif
+
+#include<list>
+#include<queue>
+
+
+/** @file
+  \brief The graph related classes and functions
+
+  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.
+*/
+
+namespace tbb {
+
+    //! 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" 
+    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 
+        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( 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 ) { 
+            my_predecessor_count = number_of_predecessors;
+            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
+            unexpected results. */
+        /* override */ bool remove_predecessor( predecessor_type & ) {
+            spin_mutex::scoped_lock l(my_mutex);
+            --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( input_type ) {
+            {
+                spin_mutex::scoped_lock l(my_mutex);
+                if ( ++my_current_count < my_predecessor_count ) 
+                    return true;
+                else
+                    my_current_count = 0;
+            }
+            execute();
+            return true;
+        }
+
+    protected:
+
+        spin_mutex my_mutex;
+        int my_predecessor_count;
+        int my_current_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;
+
+    };
+
+    //! @cond INTERNAL
+    namespace internal {
+
+        //! The state of an executable node
+        enum node_state { node_state_idle=0, node_state_nonidle=1, node_state_inactive=2 };
+
+
+        //! A functor that takes no input and generates a value of type Output
+        template< typename Output >
+        class source_body : no_assign   {
+        public:
+            virtual ~source_body() {}
+            virtual bool operator()(Output &output) = 0;
+        };
+
+        //! The leaf for source_body
+        template< typename Output, typename Body>
+        class source_body_leaf : public source_body<Output> {
+        public:
+            source_body_leaf( Body _body ) : body(_body) { }
+            /*override */ bool operator()(Output &output) { return body( output ); }
+        private:
+            Body body;
+        };
+
+        //! A functor that takes an Input and generates an Output
+        template< typename Input, typename Output >
+            class function_body : no_assign {
+        public:
+            virtual ~function_body() {}
+            virtual Output operator()(Input input) = 0;
+        };
+
+        //! the leaf for function_body
+        template <typename Input, typename Output, typename B>
+        class function_body_leaf : public function_body< Input, Output > {
+        public:
+            function_body_leaf( B _body ) : body(_body) { }
+            Output operator()(Input i) { return body(i); }
+
+        private:
+            B body;
+        };
+
+        //! the leaf for function_body specialized for Input and output of continue_msg
+        template <typename B>
+        class function_body_leaf< continue_msg, continue_msg, B> : public function_body< continue_msg, continue_msg > {
+        public:
+            function_body_leaf( B _body ) : body(_body) { }
+            continue_msg operator()( continue_msg i ) { 
+                body(i); 
+                return i; 
+            }
+
+        private:
+            B body;
+        };
+
+        //! the leaf for function_body specialized for Output of continue_msg
+        template <typename Input, typename B>
+        class function_body_leaf< Input, continue_msg, B> : public function_body< Input, continue_msg > {
+        public:
+            function_body_leaf( B _body ) : body(_body) { }
+            continue_msg operator()(Input i) { 
+                body(i); 
+                return continue_msg();
+            }
+
+        private:
+            B body;
+        };
+
+        //! the leaf for function_body specialized for Input of continue_msg
+        template <typename Output, typename B>
+        class function_body_leaf< continue_msg, Output, B > : public function_body< continue_msg, Output > {
+        public:
+            function_body_leaf( B _body ) : body(_body) { }
+            Output operator()(continue_msg i) { 
+                return body(i); 
+            }
+
+        private:
+            B body;
+        };
+
+        //! A task that calls a node's forward function
+        template< typename NodeType >
+        class forward_task : public task {
+
+            NodeType &my_node;
+
+        public:
+
+            forward_task( NodeType &n ) : my_node(n) {}
+
+            task *execute() {
+                my_node.forward();
+                return NULL;
+            }
+        };
+
+        //! A task that calls a node's apply_body function, passing in an input of type Input
+        template< typename NodeType, typename Input >
+        class apply_body_task : public task {
+
+            NodeType &my_node;
+            Input my_input;
+
+        public:
+
+            apply_body_task( NodeType &n, Input i ) : my_node(n), my_input(i) {}
+
+            task *execute() {
+                my_node.apply_body( my_input );
+                return NULL;
+            }
+        };
+
+        //! A task that calls a node's apply_body function with no input
+        template< typename NodeType >
+        class source_task : public task {
+
+            NodeType &my_node;
+
+        public:
+
+            source_task( NodeType &n ) : my_node(n) {}
+
+            task *execute() {
+                my_node.apply_body( );
+                return NULL;
+            }
+        };
+
+        //! An empty functor that takes an Input and returns a default constructed Output
+        template< typename Input, typename Output >
+        struct empty_body {
+           Output operator()( Input & ) const { return Output(); } 
+        };
+
+        //! A node_cache maintains a std::queue of elements of type T.  Each operation is protected by a lock. 
+        template< typename T, typename M=spin_mutex >
+        class node_cache {
+            public:
+
+            typedef size_t size_type;
+
+            bool empty() {
+                typename my_mutex_type::scoped_lock lock( my_mutex );
+                return internal_empty();
+            }
+
+            void add( T &n ) {
+                typename my_mutex_type::scoped_lock lock( my_mutex );
+                internal_push(n);
+            }
+
+            void remove( T &n ) {
+                typename my_mutex_type::scoped_lock lock( my_mutex );
+                for ( size_t i = internal_size(); i != 0; --i ) {
+                    T &s = internal_pop();
+                    if ( &s != &n ) {
+                        internal_push(s);
+                    }
+                }
+            }
+
+        protected:
+
+            typedef M my_mutex_type;
+            my_mutex_type my_mutex;
+            std::queue< T * > my_q;
+
+            // Assumes lock is held
+            inline bool internal_empty( )  {
+                return my_q.empty();
+            }
+
+            // Assumes lock is held
+            inline size_type internal_size( )  {
+                return my_q.size(); 
+            }
+
+            // Assumes lock is held
+            inline void internal_push( T &n )  {
+                my_q.push(&n);
+            }
+
+            // Assumes lock is held
+            inline T &internal_pop() {
+                T *v = my_q.front();
+                my_q.pop();
+                return *v;
+            }
+
+        };
+
+        //! A cache of predecessors that only supports try_get
+        template< typename T, typename M=spin_mutex >
+        class predecessor_cache : public node_cache< sender<T>, M > {
+            public:
+            typedef M my_mutex_type;
+            typedef T output_type; 
+            typedef sender<output_type> predecessor_type;
+            typedef receiver<output_type> successor_type;
+
+            predecessor_cache( ) : my_owner( NULL ) { }
+
+            void set_owner( successor_type *owner ) { my_owner = owner; }
+
+            bool get_item( output_type &v ) {
+
+                bool msg = false;
+
+                do {
+                    predecessor_type *src;
+                    {
+                        typename my_mutex_type::scoped_lock lock(this->my_mutex);
+                        if ( this->internal_empty() ) {
+                            break;
+                        }
+                        src = &this->internal_pop();
+                    }
+
+                    // Try to get from this sender
+                    msg = src->try_get( v );
+
+                    if (msg == false) {
+                        // Relinquish ownership of the edge
+                        if ( my_owner) 
+                            src->register_successor( *my_owner );
+                    } else {
+                        // Retain ownership of the edge
+                        this->add(*src);
+                    }
+                } while ( msg == false );
+                return msg;
+            }
+
+        protected:
+            successor_type *my_owner;
+        };
+
+        //! An cache of predecessors that supports requests and reservations
+        template< typename T, typename M=spin_mutex >
+        class reservable_predecessor_cache : public predecessor_cache< T, M > {
+        public:
+            typedef M my_mutex_type;
+            typedef T output_type; 
+            typedef sender<T> predecessor_type;
+            typedef receiver<T> successor_type;
+
+            reservable_predecessor_cache( ) : reserved_src(NULL) { }
+
+            bool 
+            try_reserve( output_type &v ) {
+                bool msg = false;
+
+                do {
+                    {
+                        typename my_mutex_type::scoped_lock lock(this->my_mutex);
+                        if ( reserved_src || this->internal_empty() ) 
+                            return false;
+
+                        reserved_src = &this->internal_pop();
+                    }
+
+                    // Try to get from this sender
+                    msg = reserved_src->try_reserve( v );
+
+                    if (msg == false) {
+                        typename my_mutex_type::scoped_lock lock(this->my_mutex);
+                        // Relinquish ownership of the edge
+                        reserved_src->register_successor( *this->my_owner );
+                        reserved_src = NULL;
+                    } else {
+                        // Retain ownership of the edge
+                        this->add( *reserved_src );
+                    }
+                } while ( msg == false );
+
+                return msg;
+            }
+
+            bool 
+            try_release( ) {
+                reserved_src->try_release( );
+                reserved_src = NULL;
+                return true;
+            }
+
+            bool 
+            try_consume( ) {
+                reserved_src->try_consume( );
+                reserved_src = NULL;
+                return true;
+            }
+
+        private:
+            predecessor_type *reserved_src;
+        };
+
+
+        //! An abstract cache of succesors
+        template<typename T, typename M=spin_rw_mutex >
+        class successor_cache : no_copy {
+        protected:
+
+            typedef M my_mutex_type;
+            my_mutex_type my_mutex;
+
+            typedef std::list< receiver<T> * > my_successors_type;
+            my_successors_type my_successors;
+
+            sender<T> *my_owner;
+
+        public:
+
+            successor_cache( ) : my_owner(NULL) {}
+
+            void set_owner( sender<T> *owner ) { my_owner = owner; }
+
+            virtual ~successor_cache() {}
+
+            void register_successor( receiver<T> &r ) {
+                typename my_mutex_type::scoped_lock l(my_mutex, true);
+                my_successors.push_back( &r ); 
+            }
+
+            void remove_successor( receiver<T> &r ) {
+                typename my_mutex_type::scoped_lock l(my_mutex, true);
+                for ( typename my_successors_type::iterator i = my_successors.begin();
+                      i != my_successors.end(); ++i ) { 
+                    if ( *i == & r ) { 
+                        my_successors.erase(i);
+                        break;
+                    }
+                }
+            }
+
+            bool empty() { 
+                typename my_mutex_type::scoped_lock l(my_mutex, false);
+                return my_successors.empty(); 
+            }
+
+            virtual bool try_put( T t ) = 0; 
+         };
+
+        //! An abstract cache of succesors, specialized to continue_msg
+        template<>
+        class successor_cache< continue_msg > : no_copy {
+        protected:
+
+            typedef spin_rw_mutex my_mutex_type;
+            my_mutex_type my_mutex;
+
+            typedef std::list< receiver<continue_msg> * > my_successors_type;
+            my_successors_type my_successors;
+
+            sender<continue_msg> *my_owner;
+
+        public:
+
+            successor_cache( ) : my_owner(NULL) {}
+
+            void set_owner( sender<continue_msg> *owner ) { my_owner = owner; }
+
+            virtual ~successor_cache() {}
+
+            void register_successor( receiver<continue_msg> &r ) {
+                my_mutex_type::scoped_lock l(my_mutex, true);
+                my_successors.push_back( &r ); 
+                if ( my_owner )
+                    r.register_predecessor( *my_owner );
+            }
+
+            void remove_successor( receiver<continue_msg> &r ) {
+                my_mutex_type::scoped_lock l(my_mutex, true);
+                for ( my_successors_type::iterator i = my_successors.begin();
+                      i != my_successors.end(); ++i ) { 
+                    if ( *i == & r ) { 
+                        if ( my_owner )
+                            r.remove_predecessor( *my_owner );
+                        my_successors.erase(i);
+                        break;
+                    }
+                }
+            }
+
+            bool empty() { 
+                my_mutex_type::scoped_lock l(my_mutex, false);
+                return my_successors.empty(); 
+            }
+
+            virtual bool try_put( continue_msg t ) = 0; 
+
+         };
+
+        //! A cache of successors that are broadcast to
+        template<typename T, typename M=spin_rw_mutex>
+        class broadcast_cache : public successor_cache<T, M> {
+            typedef M my_mutex_type;
+            typedef std::list< receiver<T> * > my_successors_type;
+
+        public:
+
+            broadcast_cache( ) {}
+
+            bool try_put( T t ) {
+                bool msg = false;
+                bool upgraded = false;
+                typename my_mutex_type::scoped_lock l(this->my_mutex, false);
+                typename my_successors_type::iterator i = this->my_successors.begin();
+                while ( i != this->my_successors.end() ) {
+                   if ( (*i)->try_put( t ) == true ) {
+                       ++i;
+                       msg = true;
+                   } else {
+                      if ( (*i)->register_predecessor(*this->my_owner) ) {
+                          if (!upgraded) {
+                              l.upgrade_to_writer();
+                              upgraded = true;
+                          }
+                          i = this->my_successors.erase(i);
+                      }
+                      else {
+                          ++i;
+                      }
+                   }
+                }
+                return msg;
+            }
+        };
+
+        //! A cache of successors that are put in a round-robin fashion
+        template<typename T, typename M=spin_rw_mutex >
+        class round_robin_cache : public successor_cache<T, M> {
+            typedef size_t size_type;
+            typedef M my_mutex_type;
+            typedef std::list< receiver<T> * > my_successors_type;
+
+        public:
+
+            round_robin_cache( ) {}
+
+            size_type size() {
+                typename my_mutex_type::scoped_lock l(this->my_mutex, false);
+                return this->my_successors.size();
+            }
+
+            bool try_put( T t ) {
+                bool upgraded = false;
+                typename my_mutex_type::scoped_lock l(this->my_mutex, false);
+                typename my_successors_type::iterator i = this->my_successors.begin();
+                while ( i != this->my_successors.end() ) {
+                   if ( (*i)->try_put( t ) ) {
+                       return true;
+                   } else {
+                      if ( (*i)->register_predecessor(*this->my_owner) ) {
+                          if (!upgraded) {
+                              l.upgrade_to_writer();
+                              upgraded = true;
+                          }
+                          i = this->my_successors.erase(i);
+                      }
+                      else {
+                          ++i;
+                      }
+                   }
+                }
+                return false;
+            }
+        };
+
+        template<typename T>
+        class decrementer : public continue_receiver, internal::no_copy {
+
+            T *my_node;
+
+            void execute() {
+                my_node->decrement_counter();
+            }
+
+        public:
+           
+            typedef continue_msg input_type;
+            typedef continue_msg output_type;
+            decrementer( int number_of_predecessors = 0 ) : continue_receiver( number_of_predecessors ) { }
+            void set_owner( T *node ) { my_node = node; }
+        };
+
+    }
+    //! @endcond INTERNAL
+
+
+    //! The graph class
+    /** This class serves as a handle to the graph */
+    class graph : internal::no_copy {
+
+        template< typename Body >
+        class run_task : public task {
+        public: 
+            run_task( Body& body ) : my_body(body) {}
+            task *execute() {
+                my_body();
+                return NULL;
+            }
+        private:
+            Body my_body;
+        };
+
+        template< typename Receiver, typename Body >
+        class run_and_put_task : public task {
+        public: 
+            run_and_put_task( Receiver &r, Body& body ) : my_receiver(r), my_body(body) {}
+            task *execute() {
+                my_receiver.try_put( my_body() );
+                return NULL;
+            }
+        private:
+            Receiver &my_receiver;
+            Body my_body;
+        };
+
+    public:
+
+        //! An enumeration the provides the two most common concurrency levels: unlimited and serial
+        enum concurrency { unlimited = 0, serial = 1 };
+
+        //! Constructs a graph withy no nodes.
+        graph() : my_root_task( new ( task::allocate_root( ) ) 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. */ 
+        ~graph() {
+            wait_for_all();
+            my_root_task->set_ref_count(0);
+            task::destroy( *my_root_task );
+        }
+
+
+        //! 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() { 
+            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() { 
+            if (my_root_task)
+                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 
+            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 ) ) 
+               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 
+            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 ) ) 
+               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.
+        /** 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);
+        }
+
+        //! Returns the root task of the graph
+        task * root_task() {
+            return my_root_task;
+        }
+
+    private:
+
+        task *my_root_task;
+
+    };
+
+
+    //! @cond INTERNAL
+    namespace internal {
+
+        //! Implements methods for a function node that takes a type T as input
+        template< typename Input, typename Output >
+        class function_input : public receiver<Input>, no_assign {
+            typedef sender<Input> predecessor_type;
+            enum op_stat {WAIT=0, SUCCEEDED, FAILED};
+            enum op_type {reg_pred, rem_pred, app_body, tryput, try_fwd};
+
+        public:
+            //! The input type of this receiver
+            typedef Input input_type;
+            //! The output type of this receiver
+            typedef Output output_type;
+
+            //! Constructor for function_input
+            template< typename Body >
+            function_input( graph &g, size_t max_concurrency, Body& body )
+                : my_root_task(g.root_task()), my_max_concurrency(max_concurrency), my_concurrency(internal::node_state_idle),
+                  my_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ),
+                forwarder_busy(false) {
+                my_predecessors.set_owner(this);
+                my_aggregator.initialize_handler(my_functor_t(this));
+            }
+
+            //! Destructor
+            virtual ~function_input() { delete my_body; }
+
+            //! Put to the node
+            virtual bool try_put( input_type t ) {
+               if ( my_max_concurrency == 0 ) {
+                   spawn_body_task( t );
+                   return true;
+               } else {
+                   my_operation op_data(t, tryput);
+                   my_aggregator.execute(&op_data);
+                   return op_data.status == SUCCEEDED;
+               }
+            }
+
+            //! Adds src to the list of cached predecessors.
+            /* override */ bool register_predecessor( predecessor_type &src ) {
+                my_operation op_data(reg_pred);
+                op_data.r = &src;
+                my_aggregator.execute(&op_data);
+                return true;
+            }
+
+            //! Removes src from the list of cached predecessors.
+            /* override */ bool remove_predecessor( predecessor_type &src ) {
+                my_operation op_data(rem_pred);
+                op_data.r = &src;
+                my_aggregator.execute(&op_data);
+                return true;
+            }
+
+        protected:
+            task *my_root_task;
+            const size_t my_max_concurrency;
+            size_t my_concurrency;
+            function_body<input_type, output_type> *my_body;
+            predecessor_cache<input_type, null_mutex > my_predecessors;
+
+            virtual broadcast_cache<output_type > &successors() = 0;
+
+        private:
+            friend class apply_body_task< function_input< input_type, output_type >, input_type >;
+            friend class forward_task< function_input< input_type, output_type > >;
+
+            class my_operation : public aggregated_operation< my_operation > {
+            public:
+                char type;
+                union {
+                    input_type *elem;
+                    predecessor_type *r;
+                };
+                my_operation(const input_type& e, op_type t) :
+                    type(char(t)), elem(const_cast<input_type*>(&e)) {}
+                my_operation(op_type t) : type(char(t)), r(NULL) {}
+            };
+
+            class my_functor_t {
+                function_input<input_type, output_type> *fi;
+             public:
+                my_functor_t() {}
+                my_functor_t(function_input<input_type, output_type> *fi_) : fi(fi_) {}
+                void operator()(my_operation* op_list) {
+                    fi->handle_operations(op_list);
+                }
+            };
+
+            bool forwarder_busy;
+            aggregator< my_functor_t, my_operation > my_aggregator;
+
+            void handle_operations(my_operation *op_list) {
+                my_operation *tmp;
+                while (op_list) {
+                    tmp = op_list;
+                    op_list = op_list->next;
+                    switch (tmp->type) {
+                    case reg_pred:
+                        my_predecessors.add(*(tmp->r));
+                        __TBB_store_with_release(tmp->status, SUCCEEDED);
+                        if (!forwarder_busy) {
+                            forwarder_busy = true;
+                            spawn_forward_task();
+                        }
+                        break;
+                    case rem_pred:
+                        my_predecessors.remove(*(tmp->r));
+                        __TBB_store_with_release(tmp->status, SUCCEEDED);
+                        break;
+                    case app_body:
+                        __TBB_ASSERT(my_max_concurrency != 0, NULL);
+                        --my_concurrency;
+                        __TBB_store_with_release(tmp->status, SUCCEEDED);
+                        if (my_concurrency<my_max_concurrency) {
+                            input_type i;
+                            if (my_predecessors.get_item(i)) {
+                                ++my_concurrency;
+                                spawn_body_task(i);
+                            }
+                        }
+                        break;
+                    case tryput: internal_try_put(tmp);  break;
+                    case try_fwd: internal_forward(tmp);  break;
+                    }
+                }
+            }
+
+
+            //! Put to the node
+            void internal_try_put(my_operation *op) {
+                __TBB_ASSERT(my_max_concurrency != 0, NULL);
+                if (my_concurrency < my_max_concurrency) {
+                   ++my_concurrency;
+                   spawn_body_task(*(op->elem));
+                   __TBB_store_with_release(op->status, SUCCEEDED);
+               } else {
+                   __TBB_store_with_release(op->status, FAILED);
+               }
+            }
+
+            //! Tries to spawn bodies if available and if concurrency allows
+            void internal_forward(my_operation *op) {
+                if (my_concurrency<my_max_concurrency || !my_max_concurrency) {
+                    input_type i;
+                    if (my_predecessors.get_item(i)) {
+                        ++my_concurrency;
+                        __TBB_store_with_release(op->status, SUCCEEDED);
+                        spawn_body_task(i);
+                        return;
+                    }
+                }
+                __TBB_store_with_release(op->status, FAILED);
+                forwarder_busy = false;
+            }
+
+            //! Applies the body to the provided input
+            void apply_body( input_type &i ) {
+                successors().try_put( (*my_body)(i) );
+                if ( my_max_concurrency != 0 ) {
+                    my_operation op_data(app_body);
+                    my_aggregator.execute(&op_data);
+                }
+            }
+
+           //! Spawns a task that calls apply_body( input )
+           inline void spawn_body_task( input_type &input ) {
+               task::enqueue(*new(task::allocate_additional_child_of(*my_root_task)) apply_body_task<function_input<input_type, output_type>, input_type >(*this, input));
+           }
+
+           //! This is executed by an enqueued task, the "forwarder"
+           void forward() {
+               my_operation op_data(try_fwd);
+               do {
+                   op_data.status = WAIT;
+                   my_aggregator.execute(&op_data);
+               } while (op_data.status == SUCCEEDED);
+           }
+
+           //! Spawns a task that calls forward()
+           inline void spawn_forward_task() {
+               task::enqueue(*new(task::allocate_additional_child_of(*my_root_task)) forward_task<function_input<input_type, output_type> >(*this));
+           }
+        };
+
+        //! Implements methods for an executable node that takes continue_msg as input
+        template< typename Output >
+        class continue_input : public continue_receiver {
+        public:
+
+            //! The input type of this receiver
+            typedef continue_msg input_type;
+    
+            //! The output type of this receiver
+            typedef Output output_type;
+
+            template< typename Body >
+            continue_input( graph &g, Body& body )
+                : my_root_task(g.root_task()), 
+                 my_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ) { }
+
+            template< typename Body >
+            continue_input( graph &g, int number_of_predecessors, Body& body )
+                : continue_receiver( number_of_predecessors ), my_root_task(g.root_task()), 
+                 my_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ) { }
+
+        protected:
+
+            task *my_root_task;
+            function_body<input_type, output_type> *my_body;
+
+            virtual broadcast_cache<output_type > &successors() = 0; 
+
+            friend class apply_body_task< continue_input< Output >, continue_msg >;
+
+            //! Applies the body to the provided input
+            /* override */ void apply_body( input_type ) {
+                successors().try_put( (*my_body)( continue_msg() ) );
+            }
+
+            //! Spawns a task that applies the body
+            /* override */ void execute( ) {
+                task::enqueue( * new ( task::allocate_additional_child_of( *my_root_task ) ) 
+                   apply_body_task< continue_input< Output >, continue_msg >( *this, continue_msg() ) ); 
+            }
+        };
+
+        //! Implements methods for both executable and function nodes that puts Output to its successors
+        template< typename Output >
+        class function_output : public sender<Output> {
+        public:
+
+            typedef Output output_type;
+
+            function_output() { }
+
+            //! Adds a new successor to this node
+            /* override */ bool register_successor( receiver<output_type> &r ) {
+                successors().register_successor( r );
+                return true;
+            }
+
+            //! Removes a successor from this node
+            /* override */ bool remove_successor( receiver<output_type> &r ) {
+                successors().remove_successor( r );
+                return true;
+            }
+  
+        protected:
+
+            virtual broadcast_cache<output_type > &successors() = 0; 
+
+        };
+
+    }
+    //! @endcond INTERNAL
+
+    //! 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 > {
+    public:
+
+        //! The type of the output message, which is complete
+        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_state( is_active ? internal::node_state_idle : internal::node_state_inactive ),
+              my_body( new internal::source_body_leaf< output_type, Body>(body) ),
+              my_reserved(false), my_has_cached_item(false) { 
+            my_successors.set_owner(this);
+        }
+
+        //! 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);
+            my_successors.register_successor(r);
+            if ( my_state != internal::node_state_inactive )
+                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 )  
+                return false;
+
+            if ( my_has_cached_item ) {
+                v = my_cached_item;
+                my_has_cached_item = false;
+            } else if ( (*my_body)(v) == false ) {
+                return false;
+            }
+            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) )  
+                my_has_cached_item = true;
+
+            if ( my_has_cached_item ) {
+                v = my_cached_item;
+                my_reserved = true;
+                return true;
+            } else {
+                return false;
+            }
+        }
+
+        //! 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();
+            return true;
+        }
+
+        //! Consumes a reserved item
+        /* override */ bool try_consume( ) {
+            spin_mutex::scoped_lock lock(my_mutex);
+            __TBB_ASSERT( my_reserved && my_has_cached_item, "consuming non-existent reservation" );
+            my_reserved = false;
+            my_has_cached_item = false;
+            if ( !my_successors.empty() ) {
+                spawn_put();
+            }
+            return true;
+        }
+
+        //! Activates a node that was created in the inactive state
+        void activate() {
+            spin_mutex::scoped_lock lock(my_mutex);
+            my_state = internal::node_state_idle;
+            if ( !my_successors.empty() )
+                spawn_put();
+        }
+
+    private:
+
+        task *my_root_task;
+        spin_mutex my_mutex;
+        internal::node_state my_state;
+        internal::source_body<output_type> *my_body;
+        internal::broadcast_cache< output_type > my_successors;
+        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 ) ) 
+                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 ) ); 
+        }
+
+    };
+
+    //! Implements a function node that supports Input -> Output
+    template <typename Input, typename Output = continue_msg >
+    class function_node : public graph_node, public internal::function_input<Input,Output>, public internal::function_output<Output> {
+    public:
+
+        typedef Input input_type;
+        typedef Output output_type;
+        typedef sender< input_type > predecessor_type;
+        typedef receiver< output_type > successor_type;
+
+        //! Constructor
+        template< typename Body >
+        function_node( graph &g, size_t concurrency, Body body )
+        : internal::function_input<input_type,output_type>( g, concurrency, body ) {
+            my_successors.set_owner(this);
+        }
+
+    protected:
+
+        internal::broadcast_cache<output_type> my_successors; 
+        /* override */ internal::broadcast_cache<output_type> &successors () { return my_successors; }
+
+    };
+
+    //! Implements an executable node that supports continue_msg -> Output
+    template <typename Output>
+    class executable_node : public graph_node, public internal::continue_input<Output>, public internal::function_output<Output> {
+    public:
+
+        typedef continue_msg input_type;
+        typedef Output output_type;
+        typedef sender< input_type > predecessor_type;
+        typedef receiver< output_type > successor_type;
+
+         //! Constructor for executable node with continue_msg -> Output
+         template <typename Body >
+         executable_node( graph &g, Body body )
+                 : internal::continue_input<output_type>( g, body ) {
+             my_successors.set_owner(this);
+         }
+
+         //! Constructor for executable node with continue_msg -> Output
+         template <typename Body >
+         executable_node( graph &g, int number_of_predecessors, Body body )
+                 : internal::continue_input<output_type>( g, number_of_predecessors, body ) {
+             my_successors.set_owner(this);
+         }
+
+    protected:
+
+        internal::broadcast_cache<output_type> my_successors; 
+        /* override */ internal::broadcast_cache<output_type> &successors () { return my_successors; }
+
+    };
+
+
+
+    template< typename T >
+    class overwrite_node : public graph_node, public receiver<T>, public sender<T>, internal::no_copy {
+    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) {
+            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 ) {
+                // We have a valid value that must be forwarded immediately.
+                if ( s.try_put( my_buffer ) || !s.register_predecessor( *this  ) ) {
+                    // We add the successor: it accepted our put or it rejected it but won't let use become a predecessor
+                    my_successors.register_successor( s );
+                    return true;
+                } else {
+                    // We don't add the successor: it rejected our put and we became its predecessor instead
+                    return false;
+                }
+            } else {
+                // No valid value yet, just add as successor
+                my_successors.register_successor( s );
+                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( T v ) {
+            spin_mutex::scoped_lock l( my_mutex );
+            my_buffer = v;
+            my_buffer_is_valid = true;
+            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 ) {
+                v = my_buffer;
+                return true;
+            } else {
+                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;
+
+        /* override */ bool try_put( T v ) {
+            spin_mutex::scoped_lock l( this->my_mutex );
+            if ( this->my_buffer_is_valid ) {
+                return false;
+            } else {
+                this->my_buffer = v;
+                this->my_buffer_is_valid = true;
+                this->my_successors.try_put(v);
+                return true;
+            }
+        }
+    };
+
+    //! Broadcasts completion message when it receives completion messages from all predecessors. Then resets.
+    /** Is equivalent to an executable_node< continue_msg > with an empty_body */
+    class continue_node : public executable_node< continue_msg > { 
+    public:
+
+        typedef continue_msg input_type;
+        typedef continue_msg output_type;
+        typedef sender< input_type > predecessor_type;
+        typedef receiver< output_type > successor_type;
+
+        continue_node( graph &g ) : executable_node<continue_msg>( g, internal::empty_body< continue_msg, continue_msg>() ) {}
+    };
+
+    //! Forwards messages of type T to all successors
+    template <typename T>
+    class broadcast_node : public graph_node, public receiver<T>, public sender<T>, internal::no_copy {
+
+        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( ) {
+           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( T t ) {
+            my_successors.try_put(t);
+            return true;
+        }
+
+    };
+
+
+    //! Forwards messages in arbitrary order
+    template <typename T>
+    class buffer_node : public graph_node, public receiver<T>, public sender<T>, internal::no_copy {
+    public:
+        typedef T input_type;
+        typedef T output_type;
+        typedef sender< input_type > predecessor_type;
+        typedef receiver< output_type > successor_type;
+    protected:
+        typedef size_t size_type;
+        typedef std::pair< T, bool > item_type;
+
+        internal::round_robin_cache< T, null_rw_mutex > my_successors;
+
+        task *my_parent;
+        item_type *my_array;
+        size_type my_array_size;
+        static const size_type initial_buffer_size = 4;
+        size_type my_head;
+        size_type my_tail;
+        spin_mutex my_mutex;
+        bool my_reserved;
+        size_type my_reserved_id;
+
+        friend class internal::forward_task< buffer_node< T > >;
+
+        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:
+            char type;
+            T *elem;
+            successor_type *r;
+            buffer_operation(const T& e, op_type t) :
+                type(char(t)), elem(const_cast<T*>(&e)), r(NULL) {}
+            buffer_operation(op_type t) : type(char(t)), r(NULL) {}
+        };
+
+        class my_functor_t {
+            buffer_node<T> *bfr;
+        public:
+            my_functor_t(buffer_node<T> *bfr_) : bfr(bfr_) {}
+            my_functor_t() {}
+            void operator()(buffer_operation* op_list) {
+                bfr->handle_operations(op_list);
+            }
+        };
+
+        bool forwarder_busy;
+        internal::aggregator< my_functor_t, buffer_operation> my_aggregator;
+
+        virtual void handle_operations(buffer_operation *op_list) {
+            buffer_operation *tmp;
+            bool try_forwarding=false;
+            while (op_list) {
+                tmp = op_list;
+                op_list = op_list->next;
+                switch (tmp->type) {
+                case reg_succ: internal_reg_succ(tmp);  try_forwarding = true; break;
+                case rem_succ: internal_rem_succ(tmp); break;
+                case req_item: internal_pop(tmp); break;
+                case res_item: internal_reserve(tmp); break;
+                case rel_res:  internal_release(tmp);  try_forwarding = true; break;
+                case con_res:  internal_consume(tmp);  try_forwarding = true; break;
+                case put_item: internal_push(tmp);  try_forwarding = true; break;
+                case try_fwd:  internal_forward(tmp); break;
+                }
+            }
+            if (try_forwarding && !forwarder_busy) {
+                forwarder_busy = true;
+                task::enqueue(*new(task::allocate_additional_child_of(*my_parent)) internal::forward_task< buffer_node<input_type> >(*this));
+            }
+        }
+
+        //! This is executed by an enqueued task, the "forwarder"
+        virtual void forward() {
+            buffer_operation op_data(try_fwd);
+            do {
+                op_data.status = WAIT;
+                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;
+            bool success = false; // flagged when a successor accepts
+            size_type counter = my_successors.size();
+            // Try forwarding, giving each successor a chance
+            while (counter>0 && my_tail>my_head && my_array[ (my_tail-1) & (my_array_size-1)].second == true ) {
+                i_copy = my_array[ (my_tail-1) & (my_array_size-1)].first;
+                bool msg = my_successors.try_put(i_copy);
+                if ( msg == true ) {
+                    my_array[ (my_tail-1) & (my_array_size-1)].second = false;
+                    --my_tail;
+                    success = true; // found an accepting successor
+                }
+                --counter;
+            }
+            if (success && !counter)
+                __TBB_store_with_release(op->status, SUCCEEDED);
+            else {
+                __TBB_store_with_release(op->status, FAILED);
+                forwarder_busy = false;
+            }
+        }
+
+        virtual void internal_push(buffer_operation *op) {
+            while( my_tail-my_head >= my_array_size ) {
+                grow_my_array( my_tail - my_head + 1 );
+            }
+            my_array[my_tail&(my_array_size-1)] = std::make_pair( *(op->elem), true );
+            ++my_tail;
+            __TBB_store_with_release(op->status, SUCCEEDED);
+        }
+        virtual void internal_pop(buffer_operation *op) {
+            if ( my_array[(my_tail-1) & (my_array_size-1)].second == false ) {
+                __TBB_store_with_release(op->status, FAILED);
+            }
+            else {
+                *(op->elem) = my_array[(my_tail-1) & (my_array_size-1)].first;
+                my_array[(my_tail-1) & (my_array_size-1)].second = false;
+                --my_tail;
+                __TBB_store_with_release(op->status, SUCCEEDED);
+            }
+        }
+        virtual void internal_reserve(buffer_operation *op) {
+            if (my_reserved == true || my_array[ my_head & (my_array_size-1)].second == false ) {
+                __TBB_store_with_release(op->status, FAILED);
+            }
+            else {
+                my_reserved = true;
+                *(op->elem) = my_array[ my_head & (my_array_size-1)].first;
+                my_array[ my_head & (my_array_size-1)].second = false;
+                __TBB_store_with_release(op->status, SUCCEEDED);
+            }
+        }
+        virtual void internal_consume(buffer_operation *op) {
+            my_reserved = false;
+            ++my_head;
+            __TBB_store_with_release(op->status, SUCCEEDED);
+        }
+
+        virtual void internal_release(buffer_operation *op) {
+            my_array[my_head&(my_array_size-1)].second = true;
+            my_reserved = false;
+            __TBB_store_with_release(op->status, SUCCEEDED);
+        }
+
+        //! Grows the internal array
+        void grow_my_array( size_t minimum_size ) {
+            size_type old_size = my_array_size;
+            size_type new_size = old_size ? 2*old_size : initial_buffer_size;
+            while( new_size<minimum_size )
+                new_size*=2;
+
+            item_type* new_array = cache_aligned_allocator<item_type>().allocate(new_size);
+            item_type* old_array = my_array;
+
+            for( size_type i=0; i<new_size; ++i )
+                new_array[i].second = false;
+
+            size_t t=my_head;
+            for( size_type i=0; i<old_size; ++i, ++t )
+                new_array[t&(new_size-1)] = old_array[t&(old_size-1)];
+            my_array = new_array;
+            my_array_size = new_size;
+            if( old_array )
+                cache_aligned_allocator<item_type>().deallocate(old_array,old_size);
+        }
+
+    public:
+        //! Constructor
+        buffer_node( graph &g ) :
+            my_parent( g.root_task() ), my_array(NULL), my_array_size(0),
+            my_head(0), my_tail(0), my_reserved(false), forwarder_busy(false) {
+            my_successors.set_owner(this);
+            my_aggregator.initialize_handler(my_functor_t(this));
+            grow_my_array(initial_buffer_size);
+        }
+
+        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 ) {
+            buffer_operation op_data(reg_succ);
+            op_data.r = &r;
+            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. */
+        /* override */ bool remove_successor( receiver<output_type> &r ) {
+            r.remove_predecessor(*this);
+            buffer_operation op_data(rem_succ);
+            op_data.r = &r;
+            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 */
+        /* override */ bool try_get( T &v ) {
+            buffer_operation op_data(req_item);
+            op_data.elem = &v;
+            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 */
+        /* override */ bool try_reserve( T &v ) {
+            buffer_operation op_data(res_item);
+            op_data.elem = &v;
+            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() {
+            buffer_operation op_data(rel_res);
+            my_aggregator.execute(&op_data);
+            return true;
+        }
+
+        //! Consumes a reserved item.
+        /** true = item is removed from sender and reservation removed */
+        /* override */ bool try_consume() {
+            buffer_operation op_data(con_res);
+            my_aggregator.execute(&op_data);
+            return true;
+        }
+
+        //! Receive an item
+        /** true is always returned */
+        /* override */ bool try_put(T t) {
+            buffer_operation op_data(t, put_item);
+            my_aggregator.execute(&op_data);
+            return true;
+        }
+    };
+
+
+    //! Forwards messages in FIFO order
+    template <typename T>
+    class queue_node : public buffer_node<T> {
+    protected:
+        typedef typename buffer_node<T>::size_type size_type;
+        typedef typename buffer_node<T>::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->my_array[ this->my_head & (this->my_array_size-1)].second == false) {
+                __TBB_store_with_release(op->status, FAILED);
+                this->forwarder_busy = false;
+                return;
+            }
+            // Keep trying to send items while there is at least one accepting successor
+            while (counter>0 && this->my_array[ this->my_head & (this->my_array_size-1)].second == true ) {
+                i_copy = this->my_array[ this->my_head & (this->my_array_size-1)].first;
+                bool msg = this->my_successors.try_put(i_copy);
+                if ( msg == true ) {
+                     this->my_array[ this->my_head & (this->my_array_size-1)].second = false;
+                     ++(this->my_head);
+                    success = true; // found an accepting successor
+                }
+                --counter;
+            }
+            if (success && !counter)
+                __TBB_store_with_release(op->status, SUCCEEDED);
+            else {
+                __TBB_store_with_release(op->status, FAILED);
+                this->forwarder_busy = false;
+            }
+        }
+
+        /* override */ void internal_pop(queue_operation *op) {
+            if ( this->my_reserved == true || this->my_array[ this->my_head & (this->my_array_size-1)].second == false ) {
+                __TBB_store_with_release(op->status, FAILED);
+            }
+            else {
+                *(op->elem) = this->my_array[ this->my_head & (this->my_array_size-1)].first;
+                this->my_array[ this->my_head & (this->my_array_size-1)].second = false;
+                ++(this->my_head);
+                __TBB_store_with_release(op->status, SUCCEEDED);
+            }
+        }
+        /* override */ void internal_reserve(queue_operation *op) {
+            if (this->my_reserved == true || this->my_array[ this->my_head & (this->my_array_size-1)].second == false ) {
+                __TBB_store_with_release(op->status, FAILED);
+            }
+            else {
+                this->my_reserved = true;
+                *(op->elem) = this->my_array[ this->my_head & (this->my_array_size-1)].first;
+                __TBB_store_with_release(op->status, SUCCEEDED);
+            }
+        }
+        /* override */ void internal_consume(queue_operation *op) {
+            this->my_reserved = false;
+            this->my_array[ this->my_head & (this->my_array_size-1)].second = false;
+            ++(this->my_head);
+            __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>(g) {}
+    };
+
+    //! Forwards messages in sequence order
+    template< typename T >
+    class sequencer_node : public queue_node<T> {
+        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>(g),
+            my_sequencer(new internal::function_body_leaf< T, size_t, Sequencer>(s) ) {}
+
+        //! Destructor
+        ~sequencer_node() { delete my_sequencer; }
+    protected:
+        typedef typename buffer_node<T>::size_type size_type;
+        typedef typename buffer_node<T>::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;
+            while ( this->my_tail - this->my_head >= this->my_array_size ) {
+                this->grow_my_array( this->my_tail - this->my_head  + 1);
+            }
+            this->my_array[tag&(this->my_array_size-1)] = 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> >
+    class priority_queue_node : public buffer_node<T> {
+    public:
+        typedef T input_type;
+        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>(g), mark(0) {}
+
+    protected:
+        typedef typename buffer_node<T>::size_type size_type;
+        typedef typename buffer_node<T>::item_type item_type;
+        typedef typename buffer_node<T>::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;
+            while (op_list) {
+                tmp = op_list;
+                op_list = op_list->next;
+                switch (tmp->type) {
+                case buffer_node<T>::reg_succ: this->internal_reg_succ(tmp); try_forwarding = true; break;
+                case buffer_node<T>::rem_succ: this->internal_rem_succ(tmp); break;
+                case buffer_node<T>::put_item: internal_push(tmp); try_forwarding = true; break;
+                case buffer_node<T>::try_fwd: internal_forward(tmp); break;
+                case buffer_node<T>::rel_res: internal_release(tmp); try_forwarding = true; break;
+                case buffer_node<T>::con_res: internal_consume(tmp); try_forwarding = true; break;
+                case buffer_node<T>::req_item: internal_pop(tmp); break;
+                case buffer_node<T>::res_item: internal_reserve(tmp); break;
+                }
+            }
+            // process pops!  for now, no special pop processing
+            if (mark<this->my_tail) heapify();
+            if (try_forwarding && !this->forwarder_busy) {
+                this->forwarder_busy = true;
+                task::enqueue(*new(task::allocate_additional_child_of(*(this->my_parent))) internal::forward_task< buffer_node<input_type> >(*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;
+                return;
+            }
+            // Keep trying to send while there exists an accepting successor
+            while (counter>0 && this->my_tail > 0) {
+                i_copy = this->my_array[0].first;
+                bool msg = this->my_successors.try_put(i_copy);
+                if ( msg == true ) {
+                     if (mark == this->my_tail) --mark;
+                    --(this->my_tail);
+                    this->my_array[0].first=this->my_array[this->my_tail].first;
+                    if (this->my_tail > 1) // don't reheap for heap of size 1
+                        reheap();
+                    success = true; // found an accepting successor
+                }
+                --counter;
+            }
+            if (success && !counter)
+                __TBB_store_with_release(op->status, SUCCEEDED);
+            else {
+                __TBB_store_with_release(op->status, FAILED);
+                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 );
+            this->my_array[this->my_tail] = std::make_pair( *(op->elem), true );
+            ++(this->my_tail);
+            __TBB_store_with_release(op->status, SUCCEEDED);
+        }
+        /* override */ void internal_pop(prio_operation *op) {
+            if ( this->my_reserved == true || this->my_tail == 0 ) {
+                __TBB_store_with_release(op->status, FAILED);
+            }
+            else {
+                if (mark<this->my_tail &&
+                    compare(this->my_array[0].first,
+                            this->my_array[this->my_tail-1].first)) {
+                    // there are newly pushed elems; last one higher than top
+                    // copy the data
+                    *(op->elem) = this->my_array[this->my_tail-1].first;
+                    --(this->my_tail);
+                    __TBB_store_with_release(op->status, SUCCEEDED);
+                }
+                else { // extract and push the last element down heap
+                    *(op->elem) = this->my_array[0].first; // copy the data
+                    if (mark == this->my_tail) --mark;
+                    --(this->my_tail);
+                    __TBB_store_with_release(op->status, SUCCEEDED);
+                    this->my_array[0].first=this->my_array[this->my_tail].first;
+                    if (this->my_tail > 1) // don't reheap for heap of size 1
+                        reheap();
+                }
+            }
+        }
+        /* override */ void internal_reserve(prio_operation *op) {
+            if (this->my_reserved == true || this->my_tail == 0) {
+                __TBB_store_with_release(op->status, FAILED);
+            }
+            else {
+                this->my_reserved = true;
+                *(op->elem) = reserved_item = this->my_array[0].first;
+                if (mark == this->my_tail) --mark;
+                --(this->my_tail);
+                __TBB_store_with_release(op->status, SUCCEEDED);
+                this->my_array[0].first = this->my_array[this->my_tail].first;
+                if (this->my_tail > 1) // don't reheap for heap of size 1
+                    reheap();
+            }
+        }
+        /* override */ void internal_consume(prio_operation *op) {
+            this->my_reserved = false;
+            __TBB_store_with_release(op->status, SUCCEEDED);
+        }
+        /* override */ void internal_release(prio_operation *op) {
+            if (this->my_tail >= this->my_array_size)
+                this->grow_my_array( this->my_tail + 1 );
+            this->my_array[this->my_tail] = std::make_pair(reserved_item, true);
+            ++(this->my_tail);
+            this->my_reserved = false;
+            __TBB_store_with_release(op->status, SUCCEEDED);
+            heapify();
+        }
+    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
+                size_type cur_pos = mark;
+                input_type to_place = this->my_array[mark].first;
+                do { // push to_place up the heap
+                    size_type parent = (cur_pos-1)>>1;
+                    if (!compare(this->my_array[parent].first, to_place))
+                        break;
+                    this->my_array[cur_pos].first = this->my_array[parent].first;
+                    cur_pos = parent;
+                } while( cur_pos );
+                this->my_array[cur_pos].first = to_place;
+            }
+        }
+
+        void reheap() {
+            size_type cur_pos=0, child=1;
+            while (child < mark) {
+                size_type target = child;
+                if (child+1<mark &&
+                    compare(this->my_array[child].first,
+                            this->my_array[child+1].first))
+                    ++target;
+                // target now has the higher priority child
+                if (compare(this->my_array[target].first,
+                            this->my_array[this->my_tail].first))
+                    break;
+                this->my_array[cur_pos].first = this->my_array[target].first;
+                cur_pos = target;
+                child = (cur_pos<<1)+1;
+            }
+            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 >, internal::no_copy {
+    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;
+        internal::predecessor_cache< T > my_predecessors;
+        spin_mutex my_mutex;
+        internal::broadcast_cache< T > my_successors;
+
+        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 
+                 || 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 ) ) 
+                                internal::forward_task< limiter_node<T> >( *this ) );
+            }
+        }
+
+        void forward() {
+            {
+                spin_mutex::scoped_lock lock(my_mutex);
+                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 number_of_decrement_predecessors = 0 ) : 
+           my_root_task(g.root_task()), my_threshold(threshold), my_count(0), decrement(number_of_decrement_predecessors) {
+            my_predecessors.set_owner(this);
+            my_successors.set_owner(this);
+            decrement.set_owner(this);
+        }
+
+        //! Replace the current successor with this new successor
+        /* override */ bool register_successor( receiver<output_type> &r ) {
+            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 ) {
+            r.remove_predecessor(*this);
+            my_successors.remove_successor(r);
+            return true;
+        }
+
+        //! Puts an item to this receiver
+        /* override */ bool try_put( T t ) {
+            {
+                spin_mutex::scoped_lock lock(my_mutex);
+                if ( my_count >= my_threshold ) 
+                    return false;
+                else
+                    ++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 ) ) 
+                                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 ) ) 
+                               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;
+        }
+
+    };
+
+    namespace internal {
+
+    struct forwarding_base {
+        virtual ~forwarding_base() {}
+        virtual void decrement_port_count() = 0;
+        virtual void increment_port_count() = 0;
+    };
+
+    template< int N >
+    struct join_helper {
+
+        template< typename TupleType, typename PortType >
+        static inline void set_join_node_pointer(TupleType &my_input, PortType *port) {
+            std::get<N-1>( my_input ).set_join_node_pointer(port);
+            join_helper<N-1>::set_join_node_pointer( my_input, port );
+        }
+        template< typename TupleType >
+        static inline void consume_reservations( TupleType &my_input ) {
+            std::get<N-1>( my_input ).consume();
+            join_helper<N-1>::consume_reservations( my_input );
+        }
+
+        template< typename TupleType >
+        static inline void release_my_reservation( TupleType &my_input ) {
+            std::get<N-1>( my_input ).release();
+        }
+
+        template <typename TupleType>
+        static inline void release_reservations( TupleType &my_input) {
+            join_helper<N-1>::release_reservations(my_input);
+            release_my_reservation(my_input);
+        }
+
+        template< typename InputTuple, typename OutputTuple >
+        static inline bool reserve( InputTuple &my_input, OutputTuple &out) {
+            if ( !std::get<N-1>( my_input ).reserve( std::get<N-1>( out ) ) ) return false;
+            if ( !join_helper<N-1>::reserve( my_input, out ) ) {
+                release_my_reservation( my_input );
+                return false;
+            }
+            return true;
+        }
+    };
+
+    template< >
+    struct join_helper<1> {
+
+        template< typename TupleType, typename PortType >
+        static inline void set_join_node_pointer(TupleType &my_input, PortType *port) {
+            std::get<0>( my_input ).set_join_node_pointer(port);
+        }
+
+        template< typename TupleType >
+        static inline void consume_reservations( TupleType &my_input ) {
+            std::get<0>( my_input ).consume();
+        }
+
+        template< typename TupleType >
+        static inline void release_my_reservation( TupleType &my_input ) {
+            std::get<0>( my_input ).release();
+        }
+        
+        template<typename TupleType>
+        static inline void release_reservations( TupleType &my_input) {
+            release_my_reservation(my_input);
+        }
+
+        template< typename InputTuple, typename OutputTuple >
+        static inline bool reserve( InputTuple &my_input, OutputTuple &out) {
+            return std::get<0>( my_input ).reserve( std::get<0>( out ) );
+        }
+    };
+
+    namespace join_policy_namespace {
+        enum join_policy { two_phase
+        };
+    }
+    using namespace join_policy_namespace;
+
+    //! The two-phase join port
+    template< typename T >
+    class two_phase_port : public receiver<T> {
+    public:
+        typedef T input_type;
+        typedef sender<T> predecessor_type;
+
+        //! Constructor
+        two_phase_port() : reserved(false) {
+           my_join = NULL;
+           my_predecessors.set_owner( this );
+        }
+
+        // copy constructor
+        two_phase_port(const two_phase_port& /* other */) : receiver<T>() {
+            reserved = false;
+            my_join = NULL;
+            my_predecessors.set_owner( this );
+        }
+
+        void set_join_node_pointer(forwarding_base *join) {
+            my_join = join;
+        }
+
+        bool try_put( T ) {
+            return false;
+        }
+
+        //! Add a predecessor
+        bool register_predecessor( sender<T> &src ) {
+            spin_mutex::scoped_lock l(my_mutex);
+            bool no_predecessors = my_predecessors.empty();
+            my_predecessors.add(src);
+            if ( no_predecessors ) {
+                my_join->decrement_port_count( );
+            }
+            return true;
+        }
+
+        //! Remove a predecessor
+        bool remove_predecessor( sender<T> &src ) {
+            spin_mutex::scoped_lock l(my_mutex);
+            my_predecessors.remove( src );
+            if(my_predecessors.empty()) my_join->increment_port_count();
+            return true;
+        }
+
+        //! Reserve an item from the port
+        bool reserve( T &v ) {
+            spin_mutex::scoped_lock l(my_mutex);
+            if ( reserved ) {
+                return false;
+            }
+            if ( my_predecessors.try_reserve( v ) ) {
+                reserved = true;
+                return true;
+            } else if ( my_predecessors.empty() ) {
+                my_join->increment_port_count();
+            }
+            return false;
+        }
+
+        //! Release the port
+        void release( ) {
+            spin_mutex::scoped_lock l(my_mutex);
+            reserved = false;
+            my_predecessors.try_release( );
+        }
+
+        //! Complete use of the port
+        void consume( ) {
+            spin_mutex::scoped_lock l(my_mutex);
+            reserved = false;
+            my_predecessors.try_consume( );
+        }
+
+    private:
+        spin_mutex my_mutex;
+        forwarding_base *my_join;
+        reservable_predecessor_cache< T > my_predecessors;
+        bool reserved;
+    };
+
+    template<join_policy JP, typename InputTuple, typename OutputTuple>
+    class join_node_base;
+
+    //! join_node_FE : implements input port policy
+    template<join_policy JP, typename InputTuple, typename OutputTuple>
+    class join_node_FE;
+
+    template<typename InputTuple, typename OutputTuple>
+    class join_node_FE<two_phase, InputTuple, OutputTuple> : public forwarding_base {
+    public:
+        static const int N = std::tuple_size<OutputTuple>::value;
+        typedef OutputTuple output_type;
+        typedef InputTuple input_type;
+        typedef join_node_base<two_phase, InputTuple, OutputTuple> my_node_type; // for forwarding
+
+        join_node_FE(graph &g) : my_root_task(g.root_task()), my_node(NULL) {
+            ports_with_no_inputs = N;
+            join_helper<N>::set_join_node_pointer(my_inputs, this);
+        }
+
+        void set_my_node(my_node_type *new_my_node) { my_node = new_my_node; }
+
+       void increment_port_count() {
+            ++ports_with_no_inputs;
+        }
+
+        // if all input_ports have predecessors, spawn forward to try and consume tuples
+        void decrement_port_count() {
+            if(ports_with_no_inputs.fetch_and_decrement() == 1) {
+                task::enqueue( * new ( task::allocate_additional_child_of( *my_root_task ) )
+                    forward_task<my_node_type>(*my_node) );
+            }
+        }
+
+        input_type &inputs() { return my_inputs; }
+    protected:
+        // all methods on input ports should be called under spin lock from join_node_base.
+
+        bool tuple_build_may_succeed() {
+            return !ports_with_no_inputs;
+        }
+
+        bool try_to_make_tuple(output_type &out) {
+            if(ports_with_no_inputs) return false;
+            return join_helper<N>::reserve(my_inputs, out);
+        }
+
+        void tuple_accepted() {
+            join_helper<N>::consume_reservations(my_inputs);
+        }
+        void tuple_rejected() {
+            join_helper<N>::release_reservations(my_inputs);
+        }
+
+        input_type my_inputs;
+        task *my_root_task;
+        my_node_type *my_node;
+        atomic<size_t> ports_with_no_inputs;
+    };
+
+    //! join_node_base
+    template<join_policy JP, typename InputTuple, typename OutputTuple>
+    class join_node_base : public graph_node, public join_node_FE<JP, InputTuple, OutputTuple>,
+                           public sender<OutputTuple>, no_copy {
+    public:
+        typedef OutputTuple output_type;
+
+        typedef receiver<output_type> successor_type;
+        typedef join_node_FE<JP, InputTuple, OutputTuple> input_ports_type;
+        using input_ports_type::tuple_build_may_succeed;
+        using input_ports_type::try_to_make_tuple;
+        using input_ports_type::tuple_accepted;
+        using input_ports_type::tuple_rejected;
+
+        join_node_base(graph &g) : input_ports_type(g),  my_root_task(g.root_task()) {
+            my_successors.set_owner(this);
+            input_ports_type::set_my_node(this);
+        }
+
+        bool register_successor(successor_type &r) {
+            spin_mutex::scoped_lock l(my_mutex);
+            my_successors.register_successor(r);
+            if(tuple_build_may_succeed()) {
+                task::enqueue( * new ( task::allocate_additional_child_of( *my_root_task) )
+                        forward_task<join_node_base<JP,InputTuple,OutputTuple> >( *this ) );
+            }
+            return true;
+        }
+
+        template<size_t N>
+        receiver<typename std::tuple_element<N, OutputTuple>::value> & input_port(void) { return std::get<N>(input_ports_type::inputs()); }
+
+        bool remove_successor( successor_type &r) {
+            spin_mutex::scoped_lock l(my_mutex);
+            my_successors.remove_successor(r);
+            return true;
+        }
+
+        bool try_get( output_type &v) {
+            spin_mutex::scoped_lock l(my_mutex);
+            if(tuple_build_may_succeed()) {
+                if(try_to_make_tuple(v)) {
+                    // successor requested, so acceptance guaranteed
+                    tuple_accepted();
+                    return true;
+                }
+            }
+            return false;
+        }
+
+    private:
+        task *my_root_task;
+        broadcast_cache<output_type, null_rw_mutex> my_successors;
+        spin_mutex my_mutex;
+
+        friend class forward_task< join_node_base<JP, InputTuple, OutputTuple> >;
+
+        void forward() {
+            spin_mutex::scoped_lock l(my_mutex);
+            output_type out;
+            if(!tuple_build_may_succeed()) return;
+            while(try_to_make_tuple(out)) {
+                if(my_successors.try_put(out)) {
+                    tuple_accepted();
+                }
+                else {
+                    tuple_rejected();
+                    return;
+                }
+            }
+        }
+    };
+
+    //! unfolded_join_node : passes input_port_tuple to join_node_base.  We build the input port type
+    //  using tuple_element.
+    template<int N, typename OutputTuple, join_policy JP>
+    class unfolded_join_node;
+
+    template<typename OutputTuple>
+    class unfolded_join_node<2,OutputTuple,two_phase> : public internal::join_node_base<two_phase,
+        std::tuple<
+                two_phase_port<typename std::tuple_element<0,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<1,OutputTuple>::type> >,
+        OutputTuple
+                  >
+                  {
+    private:
+        typedef typename std::tuple<
+                two_phase_port<typename std::tuple_element<0,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<1,OutputTuple>::type> > port_tuple_type;
+    public:
+        typedef OutputTuple output_type;
+    private:
+        typedef join_node_base<two_phase, port_tuple_type, output_type > base_type;
+    public:
+        unfolded_join_node(graph &g) : base_type(g) {}
+    };
+
+    template<typename OutputTuple>
+    class unfolded_join_node<3,OutputTuple,two_phase> : public internal::join_node_base<two_phase,
+        std::tuple<
+                two_phase_port<typename std::tuple_element<0,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<1,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<2,OutputTuple>::type> >,
+        OutputTuple
+                    >
+                    {
+    private:
+        typedef typename std::tuple<
+                two_phase_port<typename std::tuple_element<0,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<1,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<2,OutputTuple>::type> > port_tuple_type;
+    public:
+        typedef OutputTuple output_type;
+    private:
+        typedef join_node_base<two_phase, port_tuple_type, output_type > base_type;
+    public:
+        unfolded_join_node(graph &g) : base_type(g) {}
+    };
+
+    template<typename OutputTuple>
+    class unfolded_join_node<4,OutputTuple,two_phase> : public internal::join_node_base<two_phase,
+        std::tuple<
+                two_phase_port<typename std::tuple_element<0,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<1,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<2,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<3,OutputTuple>::type> >,
+        OutputTuple
+                    > {
+    private:
+        typedef typename std::tuple<
+                two_phase_port<typename std::tuple_element<0,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<1,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<2,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<3,OutputTuple>::type> > port_tuple_type;
+    public:
+        typedef OutputTuple output_type;
+    private:
+        typedef join_node_base<two_phase, port_tuple_type, output_type > base_type;
+    public:
+        unfolded_join_node(graph &g) : base_type(g) {}
+    };
+
+    template<typename OutputTuple>
+    class unfolded_join_node<5,OutputTuple,two_phase> : public internal::join_node_base<two_phase,
+        std::tuple<
+                two_phase_port<typename std::tuple_element<0,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<1,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<2,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<3,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<4,OutputTuple>::type> >,
+        OutputTuple
+                > {
+    private:
+        typedef typename std::tuple<
+                two_phase_port<typename std::tuple_element<0,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<1,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<2,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<3,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<4,OutputTuple>::type> > port_tuple_type;
+    public:
+        typedef OutputTuple output_type;
+    private:
+        typedef join_node_base<two_phase, port_tuple_type, output_type > base_type;
+    public:
+        unfolded_join_node(graph &g) : base_type(g) {}
+    };
+
+    template<typename OutputTuple>
+    class unfolded_join_node<6,OutputTuple,two_phase> : public internal::join_node_base<two_phase,
+        std::tuple<
+                two_phase_port<typename std::tuple_element<0,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<1,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<2,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<3,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<4,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<5,OutputTuple>::type> >,
+        OutputTuple
+                    > {
+    private:
+        typedef typename std::tuple<
+                two_phase_port<typename std::tuple_element<0,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<1,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<2,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<3,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<4,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<5,OutputTuple>::type> > port_tuple_type;
+    public:
+        typedef OutputTuple output_type;
+    private:
+        typedef join_node_base<two_phase, port_tuple_type, output_type > base_type;
+    public:
+        unfolded_join_node(graph &g) : base_type(g) {}
+    };
+
+    template<typename OutputTuple>
+    class unfolded_join_node<7,OutputTuple,two_phase> : public internal::join_node_base<two_phase,
+        std::tuple<
+                two_phase_port<typename std::tuple_element<0,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<1,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<2,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<3,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<4,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<5,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<6,OutputTuple>::type> >,
+        OutputTuple
+                > {
+    private:
+        typedef typename std::tuple<
+                two_phase_port<typename std::tuple_element<0,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<1,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<2,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<3,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<4,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<5,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<6,OutputTuple>::type> > port_tuple_type;
+    public:
+        typedef OutputTuple output_type;
+    private:
+        typedef join_node_base<two_phase, port_tuple_type, output_type > base_type;
+    public:
+        unfolded_join_node(graph &g) : base_type(g) {}
+    };
+
+    template<typename OutputTuple>
+    class unfolded_join_node<8,OutputTuple,two_phase> : public internal::join_node_base<two_phase,
+        std::tuple<
+                two_phase_port<typename std::tuple_element<0,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<1,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<2,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<3,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<4,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<5,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<6,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<7,OutputTuple>::type> >,
+        OutputTuple
+                > {
+    private:
+        typedef typename std::tuple<
+                two_phase_port<typename std::tuple_element<0,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<1,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<2,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<3,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<4,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<5,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<6,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<7,OutputTuple>::type> > port_tuple_type;
+    public:
+        typedef OutputTuple output_type;
+    private:
+        typedef join_node_base<two_phase, port_tuple_type, output_type > base_type;
+    public:
+        unfolded_join_node(graph &g) : base_type(g) {}
+    };
+
+    template<typename OutputTuple>
+    class unfolded_join_node<9,OutputTuple,two_phase> : public internal::join_node_base<two_phase,
+        std::tuple<
+                two_phase_port<typename std::tuple_element<0,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<1,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<2,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<3,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<4,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<5,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<6,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<7,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<8,OutputTuple>::type> >,
+        OutputTuple
+                > {
+    private:
+        typedef typename std::tuple<
+                two_phase_port<typename std::tuple_element<0,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<1,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<2,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<3,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<4,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<5,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<6,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<7,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<8,OutputTuple>::type> > port_tuple_type;
+    public:
+        typedef OutputTuple output_type;
+    private:
+        typedef join_node_base<two_phase, port_tuple_type, output_type > base_type;
+    public:
+        unfolded_join_node(graph &g) : base_type(g) {}
+    };
+
+    template<typename OutputTuple>
+    class unfolded_join_node<10,OutputTuple,two_phase> : public internal::join_node_base<two_phase,
+        std::tuple<
+                two_phase_port<typename std::tuple_element<0,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<1,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<2,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<3,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<4,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<5,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<6,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<7,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<8,OutputTuple>::type>,
+                two_phase_port<typename std::tuple_element<9,OutputTuple>::type> >,
+        OutputTuple
+                > {
+    private:
+        typedef typename std::tuple<
+                two_phase_port<typename std::tuple_element<0,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<1,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<2,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<3,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<4,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<5,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<6,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<7,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<8,OutputTuple>::type>, 
+                two_phase_port<typename std::tuple_element<9,OutputTuple>::type> > port_tuple_type;
+    public:
+        typedef OutputTuple output_type;
+    private:
+        typedef join_node_base<two_phase, port_tuple_type, output_type > base_type;
+    public:
+        unfolded_join_node(graph &g) : base_type(g) {}
+    };
+
+    } // namespace internal
+
+using namespace internal::join_policy_namespace;
+
+template<typename OutputTuple, join_policy JP=two_phase>
+class join_node: public internal::unfolded_join_node<std::tuple_size<OutputTuple>::value, OutputTuple, JP> {
+private:
+    static const int N = std::tuple_size<OutputTuple>::value;
+    typedef typename internal::unfolded_join_node<N, OutputTuple, JP> unfolded_type;
+public:
+    typedef OutputTuple output_type;
+    join_node(graph &g) : unfolded_type(g) { }
+};
+
+    //
+    // Making edges
+    //
+  
+    //! Makes an edge between a single predecessor and a single successor
+    template< typename T >
+    inline void make_edge( sender<T> &p, receiver<T> &s ) {
+        p.register_successor( s );
+    }
+
+    //! Makes edges between a single predecessor and multiple successors
+    template< typename T, typename SIterator >
+    inline void make_edges( sender<T> &p, SIterator s_begin, SIterator s_end ) {
+        for ( SIterator i = s_begin; i != s_end; ++i ) {
+            make_edge( p, **i );
+        }
+    }
+
+    //! Makes edges between a set of predecessors and a single successor
+    template< typename T, typename PIterator >
+    inline void make_edges( PIterator p_begin, PIterator p_end, receiver<T> &s ) {
+        for ( PIterator i = p_begin; i != p_end; ++i ) {
+            make_edge( **i, s );
+        }
+    }
+
+}
+
+#endif
+
diff --git a/include/tbb/index.html b/include/tbb/index.html
index 7e4552e..33f69d1 100644
--- a/include/tbb/index.html
+++ b/include/tbb/index.html
@@ -17,7 +17,7 @@ Include files for Threading Building Blocks classes and functions.
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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 
diff --git a/include/tbb/machine/ibm_aix51.h b/include/tbb/machine/ibm_aix51.h
index ff3103b..54bd080 100644
--- a/include/tbb/machine/ibm_aix51.h
+++ b/include/tbb/machine/ibm_aix51.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -41,8 +41,7 @@ extern "C" {
 
 int32_t __TBB_machine_cas_32 (volatile void* ptr, int32_t value, int32_t comparand);
 int64_t __TBB_machine_cas_64 (volatile void* ptr, int64_t value, int64_t comparand);
-#define __TBB_fence_for_acquire() __TBB_machine_flush ()
-#define __TBB_fence_for_release() __TBB_machine_flush ()
+void    __TBB_machine_flush  ();
 
 }
 
@@ -50,3 +49,12 @@ int64_t __TBB_machine_cas_64 (volatile void* ptr, int64_t value, int64_t compara
 #define __TBB_CompareAndSwap8(P,V,C) __TBB_machine_cas_64(P,V,C)
 #define __TBB_CompareAndSwapW(P,V,C) __TBB_machine_cas_64(P,V,C)
 #define __TBB_Yield() sched_yield()
+
+#if __GNUC__
+#define __TBB_full_memory_fence() __asm__ __volatile__("sync": : :"memory")
+#define __TBB_release_consistency_helper() __asm__ __volatile__("lwsync": : :"memory")
+#else
+// IBM C++ Compiler does not support inline assembly
+#define __TBB_full_memory_fence() __TBB_machine_flush ()
+#define __TBB_release_consistency_helper() __TBB_machine_flush ()
+#endif
diff --git a/include/tbb/machine/linux_common.h b/include/tbb/machine/linux_common.h
index 35c5ce7..15b581c 100644
--- a/include/tbb/machine/linux_common.h
+++ b/include/tbb/machine/linux_common.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -30,14 +30,8 @@
 #error Do not include this file directly; include tbb_machine.h instead
 #endif
 
-#include <stdint.h>
-#include <unistd.h>
 #include <sched.h>
-
-// Definition of __TBB_Yield()
-#ifndef __TBB_Yield
 #define __TBB_Yield()  sched_yield()
-#endif
 
 /* Futex definitions */
 #include <sys/syscall.h>
diff --git a/include/tbb/machine/linux_ia32.h b/include/tbb/machine/linux_ia32.h
index e247a12..df080c4 100644
--- a/include/tbb/machine/linux_ia32.h
+++ b/include/tbb/machine/linux_ia32.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -30,9 +30,8 @@
 #error Do not include this file directly; include tbb_machine.h instead
 #endif
 
-#if !__MINGW32__
-#include "linux_common.h"
-#endif
+#include <stdint.h>
+#include <unistd.h>
 
 #define __TBB_WORDSIZE 4
 #define __TBB_BIG_ENDIAN 0
@@ -85,30 +84,40 @@ __MACHINE_DECL_ATOMICS(4,int32_t,"l")
 static inline int64_t __TBB_machine_cmpswp8 (volatile void *ptr, int64_t value, int64_t comparand )
 {
     int64_t result;
+    union {
+        int64_t i64;
+        int32_t i32[2];
+    };
+    i64 = value;
 #if __PIC__ 
     /* compiling position-independent code */
     // EBX register preserved for compliance with position-independent code rules on IA32
+    int32_t tmp;
     __asm__ __volatile__ (
-            "pushl %%ebx\n\t"
-            "movl  (%%ecx),%%ebx\n\t"
-            "movl  4(%%ecx),%%ecx\n\t"
+            "movl  %%ebx,%2\n\t"
+            "movl  %5,%%ebx\n\t"
+#if __GNUC__==3
             "lock\n\t cmpxchg8b %1\n\t"
-            "popl  %%ebx"
-             : "=A"(result), "=m"(*(int64_t *)ptr)
-             : "m"(*(int64_t *)ptr)
+#else
+            "lock\n\t cmpxchg8b (%3)\n\t"
+#endif
+            "movl  %2,%%ebx"
+             : "=A"(result)
+             , "=m"(*(__TBB_VOLATILE int64_t *)ptr)
+             , "=m"(tmp)
+#if __GNUC__==3
+             : "m"(*(__TBB_VOLATILE int64_t *)ptr)
+#else
+             : "SD"(ptr)
+#endif
              , "0"(comparand)
-             , "c"(&value)
-             : "memory", "esp"
+             , "m"(i32[0]), "c"(i32[1])
+             : "memory"
 #if __INTEL_COMPILER
              ,"ebx"
 #endif
     );
 #else /* !__PIC__ */
-    union {
-        int64_t i64;
-        int32_t i32[2];
-    };
-    i64 = value;
     __asm__ __volatile__ (
             "lock\n\t cmpxchg8b %1\n\t"
              : "=A"(result), "=m"(*(__TBB_VOLATILE int64_t *)ptr)
@@ -174,49 +183,6 @@ static inline void __TBB_machine_store8(volatile void *ptr, int64_t value) {
     }
 }
  
-template <typename T, size_t S>
-struct __TBB_machine_load_store {
-    static inline T load_with_acquire(const volatile T& location) {
-        T to_return = location;
-        __asm__ __volatile__("" : : : "memory" );   // Compiler fence to keep operations from migrating upwards
-        return to_return;
-    }
-
-    static inline void store_with_release(volatile T &location, T value) {
-        __asm__ __volatile__("" : : : "memory" );   // Compiler fence to keep operations from migrating upwards
-        location = value;
-    }
-};
-
-template <typename T>
-struct __TBB_machine_load_store<T,8> {
-    static inline T load_with_acquire(const volatile T& location) {
-        T to_return = __TBB_machine_load8((const volatile void *)&location);
-        __asm__ __volatile__("" : : : "memory" );   // Compiler fence to keep operations from migrating upwards
-        return to_return;
-    }
-
-    static inline void store_with_release(volatile T &location, T value) {
-        __asm__ __volatile__("" : : : "memory" );   // Compiler fence to keep operations from migrating downwards
-        __TBB_machine_store8((volatile void *)&location,(int64_t)value);
-    }
-};
-
-#undef __TBB_VOLATILE
-
-template<typename T>
-inline T __TBB_machine_load_with_acquire(const volatile T &location) {
-    return __TBB_machine_load_store<T,sizeof(T)>::load_with_acquire(location);
-}
-
-template<typename T, typename V>
-inline void __TBB_machine_store_with_release(volatile T &location, V value) {
-    __TBB_machine_load_store<T,sizeof(T)>::store_with_release(location,value);
-}
-
-#define __TBB_load_with_acquire(L) __TBB_machine_load_with_acquire((L))
-#define __TBB_store_with_release(L,V) __TBB_machine_store_with_release((L),(V))
-
 // Machine specific atomic operations
 
 #define __TBB_CompareAndSwap1(P,V,C) __TBB_machine_cmpswp1(P,V,C)
@@ -258,3 +224,27 @@ inline void __TBB_machine_store_with_release(volatile T &location, V value) {
 // Use generic definitions from tbb_machine.h
 #undef __TBB_TryLockByte
 #undef __TBB_LockByte
+
+// API to retrieve/update FPU control setting
+#define __TBB_CPU_CTL_ENV_PRESENT 1
+
+struct __TBB_cpu_ctl_env_t {
+    int     mxcsr;
+    short   x87cw;
+};
+
+inline void __TBB_get_cpu_ctl_env ( __TBB_cpu_ctl_env_t* ctl ) {
+    __asm__ __volatile__ (
+            "stmxcsr %0\n\t"
+            "fstcw   %1"
+            : "=m"(ctl->mxcsr), "=m"(ctl->x87cw)
+    );
+}
+inline void __TBB_set_cpu_ctl_env ( const __TBB_cpu_ctl_env_t* ctl ) {
+    __asm__ __volatile__ (
+            "ldmxcsr %0\n\t"
+            "fldcw   %1"
+            : : "m"(ctl->mxcsr), "m"(ctl->x87cw)
+    );
+}
+
diff --git a/include/tbb/machine/linux_ia64.h b/include/tbb/machine/linux_ia64.h
index 4f3801e..b815d3c 100644
--- a/include/tbb/machine/linux_ia64.h
+++ b/include/tbb/machine/linux_ia64.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -30,7 +30,8 @@
 #error Do not include this file directly; include tbb_machine.h instead
 #endif
 
-#include "linux_common.h"
+#include <stdint.h>
+#include <unistd.h>
 #include <ia64intrin.h>
 
 #define __TBB_WORDSIZE 8
diff --git a/include/tbb/machine/linux_intel64.h b/include/tbb/machine/linux_intel64.h
index 44b3606..8d05762 100644
--- a/include/tbb/machine/linux_intel64.h
+++ b/include/tbb/machine/linux_intel64.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -30,7 +30,8 @@
 #error Do not include this file directly; include tbb_machine.h instead
 #endif
 
-#include "linux_common.h"
+#include <stdint.h>
+#include <unistd.h>
 
 #define __TBB_WORDSIZE 8
 #define __TBB_BIG_ENDIAN 0
@@ -93,13 +94,6 @@ 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_pause( int32_t delay ) {
-    for (int32_t i = 0; i < delay; i++) {
-       __asm__ __volatile__("pause;");
-    }
-    return;
-}
-
 // Machine specific atomic operations
 
 #define __TBB_CompareAndSwap1(P,V,C) __TBB_machine_cmpswp1(P,V,C)
@@ -120,14 +114,20 @@ static inline void __TBB_machine_pause( int32_t delay ) {
 #define __TBB_FetchAndStore8(P,V)  __TBB_machine_fetchstore8(P,V)
 #define __TBB_FetchAndStoreW(P,V)  __TBB_machine_fetchstore8(P,V)
 
-#define __TBB_Store8(P,V) (*P = V)
-#define __TBB_Load8(P)    (*P)
+#undef __TBB_Store8
+#undef __TBB_Load8
 
 #define __TBB_AtomicOR(P,V) __TBB_machine_or(P,V)
 #define __TBB_AtomicAND(P,V) __TBB_machine_and(P,V)
 
 // Definition of other functions
 #ifndef __TBB_Pause
+static inline void __TBB_machine_pause( int32_t delay ) {
+    for (int32_t i = 0; i < delay; i++) {
+       __asm__ __volatile__("pause;");
+    }
+    return;
+}
 #define __TBB_Pause(V) __TBB_machine_pause(V)
 #endif
 #define __TBB_Log2(V)    __TBB_machine_lg(V)
@@ -140,3 +140,28 @@ static inline void __TBB_machine_pause( int32_t delay ) {
 // Use generic definitions from tbb_machine.h
 #undef __TBB_TryLockByte
 #undef __TBB_LockByte
+
+// API to retrieve/update FPU control setting
+#ifndef __TBB_CPU_CTL_ENV_PRESENT
+#define __TBB_CPU_CTL_ENV_PRESENT 1
+
+struct __TBB_cpu_ctl_env_t {
+    int     mxcsr;
+    short   x87cw;
+};
+
+inline void __TBB_get_cpu_ctl_env ( __TBB_cpu_ctl_env_t* ctl ) {
+    __asm__ __volatile__ (
+            "stmxcsr %0\n\t"
+            "fstcw %1"
+            : "=m"(ctl->mxcsr), "=m"(ctl->x87cw)
+    );
+}
+inline void __TBB_set_cpu_ctl_env ( const __TBB_cpu_ctl_env_t* ctl ) {
+    __asm__ __volatile__ (
+            "ldmxcsr %0\n\t"
+            "fldcw %1"
+            : : "m"(ctl->mxcsr), "m"(ctl->x87cw)
+    );
+}
+#endif
diff --git a/include/tbb/machine/mac_ppc.h b/include/tbb/machine/mac_ppc.h
index ea935f2..3114039 100644
--- a/include/tbb/machine/mac_ppc.h
+++ b/include/tbb/machine/mac_ppc.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -33,44 +33,54 @@
 #include <stdint.h>
 #include <unistd.h>
 
-#include <sched.h> // sched_yield
+// This file is for PowerPC with compilers supporting GNU inline-assembler syntax (currently GNU g++ and IBM XL).
 
+// Motivation for use of "#if defined(__powerpc64__) || defined(__ppc64__)" to detect a 64-bit environment:
+// IBM XL documents both __powerpc64__ and __PPC64__, and these also appear to work on g++ (documentation?)
+// Apple documents __ppc64__ (with __ppc__ only 32-bit, which is not portable even to other environments using g++)
 inline int32_t __TBB_machine_cmpswp4 (volatile void *ptr, int32_t value, int32_t comparand )
 {
     int32_t result;
 
-    __asm__ __volatile__("lwsync\n"
+    __asm__ __volatile__("sync\n"
                          "0: lwarx %0,0,%2\n\t"  /* load w/ reservation */
                          "cmpw %0,%4\n\t"        /* compare against comparand */
                          "bne- 1f\n\t"           /* exit if not same */
                          "stwcx. %3,0,%2\n\t"    /* store new_value */
                          "bne- 0b\n"             /* retry if reservation lost */
-                         "1: lwsync"               /* the exit */
+                         "1: sync"               /* the exit */
                           : "=&r"(result), "=m"(* (int32_t*) ptr)
                           : "r"(ptr), "r"(value), "r"(comparand), "m"(* (int32_t*) ptr)
-                          : "cr0");
+                          : "cr0", "memory");
     return result;
 }
 
+#if defined(__powerpc64__) || defined(__ppc64__)
+
 inline int64_t __TBB_machine_cmpswp8 (volatile void *ptr, int64_t value, int64_t comparand )
 {
     int64_t result;
-    __asm__ __volatile__("lwsync\n"
+    __asm__ __volatile__("sync\n"
                          "0: ldarx %0,0,%2\n\t"  /* load w/ reservation */
                          "cmpd %0,%4\n\t"        /* compare against comparand */
                          "bne- 1f\n\t"           /* exit if not same */
                          "stdcx. %3,0,%2\n\t"    /* store new_value */
                          "bne- 0b\n"             /* retry if reservation lost */
-                         "1: lwsync"               /* the exit */
-                          : "=&b"(result), "=m"(* (int64_t*) ptr)
+                         "1: sync"               /* the exit */
+                          : "=&r"(result), "=m"(* (int64_t*) ptr)
                           : "r"(ptr), "r"(value), "r"(comparand), "m"(* (int64_t*) ptr)
-                          : "cr0");
+                          : "cr0", "memory");
     return result;
 }
+#else
+// Except for special circumstances, 32-bit builds are meant to run on actual 32-bit hardware
+// A locked implementation would also be a possibility
+#define __TBB_64BIT_ATOMICS 0
+#endif /* 64bit CAS */
 
 #define __TBB_BIG_ENDIAN 1
 
-#if defined(powerpc64) || defined(__powerpc64__) || defined(__ppc64__)
+#if defined(__powerpc64__) || defined(__ppc64__)
 #define __TBB_WORDSIZE 8
 #define __TBB_CompareAndSwapW(P,V,C) __TBB_machine_cmpswp8(P,V,C)
 #else
@@ -79,7 +89,30 @@ inline int64_t __TBB_machine_cmpswp8 (volatile void *ptr, int64_t value, int64_t
 #endif
 
 #define __TBB_CompareAndSwap4(P,V,C) __TBB_machine_cmpswp4(P,V,C)
+#if __TBB_64BIT_ATOMICS
 #define __TBB_CompareAndSwap8(P,V,C) __TBB_machine_cmpswp8(P,V,C)
-#define __TBB_Yield() sched_yield()
+#endif
 #define __TBB_full_memory_fence() __asm__ __volatile__("sync": : :"memory")
 #define __TBB_release_consistency_helper() __asm__ __volatile__("lwsync": : :"memory")
+
+#if !__IBMCPP__
+// "1501-230 (S) Internal compiler error; please contact your Service Representative"
+static inline intptr_t __TBB_machine_lg( uintptr_t x ) {
+    // TODO: assumes sizeof(uintptr_t)<=8 resp. 4
+    #if defined(__powerpc64__) || defined(__ppc64__)
+    __asm__ __volatile__ ("cntlzd %0,%0" : "+r"(x)); // counting starts at 2^63
+    return 63-static_cast<intptr_t>(x);
+    #else
+    __asm__ __volatile__ ("cntlzw %0,%0" : "+r"(x)); // counting starts at 2^31 (on 64-bit hardware, higher-order bits are ignored)
+    return 31-static_cast<intptr_t>(x);
+    #endif
+}
+#define __TBB_Log2(V) __TBB_machine_lg(V)
+#endif
+
+#define __TBB_Byte uint32_t // TODO: would this ever not be aligned without an alignment specification?
+
+inline bool __TBB_machine_trylockbyte( __TBB_Byte &flag ) {
+    return __TBB_machine_cmpswp4(&flag,1,0)==0;
+}
+#define __TBB_TryLockByte(P) __TBB_machine_trylockbyte(P)
diff --git a/include/tbb/machine/macos_common.h b/include/tbb/machine/macos_common.h
new file mode 100644
index 0000000..c0e8799
--- /dev/null
+++ b/include/tbb/machine/macos_common.h
@@ -0,0 +1,126 @@
+/*
+    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.
+*/
+
+#ifndef __TBB_machine_H
+#error Do not include this file directly; include tbb_machine.h instead
+#endif
+
+#include <sched.h>
+#define __TBB_Yield()  sched_yield()
+
+
+// __TBB_HardwareConcurrency
+
+#include <sys/types.h>
+#include <sys/sysctl.h>
+
+static inline int __TBB_macos_available_cpu() {
+    int name[2] = {CTL_HW, HW_AVAILCPU};
+    int ncpu;
+    size_t size = sizeof(ncpu);
+    sysctl( name, 2, &ncpu, &size, NULL, 0 );
+    return ncpu;
+}
+
+#define __TBB_HardwareConcurrency() __TBB_macos_available_cpu()
+
+
+#ifndef __TBB_WORDSIZE
+#define __TBB_WORDSIZE 4
+#endif
+
+#ifndef __TBB_BIG_ENDIAN
+#if __BIG_ENDIAN__
+#define __TBB_BIG_ENDIAN 1
+#else
+#define __TBB_BIG_ENDIAN 0
+#endif
+#endif
+
+
+#if !defined(__TBB_CompareAndSwap4) || !defined(__TBB_CompareAndSwap8)
+
+// Implementation of atomic operations based on OS provided primitives
+#include <libkern/OSAtomic.h>
+
+#define __TBB_release_consistency_helper() OSMemoryBarrier()
+#define __TBB_full_memory_fence()          OSMemoryBarrier()
+
+static inline int32_t __TBB_macos_cmpswp4(volatile void *ptr, int32_t value, int32_t comparand)
+{
+    __TBB_ASSERT( !((uintptr_t)ptr&0x3), "address not properly aligned for Mac OS atomics");
+    int32_t* address = (int32_t*)ptr;
+    while( !OSAtomicCompareAndSwap32Barrier(comparand, value, address) ){
+        int32_t snapshot = *address;
+        if( snapshot!=comparand ) return snapshot;
+    }
+    return comparand;
+}
+
+static inline int64_t __TBB_macos_cmpswp8(volatile void *ptr, int64_t value, int64_t comparand)
+{
+    __TBB_ASSERT( !((uintptr_t)ptr&0x7), "address not properly aligned for Mac OS atomics");
+    int64_t* address = (int64_t*)ptr;
+    while( !OSAtomicCompareAndSwap64Barrier(comparand, value, address) ){
+#if __TBB_WORDSIZE==8
+        int64_t snapshot = *address;
+#else
+        int64_t snapshot = OSAtomicAdd64( 0, address );
+#endif
+        if( snapshot!=comparand ) return snapshot;
+    }
+    return comparand;
+}
+
+#define __TBB_CompareAndSwap4(P,V,C) __TBB_macos_cmpswp4(P,V,C)
+#define __TBB_CompareAndSwap8(P,V,C) __TBB_macos_cmpswp8(P,V,C)
+
+static inline int32_t __TBB_macos_fetchadd4(volatile void *ptr, int32_t addend)
+{
+    __TBB_ASSERT( !((uintptr_t)ptr&0x3), "address not properly aligned for Mac OS atomics");
+    return OSAtomicAdd32Barrier(addend, (int32_t*)ptr) - addend;
+}
+
+static inline int64_t __TBB_macos_fetchadd8(volatile void *ptr, int64_t addend)
+{
+    __TBB_ASSERT( !((uintptr_t)ptr&0x7), "address not properly aligned for Mac OS atomics");
+    return OSAtomicAdd64Barrier(addend, (int64_t*)ptr) - addend;
+}
+
+#define __TBB_FetchAndAdd4(P,V) __TBB_macos_fetchadd4(P,V)
+#define __TBB_FetchAndAdd8(P,V) __TBB_macos_fetchadd8(P,V)
+
+#if __TBB_WORDSIZE==4
+#define __TBB_CompareAndSwapW(P,V,C) __TBB_CompareAndSwap4(P,V,C)
+#define __TBB_FetchAndAddW(P,V) __TBB_FetchAndAdd4(P,V)
+#else
+#define __TBB_CompareAndSwapW(P,V,C) __TBB_CompareAndSwap8(P,V,C)
+#define __TBB_FetchAndAddW(P,V) __TBB_FetchAndAdd8(P,V)
+#endif
+
+#endif /* !defined(__TBB_CompareAndSwap4) || !defined(__TBB_CompareAndSwap8) */
diff --git a/include/tbb/machine/sunos_sparc.h b/include/tbb/machine/sunos_sparc.h
index d4cfa7e..ca228fa 100644
--- a/include/tbb/machine/sunos_sparc.h
+++ b/include/tbb/machine/sunos_sparc.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -34,8 +34,6 @@
 #include <stdint.h>
 #include <unistd.h>
 
-#include <sched.h> // sched_yield
-
 #define __TBB_WORDSIZE 8
 #define __TBB_BIG_ENDIAN 1
 
@@ -208,8 +206,8 @@ static inline bool __TBB_machine_trylockbyte(unsigned char &flag){
 //#define __TBB_FetchAndStore8(P,V)  __TBB_machine_fetchstore8(P,V)
 //#define __TBB_FetchAndStoreW(P,V)  __TBB_machine_fetchstore8(P,V)
 
-#define __TBB_Store8(P,V) (*P = V)
-#define __TBB_Load8(P)    (*P)
+#undef __TBB_Store8
+#undef __TBB_Load8
 
 #define __TBB_AtomicOR(P,V) __TBB_machine_or(P,V)
 #define __TBB_AtomicAND(P,V) __TBB_machine_and(P,V)
@@ -228,5 +226,3 @@ static inline bool __TBB_machine_trylockbyte(unsigned char &flag){
 #undef __TBB_LockByte
 
 #define __TBB_TryLockByte(P) __TBB_machine_trylockbyte(P)
-
-#define __TBB_Yield() sched_yield()
diff --git a/include/tbb/machine/windows_api.h b/include/tbb/machine/windows_api.h
new file mode 100644
index 0000000..3749560
--- /dev/null
+++ b/include/tbb/machine/windows_api.h
@@ -0,0 +1,56 @@
+/*
+    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.
+*/
+
+#ifndef __TBB_machine_windows_api_H
+#define __TBB_machine_windows_api_H
+
+#if _WIN32 || _WIN64
+
+#if _XBOX
+
+#define NONET
+#define NOD3D
+#include <xtl.h>
+
+#else // Assume "usual" Windows
+
+#include <windows.h>
+
+#endif // _XBOX
+
+#if !defined(_WIN32_WINNT)
+// The following Windows API function is declared explicitly;
+// otherwise any user would have to specify /D_WIN32_WINNT=0x0400
+extern "C" BOOL WINAPI TryEnterCriticalSection( LPCRITICAL_SECTION );
+#endif
+
+#else
+#error tbb/machine/windows_api.h should only be used for Windows based platforms
+#endif // _WIN32 || _WIN64
+
+#endif // __TBB_machine_windows_api_H
diff --git a/include/tbb/machine/windows_ia32.h b/include/tbb/machine/windows_ia32.h
index 1ef4de4..22dbddd 100644
--- a/include/tbb/machine/windows_ia32.h
+++ b/include/tbb/machine/windows_ia32.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -59,49 +59,6 @@ extern "C" {
     __int64 __TBB_EXPORTED_FUNC __TBB_machine_load8 (const volatile void *ptr);
 }
 
-template <typename T, size_t S>
-struct __TBB_machine_load_store {
-    static inline T load_with_acquire(const volatile T& location) {
-        T to_return = location;
-        __TBB_release_consistency_helper();
-        return to_return;
-    }
-
-    static inline void store_with_release(volatile T &location, T value) {
-        __TBB_release_consistency_helper();
-        location = value;
-    }
-};
-
-template <typename T>
-struct __TBB_machine_load_store<T,8> {
-    static inline T load_with_acquire(const volatile T& location) {
-        return __TBB_machine_load8((volatile void *)&location);
-    }
-
-    static inline void store_with_release(T &location, T value) {
-        __TBB_machine_store8((volatile void *)&location,(__int64)value);
-    }
-};
-
-template<typename T>
-inline T __TBB_machine_load_with_acquire(const volatile T &location) {
-    return __TBB_machine_load_store<T,sizeof(T)>::load_with_acquire(location);
-}
-
-template<typename T, typename V>
-inline void __TBB_machine_store_with_release(T& location, V value) {
-    __TBB_machine_load_store<T,sizeof(T)>::store_with_release(location,value);
-}
-
-//! Overload that exists solely to avoid /Wp64 warnings.
-inline void __TBB_machine_store_with_release(size_t& location, size_t value) {
-    __TBB_machine_load_store<size_t,sizeof(size_t)>::store_with_release(location,value);
-} 
-
-#define __TBB_load_with_acquire(L) __TBB_machine_load_with_acquire((L))
-#define __TBB_store_with_release(L,V) __TBB_machine_store_with_release((L),(V))
-
 #define __TBB_DEFINE_ATOMICS(S,T,U,A,C) \
 static inline T __TBB_machine_cmpswp##S ( volatile void * ptr, U value, U comparand ) { \
     T result; \
@@ -241,3 +198,25 @@ extern "C" __declspec(dllimport) int __stdcall SwitchToThread( void );
     #pragma warning (pop)
 #endif // warnings 4244, 4267 are back
 
+// API to retrieve/update FPU control setting
+#define __TBB_CPU_CTL_ENV_PRESENT 1
+
+struct __TBB_cpu_ctl_env_t {
+    int     mxcsr;
+    short   x87cw;
+};
+inline void __TBB_get_cpu_ctl_env ( __TBB_cpu_ctl_env_t* ctl ) {
+    __asm {
+        __asm mov     eax, ctl
+        __asm stmxcsr [eax]
+        __asm fstcw   [eax+4]
+    }
+}
+inline void __TBB_set_cpu_ctl_env ( const __TBB_cpu_ctl_env_t* ctl ) {
+    __asm {
+        __asm mov     eax, ctl
+        __asm ldmxcsr [eax]
+        __asm fldcw   [eax+4]
+    }
+}
+
diff --git a/include/tbb/machine/windows_intel64.h b/include/tbb/machine/windows_intel64.h
index 1da213b..9a45f5d 100644
--- a/include/tbb/machine/windows_intel64.h
+++ b/include/tbb/machine/windows_intel64.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -130,3 +130,16 @@ extern "C" __declspec(dllimport) int __stdcall SwitchToThread( void );
 // Use generic definitions from tbb_machine.h
 #undef __TBB_TryLockByte
 #undef __TBB_LockByte
+
+// API to retrieve/update FPU control setting
+#define __TBB_CPU_CTL_ENV_PRESENT 1
+
+struct __TBB_cpu_ctl_env_t {
+    int     mxcsr;
+    short   x87cw;
+};
+
+extern "C" {
+    void __TBB_EXPORTED_FUNC __TBB_get_cpu_ctl_env ( __TBB_cpu_ctl_env_t* );
+    void __TBB_EXPORTED_FUNC __TBB_set_cpu_ctl_env ( const __TBB_cpu_ctl_env_t* );
+}
diff --git a/include/tbb/machine/xbox360_ppc.h b/include/tbb/machine/xbox360_ppc.h
index 85c2933..7bde308 100644
--- a/include/tbb/machine/xbox360_ppc.h
+++ b/include/tbb/machine/xbox360_ppc.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -80,6 +80,42 @@ inline void __TBB_machine_pause (__int32 delay )
 #define __TBB_CompareAndSwapW(P,V,C) __TBB_machine_cmpswp4(P,V,C)
 #define __TBB_Yield()  Sleep(0)
 #define __TBB_Pause(V) __TBB_machine_pause(V)
-#define __TBB_fence_for_acquire() __lwsync()
-#define __TBB_fence_for_release() __lwsync()
 
+// This port uses only 2 hardware threads for TBB on XBOX 360. 
+// Others are left to sound etc.
+// Change the following mask to allow TBB use more HW threads.
+static const int __TBB_XBOX360_HARDWARE_THREAD_MASK = 0x0C;
+
+static inline int __TBB_XBOX360_DetectNumberOfWorkers() 
+{
+     char a[__TBB_XBOX360_HARDWARE_THREAD_MASK];  //compile time assert - at least one bit should be set always
+     a[0]=0;
+
+     return ((__TBB_XBOX360_HARDWARE_THREAD_MASK >> 0) & 1) +
+            ((__TBB_XBOX360_HARDWARE_THREAD_MASK >> 1) & 1) +
+            ((__TBB_XBOX360_HARDWARE_THREAD_MASK >> 2) & 1) +
+            ((__TBB_XBOX360_HARDWARE_THREAD_MASK >> 3) & 1) +
+            ((__TBB_XBOX360_HARDWARE_THREAD_MASK >> 4) & 1) +
+            ((__TBB_XBOX360_HARDWARE_THREAD_MASK >> 5) & 1) + 1;  // +1 accomodates for the master thread
+}
+
+static inline int __TBB_XBOX360_GetHardwareThreadIndex(int workerThreadIndex)
+{
+    workerThreadIndex %= __TBB_XBOX360_DetectNumberOfWorkers()-1;
+    int m = __TBB_XBOX360_HARDWARE_THREAD_MASK;
+    int index = 0;
+    int skipcount = workerThreadIndex;
+    while (true)
+    {
+        if ((m & 1)!=0) 
+        {
+            if (skipcount==0) break;
+            skipcount--;
+        }
+        m >>= 1;
+       index++;
+    }
+    return index; 
+}
+
+#define __TBB_HardwareConcurrency() __TBB_XBOX360_DetectNumberOfWorkers()
diff --git a/include/tbb/mutex.h b/include/tbb/mutex.h
index f42bf2d..b45e67d 100644
--- a/include/tbb/mutex.h
+++ b/include/tbb/mutex.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -30,14 +30,9 @@
 #define __TBB_mutex_H
 
 #if _WIN32||_WIN64
-    #include <windows.h>
-    #if !defined(_WIN32_WINNT)
-    // The following Windows API function is declared explicitly;
-    // otherwise any user would have to specify /D_WIN32_WINNT=0x0400
-    extern "C" BOOL WINAPI TryEnterCriticalSection( LPCRITICAL_SECTION );
-    #endif
-#else /* if not _WIN32||_WIN64 */
-    #include <pthread.h>
+#include "machine/windows_api.h"
+#else
+#include <pthread.h>
 #endif /* _WIN32||_WIN64 */
 
 #include <new>
diff --git a/include/tbb/null_mutex.h b/include/tbb/null_mutex.h
index 67aabd5..b233b4b 100644
--- a/include/tbb/null_mutex.h
+++ b/include/tbb/null_mutex.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 2462389..d7e51cf 100644
--- a/include/tbb/null_rw_mutex.h
+++ b/include/tbb/null_rw_mutex.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 6f91f72..f54d3b3 100644
--- a/include/tbb/parallel_do.h
+++ b/include/tbb/parallel_do.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 0b3c2be..31b9f98 100644
--- a/include/tbb/parallel_for.h
+++ b/include/tbb/parallel_for.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -211,9 +211,8 @@ void parallel_for(Index first, Index last, Index step, const Function& f, tbb::t
     if (step <= 0 )
         internal::throw_exception(internal::eid_nonpositive_step); // throws std::invalid_argument
     else if (last > first) {
-        // Above "else" is necessary to prevent "potential divide by zero" warning
-        Index end = (last - first) / step;
-        if (first + end * step < last) end++;
+        // Above "else" avoids "potential divide by zero" warning on some platforms
+        Index end = (last - first - Index(1)) / step + Index(1);
         tbb::blocked_range<Index> range(static_cast<Index>(0), end);
         internal::parallel_for_body<Function, Index> body(f, first, step);
         tbb::parallel_for(range, body, tbb::auto_partitioner(), context);
diff --git a/include/tbb/parallel_for_each.h b/include/tbb/parallel_for_each.h
index 6b8d862..e59ee76 100644
--- a/include/tbb/parallel_for_each.h
+++ b/include/tbb/parallel_for_each.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 02c3e80..3303c41 100644
--- a/include/tbb/parallel_invoke.h
+++ b/include/tbb/parallel_invoke.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/parallel_reduce.h b/include/tbb/parallel_reduce.h
index 670b626..bef9d6c 100644
--- a/include/tbb/parallel_reduce.h
+++ b/include/tbb/parallel_reduce.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -32,35 +32,13 @@
 #include "task.h"
 #include "aligned_space.h"
 #include "partitioner.h"
+#include "tbb_profiling.h"
 #include <new>
 
 namespace tbb {
 
 //! @cond INTERNAL
 namespace internal {
-
-    //! ITT instrumented routine that stores src into location pointed to by dst.
-    void __TBB_EXPORTED_FUNC itt_store_pointer_with_release_v3( void* dst, void* src );
-
-    //! ITT instrumented routine that loads pointer from location pointed to by src.
-    void* __TBB_EXPORTED_FUNC itt_load_pointer_with_acquire_v3( const void* src );
-
-    template<typename T> inline void parallel_reduce_store_body( T*& dst, T* src ) {
-#if TBB_USE_THREADING_TOOLS
-        itt_store_pointer_with_release_v3(&dst,src);
-#else
-        __TBB_store_with_release(dst,src);
-#endif /* TBB_USE_THREADING_TOOLS */
-    }
-
-    template<typename T> inline T* parallel_reduce_load_body( T*& src ) {
-#if TBB_USE_THREADING_TOOLS
-        return static_cast<T*>(itt_load_pointer_with_acquire_v3(&src));
-#else
-        return __TBB_load_with_acquire(src);
-#endif /* TBB_USE_THREADING_TOOLS */
-    }
-
     //! 0 if root, 1 if a left child, 2 if a right child.
     /** Represented as a char, not enum, for compactness. */
     typedef char reduction_context;
@@ -74,7 +52,7 @@ namespace internal {
         bool has_right_zombie;
         const reduction_context my_context;
         aligned_space<Body,1> zombie_space;
-        finish_reduce( char context_ ) : 
+        finish_reduce( reduction_context context_ ) : 
             my_body(NULL),
             has_right_zombie(false),
             my_context(context_)
@@ -87,10 +65,10 @@ namespace internal {
                 my_body->join( *s );
                 s->~Body();
             }
-            if( my_context==1 ) 
-                parallel_reduce_store_body( static_cast<finish_reduce*>(parent())->my_body, my_body );
+            if( my_context==1 )  // left child
+                itt_store_word_with_release( static_cast<finish_reduce*>(parent())->my_body, my_body );
             return NULL;
-        }       
+        }
         template<typename Range,typename Body_, typename Partitioner>
         friend class start_reduce;
     };
@@ -117,7 +95,7 @@ namespace internal {
         {
         }
         //! Splitting constructor used to generate children.
-        /** this becomes left child.  Newly constructed object is right child. */
+        /** parent_ becomes left child.  Newly constructed object is right child. */
         start_reduce( start_reduce& parent_, split ) :
             my_body(parent_.my_body),
             my_range(parent_.my_range,split()),
@@ -155,17 +133,17 @@ public:
 
     template<typename Range, typename Body, typename Partitioner>
     task* start_reduce<Range,Body,Partitioner>::execute() {
-        if( my_context==2 ) {
-            finish_type* p = static_cast<finish_type*>(parent() );
-            if( !parallel_reduce_load_body(p->my_body) ) {
+        if( my_context==2 ) { // right child
+            finish_type* p = static_cast<finish_type*>(parent());
+            if( !itt_load_word_with_acquire(p->my_body) ) {
                 my_body = new( p->zombie_space.begin() ) Body(*my_body,split());
                 p->has_right_zombie = true;
-            } 
+            }
         }
         if( !my_range.is_divisible() || my_partition.should_execute_range(*this) ) {
             (*my_body)( my_range );
             if( my_context==1 ) 
-                parallel_reduce_store_body(static_cast<finish_type*>(parent())->my_body, my_body );
+                itt_store_word_with_release(static_cast<finish_type*>(parent())->my_body, my_body );
             return my_partition.continue_after_execute_range();
         } else {
             finish_type& c = *new( allocate_continuation()) finish_type(my_context);
@@ -176,7 +154,7 @@ public:
             my_partition.spawn_or_delay(delay,b);
             return this;
         }
-    } 
+    }
 
     //! Auxiliary class for parallel_reduce; for internal use only.
     /** The adaptor class that implements \ref parallel_reduce_body_req "parallel_reduce Body"
diff --git a/include/tbb/parallel_scan.h b/include/tbb/parallel_scan.h
index 3a1963f..a4a02cb 100644
--- a/include/tbb/parallel_scan.h
+++ b/include/tbb/parallel_scan.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -306,7 +306,7 @@ namespace internal {
 // Requirements on Range concept are documented in blocked_range.h
 
 /** \page parallel_scan_body_req Requirements on parallel_scan body
-    Class \c Body implementing the concept of parallel_reduce body must define:
+    Class \c Body implementing the concept of parallel_scan body must define:
     - \code Body::Body( Body&, split ); \endcode    Splitting constructor.
                                                     Split \c b so that \c this and \c b can accumulate separately
     - \code Body::~Body(); \endcode                 Destructor
diff --git a/include/tbb/parallel_sort.h b/include/tbb/parallel_sort.h
index 6fbbe80..0050046 100644
--- a/include/tbb/parallel_sort.h
+++ b/include/tbb/parallel_sort.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 21c2bc1..94f9795 100644
--- a/include/tbb/parallel_while.h
+++ b/include/tbb/parallel_while.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 98db3ac..eaa95c6 100644
--- a/include/tbb/partitioner.h
+++ b/include/tbb/partitioner.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -73,7 +73,6 @@ class affinity_partition_type;
 
 template<typename Range, typename Body, typename Partitioner> class start_for;
 template<typename Range, typename Body, typename Partitioner> class start_reduce;
-template<typename Range, typename Body> class start_reduce_with_affinity;
 template<typename Range, typename Body, typename Partitioner> class start_scan;
 
 } // namespace internal
@@ -135,7 +134,6 @@ public:
 private:
     template<typename Range, typename Body, typename Partitioner> friend class internal::start_for;
     template<typename Range, typename Body, typename Partitioner> friend class internal::start_reduce;
-    template<typename Range, typename Body> friend class internal::start_reduce_with_affinity;
     template<typename Range, typename Body, typename Partitioner> friend class internal::start_scan;
 
     typedef internal::affinity_partition_type partition_type;
diff --git a/include/tbb/pipeline.h b/include/tbb/pipeline.h
index 04aee63..60fe09b 100644
--- a/include/tbb/pipeline.h
+++ b/include/tbb/pipeline.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -54,7 +54,7 @@ class pipeline_cleaner;
 
 } // namespace internal
 
-namespace interface5 {
+namespace interface6 {
     template<typename T, typename U> class filter_t;
 
     namespace internal {
@@ -70,7 +70,7 @@ class filter: internal::no_copy {
 private:
     //! Value used to mark "not in pipeline"
     static filter* not_in_pipeline() {return reinterpret_cast<filter*>(intptr_t(-1));}
-    
+protected:    
     //! The lowest bit 0 is for parallel vs. serial
     static const unsigned char filter_is_serial = 0x1; 
 
@@ -82,6 +82,9 @@ private:
     //! 5th bit distinguishes thread-bound and regular filters.
     static const unsigned char filter_is_bound = 0x1<<5;  
 
+    //! 6th bit marks input filters emitting small objects
+    static const unsigned char filter_may_emit_null = 0x1<<6;
+
     //! 7th bit defines exception propagation mode expected by the application.
     static const unsigned char exact_exception_propagation =
 #if TBB_USE_CAPTURED_EXCEPTION
@@ -122,6 +125,9 @@ protected:
         next_segment(NULL)
     {}
 
+    // signal end-of-input for concrete_filters
+    void __TBB_EXPORTED_METHOD set_end_of_input();
+
 public:
     //! True if filter is serial.
     bool is_serial() const {
@@ -138,6 +144,11 @@ public:
         return ( my_filter_mode & filter_is_bound )==filter_is_bound;
     }
 
+    //! true if an input filter can emit null
+    bool object_may_be_null() { 
+        return ( my_filter_mode & filter_may_emit_null ) == filter_may_emit_null;
+    }
+
     //! Operate on an item from the input stream, and return item for output stream.
     /** Returns NULL if filter is a sink. */
     virtual void* operator()( void* item ) = 0;
@@ -157,6 +168,11 @@ private:
     //! Pointer to next filter in the pipeline.
     filter* next_filter_in_pipeline;
 
+    //! has the filter not yet processed all the tokens it will ever see?  
+    //  (pipeline has not yet reached end_of_input or this filter has not yet
+    //  seen the last token produced by input_filter)
+    bool has_more_work();
+
     //! Buffer for incoming tokens, or NULL if not required.
     /** The buffer is required if the filter is serial or follows a thread-bound one. */
     internal::input_buffer* my_input_buffer;
@@ -194,7 +210,7 @@ public:
     };
 protected:
     thread_bound_filter(mode filter_mode): 
-         filter(static_cast<mode>(filter_mode | filter::filter_is_bound | filter::exact_exception_propagation))
+         filter(static_cast<mode>(filter_mode | filter::filter_is_bound))
     {}
 public:
     //! If a data item is available, invoke operator() on that item.  
@@ -248,7 +264,7 @@ private:
     friend class filter;
     friend class thread_bound_filter;
     friend class internal::pipeline_cleaner;
-    friend class tbb::interface5::internal::pipeline_proxy;
+    friend class tbb::interface6::internal::pipeline_proxy;
 
     //! Pointer to first filter in the pipeline.
     filter* filter_list;
@@ -287,7 +303,7 @@ private:
 // Support for lambda-friendly parallel_pipeline interface
 //------------------------------------------------------------------------
 
-namespace interface5 {
+namespace interface6 {
 
 namespace internal {
     template<typename T, typename U, typename Body> class concrete_filter;
@@ -305,59 +321,124 @@ public:
 //! @cond INTERNAL
 namespace internal {
 
+template<typename T> struct is_large_object { enum { r = sizeof(T) > sizeof(void *) }; };
+
+template<typename T, bool> class token_helper;
+
+// large object helper (uses tbb_allocator)
+template<typename T>
+class token_helper<T, true> {
+    public:
+    typedef typename tbb::tbb_allocator<T> allocator;
+    typedef T* pointer;
+    typedef T value_type;
+    static pointer create_token(const value_type & source) {
+        pointer output_t = allocator().allocate(1);
+        return new (output_t) T(source);
+    }
+    static value_type & token(pointer & t) { return *t;}
+    static void * cast_to_void_ptr(pointer ref) { return (void *) ref; }
+    static pointer cast_from_void_ptr(void * ref) { return (pointer)ref; }
+    static void destroy_token(pointer token) {
+        allocator().destroy(token);
+        allocator().deallocate(token,1);
+    }
+};
+
+// pointer specialization
+template<typename T>
+class token_helper<T*, false > {
+    public:
+    typedef T* pointer;
+    typedef T* value_type;
+    static pointer create_token(const value_type & source) { return source; }
+    static value_type & token(pointer & t) { return t;}
+    static void * cast_to_void_ptr(pointer ref) { return (void *)ref; }
+    static pointer cast_from_void_ptr(void * ref) { return (pointer)ref; }
+    static void destroy_token( pointer /*token*/) {}
+};
+
+// small object specialization (converts void* to the correct type, passes objects directly.)
+template<typename T>
+class token_helper<T, false> {
+    typedef union {
+        T actual_value;
+        void * void_overlay;
+    } type_to_void_ptr_map;
+    public:
+    typedef T pointer;  // not really a pointer in this case.
+    typedef T value_type;
+    static pointer create_token(const value_type & source) {
+        return source; }
+    static value_type & token(pointer & t) { return t;}
+    static void * cast_to_void_ptr(pointer ref) { 
+        type_to_void_ptr_map mymap; 
+        mymap.void_overlay = NULL;
+        mymap.actual_value = ref; 
+        return mymap.void_overlay; 
+    }
+    static pointer cast_from_void_ptr(void * ref) { 
+        type_to_void_ptr_map mymap;
+        mymap.void_overlay = ref;
+        return mymap.actual_value;
+    }
+    static void destroy_token( pointer /*token*/) {}
+};
+
 template<typename T, typename U, typename Body>
 class concrete_filter: public tbb::filter {
     const Body& my_body;
-
-    typedef typename tbb::tbb_allocator<U> u_allocator;
-    typedef typename tbb::tbb_allocator<T> t_allocator;
+    typedef token_helper<T,is_large_object<T>::r > t_helper;
+    typedef typename t_helper::pointer t_pointer;
+    typedef token_helper<U,is_large_object<U>::r > u_helper;
+    typedef typename u_helper::pointer u_pointer;
 
     /*override*/ void* operator()(void* input) {
-        T* temp_input = (T*)input;
-        // Call user's operator()() here
-        U* output_u = u_allocator().allocate(1);
-        void* output = (void*) new (output_u) U(my_body(*temp_input)); 
-        t_allocator().destroy(temp_input);
-        t_allocator().deallocate(temp_input,1);
-        return output;
+        t_pointer temp_input = t_helper::cast_from_void_ptr(input);
+        u_pointer output_u = u_helper::create_token(my_body(t_helper::token(temp_input)));
+        t_helper::destroy_token(temp_input);
+        return u_helper::cast_to_void_ptr(output_u);
     }
 
 public:
     concrete_filter(tbb::filter::mode filter_mode, const Body& body) : filter(filter_mode), my_body(body) {}
 };
 
+// input 
 template<typename U, typename Body>
 class concrete_filter<void,U,Body>: public filter {
     const Body& my_body;
-
-    typedef typename tbb::tbb_allocator<U> u_allocator;
+    typedef token_helper<U, is_large_object<U>::r > u_helper;
+    typedef typename u_helper::pointer u_pointer;
 
     /*override*/void* operator()(void*) {
         flow_control control;
-        U* output_u = u_allocator().allocate(1);
-        (void) new (output_u) U(my_body(control));
+        u_pointer output_u = u_helper::create_token(my_body(control));
         if(control.is_pipeline_stopped) {
-            u_allocator().destroy(output_u);
-            u_allocator().deallocate(output_u,1);
-            output_u = NULL;
+            u_helper::destroy_token(output_u);
+            set_end_of_input();
+            return NULL;
         }
-        return (void*)output_u;
+        return u_helper::cast_to_void_ptr(output_u);
     }
+
 public:
-    concrete_filter(tbb::filter::mode filter_mode, const Body& body) : filter(filter_mode), my_body(body) {}
+    concrete_filter(tbb::filter::mode filter_mode, const Body& body) : 
+        filter(static_cast<tbb::filter::mode>(filter_mode | filter_may_emit_null)),
+        my_body(body)
+    {}
 };
 
 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 typename t_helper::pointer t_pointer;
    
-    typedef typename tbb::tbb_allocator<T> t_allocator;
-
     /*override*/ void* operator()(void* input) {
-        T* temp_input = (T*)input;
-        my_body(*temp_input);
-        t_allocator().destroy(temp_input);
-        t_allocator().deallocate(temp_input,1);
+        t_pointer temp_input = t_helper::cast_from_void_ptr(input);
+        my_body(t_helper::token(temp_input));
+        t_helper::destroy_token(temp_input);
         return NULL;
     }
 public:
@@ -542,12 +623,12 @@ inline void parallel_pipeline(size_t max_number_of_live_tokens, const filter_t<v
 }
 #endif // __TBB_TASK_GROUP_CONTEXT
 
-} // interface5
+} // interface6
 
-using interface5::flow_control;
-using interface5::filter_t;
-using interface5::make_filter;
-using interface5::parallel_pipeline;
+using interface6::flow_control;
+using interface6::filter_t;
+using interface6::make_filter;
+using interface6::parallel_pipeline;
 
 } // tbb
 
diff --git a/include/tbb/queuing_mutex.h b/include/tbb/queuing_mutex.h
index ec9832c..fe0d5d9 100644
--- a/include/tbb/queuing_mutex.h
+++ b/include/tbb/queuing_mutex.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/queuing_rw_mutex.h b/include/tbb/queuing_rw_mutex.h
index 5e35478..3c76332 100644
--- a/include/tbb/queuing_rw_mutex.h
+++ b/include/tbb/queuing_rw_mutex.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/reader_writer_lock.h b/include/tbb/reader_writer_lock.h
index 3a63969..a5cace9 100644
--- a/include/tbb/reader_writer_lock.h
+++ b/include/tbb/reader_writer_lock.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/recursive_mutex.h b/include/tbb/recursive_mutex.h
index ddf4283..185fd19 100644
--- a/include/tbb/recursive_mutex.h
+++ b/include/tbb/recursive_mutex.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -30,14 +30,9 @@
 #define __TBB_recursive_mutex_H
 
 #if _WIN32||_WIN64
-    #include <windows.h>
-    #if !defined(_WIN32_WINNT)
-    // The following Windows API function is declared explicitly;
-    // otherwise any user would have to specify /D_WIN32_WINNT=0x0400
-    extern "C" BOOL WINAPI TryEnterCriticalSection( LPCRITICAL_SECTION );
-    #endif
-#else /* if not _WIN32||_WIN64 */
-    #include <pthread.h>
+#include "machine/windows_api.h"
+#else
+#include <pthread.h>
 #endif /* _WIN32||_WIN64 */
 
 #include <new>
diff --git a/include/tbb/scalable_allocator.h b/include/tbb/scalable_allocator.h
index 2293803..65f80b5 100644
--- a/include/tbb/scalable_allocator.h
+++ b/include/tbb/scalable_allocator.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/spin_mutex.h b/include/tbb/spin_mutex.h
index a88a14a..140c6e9 100644
--- a/include/tbb/spin_mutex.h
+++ b/include/tbb/spin_mutex.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -41,12 +41,12 @@ namespace tbb {
 //! A lock that occupies a single byte.
 /** A spin_mutex is a spin mutex that fits in a single byte.  
     It should be used only for locking short critical sections 
-    (typically <20 instructions) when fairness is not an issue.  
+    (typically less than 20 instructions) when fairness is not an issue.  
     If zero-initialized, the mutex is considered unheld.
     @ingroup synchronization */
 class spin_mutex {
     //! 0 if lock is released, 1 if lock is acquired.
-    unsigned char flag;
+    __TBB_Byte flag;
 
 public:
     //! Construct unacquired lock.
@@ -122,7 +122,7 @@ public:
 #if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT
             internal_release();
 #else
-            __TBB_store_with_release(my_mutex->flag, static_cast<unsigned char>(my_unlock_value));
+            __TBB_UnlockByte(my_mutex->flag, static_cast<__TBB_Byte>(my_unlock_value));
             my_mutex = NULL;
 #endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */
         }
@@ -133,7 +133,7 @@ public:
 #if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT
                 internal_release();
 #else
-                __TBB_store_with_release(my_mutex->flag, static_cast<unsigned char>(my_unlock_value));
+                __TBB_UnlockByte(my_mutex->flag, static_cast<__TBB_Byte>(my_unlock_value));
 #endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */
             }
         }
diff --git a/include/tbb/spin_rw_mutex.h b/include/tbb/spin_rw_mutex.h
index 38b3a1f..cfe806e 100644
--- a/include/tbb/spin_rw_mutex.h
+++ b/include/tbb/spin_rw_mutex.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -162,7 +162,7 @@ public:
             return result;
         }
 
-    private:
+    protected:
         //! The pointer to the current mutex that is held, or NULL if no mutex is held.
         spin_rw_mutex* mutex;
 
diff --git a/include/tbb/task.h b/include/tbb/task.h
index 900f099..7b8dab8 100644
--- a/include/tbb/task.h
+++ b/include/tbb/task.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -31,6 +31,7 @@
 
 #include "tbb_stddef.h"
 #include "tbb_machine.h"
+#include <climits>
 
 typedef struct ___itt_caller *__itt_caller;
 
@@ -117,11 +118,9 @@ namespace internal {
         //! Pure virtual destructor;
         //  Have to have it just to shut up overzealous compilation warnings
         virtual ~scheduler() = 0;
-#if __TBB_ARENA_PER_MASTER
 
         //! For internal use only
         virtual void enqueue( task& t, void* reserved ) = 0;
-#endif /* __TBB_ARENA_PER_MASTER */
     };
 
     //! A reference count
@@ -132,6 +131,8 @@ namespace internal {
     typedef unsigned short affinity_id;
 
 #if __TBB_TASK_GROUP_CONTEXT
+    class generic_scheduler;
+
     struct context_list_node_t {
         context_list_node_t *my_prev,
                             *my_next;
@@ -197,9 +198,21 @@ namespace internal {
             thread-specific pools. */
         scheduler* origin;
 
-        //! The scheduler that owns the task.
+#if TBB_PREVIEW_TASK_PRIORITY
+        union {
+#endif /* TBB_PREVIEW_TASK_PRIORITY */
+        //! Obsolete. The scheduler that owns the task.
+        /** Retained only for the sake of backward binary compatibility. 
+            Still used by inline methods in the task.h header. **/
         scheduler* owner;
 
+#if TBB_PREVIEW_TASK_PRIORITY
+        //! Pointer to the next offloaded lower priority task.
+        /** Used to maintain a list of offloaded tasks inside the scheduler. **/
+        task* next_offloaded;
+        };
+#endif /* TBB_PREVIEW_TASK_PRIORITY */
+
         //! The task whose reference count includes me.
         /** In the "blocking style" of programming, this field points to the parent task.
             In the "continuation-passing style" of programming, this field points to the
@@ -214,7 +227,8 @@ namespace internal {
         reference_count ref_count;
 
         //! Obsolete. Used to be scheduling depth before TBB 2.2
-        /** Retained only for the sake of backward binary compatibility. **/
+        /** Retained only for the sake of backward binary compatibility.
+            Not used by TBB anymore. **/
         int depth;
 
         //! A task::state_type, stored as a byte for compactness.
@@ -243,6 +257,19 @@ namespace internal {
 
 #if __TBB_TASK_GROUP_CONTEXT
 
+#if TBB_PREVIEW_TASK_PRIORITY
+namespace internal {
+    static const int priority_stride_v4 = INT_MAX / 4;
+}
+
+enum priority_t {
+    priority_normal = internal::priority_stride_v4 * 2,
+    priority_low = priority_normal - internal::priority_stride_v4,
+    priority_high = priority_normal + internal::priority_stride_v4
+};
+
+#endif /* TBB_PREVIEW_TASK_PRIORITY */
+
 #if TBB_USE_CAPTURED_EXCEPTION
     class tbb_exception;
 #else
@@ -251,6 +278,8 @@ namespace internal {
     }
 #endif /* !TBB_USE_CAPTURED_EXCEPTION */
 
+class task_scheduler_init;
+
 //! Used to form groups of tasks 
 /** @ingroup task_scheduling 
     The context services explicit cancellation requests from user code, and unhandled 
@@ -274,6 +303,9 @@ namespace internal {
     appropriately. See also VERSIONING NOTE at the constructor definition below. **/
 class task_group_context : internal::no_copy {
 private:
+    friend class internal::generic_scheduler;
+    friend class task_scheduler_init;
+
 #if TBB_USE_CAPTURED_EXCEPTION
     typedef tbb_exception exception_container_type;
 #else
@@ -303,6 +335,10 @@ public:
     };
 
 private:
+    enum state {
+        may_have_children = 1
+    };
+
     union {
         //! Flavor of this context: bound or isolated.
         kind_type my_kind;
@@ -324,8 +360,8 @@ private:
     /** Read accesses to the field my_cancellation_requested are on the hot path inside
         the scheduler. This padding ensures that this field never shares the same cache 
         line with a local variable that is frequently written to. **/
-    char _leading_padding[internal::NFS_MaxLineSize - 
-                    2 * sizeof(uintptr_t)- sizeof(void*) - sizeof(internal::context_list_node_t)
+    char _leading_padding[internal::NFS_MaxLineSize
+                          - 2 * sizeof(uintptr_t)- sizeof(void*) - sizeof(internal::context_list_node_t)
                           - sizeof(__itt_caller)];
     
     //! Specifies whether cancellation was request for this task group.
@@ -340,22 +376,32 @@ private:
     //! Pointer to the container storing exception being propagated across this task group.
     exception_container_type *my_exception;
 
-    //! Scheduler that registered this context in its thread specific list.
-    /** This field is not terribly necessary, but it allows to get a small performance 
-        benefit by getting us rid of using thread local storage. We do not care 
-        about extra memory it takes since this data structure is excessively padded anyway. **/
-    void *my_owner;
+    //! Scheduler instance that registered this context in its thread specific list.
+    internal::generic_scheduler *my_owner;
+
+    //! Internal state (combination of state flags).
+    uintptr_t my_state;
+
+#if TBB_PREVIEW_TASK_PRIORITY
+    //! Priority level of the task group (in normalized representation)
+    intptr_t my_priority;
+#endif /* TBB_PREVIEW_TASK_PRIORITY */
 
     //! Trailing padding protecting accesses to frequently used members from false sharing
     /** \sa _leading_padding **/
-    char _trailing_padding[internal::NFS_MaxLineSize - sizeof(intptr_t) - 2 * sizeof(void*)];
+    char _trailing_padding[internal::NFS_MaxLineSize - 2 * sizeof(uintptr_t) - 2 * sizeof(void*)
+#if TBB_PREVIEW_TASK_PRIORITY
+                            - sizeof(intptr_t)
+#endif /* TBB_PREVIEW_TASK_PRIORITY */
+                          ];
 
 public:
     //! Default & binding constructor.
     /** By default a bound context is created. That is this context will be bound 
         (as child) to the context of the task calling task::allocate_root(this_context) 
         method. Cancellation requests passed to the parent context are propagated
-        to all the contexts bound to it.
+        to all the contexts bound to it. Similarly priority change is propagated
+        from the parent context to its children.
 
         If task_group_context::isolated is used as the argument, then the tasks associated
         with this context will never be affected by events in any other context.
@@ -376,9 +422,9 @@ public:
         code. This will become critically important for binary compatibility, if 
         we ever have to change the size of the context object.
 
-        Boosting the runtime version will also be necessary whenever new fields
-        are introduced in the currently unused padding areas or the meaning of 
-        the existing fields is changed or extended. **/
+        Boosting the runtime version will also be necessary if new data fields are 
+        introduced in the currently unused padding areas and these fields are updated 
+        by inline methods. **/
     task_group_context ( kind_type relation_with_parent = bound,
                          uintptr_t traits = default_traits )
         : my_kind(relation_with_parent)
@@ -421,6 +467,14 @@ public:
         of the scheduler's dispatch loop exception handler. **/
     void __TBB_EXPORTED_METHOD register_pending_exception ();
 
+#if TBB_PREVIEW_TASK_PRIORITY
+    //! Changes priority of the task grop 
+    void set_priority ( priority_t );
+
+    //! Retrieves current priority of the current task group
+    priority_t priority () const;
+#endif /* TBB_PREVIEW_TASK_PRIORITY */
+
 protected:
     //! Out-of-line part of the constructor. 
     /** Singled out to ensure backward binary compatibility of the future versions. **/
@@ -435,18 +489,21 @@ private:
     static const kind_type detached = kind_type(binding_completed+1);
     static const kind_type dying = kind_type(detached+1);
 
-    //! Checks if any of the ancestors has a cancellation request outstanding, 
-    //! and propagates it back to descendants.
-    void propagate_cancellation_from_ancestors ();
+    //! Propagates state change (if any) from an ancestor
+    /** Checks if one of this object's ancestors is in a new state, and propagates 
+        the new state to all its descendants in this object's heritage line. **/
+    template <typename T>
+    void propagate_state_from_ancestors ( T task_group_context::*mptr_state, T new_state );
+
+    //! Makes sure that the context is registered with a scheduler instance.
+    inline void finish_initialization ( internal::generic_scheduler *local_sched );
+
+    //! Registers this context with the local scheduler and binds it to its parent context
+    void bind_to ( internal::generic_scheduler *local_sched );
+
+    //! Registers this context with the local scheduler
+    void register_with ( internal::generic_scheduler *local_sched );
 
-    //! For debugging purposes only.
-    bool is_alive () { 
-#if TBB_USE_DEBUG
-        return my_version_and_traits != 0xDeadBeef;
-#else
-        return true;
-#endif /* TBB_USE_DEBUG */
-    }
 }; // class task_group_context
 
 #endif /* __TBB_TASK_GROUP_CONTEXT */
@@ -597,13 +654,13 @@ public:
 #endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */
     }
 
-    //! Atomically increment reference count.
+    //! Atomically increment reference count and returns its old value.
     /** Has acquire semantics */  
     void increment_ref_count() {
         __TBB_FetchAndIncrementWacquire( &prefix().ref_count );
     }
 
-    //! Atomically decrement reference count.  
+    //! Atomically decrement reference count and returns its new value.
     /** Has release semantics. */  
     int decrement_ref_count() {
 #if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT
@@ -640,13 +697,31 @@ public:
         prefix().owner->wait_for_all( *this, NULL );
     }
 
-#if __TBB_ARENA_PER_MASTER
     //! Enqueue task for starvation-resistant execution.
+#if TBB_PREVIEW_TASK_PRIORITY
+    /** The task will be enqueued on the normal priority level disregarding the
+        priority of its task group.
+        
+        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. 
+        
+        Use enqueue() overload with explicit priority value and task::group_priority()
+        method to implement such priority inheritance when it is really necessary. **/
+#endif /* TBB_PREVIEW_TASK_PRIORITY */
     static void enqueue( task& t ) {
         t.prefix().owner->enqueue( t, NULL );
     }
 
-#endif /* __TBB_ARENA_PER_MASTER */
+#if TBB_PREVIEW_TASK_PRIORITY
+    //! Enqueue task for starvation-resistant execution on the specified priority level.
+    static void enqueue( task& t, priority_t p ) {
+        __TBB_ASSERT( p == priority_low || p == priority_normal || p == priority_high, "Invalid priority level value" );
+        t.prefix().owner->enqueue( t, (void*)p );
+    }
+#endif /* TBB_PREVIEW_TASK_PRIORITY */
+
     //! The innermost task being executed or destroyed by the current thread at the moment.
     static task& __TBB_EXPORTED_FUNC self();
 
@@ -654,8 +729,12 @@ public:
     task* parent() const {return prefix().parent;}
 
 #if __TBB_TASK_GROUP_CONTEXT
-    //! Shared context that is used to communicate asynchronous state changes
+    //! This method is deprecated and will be removed in the future.
+    /** Use method group() instead. **/
     task_group_context* context() {return prefix().context;}
+
+    //! Pointer to the task group descriptor.
+    task_group_context* group () { return prefix().context; }
 #endif /* __TBB_TASK_GROUP_CONTEXT */   
 
     //! True if task was stolen from the task pool of another thread.
@@ -704,14 +783,36 @@ public:
     virtual void __TBB_EXPORTED_METHOD note_affinity( affinity_id id );
 
 #if __TBB_TASK_GROUP_CONTEXT
+    //! Moves this task from its current group into another one.
+    /** Argument ctx specifies the new group.
+
+        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 change_group() allows to make task group context object
+        a member of the task class, and then associate it with its containing task 
+        object in the latter's constructor. **/
+    void __TBB_EXPORTED_METHOD change_group ( task_group_context& ctx );
+
     //! Initiates cancellation of all tasks in this cancellation group and its subordinate groups.
     /** \return false if cancellation has already been requested, true otherwise. **/
     bool cancel_group_execution () { return prefix().context->cancel_group_execution(); }
 
-    //! Returns true if the context received cancellation request.
+    //! Returns true if the context has received cancellation request.
     bool is_cancelled () const { return prefix().context->is_group_execution_cancelled(); }
 #endif /* __TBB_TASK_GROUP_CONTEXT */
 
+#if TBB_PREVIEW_TASK_PRIORITY
+    //! Changes priority of the task group this task belongs to.
+    void set_group_priority ( priority_t p ) {  prefix().context->set_priority(p); }
+
+    //! Retrieves current priority of the task group this task belongs to.
+    priority_t group_priority () const { return prefix().context->priority(); }
+
+#endif /* TBB_PREVIEW_TASK_PRIORITY */
+
 private:
     friend class interface5::internal::task_base;
     friend class task_list;
diff --git a/include/tbb/task_group.h b/include/tbb/task_group.h
index d245690..fd4d552 100644
--- a/include/tbb/task_group.h
+++ b/include/tbb/task_group.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -123,6 +123,28 @@ public:
         my_root->set_ref_count(1);
     }
 
+    ~task_group_base() {
+        if( my_root->ref_count() > 1 ) {
+            bool stack_unwinding_in_progress = std::uncaught_exception();
+            // Always attempt to do proper cleanup to avoid inevitable memory corruption 
+            // in case of missing wait (for the sake of better testability & debuggability)
+            if ( !is_canceling() )
+                cancel();
+            __TBB_TRY {
+                my_root->wait_for_all();
+            } __TBB_CATCH (...) {
+                task::destroy(*my_root);
+                __TBB_RETHROW();
+            }
+            task::destroy(*my_root);
+            if ( !stack_unwinding_in_progress )
+                internal::throw_exception( internal::eid_missing_wait );
+        }
+        else {
+            task::destroy(*my_root);
+        }
+    }
+
     template<typename F>
     void run( task_handle<F>& h ) {
         internal_run< task_handle<F>, internal::task_handle_task<F> >( h );
@@ -157,18 +179,20 @@ class task_group : public internal::task_group_base {
 public:
     task_group () : task_group_base( task_group_context::concurrent_wait ) {}
 
+#if TBB_DEPRECATED
     ~task_group() __TBB_TRY {
         __TBB_ASSERT( my_root->ref_count() != 0, NULL );
         if( my_root->ref_count() > 1 )
             my_root->wait_for_all();
-        owner().destroy(*my_root);
     }
 #if TBB_USE_EXCEPTIONS
     catch (...) {
-        owner().destroy(*my_root);
+        // Have to destroy my_root here as the base class destructor won't be called
+        task::destroy(*my_root);
         throw;
     }
 #endif /* TBB_USE_EXCEPTIONS */
+#endif /* TBB_DEPRECATED */
 
 #if __SUNPRO_CC
     template<typename F>
@@ -197,25 +221,6 @@ public:
 
 class structured_task_group : public internal::task_group_base {
 public:
-    ~structured_task_group() {
-        if( my_root->ref_count() > 1 ) {
-            bool stack_unwinding_in_progress = std::uncaught_exception();
-            // Always attempt to do proper cleanup to avoid inevitable memory corruption 
-            // in case of missing wait (for the sake of better testability & debuggability)
-            if ( !is_canceling() )
-                cancel();
-            my_root->wait_for_all();
-            owner().destroy(*my_root);
-            if ( !stack_unwinding_in_progress )
-                internal::throw_exception( internal::eid_missing_wait );
-        }
-        else {
-            if( my_root->ref_count() == 1 )
-                my_root->set_ref_count(0);
-            owner().destroy(*my_root);
-        }
-    }
-
     template<typename F>
     task_group_status run_and_wait ( task_handle<F>& h ) {
         return internal_run_and_wait< task_handle<F> >( h );
diff --git a/include/tbb/task_scheduler_init.h b/include/tbb/task_scheduler_init.h
index 458afb2..2f8658e 100644
--- a/include/tbb/task_scheduler_init.h
+++ b/include/tbb/task_scheduler_init.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -30,6 +30,7 @@
 #define __TBB_task_scheduler_init_H
 
 #include "tbb_stddef.h"
+#include "limits.h"
 
 namespace tbb {
 
@@ -43,11 +44,29 @@ namespace internal {
 } // namespace internal
 //! @endcond
 
-//! Class representing reference to tbb scheduler.
-/** A thread must construct a task_scheduler_init, and keep it alive,
-    during the time that it uses the services of class task.
+//! Class delimiting the scope of task scheduler activity.
+/** A thread can construct a task_scheduler_init object and keep it alive
+    while it uses TBB's tasking subsystem (including parallel algorithms).
+
+    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.
+
+    If a parallel construct is used without task_scheduler_init 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 task_scheduler_init::initialize().
     @ingroup task_scheduling */
 class task_scheduler_init: internal::no_copy {
+#if TBB_USE_EXCEPTIONS
+    enum ExceptionPropagationMode {
+        propagation_mode_exact = 1u,
+        propagation_mode_captured = 2u,
+        propagation_mode_mask = propagation_mode_exact | propagation_mode_captured
+    };
+#endif /* TBB_USE_EXCEPTIONS */
+
     /** NULL if not currently initialized. */
     internal::scheduler* my_scheduler;
 public:
@@ -59,10 +78,13 @@ public:
     static const int deferred = -2;
 
     //! Ensure that scheduler exists for this thread
-    /** A value of -1 lets tbb decide on the number of threads, which is typically 
-        the number of hardware threads. For production code, the default value of -1 
-        should be used, particularly if the client code is mixed with third party clients 
-        that might also use tbb.
+    /** 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.
 
         The number_of_threads is ignored if any other task_scheduler_inits 
         currently exist.  A thread may construct multiple task_scheduler_inits.  
@@ -76,8 +98,19 @@ public:
     //! Inverse of method initialize.
     void __TBB_EXPORTED_METHOD terminate();
 
-    //! Shorthand for default constructor followed by call to intialize(number_of_threads).
+    //! Shorthand for default constructor followed by call to initialize(number_of_threads).
     task_scheduler_init( int number_of_threads=automatic, stack_size_type thread_stack_size=0 ) : my_scheduler(NULL)  {
+#if TBB_USE_EXCEPTIONS
+        // Take two lowest order bits of the stack size argument to communicate
+        // default exception propagation mode of the client to be used when the
+        // client manually creates tasks in the master thread and does not use
+        // explicit task group context object. This is necessary because newer 
+        // TBB binaries with exact propagation enabled by default may be used 
+        // by older clients that expect tbb::captured_exception wrapper.
+        // All zeros mean old client - no preference. 
+        __TBB_ASSERT( !(thread_stack_size & propagation_mode_mask), "Requested stack size is not aligned" );
+        thread_stack_size |= TBB_USE_CAPTURED_EXCEPTION ? propagation_mode_captured : propagation_mode_exact;
+#endif /* TBB_USE_EXCEPTIONS */
         initialize( number_of_threads, thread_stack_size );
     }
 
@@ -87,14 +120,24 @@ public:
             terminate();
         internal::poison_pointer( my_scheduler );
     }
-    //! Returns the number of threads tbb scheduler would create if initialized by default.
+    //! Returns the number of threads TBB scheduler would create if initialized by default.
     /** Result returned by this method does not depend on whether the scheduler 
         has already been initialized.
         
         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. */
+        much time your tasks spend in the blocked state.
+        
+        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.
+        
+        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. */
     static int __TBB_EXPORTED_FUNC default_num_threads ();
 
     //! Returns true if scheduler is active (initialized); false otherwise
diff --git a/include/tbb/task_scheduler_observer.h b/include/tbb/task_scheduler_observer.h
index 61003e5..4c09863 100644
--- a/include/tbb/task_scheduler_observer.h
+++ b/include/tbb/task_scheduler_observer.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 9c5ac0f..259d1df 100644
--- a/include/tbb/tbb.h
+++ b/include/tbb/tbb.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -65,6 +65,9 @@
 #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 008422d..bb4690e 100644
--- a/include/tbb/tbb_allocator.h
+++ b/include/tbb/tbb_allocator.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/tbb_config.h b/include/tbb/tbb_config.h
index 1e11988..501538e 100644
--- a/include/tbb/tbb_config.h
+++ b/include/tbb/tbb_config.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -83,14 +83,25 @@
 #endif
 
 #ifndef TBB_IMPLEMENT_CPP0X
-/** By default, use C++0x classes if available **/
-#if __GNUC__==4 && __GNUC_MINOR__>=4 && __GXX_EXPERIMENTAL_CXX0X__
-#define TBB_IMPLEMENT_CPP0X 0
-#else
-#define TBB_IMPLEMENT_CPP0X 1
-#endif
+    /** By default, use C++0x classes if available **/
+    #if __GNUC__==4 && __GNUC_MINOR__>=4 && __GXX_EXPERIMENTAL_CXX0X__
+        #define TBB_IMPLEMENT_CPP0X 0
+    #else
+        #define TBB_IMPLEMENT_CPP0X 1
+    #endif
 #endif /* TBB_IMPLEMENT_CPP0X */
 
+#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
+#endif
+
 /** Feature sets **/
 
 #ifndef __TBB_COUNT_TASK_NODES
@@ -98,16 +109,40 @@
 #endif
 
 #ifndef __TBB_TASK_GROUP_CONTEXT
-#define __TBB_TASK_GROUP_CONTEXT 1
+    #define __TBB_TASK_GROUP_CONTEXT 1
 #endif /* __TBB_TASK_GROUP_CONTEXT */
 
 #ifndef __TBB_SCHEDULER_OBSERVER
-#define __TBB_SCHEDULER_OBSERVER 1
+    #define __TBB_SCHEDULER_OBSERVER 1
 #endif /* __TBB_SCHEDULER_OBSERVER */
 
-#ifndef __TBB_ARENA_PER_MASTER
-#define __TBB_ARENA_PER_MASTER 1
-#endif /* __TBB_ARENA_PER_MASTER */
+#ifndef __TBB_TASK_PRIORITY
+    #define __TBB_TASK_PRIORITY __TBB_CPF_BUILD
+#endif /* __TBB_TASK_PRIORITY */
+
+#if __TBB_TASK_PRIORITY && !__TBB_TASK_GROUP_CONTEXT
+    #error __TBB_TASK_PRIORITY requires __TBB_TASK_GROUP_CONTEXT to be enabled
+#endif
+
+#ifdef TBB_PREVIEW_TASK_PRIORITY
+    #if TBB_PREVIEW_TASK_PRIORITY
+        #define __TBB_NO_IMPLICIT_LINKAGE 1
+        #if __TBB_BUILD && !__TBB_TASK_PRIORITY
+            #error TBB_PREVIEW_TASK_PRIORITY requires __TBB_TASK_PRIORITY to be enabled during TBB build
+        #elif !__TBB_TASK_GROUP_CONTEXT
+            #error TBB_PREVIEW_TASK_PRIORITY requires __TBB_TASK_GROUP_CONTEXT to be enabled
+        #endif
+    #endif
+#else
+    #if __TBB_BUILD
+        #define TBB_PREVIEW_TASK_PRIORITY __TBB_TASK_PRIORITY
+    #endif
+#endif /* TBB_PREVIEW_TASK_PRIORITY */
+
+#if !defined(__TBB_SURVIVE_THREAD_SWITCH) && (_WIN32 || _WIN64 || __linux__)
+    #define __TBB_SURVIVE_THREAD_SWITCH 1
+#endif /* __TBB_SURVIVE_THREAD_SWITCH */
+
 
 /* TODO: The following condition should be extended as soon as new compilers/runtimes 
          with std::exception_ptr support appear. */
@@ -184,6 +219,11 @@
     #define __TBB_SSE_STACK_ALIGNMENT_BROKEN 1
 #endif
 
+#if __GNUC__==4 && __GNUC_MINOR__==3 && __GNUC_PATCHLEVEL__==0
+    // GCC of this version may rashly ignore control dependencies
+    #define __TBB_GCC_OPTIMIZER_ORDERING_BROKEN 1
+#endif
+
 #if __FreeBSD__
     /** A bug in FreeBSD 8.0 results in kernel panic when there is contention 
         on a mutex created with this attribute. **/
@@ -200,5 +240,4 @@
     #define __TBB_ICC_ASM_VOLATILE_BROKEN 1
 #endif
 
-
 #endif /* __TBB_tbb_config_H */
diff --git a/include/tbb/tbb_exception.h b/include/tbb/tbb_exception.h
index c16be5e..2346690 100644
--- a/include/tbb/tbb_exception.h
+++ b/include/tbb/tbb_exception.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -38,15 +38,12 @@
 #endif
 
 #include <stdexcept>
+#include <string> // required to construct std exception classes
 
 #if !TBB_USE_EXCEPTIONS && _MSC_VER
     #pragma warning (pop)
 #endif
 
-#if __SUNPRO_CC
-#include <string> // required to construct std exception classes
-#endif
-
 namespace tbb {
 
 //! Exception for concurrent containers
@@ -70,7 +67,7 @@ public:
     /*override*/ const char* what() const throw();
 };
 
-//! Exception for repeated scheduling of the same task_handle 
+//! Exception for repeated scheduling of the same task_handle
 class invalid_multiple_scheduling : public std::exception {
 public:
     /*override*/ const char* what() const throw();
@@ -105,7 +102,7 @@ enum exception_id {
 };
 
 //! Gathers all throw operators in one place.
-/** Its purpose is to minimize code bloat that can be caused by throw operators 
+/** Its purpose is to minimize code bloat that can be caused by throw operators
     scattered in multiple places, especially in templates. **/
 void __TBB_EXPORTED_FUNC throw_exception_v4 ( exception_id );
 
@@ -126,45 +123,45 @@ namespace tbb {
 //! Interface to be implemented by all exceptions TBB recognizes and propagates across the threads.
 /** If an unhandled exception of the type derived from tbb::tbb_exception is intercepted
     by the TBB scheduler in one of the worker threads, it is delivered to and re-thrown in
-    the root thread. The root thread is the thread that has started the outermost algorithm 
+    the root thread. The root thread is the thread that has started the outermost algorithm
     or root task sharing the same task_group_context with the guilty algorithm/task (the one
     that threw the exception first).
-    
-    Note: when documentation mentions workers with respect to exception handling, 
+
+    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. 
+    Consequently a root thread can be master or worker thread.
 
-    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 
+    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;" operator. 
-    
-    TBB provides two implementations of this interface: tbb::captured_exception and 
+    of the "throw;" operator.
+
+    TBB provides two implementations of this interface: tbb::captured_exception and
     template class tbb::movable_exception. See their declarations for more info. **/
 class tbb_exception : public std::exception
 {
-    /** No operator new is provided because the TBB usage model assumes dynamic 
+    /** No operator new is provided because the TBB usage model assumes dynamic
         creation of the TBB exception objects only by means of applying move()
         operation on an exception thrown out of TBB scheduler. **/
     void* operator new ( size_t );
 
 public:
-    //! Creates and returns pointer to the deep copy of this exception object. 
+    //! Creates and returns pointer to the deep copy of this exception object.
     /** Move semantics is allowed. **/
     virtual tbb_exception* move () throw() = 0;
-    
+
     //! Destroys objects created by the move() method.
-    /** Frees memory and calls destructor for this exception object. 
+    /** Frees memory and calls destructor for this exception object.
         Can and must be used only on objects created by the move method. **/
     virtual void destroy () throw() = 0;
 
     //! Throws this exception object.
     /** 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 
+        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. **/
     virtual void throw_self () = 0;
 
@@ -176,8 +173,8 @@ public:
 
     /** Operator delete is provided only to allow using existing smart pointers
         with TBB exception objects obtained as the result of applying move()
-        operation on an exception thrown out of TBB scheduler. 
-        
+        operation on an exception thrown out of TBB scheduler.
+
         When overriding method move() make sure to override operator delete as well
         if memory is allocated not by TBB's scalable allocator. **/
     void operator delete ( void* p ) {
@@ -186,8 +183,8 @@ public:
 };
 
 //! This class is used by TBB to propagate information about unhandled exceptions into the root thread.
-/** 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 
+/** 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.
     \sa tbb::tbb_exception **/
 class captured_exception : public tbb_exception
@@ -205,9 +202,7 @@ public:
         set(name_, info);
     }
 
-    __TBB_EXPORTED_METHOD ~captured_exception () throw() {
-        clear();
-    }
+    __TBB_EXPORTED_METHOD ~captured_exception () throw();
 
     captured_exception& operator= ( const captured_exception& src ) {
         if ( this != &src ) {
@@ -217,26 +212,26 @@ public:
         return *this;
     }
 
-    /*override*/ 
+    /*override*/
     captured_exception* __TBB_EXPORTED_METHOD move () throw();
 
-    /*override*/ 
+    /*override*/
     void __TBB_EXPORTED_METHOD destroy () throw();
 
-    /*override*/ 
+    /*override*/
     void throw_self () { __TBB_THROW(*this); }
 
-    /*override*/ 
+    /*override*/
     const char* __TBB_EXPORTED_METHOD name() const throw();
 
-    /*override*/ 
+    /*override*/
     const char* __TBB_EXPORTED_METHOD what() const throw();
 
     void __TBB_EXPORTED_METHOD set ( const char* name, const char* info ) throw();
     void __TBB_EXPORTED_METHOD clear () throw();
 
 private:
-    //! Used only by method clone().  
+    //! Used only by method clone().
     captured_exception() {}
 
     //! Functionally equivalent to {captured_exception e(name,info); return e.clone();}
@@ -248,9 +243,9 @@ private:
 };
 
 //! Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread
-/** Code using TBB can instantiate this template with an arbitrary ExceptionData type 
+/** Code using TBB can instantiate this template with an arbitrary ExceptionData type
     and throw this exception object. Such exceptions are intercepted by the TBB scheduler
-    and delivered to the root thread (). 
+    and delivered to the root thread ().
     \sa tbb::tbb_exception **/
 template<typename ExceptionData>
 class movable_exception : public tbb_exception
@@ -258,7 +253,7 @@ class movable_exception : public tbb_exception
     typedef movable_exception<ExceptionData> self_type;
 
 public:
-    movable_exception ( const ExceptionData& data_ ) 
+    movable_exception ( const ExceptionData& data_ )
         : my_exception_data(data_)
         , my_dynamic(false)
         , my_exception_name(
@@ -270,7 +265,7 @@ public:
         )
     {}
 
-    movable_exception ( const movable_exception& src ) throw () 
+    movable_exception ( const movable_exception& src ) throw ()
         : tbb_exception(src)
         , my_exception_data(src.my_exception_data)
         , my_dynamic(false)
@@ -295,7 +290,7 @@ public:
 
     /*override*/ const char* what () const throw() { return "tbb::movable_exception"; }
 
-    /*override*/ 
+    /*override*/
     movable_exception* move () throw() {
         void* e = internal::allocate_via_handler_v3(sizeof(movable_exception));
         if ( e ) {
@@ -304,7 +299,7 @@ public:
         }
         return (movable_exception*)e;
     }
-    /*override*/ 
+    /*override*/
     void destroy () throw() {
         __TBB_ASSERT ( my_dynamic, "Method destroy can be called only on dynamically allocated movable_exceptions" );
         if ( my_dynamic ) {
@@ -312,7 +307,7 @@ public:
             internal::deallocate_via_handler_v3(this);
         }
     }
-    /*override*/ 
+    /*override*/
     void throw_self () { __TBB_THROW( *this ); }
 
 protected:
@@ -332,7 +327,7 @@ private:
 namespace internal {
 
 //! Exception container that preserves the exact copy of the original exception
-/** This class can be used only when the appropriate runtime support (mandated 
+/** This class can be used only when the appropriate runtime support (mandated
     by C++0x) is present **/
 class tbb_exception_ptr {
     std::exception_ptr  my_ptr;
@@ -342,7 +337,7 @@ public:
     static tbb_exception_ptr* allocate ( const tbb_exception& tag );
     //! This overload uses move semantics (i.e. it empties src)
     static tbb_exception_ptr* allocate ( captured_exception& src );
-    
+
     //! Destroys this objects
     /** Note that objects of this type can be created only by the allocate() method. **/
     void destroy () throw();
diff --git a/include/tbb/tbb_machine.h b/include/tbb/tbb_machine.h
index 961f88b..bd38d0b 100644
--- a/include/tbb/tbb_machine.h
+++ b/include/tbb/tbb_machine.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -37,7 +37,11 @@
 #pragma managed(push, off)
 #endif
 
-#if __MINGW32__
+#if __MINGW64__
+#include "machine/linux_intel64.h"
+extern "C" __declspec(dllimport) int __stdcall SwitchToThread( void );
+#define __TBB_Yield()  SwitchToThread()
+#elif __MINGW32__
 #include "machine/linux_ia32.h"
 extern "C" __declspec(dllimport) int __stdcall SwitchToThread( void );
 #define __TBB_Yield()  SwitchToThread()
@@ -47,15 +51,13 @@ extern "C" __declspec(dllimport) int __stdcall SwitchToThread( void );
 #include "machine/windows_intel64.h"
 #elif _XBOX 
 #include "machine/xbox360_ppc.h"
-#else
-#error Unsupported platform
 #endif
 
 #ifdef _MANAGED
 #pragma managed(pop)
 #endif
 
-#elif __linux__ || __FreeBSD__
+#elif __linux__ || __FreeBSD__ || __NetBSD__
 
 #if __i386__
 #include "machine/linux_ia32.h"
@@ -63,7 +65,10 @@ extern "C" __declspec(dllimport) int __stdcall SwitchToThread( void );
 #include "machine/linux_intel64.h"
 #elif __ia64__
 #include "machine/linux_ia64.h"
+#elif __powerpc__
+#include "machine/mac_ppc.h"
 #endif
+#include "machine/linux_common.h"
 
 #elif __APPLE__
 
@@ -74,6 +79,7 @@ extern "C" __declspec(dllimport) int __stdcall SwitchToThread( void );
 #elif __POWERPC__
 #include "machine/mac_ppc.h"
 #endif
+#include "machine/macos_common.h"
 
 #elif _AIX
 
@@ -83,6 +89,7 @@ extern "C" __declspec(dllimport) int __stdcall SwitchToThread( void );
 
 #define __asm__ asm 
 #define __volatile__ volatile
+
 #if __i386  || __i386__
 #include "machine/linux_ia32.h"
 #elif __x86_64__
@@ -90,7 +97,14 @@ extern "C" __declspec(dllimport) int __stdcall SwitchToThread( void );
 #elif __sparc
 #include "machine/sunos_sparc.h"
 #endif
+#include <sched.h>
+
+#define __TBB_Yield() sched_yield()
 
+#endif /* Sun */
+
+#ifndef __TBB_64BIT_ATOMICS
+#define __TBB_64BIT_ATOMICS 1
 #endif
 
 //! Prerequisites for each architecture port
@@ -107,30 +121,11 @@ extern "C" __declspec(dllimport) int __stdcall SwitchToThread( void );
     architecture+compiler it can be a hardware fence, a compiler fence, both or
     nothing. **/
 #if    !defined(__TBB_CompareAndSwap4) \
-    || !defined(__TBB_CompareAndSwap8) \
+    || !defined(__TBB_CompareAndSwap8) && __TBB_64BIT_ATOMICS \
     || !defined(__TBB_Yield)           \
     || !defined(__TBB_full_memory_fence)    \
     || !defined(__TBB_release_consistency_helper)
-#error Minimal requirements for tbb_machine.h not satisfied 
-#endif
-
-#ifndef __TBB_load_with_acquire
-    //! Load with acquire semantics; i.e., no following memory operation can move above the load.
-    template<typename T>
-    inline T __TBB_load_with_acquire(const volatile T& location) {
-        T temp = location;
-        __TBB_release_consistency_helper();
-        return temp;
-    }
-#endif
-
-#ifndef __TBB_store_with_release
-    //! Store with release semantics; i.e., no prior memory operation can move below the store.
-    template<typename T, typename V>
-    inline void __TBB_store_with_release(volatile T& location, V value) {
-        __TBB_release_consistency_helper();
-        location = T(value); 
-    }
+#error Minimal requirements for tbb_machine.h not satisfied; platform is not supported.
 #endif
 
 #ifndef __TBB_Pause
@@ -140,11 +135,15 @@ extern "C" __declspec(dllimport) int __stdcall SwitchToThread( void );
 #endif
 
 namespace tbb {
+
+//! Sequentially consistent full memory fence.
+inline void atomic_fence () { __TBB_full_memory_fence(); }
+
 namespace internal {
 
 //! Class that implements exponential backoff.
 /** See implementation of spin_wait_while_eq for an example. */
-class atomic_backoff {
+class atomic_backoff : no_copy {
     //! Time delay, in units of "pause" instructions. 
     /** Should be equal to approximately the number of "pause" instructions
         that take the same time as an context switch. */
@@ -255,10 +254,12 @@ inline uint32_t __TBB_CompareAndSwapGeneric <4,uint32_t> (volatile void *ptr, ui
     return __TBB_CompareAndSwap4(ptr,value,comparand);
 }
 
+#if __TBB_64BIT_ATOMICS
 template<>
 inline uint64_t __TBB_CompareAndSwapGeneric <8,uint64_t> (volatile void *ptr, uint64_t value, uint64_t comparand ) { 
     return __TBB_CompareAndSwap8(ptr,value,comparand);
 }
+#endif
 
 template<size_t S, typename T>
 inline T __TBB_FetchAndAddGeneric (volatile void *ptr, T addend) {
@@ -297,7 +298,7 @@ inline T __TBB_FetchAndStoreGeneric (volatile void *ptr, T value) {
 // strictest alignment is 16.
 #ifndef __TBB_TypeWithAlignmentAtLeastAsStrict
 
-#if __GNUC__ || __SUNPRO_CC
+#if __GNUC__ || __SUNPRO_CC || __IBMCPP__
 struct __TBB_machine_type_with_strictest_alignment {
     int member[4];
 } __attribute__((aligned(16)));
@@ -328,7 +329,7 @@ struct work_around_alignment_bug {
 #endif
 };
 #define __TBB_TypeWithAlignmentAtLeastAsStrict(T) tbb::internal::type_with_alignment<tbb::internal::work_around_alignment_bug<sizeof(T),T>::alignment>
-#elif __GNUC__ || __SUNPRO_CC
+#elif __GNUC__ || __SUNPRO_CC || __IBMCPP__
 #define __TBB_TypeWithAlignmentAtLeastAsStrict(T) tbb::internal::type_with_alignment<__alignof__(T)>
 #else
 #define __TBB_TypeWithAlignmentAtLeastAsStrict(T) __TBB_machine_type_with_strictest_alignment
@@ -554,28 +555,74 @@ const T reverse<T>::byte_table[256] = {
 #define __TBB_FetchAndDecrementWrelease(P) __TBB_FetchAndAddW(P,(-1))
 #endif
 
-#if __TBB_WORDSIZE==4
-// On 32-bit platforms, "atomic.h" requires definition of __TBB_Store8 and __TBB_Load8
+template <typename T, size_t S>
+struct __TBB_machine_load_store {
+    static inline T load_with_acquire(const volatile T& location) {
+        T to_return = location;
+        __TBB_release_consistency_helper();
+        return to_return;
+    }
+
+    static inline void store_with_release(volatile T &location, T value) {
+        __TBB_release_consistency_helper();
+        location = value;
+    }
+};
+
+#if __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS
+#if _MSC_VER
+using tbb::internal::int64_t;
+#endif
+// On 32-bit platforms, there should be definition of __TBB_Store8 and __TBB_Load8
 #ifndef __TBB_Store8
 inline void __TBB_Store8 (volatile void *ptr, int64_t value) {
-    tbb::internal::atomic_backoff b;
     for(;;) {
         int64_t result = *(int64_t *)ptr;
         if( __TBB_CompareAndSwap8(ptr,value,result)==result ) break;
-        b.pause();
     }
 }
 #endif
 
 #ifndef __TBB_Load8
 inline int64_t __TBB_Load8 (const volatile void *ptr) {
-    int64_t result = *(int64_t *)ptr;
-    result = __TBB_CompareAndSwap8((volatile void *)ptr,result,result);
-    return result;
+    const int64_t anyvalue = 3264; // Could be anything, just the same for comparand and new value
+    return __TBB_CompareAndSwap8(const_cast<volatile void *>(ptr),anyvalue,anyvalue);
 }
 #endif
+
+template <typename T>
+struct __TBB_machine_load_store<T,8> {
+    static inline T load_with_acquire(const volatile T& location) {
+        T to_return = (T)__TBB_Load8((const volatile void*)&location);
+        __TBB_release_consistency_helper();
+        return to_return;
+    }
+
+    static inline void store_with_release(volatile T& location, T value) {
+        __TBB_release_consistency_helper();
+        __TBB_Store8((volatile void *)&location,(int64_t)value);
+    }
+};
 #endif /* __TBB_WORDSIZE==4 */
 
+#ifndef __TBB_load_with_acquire
+template<typename T>
+inline T __TBB_load_with_acquire(const volatile T &location) {
+    return __TBB_machine_load_store<T,sizeof(T)>::load_with_acquire(location);
+}
+#endif
+
+#ifndef __TBB_store_with_release
+template<typename T, typename V>
+inline void __TBB_store_with_release(volatile T& location, V value) {
+    __TBB_machine_load_store<T,sizeof(T)>::store_with_release(location,T(value));
+}
+//! Overload that exists solely to avoid /Wp64 warnings.
+inline void __TBB_store_with_release(volatile size_t& location, size_t value) {
+    __TBB_machine_load_store<size_t,sizeof(size_t)>::store_with_release(location,value);
+}
+#endif
+
 #ifndef __TBB_Log2
 inline intptr_t __TBB_Log2( uintptr_t x ) {
     if( x==0 ) return -1;
@@ -616,14 +663,18 @@ inline void __TBB_AtomicAND( volatile void *operand, uintptr_t addend ) {
 }
 #endif
 
+#ifndef __TBB_Byte
+typedef unsigned char __TBB_Byte;
+#endif
+
 #ifndef __TBB_TryLockByte
-inline bool __TBB_TryLockByte( unsigned char &flag ) {
+inline bool __TBB_TryLockByte( __TBB_Byte &flag ) {
     return __TBB_CompareAndSwap1(&flag,1,0)==0;
 }
 #endif
 
 #ifndef __TBB_LockByte
-inline uintptr_t __TBB_LockByte( unsigned char& flag ) {
+inline uintptr_t __TBB_LockByte( __TBB_Byte& flag ) {
     if ( !__TBB_TryLockByte(flag) ) {
         tbb::internal::atomic_backoff b;
         do {
@@ -634,6 +685,8 @@ inline uintptr_t __TBB_LockByte( unsigned char& flag ) {
 }
 #endif
 
+#define __TBB_UnlockByte __TBB_store_with_release
+
 #ifndef __TBB_ReverseByte
 inline unsigned char __TBB_ReverseByte(unsigned char src) {
     return tbb::internal::reverse<unsigned char>::byte_table[src];
diff --git a/include/tbb/tbb_profiling.h b/include/tbb/tbb_profiling.h
index c3bbb51..a56039f 100644
--- a/include/tbb/tbb_profiling.h
+++ b/include/tbb/tbb_profiling.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -102,4 +102,104 @@ namespace tbb {
 
 #endif /* no tools support */
 
+#include "atomic.h"
+// Need these to work regardless of tools support
+namespace tbb {
+    namespace internal {
+
+        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);
+        void* __TBB_EXPORTED_FUNC itt_load_pointer_v3( const void* src );
+
+        // two template arguments are to workaround /Wp64 warning with tbb::atomic specialized for unsigned type
+        template <typename T, typename U>
+        inline void itt_store_word_with_release(tbb::atomic<T>& dst, U src) {
+#if TBB_USE_THREADING_TOOLS
+            // This assertion should be replaced with static_assert
+            __TBB_ASSERT(sizeof(T) == sizeof(void *), "Type must be word-sized.");
+            itt_store_pointer_with_release_v3(&dst, (void *)uintptr_t(src));
+#else
+            dst = src;
+#endif // TBB_USE_THREADING_TOOLS
+        }
+
+        template <typename T>
+        inline T itt_load_word_with_acquire(const tbb::atomic<T>& src) {
+#if TBB_USE_THREADING_TOOLS
+            // 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 
+            #pragma warning (push)
+            #pragma warning (disable: 4311)
+#endif
+            T result = (T)itt_load_pointer_with_acquire_v3(&src);
+#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)
+            #pragma warning (pop)
+#endif
+            return result;
+#else
+            return src;
+#endif // TBB_USE_THREADING_TOOLS
+        }
+
+        template <typename T>
+        inline void itt_store_word_with_release(T& dst, T src) {
+#if TBB_USE_THREADING_TOOLS
+            // This assertion should be replaced with static_assert
+            __TBB_ASSERT(sizeof(T) == sizeof(void *), "Type must be word-sized.");
+            itt_store_pointer_with_release_v3(&dst, (void *)src);
+#else
+            __TBB_store_with_release(dst, src); 
+#endif // TBB_USE_THREADING_TOOLS
+        }
+
+        template <typename T>
+        inline T itt_load_word_with_acquire(const T& src) {
+#if TBB_USE_THREADING_TOOLS
+            // This assertion should be replaced with static_assert
+            __TBB_ASSERT(sizeof(T) == sizeof(void *), "Type must be word-sized");
+            return (T)itt_load_pointer_with_acquire_v3(&src);
+#else
+            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
+            // This assertion should be replaced with static_assert
+            __TBB_ASSERT(sizeof(T) == sizeof(void *), "Type must be word-sized");
+            itt_store_pointer_with_release_v3(&dst, (void *)src);
+#else
+            dst = src;
+#endif
+        }
+
+        template <typename T>
+        inline T itt_hide_load_word(const T& src) {
+#if TBB_USE_THREADING_TOOLS
+            // This assertion should be replaced with static_assert
+            __TBB_ASSERT(sizeof(T) == sizeof(void *), "Type must be word-sized.");
+            return (T)itt_load_pointer_v3(&src);
+#else
+            return src;
+#endif
+        }
+
+#if TBB_USE_THREADING_TOOLS
+        inline void call_itt_notify(notify_type t, void *ptr) {
+            call_itt_notify_v5((int)t, ptr);
+        }
+#else
+        inline void call_itt_notify(notify_type /*t*/, void * /*ptr*/) {}
+#endif // TBB_USE_THREADING_TOOLS
+
+    } // namespace internal
+} // namespace tbb
+
 #endif /* __TBB_profiling_H */
diff --git a/include/tbb/tbb_stddef.h b/include/tbb/tbb_stddef.h
index 5230d01..2e834ac 100644
--- a/include/tbb/tbb_stddef.h
+++ b/include/tbb/tbb_stddef.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 5000
+#define TBB_INTERFACE_VERSION 5006
 #define TBB_INTERFACE_VERSION_MAJOR TBB_INTERFACE_VERSION/1000
 
 // The oldest major interface version still supported
@@ -101,7 +101,7 @@
 
 // Define preprocessor symbols used to determine architecture
 #if _WIN32||_WIN64
-#   if defined(_M_AMD64)
+#   if defined(_M_X64)||defined(__x86_64__)  // the latter for MinGW support
 #       define __TBB_x86_64 1
 #   elif defined(_M_IA64)
 #       define __TBB_ipf 1
@@ -123,6 +123,9 @@
 #   endif
 #endif
 
+// tbb_config.h should be included the first since it contains macro definitions used in other headers
+#include "tbb_config.h"
+
 #if _MSC_VER
 // define the parts of stdint.h that are needed, but put them inside tbb::internal
 namespace tbb {
@@ -149,7 +152,7 @@ namespace internal {
 #define __TBB_EXPORTED_METHOD
 #endif
 
-#include <cstddef>      /* Need size_t and ptrdiff_t (the latter on Windows only) from here. */
+#include <cstddef>      /* Need size_t and ptrdiff_t */
 
 #if _MSC_VER
 #define __TBB_tbb_windef_H
@@ -157,10 +160,11 @@ namespace internal {
 #undef __TBB_tbb_windef_H
 #endif
 
-#include "tbb_config.h"
-
 //! The namespace tbb contains all components of the library.
 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 );
 
@@ -212,8 +216,6 @@ class split {
  */
 namespace internal {
 
-using std::size_t;
-
 //! Compile-time constant that is upper bound on cache line/sector size.
 /** It should be used only in situations where having a compile-time upper 
     bound is more useful than a run-time exact answer.
@@ -260,15 +262,19 @@ void __TBB_EXPORTED_FUNC handle_perror( int error_code, const char* aux_info );
 void __TBB_EXPORTED_FUNC runtime_warning( const char* format, ... );
 
 #if TBB_USE_ASSERT
+static void* const poisoned_ptr = reinterpret_cast<void*>(-1);
+
 //! Set p to invalid pointer value.
 template<typename T>
-inline void poison_pointer( T* & p ) {
-    p = reinterpret_cast<T*>(-1);
-}
+inline void poison_pointer( T*& p ) { p = reinterpret_cast<T*>(poisoned_ptr); }
+
+/** Expected to be used in assertions only, thus no empty form is defined. **/
+template<typename T>
+inline bool is_poisoned( T* p ) { return p == reinterpret_cast<T*>(poisoned_ptr); }
 #else
 template<typename T>
 inline void poison_pointer( T* ) {/*do nothing*/}
-#endif /* TBB_USE_ASSERT */
+#endif /* !TBB_USE_ASSERT */
 
 //! Cast pointer from U* to T.
 /** This method should be used sparingly as a last resort for dealing with 
diff --git a/include/tbb/tbb_thread.h b/include/tbb/tbb_thread.h
index 0f878ff..41890e7 100644
--- a/include/tbb/tbb_thread.h
+++ b/include/tbb/tbb_thread.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -30,7 +30,7 @@
 #define __TBB_tbb_thread_H
 
 #if _WIN32||_WIN64
-#include <windows.h>
+#include "machine/windows_api.h"
 #define __TBB_NATIVE_THREAD_ROUTINE unsigned WINAPI
 #define __TBB_NATIVE_THREAD_ROUTINE_PTR(r) unsigned (WINAPI* r)( void* )
 #else
@@ -41,7 +41,6 @@
 
 #include "tbb_stddef.h"
 #include "tick_count.h"
-#include <exception>             // Need std::terminate from here.
 
 #if !TBB_USE_EXCEPTIONS && _MSC_VER
     // Suppress "C++ exception handler used, but unwind semantics are not enabled" warning in STL headers
@@ -83,11 +82,7 @@ namespace internal {
 
         static __TBB_NATIVE_THREAD_ROUTINE start_routine( void* c ) {
             thread_closure_0 *self = static_cast<thread_closure_0*>(c);
-            __TBB_TRY {
-                self->function();
-            } __TBB_CATCH( ... ) {
-                std::terminate();
-            }
+            self->function();
             delete self;
             return 0;
         }
@@ -100,11 +95,7 @@ namespace internal {
         //! Routine passed to Windows's _beginthreadex by thread::internal_start() inside tbb.dll
         static __TBB_NATIVE_THREAD_ROUTINE start_routine( void* c ) {
             thread_closure_1 *self = static_cast<thread_closure_1*>(c);
-            __TBB_TRY {
-                self->function(self->arg1);
-            } __TBB_CATCH( ... ) {
-                std::terminate();
-            }
+            self->function(self->arg1);
             delete self;
             return 0;
         }
@@ -117,11 +108,7 @@ namespace internal {
         //! Routine passed to Windows's _beginthreadex by thread::internal_start() inside tbb.dll
         static __TBB_NATIVE_THREAD_ROUTINE start_routine( void* c ) {
             thread_closure_2 *self = static_cast<thread_closure_2*>(c);
-            __TBB_TRY {
-                self->function(self->arg1, self->arg2);
-            } __TBB_CATCH( ... ) {
-                std::terminate();
-            }
+            self->function(self->arg1, self->arg2);
             delete self;
             return 0;
         }
@@ -183,6 +170,15 @@ namespace internal {
         native_handle_type native_handle() { return my_handle; }
     
         //! The number of hardware thread contexts.
+        /** Before TBB 3.0 U4 this methods 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.
+            
+            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. **/
         static unsigned __TBB_EXPORTED_FUNC hardware_concurrency();
     private:
         native_handle_type my_handle; 
diff --git a/include/tbb/tbbmalloc_proxy.h b/include/tbb/tbbmalloc_proxy.h
index f15ca12..f0f0ed7 100644
--- a/include/tbb/tbbmalloc_proxy.h
+++ b/include/tbb/tbbmalloc_proxy.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 a3d25d5..394afb0 100644
--- a/include/tbb/tick_count.h
+++ b/include/tbb/tick_count.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -32,7 +32,7 @@
 #include "tbb_stddef.h"
 
 #if _WIN32||_WIN64
-#include <windows.h>
+#include "machine/windows_api.h"
 #elif __linux__
 #include <ctime>
 #else /* generic Unix */
diff --git a/index.html b/index.html
index a126891..c128a07 100644
--- a/index.html
+++ b/index.html
@@ -32,7 +32,7 @@ To port TBB to a new platform, operating system or architecture, see the <A HREF
 
 <HR>
 <p></p>
-Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
+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 
diff --git a/src/Makefile b/src/Makefile
index dc6943e..36aab05 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -76,8 +76,8 @@ native_examples: tbb tbbmalloc
 
 debug_%:: cfg?=debug
 debug_%:: run_cmd=$(debugger)
-test_% stress_% time_%:: cfg?=release
-debug_% test_% stress_% time_%::
+test_% stress_% time_% perf_%:: cfg?=release
+debug_% test_% stress_% time_% perf_%::
 	$(MAKE) -C "$(work_dir)_$(cfg)"  -r -f $(tbb_root)/build/Makefile.test cfg=$(cfg) run_cmd="$(run_cmd)" tbb_root=$(tbb_root) $@
 
 clean_%::
@@ -107,7 +107,7 @@ test_debug_no_depends:
 
 .PHONY: tbbmalloc_release tbbmalloc_debug
 .PHONY: tbbmalloc_dll_release tbbmalloc_dll_debug tbbmalloc_proxy_dll_release tbbmalloc_proxy_dll_debug
-.PHONY: tbbmalloc_test_release tbbmalloc_test_debug tbbmalloc_test_release_no_depends tbbmalloc_test_debug_no_depends
+.PHONY: tbbmalloc_test tbbmalloc_test_release tbbmalloc_test_debug tbbmalloc_test_release_no_depends tbbmalloc_test_debug_no_depends
 
 tbbmalloc_release: mkdir_release
 	$(MAKE) -C "$(work_dir)_release"  -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=release malloc tbb_root=$(tbb_root)
@@ -127,6 +127,8 @@ tbbmalloc_dll_debug: mkdir_debug
 tbbmalloc_proxy_dll_debug: mkdir_debug
 	$(MAKE) -C "$(work_dir)_debug"  -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=debug malloc_proxy_dll tbb_root=$(tbb_root)
 
+tbbmalloc_test: tbbmalloc_test_release tbbmalloc_test_debug
+
 tbbmalloc_test_release: $(call cross_cfg,mkdir_release) $(call cross_cfg,tbbmalloc_release) tbbmalloc_test_release_no_depends
 tbbmalloc_test_release_no_depends:
 	$(MAKE) -C "$(call cross_cfg,$(work_dir)_release)"  -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=release malloc_test tbb_root=$(tbb_root)
diff --git a/src/index.html b/src/index.html
index fe27a65..a57588a 100644
--- a/src/index.html
+++ b/src/index.html
@@ -12,10 +12,12 @@ This directory contains the source code and unit tests for Threading Building Bl
 <DD>Source code of the TBB scalable memory allocator.
 <DT><A HREF="test">test</A>
 <DD>Source code of the TBB unit tests.
-<DT><A HREF="old">old</A>
-<DD>Source code of deprecated TBB entities that are still shipped as part of the TBB library for the sake of backward compatibility.
 <DT><A HREF="rml">rml</A>
 <DD>Source code of the Resource Management Layer (RML).
+<DT><A HREF="perf">perf</A>
+<DD>Source code of microbenchmarks.
+<DT><A HREF="old">old</A>
+<DD>Source code of deprecated TBB entities that are still shipped as part of the TBB library for the sake of backward compatibility.
 </DL>
 
 <h2>Files</h2>
@@ -64,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-2010 Intel Corporation.  All Rights Reserved.
+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 
diff --git a/src/old/concurrent_queue_v2.cpp b/src/old/concurrent_queue_v2.cpp
index 0359a95..3fca17e 100644
--- a/src/old/concurrent_queue_v2.cpp
+++ b/src/old/concurrent_queue_v2.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 efficient, 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;
@@ -80,7 +80,7 @@ struct micro_queue {
     class pop_finalizer: no_copy {
         ticket my_ticket;
         micro_queue& my_queue;
-        page* my_page; 
+        page* my_page;
     public:
         pop_finalizer( micro_queue& queue, ticket k, page* p ) :
             my_ticket(k), my_queue(queue), my_page(p)
@@ -105,7 +105,7 @@ struct micro_queue {
 };
 
 //! Internal representation of a ConcurrentQueue.
-/** For efficient, 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:
diff --git a/src/old/concurrent_queue_v2.h b/src/old/concurrent_queue_v2.h
index d55b5a3..bb1385a 100644
--- a/src/old/concurrent_queue_v2.h
+++ b/src/old/concurrent_queue_v2.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -41,7 +41,6 @@ namespace internal {
 
 class concurrent_queue_rep;
 class concurrent_queue_iterator_rep;
-class concurrent_queue_iterator_base;
 template<typename Container, typename Value> class concurrent_queue_iterator;
 
 //! For internal use only.
@@ -53,8 +52,14 @@ class concurrent_queue_base: no_copy {
 
     friend class concurrent_queue_rep;
     friend struct micro_queue;
+#ifdef __IBMCPP__ 
+    // In C++ 2003, friend micro_queue's rights do not extend to pop_finalizer's
+    // nested class member variable my_page. So, strictly speaking, this assumes C++0x.
+    friend class micro_queue::pop_finalizer;
+#endif
     friend class concurrent_queue_iterator_rep;
     friend class concurrent_queue_iterator_base;
+
 protected:
     //! Prefix on a page
     struct page {
@@ -99,7 +104,7 @@ protected:
 //! Type-independent portion of concurrent_queue_iterator.
 /** @ingroup containers */
 class concurrent_queue_iterator_base {
-    //! Concurrentconcurrent_queue over which we are iterating.
+    //! concurrent_queue over which we are iterating.
     /** NULL if one past last element in queue. */
     concurrent_queue_iterator_rep* my_rep;
 
@@ -240,7 +245,7 @@ public:
     typedef const T& const_reference;
 
     //! Integral type for representing size of the queue.
-    /** Notice that the size_type is a signed integral type.
+    /** 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. */
     typedef std::ptrdiff_t size_type;
 
diff --git a/src/old/concurrent_vector_v2.cpp b/src/old/concurrent_vector_v2.cpp
index b0d161d..d54e84c 100644
--- a/src/old/concurrent_vector_v2.cpp
+++ b/src/old/concurrent_vector_v2.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/old/concurrent_vector_v2.h b/src/old/concurrent_vector_v2.h
index 738d29a..2b44449 100644
--- a/src/old/concurrent_vector_v2.h
+++ b/src/old/concurrent_vector_v2.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/old/spin_rw_mutex_v2.cpp b/src/old/spin_rw_mutex_v2.cpp
index a19ec93..a2f2a0b 100644
--- a/src/old/spin_rw_mutex_v2.cpp
+++ b/src/old/spin_rw_mutex_v2.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/old/spin_rw_mutex_v2.h b/src/old/spin_rw_mutex_v2.h
index bc45277..23a4330 100644
--- a/src/old/spin_rw_mutex_v2.h
+++ b/src/old/spin_rw_mutex_v2.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/old/task_v2.cpp b/src/old/task_v2.cpp
index 7deccfc..53c360a 100644
--- a/src/old/task_v2.cpp
+++ b/src/old/task_v2.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 c5ed6ec..b00a848 100644
--- a/src/old/test_concurrent_queue_v2.cpp
+++ b/src/old/test_concurrent_queue_v2.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/old/test_concurrent_vector_v2.cpp b/src/old/test_concurrent_vector_v2.cpp
index 62fa5f1..319b09a 100644
--- a/src/old/test_concurrent_vector_v2.cpp
+++ b/src/old/test_concurrent_vector_v2.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/old/test_mutex_v2.cpp b/src/old/test_mutex_v2.cpp
index 0c3f699..b84f1ee 100644
--- a/src/old/test_mutex_v2.cpp
+++ b/src/old/test_mutex_v2.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/perf/fibonacci_cutoff.cpp b/src/perf/fibonacci_cutoff.cpp
index f1f50ef..20cbff2 100644
--- a/src/perf/fibonacci_cutoff.cpp
+++ b/src/perf/fibonacci_cutoff.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 83d7e49..569f0eb 100644
--- a/src/perf/fibonacci_impl_tbb.cpp
+++ b/src/perf/fibonacci_impl_tbb.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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
new file mode 100644
index 0000000..d72572d
--- /dev/null
+++ b/src/perf/perf.cpp
@@ -0,0 +1,863 @@
+/*
+    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.
+*/
+
+#include "perf.h"
+
+#include <cstdlib>
+#include <cmath>
+#include <vector>
+#include <algorithm>
+#include <cassert>
+
+#include "tbb/tick_count.h"
+
+#define HARNESS_CUSTOM_MAIN 1
+#include "../src/test/harness.h"
+#include "../src/test/harness_barrier.h"
+
+#include "tbb/task_scheduler_init.h"
+#include "tbb/task.h"
+#include "tbb/atomic.h"
+
+#if  __linux__ || __APPLE__ || __FreeBSD__ || __NetBSD__
+    #include <sys/resource.h>
+#endif
+
+__TBB_PERF_API int NumCpus = tbb::task_scheduler_init::default_num_threads(),
+                   NumThreads,
+                   MaxConcurrency;
+
+namespace Perf {
+
+SessionSettings theSettings;
+
+namespace internal {
+
+    typedef std::vector<duration_t> durations_t;
+
+    static uintptr_t NumRuns = 7;
+    static duration_t RunDuration = 0.01;
+
+    static const int RateFieldLen = 10;
+    static const int OvhdFieldLen = 12;
+
+    const char* TestNameColumnTitle = "Test name";
+    const char* WorkloadNameColumnTitle = "Workload";
+
+    size_t TitleFieldLen = 0;
+    size_t WorkloadFieldLen = 0;
+
+    int TotalConfigs = 0;
+    int MaxTbbMasters = 1;
+
+    //! Defines the mapping between threads and cores in the undersubscription mode
+    /** When adding new enumerator, insert it before amLast, and do not specify
+        its value explicitly. **/
+    enum AffinitizationMode {
+        amFirst = 0,
+        amDense = amFirst,
+        amSparse,
+        //! Used to track the number of supported affinitization modes
+        amLast
+    };
+
+    static const int NumAffinitizationModes = amLast - amFirst; 
+
+    const char* AffinitizationModeNames[] = { "dense", "sparse" };
+
+    int NumActiveAffModes = 1;
+
+    //! Settings of a test run configuration
+    struct RunConfig {
+        int my_maxConcurrency;
+        int my_numThreads;      // For task scheduler tests this is number of workers + 1
+        int my_numMasters;      // Used for task scheduler tests only
+        int my_affinityMode;    // Used for task scheduler tests only
+        int my_workloadID;
+
+        int NumMasters () const {
+            return theSettings.my_opts & UseTaskScheduler ? my_numMasters : my_numThreads;
+        }
+    };
+
+    double StandardDeviation ( double avg, const durations_t& d ) {
+        double  std_dev = 0;
+        for ( uintptr_t i = 0; i < d.size(); ++i ) {
+            double  dev = fabs(d[i] - avg);
+            std_dev += dev * dev;
+        }
+        std_dev = sqrt(std_dev / d.size());
+        return std_dev / avg * 100;
+    }
+
+    void Statistics ( const durations_t& d, 
+                      duration_t& avgTime, double& stdDev, 
+                      duration_t& minTime, duration_t& maxTime )
+    {
+        minTime = maxTime = avgTime = d[0];
+        for ( size_t i = 1; i < d.size(); ++i ) {
+            avgTime += d[i];
+            if ( minTime > d[i] )
+                minTime = d[i];
+            else if ( maxTime < d[i] )
+                maxTime = d[i];
+        }
+        avgTime = avgTime / d.size();
+        stdDev = StandardDeviation( avgTime, d );
+    }
+
+    //! Timing data for the series of repeated runs and results of their statistical processing
+    struct TimingSeries {
+        //! Statistical timing series
+        durations_t my_durations;
+        
+        //! Average time obtained from my_durations data
+        duration_t  my_avgTime;
+
+        //! Minimal time obtained from my_durations data
+        duration_t  my_minTime;
+
+        //! Minimal time obtained from my_durations data
+        duration_t  my_maxTime;
+
+        //! Standard deviation of my_avgTime value (per cent)
+        double  my_stdDev;
+
+        TimingSeries ( uintptr_t nruns = NumRuns )
+            : my_durations(nruns), my_avgTime(0), my_minTime(0), my_maxTime(0)
+        {}
+
+        void CalculateStatistics () {
+            Statistics( my_durations, my_avgTime, my_stdDev, my_minTime, my_maxTime );
+        }
+    }; // struct TimingSeries
+
+    //! Settings and timing results for a test run configuration
+    struct RunResults {
+        //! Run configuration settings
+        RunConfig   my_config;
+        
+        //! Timing results for this run configuration
+        TimingSeries my_timing;
+    };
+
+    typedef std::vector<const char*>    names_t;
+    typedef std::vector<TimingSeries>   timings_t;
+    typedef std::vector<RunResults>     test_results_t;
+
+    enum TestMethods {
+        idRunSerial = 0x01,
+        idOnStart = 0x02,
+        idOnFinish = 0x04,
+        idPrePostProcess = idOnStart | idOnFinish
+    };
+
+    //! Set of flags identifying methods not overridden by the currently active test
+    /** Used as a scratch var. **/
+    uintptr_t g_absentMethods;
+
+    //! Test object and timing results for all of its configurations 
+    struct TestResults {
+        //! Pointer to the test object interface
+        Test*           my_test;
+
+        //! Set of flags identifying optional methods overridden by my_test
+        /** A set of ORed TestMethods flags **/
+        uintptr_t       my_availableMethods;
+        
+        //! Vector of serial times for each workload supported by this test
+        /** Element index in the vector serves as a zero based workload ID. **/
+        timings_t       my_serialBaselines;
+        
+        //! Common baselines for both parallel and serial variants
+        /** Element index in the vector serves as a zero based workload ID. **/
+        timings_t       my_baselines;
+
+        //! Strings identifying workloads to be used in output
+        names_t         my_workloadNames;
+
+        //! Vector of timings for all run configurations of my_test
+        test_results_t  my_results;
+
+        const char*     my_testName;
+
+        mutable bool    my_hasOwnership;
+
+        TestResults ( Test* t, const char* className, bool takeOwnership )
+            : my_test(t), my_availableMethods(0), my_testName(className), my_hasOwnership(takeOwnership)
+        {}
+
+        TestResults ( const TestResults& tr )
+            : my_test(tr.my_test)
+            , my_availableMethods(0)
+            , my_testName(tr.my_testName)
+            , my_hasOwnership(tr.my_hasOwnership)
+        {
+            tr.my_hasOwnership = false;
+        }
+
+        ~TestResults () {
+            for ( size_t i = 0; i < my_workloadNames.size(); ++i )
+                delete my_workloadNames[i];
+            if ( my_hasOwnership )
+                delete my_test;
+        }
+    }; // struct TestResults
+
+    typedef std::vector<TestResults> session_t;
+
+    session_t theSession;
+
+    TimingSeries CalibrationTiming;
+
+    const uintptr_t CacheSize = 8*1024*1024;
+    volatile intptr_t W[CacheSize];
+
+    struct WiperBody {
+        void operator()( int ) const {
+            volatile intptr_t sink = 0;
+            for ( uintptr_t i = 0; i < CacheSize; ++i )
+                sink += W[i];
+        }
+    };
+
+    void TraceHistogram ( const durations_t& t, const char* histogramFileName ) {
+        FILE* f = histogramFileName ? fopen(histogramFileName, "wt") : stdout;
+        uintptr_t  n = t.size();
+        const uintptr_t num_buckets = 100;
+        double  min_val = *std::min_element(t.begin(), t.end()),
+                max_val = *std::max_element(t.begin(), t.end()),
+                bucket_size = (max_val - min_val) / num_buckets;
+        std::vector<uintptr_t> hist(num_buckets + 1, 0);
+        for ( uintptr_t i = 0; i < n; ++i )
+            ++hist[uintptr_t((t[i]-min_val)/bucket_size)];
+        ASSERT (hist[num_buckets] == 1, "");
+        ++hist[num_buckets - 1];
+        hist.resize(num_buckets);
+        fprintf (f, "Histogram: nvals = %u, min = %g, max = %g, nbuckets = %u\n", (unsigned)n, min_val, max_val, (unsigned)num_buckets);
+        double bucket = min_val;
+        for ( uintptr_t i = 0; i < num_buckets; ++i, bucket+=bucket_size )
+            fprintf (f, "%12g\t%u\n", bucket, (unsigned)hist[i]);
+        fclose(f);
+    }
+
+#if _MSC_VER
+    typedef DWORD_PTR cpu_set_t;
+
+    class AffinityHelper {
+        static const unsigned MaxAffinitySetSize = sizeof(cpu_set_t) * 8;
+        static unsigned AffinitySetSize;
+
+        //! Mapping from a CPU index to a valid affinity cpu_mask
+        /** The first element is not used. **/
+        static cpu_set_t m_affinities[MaxAffinitySetSize + 1];
+
+        static cpu_set_t m_processMask;
+
+        class Initializer {
+        public:
+            Initializer () {
+                SYSTEM_INFO si;
+                GetSystemInfo(&si);
+                ASSERT( si.dwNumberOfProcessors <= MaxAffinitySetSize, "Too many CPUs" );
+                AffinitySetSize = min (si.dwNumberOfProcessors, MaxAffinitySetSize);
+                cpu_set_t systemMask = 0;
+                GetProcessAffinityMask( GetCurrentProcess(), &m_processMask, &systemMask );
+                cpu_set_t cpu_mask = 1;
+                for ( DWORD i = 0; i < AffinitySetSize; ++i ) {
+                    while ( !(cpu_mask & m_processMask) && cpu_mask )
+                        cpu_mask <<= 1;
+                    ASSERT( cpu_mask != 0, "Process affinity set is culled?" );
+                    m_affinities[i] = cpu_mask;
+                    cpu_mask <<= 1;
+                }
+            }
+        }; // class AffinityHelper::Initializer
+
+        static Initializer m_initializer;
+
+    public:
+        static cpu_set_t CpuAffinity ( int cpuIndex ) {
+            return m_affinities[cpuIndex % AffinitySetSize];
+        }
+
+        static const cpu_set_t& ProcessMask () { return m_processMask; }
+    }; // class AffinityHelper
+
+    unsigned AffinityHelper::AffinitySetSize = 0;
+    cpu_set_t AffinityHelper::m_affinities[AffinityHelper::MaxAffinitySetSize + 1] = {0};
+    cpu_set_t AffinityHelper::m_processMask = 0;
+    AffinityHelper::Initializer AffinityHelper::m_initializer;
+
+    #define CPU_ZERO(cpu_mask)              (*cpu_mask = 0)
+    #define CPU_SET(cpu_idx, cpu_mask)      (*cpu_mask |= AffinityHelper::CpuAffinity(cpu_idx))
+    #define CPU_CLR(cpu_idx, cpu_mask)      (*cpu_mask &= ~AffinityHelper::CpuAffinity(cpu_idx))
+    #define CPU_ISSET(cpu_idx, cpu_mask)    ((*cpu_mask & AffinityHelper::CpuAffinity(cpu_idx)) != 0)
+
+#elif __linux__ /* end of _MSC_VER */
+
+    #include <unistd.h>
+    #include <sys/types.h>
+    #include <linux/unistd.h>
+
+    pid_t gettid() { return (pid_t)syscall(__NR_gettid); }
+
+    #define GET_MASK(cpu_set) (*(unsigned*)(void*)&cpu_set)
+    #define RES_STAT(res) (res != 0 ? "failed" : "ok")
+
+    class AffinityHelper {
+        static cpu_set_t m_processMask;
+
+        class Initializer {
+        public:
+            Initializer () {
+                CPU_ZERO (&m_processMask);
+                int res = sched_getaffinity( getpid(), sizeof(cpu_set_t), &m_processMask );
+                ASSERT ( res == 0, "sched_getaffinity failed" );
+            }
+        }; // class AffinityHelper::Initializer
+
+        static Initializer m_initializer;
+
+    public:
+        static const cpu_set_t& ProcessMask () { return m_processMask; }
+    }; // class AffinityHelper
+
+    cpu_set_t AffinityHelper::m_processMask;
+    AffinityHelper::Initializer AffinityHelper::m_initializer;
+#endif /* __linux__ */
+
+    bool PinTheThread ( int cpu_idx, tbb::atomic<int>& nThreads ) {
+        cpu_set_t orig_mask, target_mask;
+        CPU_ZERO( &target_mask );
+        CPU_SET( cpu_idx, &target_mask );
+        ASSERT ( CPU_ISSET(cpu_idx, &target_mask), "CPU_SET failed" );
+    #if _MSC_VER
+        orig_mask = SetThreadAffinityMask( GetCurrentThread(), target_mask );
+        if ( !orig_mask )
+            return false;
+    #elif __linux__
+        CPU_ZERO( &orig_mask );
+        int res = sched_getaffinity( gettid(), sizeof(cpu_set_t), &orig_mask );
+        ASSERT ( res == 0, "sched_getaffinity failed" );
+        res = sched_setaffinity( gettid(), sizeof(cpu_set_t), &target_mask );
+        ASSERT ( res == 0, "sched_setaffinity failed" );
+    #endif /* _MSC_VER */
+        --nThreads;
+        while ( nThreads )
+            __TBB_Yield();
+    #if _MSC_VER
+        SetThreadPriority (GetCurrentThread(), THREAD_PRIORITY_HIGHEST);
+    #endif
+        return true;
+    }
+
+    class AffinitySetterTask : tbb::task {
+        static bool m_result;
+        static tbb::atomic<int> m_nThreads;
+        int m_idx;
+
+        tbb::task* execute () {
+            //TestAffinityOps();
+            m_result = PinTheThread( m_idx, m_nThreads );
+            return NULL;
+        }
+
+    public:
+        AffinitySetterTask ( int idx ) : m_idx(idx) {}
+
+        friend bool AffinitizeTBB ( int, int /*mode*/ );
+    };
+
+    bool AffinitySetterTask::m_result = true;
+    tbb::atomic<int> AffinitySetterTask::m_nThreads;
+
+    bool AffinitizeTBB ( int p, int affMode ) {
+    #if _MSC_VER
+        SetThreadPriority (GetCurrentThread(), THREAD_PRIORITY_HIGHEST);
+        SetPriorityClass (GetCurrentProcess(), HIGH_PRIORITY_CLASS);
+    #endif
+        AffinitySetterTask::m_result = true;
+        AffinitySetterTask::m_nThreads = p;
+        tbb::task_list  tl;
+        for ( int i = 0; i < p; ++i ) {
+            tbb::task &t = *new( tbb::task::allocate_root() ) AffinitySetterTask( affMode == amSparse ? i * NumCpus / p : i );
+            t.set_affinity( tbb::task::affinity_id(i + 1) );
+            tl.push_back( t );
+        }
+        tbb::task::spawn_root_and_wait(tl);
+        return AffinitySetterTask::m_result;
+    }
+
+    inline 
+    void Affinitize ( int p, int affMode ) {
+        if ( !AffinitizeTBB (p, affMode) )
+            REPORT("Warning: Failed to set affinity for %d TBB threads\n", p);
+    }
+
+    class TbbWorkersTrapper {
+        tbb::atomic<int> my_refcount;
+        tbb::task *my_root;
+        tbb::task_group_context my_context;
+        Harness::SpinBarrier my_barrier;
+
+        friend class TrapperTask;
+
+        class TrapperTask : public tbb::task {
+            TbbWorkersTrapper& my_owner;
+
+            tbb::task* execute () {
+                my_owner.my_barrier.wait();
+                my_owner.my_root->wait_for_all();
+                my_owner.my_barrier.wait();
+                return NULL;
+            }
+        public:
+            TrapperTask ( TbbWorkersTrapper& owner ) : my_owner(owner) {}
+        };
+
+    public:
+        TbbWorkersTrapper ()
+            : my_context(tbb::task_group_context::bound, 
+                         tbb::task_group_context::default_traits | tbb::task_group_context::concurrent_wait)
+        {
+            my_root = new ( tbb::task::allocate_root(my_context) ) tbb::empty_task;
+            my_root->set_ref_count(2);
+            my_barrier.initialize(NumThreads);
+            for ( int i = 1; i < NumThreads; ++i )
+                tbb::task::spawn( *new(tbb::task::allocate_root()) TrapperTask(*this) );
+            my_barrier.wait(); // Wait util all workers are ready
+        }
+
+        ~TbbWorkersTrapper () {
+            my_root->decrement_ref_count();
+            my_barrier.wait(); // Make sure no tasks are referencing us
+            tbb::task::destroy(*my_root);
+        }
+    }; // TbbWorkersTrapper
+
+
+#if __TBB_STATISTICS
+    static bool StatisticsMode = true;
+#else
+    static bool StatisticsMode = false;
+#endif
+
+//! Suppresses silly warning
+inline bool __TBB_bool( bool b ) { return b; }
+
+#define START_WORKERS(needScheduler, p, a, setWorkersAffinity, trapWorkers) \
+    tbb::task_scheduler_init init(tbb::task_scheduler_init::deferred);      \
+    TbbWorkersTrapper *trapper = NULL;                                      \
+    if ( theSettings.my_opts & UseTaskScheduler                   \
+         && (needScheduler) && ((setWorkersAffinity) || (trapWorkers)) )    \
+    {                                                                       \
+        init.initialize( p );                                               \
+        if ( __TBB_bool(setWorkersAffinity) )                               \
+            Affinitize( p, a );                                             \
+        if ( __TBB_bool(trapWorkers) )                                      \
+            trapper = new TbbWorkersTrapper;                                \
+    }
+
+#define STOP_WORKERS()  \
+    if ( theSettings.my_opts & UseTaskScheduler && init.is_active() ) {     \
+        if ( trapper )                                                      \
+            delete trapper;                                                 \
+        init.terminate();                                                   \
+        /* Give asynchronous deinitialization time to complete */           \
+        Harness::Sleep(50);                                                 \
+    }
+
+    typedef void (Test::*RunMemFnPtr)( Test::ThreadInfo& );
+
+    TimingSeries *TlsTimings;
+    Harness::SpinBarrier  multipleMastersBarrier;
+
+    class TimingFunctor {
+        Test* my_test;
+        RunConfig *my_cfg;
+        RunMemFnPtr my_fnRun;
+        size_t my_numRuns;
+        size_t my_numRepeats;
+        uintptr_t my_availableMethods;
+
+        duration_t TimeSingleRun ( Test::ThreadInfo& ti ) const {
+            if ( my_availableMethods & idOnStart )
+                my_test->OnStart(ti);
+            // Warming run
+            (my_test->*my_fnRun)(ti);
+            multipleMastersBarrier.wait();
+            tbb::tick_count t0 = tbb::tick_count::now();
+            (my_test->*my_fnRun)(ti);
+            duration_t t = (tbb::tick_count::now() - t0).seconds();
+            if ( my_availableMethods & idOnFinish )
+                my_test->OnFinish(ti);
+            return t;
+        }
+
+    public:
+        TimingFunctor ( Test* test, RunConfig *cfg, RunMemFnPtr fnRun, 
+                        size_t numRuns, size_t nRepeats, uintptr_t availableMethods )
+            : my_test(test), my_cfg(cfg), my_fnRun(fnRun)
+            , my_numRuns(numRuns), my_numRepeats(nRepeats), my_availableMethods(availableMethods)
+        {}
+
+        void operator()( int tid ) const {
+            Test::ThreadInfo ti = { tid, NULL };
+            durations_t &d = TlsTimings[tid].my_durations;
+            bool singleMaster = my_cfg->my_numMasters == 1;
+            START_WORKERS( (!singleMaster || (singleMaster && StatisticsMode)) && my_fnRun != &Test::RunSerial, 
+                            my_cfg->my_numThreads, my_cfg->my_affinityMode, singleMaster, singleMaster );
+            for ( uintptr_t k = 0; k < my_numRuns; ++k )  {
+                if ( my_numRepeats > 1 ) {
+                    d[k] = 0;
+                    if ( my_availableMethods & idPrePostProcess ) {
+                        for ( uintptr_t i = 0; i < my_numRepeats; ++i )
+                            d[k] += TimeSingleRun(ti);
+                    }
+                    else {
+                        multipleMastersBarrier.wait();
+                        tbb::tick_count t0 = tbb::tick_count::now();
+                        for ( uintptr_t i = 0; i < my_numRepeats; ++i )
+                            (my_test->*my_fnRun)(ti);
+                        d[k] = (tbb::tick_count::now() - t0).seconds();
+                    }
+                    d[k] /= my_numRepeats;
+                }
+                else
+                    d[k] = TimeSingleRun(ti);
+            }
+            STOP_WORKERS();
+            TlsTimings[tid].CalculateStatistics();
+        }
+    }; // class TimingFunctor
+    
+    void DoTiming ( TestResults& tr, RunConfig &cfg, RunMemFnPtr fnRun, size_t nRepeats, TimingSeries& ts ) {
+        int numThreads = cfg.NumMasters();
+        size_t numRuns = ts.my_durations.size() / numThreads;
+        TimingFunctor body( tr.my_test, &cfg, fnRun, numRuns, nRepeats, tr.my_availableMethods );
+        multipleMastersBarrier.initialize(numThreads);
+        tr.my_test->SetWorkload(cfg.my_workloadID);
+        if ( numThreads == 1 ) {
+            TimingSeries *t = TlsTimings;
+            TlsTimings = &ts;
+            body(0);
+            TlsTimings = t;
+        }
+        else {
+            ts.my_durations.resize(numThreads * numRuns);
+            NativeParallelFor( numThreads, body );
+            for ( int i = 0, j = 0; i < numThreads; ++i ) {
+                durations_t &d = TlsTimings[i].my_durations;
+                for ( size_t k = 0; k < numRuns; ++k, ++j )
+                    ts.my_durations[j] = d[k];
+            }
+            ts.CalculateStatistics();
+        }
+    }
+
+    //! Runs the test function, does statistical processing, and, if title is nonzero, prints results.
+    /** If histogramFileName is a string, the histogram of individual runs is generated and stored
+        in a file with the given name. If it is NULL then the histogram is printed on the console.
+        By default no histogram is generated. 
+        The histogram format is: "rate bucket start" "number of tests in this bucket". **/
+    void RunTestImpl ( TestResults& tr, RunConfig &cfg, RunMemFnPtr pfnTest, TimingSeries& ts ) {
+        // nRepeats is a number of repeated calls to the test function made as 
+        // part of the same run. It is determined experimentally by the following 
+        // calibration process so that the total run time was approx. RunDuration.
+        // This is helpful to increase the measurement precision in case of very 
+        // short tests.
+        size_t nRepeats = 1;
+        // A minimal stats is enough when doing calibration
+        CalibrationTiming.my_durations.resize( (NumRuns < 4 ? NumRuns : 3) * cfg.NumMasters() );
+        // There's no need to be too precise when calculating nRepeats. And reasonably 
+        // far extrapolation can speed up the process significantly.
+        for (;;) {
+            DoTiming( tr, cfg, pfnTest, nRepeats, CalibrationTiming );
+            if ( CalibrationTiming.my_avgTime * nRepeats > 1e-4 )
+                break;
+            nRepeats *= 2;
+        }
+        nRepeats *= (uintptr_t)ceil( RunDuration / (CalibrationTiming.my_avgTime * nRepeats) );
+
+        DoTiming(tr, cfg, pfnTest, nRepeats, ts);
+
+        // No histogram for baseline measurements
+        if ( pfnTest != &Test::RunSerial && pfnTest != &Test::Baseline ) {
+            const char* histogramName = theSettings.my_histogramName;
+            if ( histogramName != NoHistogram && tr.my_test->HistogramName() != DefaultHistogram )
+                histogramName = tr.my_test->HistogramName();
+            if ( histogramName != NoHistogram )
+                TraceHistogram( ts.my_durations, histogramName );
+        }
+    } // RunTestImpl
+
+    typedef void (*TestActionFn) ( TestResults&, int mastersRange, int w, int p, int m, int a, int& numTests );
+
+    int TestResultIndex ( int mastersRange, int w, int p, int m, int a ) {
+        return ((w * (MaxThread - MinThread + 1) + (p - MinThread)) * mastersRange + m) * NumActiveAffModes + a;
+    }
+
+    void RunTest ( TestResults& tr, int mastersRange, int w, int p, int m, int a, int& numTests ) {
+        size_t r = TestResultIndex(mastersRange, w, p, m, a);
+        ASSERT( r < tr.my_results.size(), NULL );
+        RunConfig &rc = tr.my_results[r].my_config;
+        rc.my_maxConcurrency = MaxConcurrency;
+        rc.my_numThreads = p;
+        rc.my_numMasters = m + tr.my_test->MinNumMasters();
+        rc.my_affinityMode = a;
+        rc.my_workloadID = w;
+        RunTestImpl( tr, rc, &Test::Run, tr.my_results[r].my_timing );
+        printf( "Running tests: %04.1f%%\r",  ++numTests * 100. / TotalConfigs ); fflush(stdout);
+    }
+
+    void WalkTests ( TestActionFn fn, int& numTests, bool setAffinity, bool trapWorkers, bool multipleMasters ) {
+        for ( int p = MinThread; p <= MaxThread; ++p ) {
+            NumThreads = p;
+            MaxConcurrency = p < NumCpus ? p : NumCpus;
+            for ( int a = 0; a < NumActiveAffModes; ++a ) {
+                START_WORKERS( multipleMasters || !StatisticsMode, p, a, setAffinity, trapWorkers );
+                for ( size_t i = 0; i < theSession.size(); ++i ) {
+                    TestResults &tr = theSession[i];
+                    Test *t = tr.my_test;
+                    int mastersRange = t->MaxNumMasters() - t->MinNumMasters() + 1;
+                    int numWorkloads = theSettings.my_opts & UseSmallestWorkloadOnly ? 1 : t->NumWorkloads();
+                    for ( int w = 0; w < numWorkloads; ++w ) {
+                        if ( multipleMasters )
+                            for ( int m = 1; m < mastersRange; ++m )
+                                fn( tr, mastersRange, w, p, m, a, numTests );
+                        else
+                            fn( tr, mastersRange, w, p, 0, a, numTests );
+                    }
+                }
+                STOP_WORKERS();
+            }
+        }
+    }
+
+    void RunTests () {
+        int numTests = 0;
+        WalkTests( &RunTest, numTests, !StatisticsMode, !StatisticsMode, false );
+        if ( MaxTbbMasters > 1 )
+            WalkTests( &RunTest, numTests, true, false, true );
+    }
+
+    void InitTestData ( TestResults& tr, int mastersRange, int w, int p, int m, int a, int& ) {
+        size_t r = TestResultIndex(mastersRange, w, p, m, a);
+        ASSERT( r < tr.my_results.size(), NULL );
+        tr.my_results[r].my_timing.my_durations.resize( 
+            (theSettings.my_opts & UseTaskScheduler ? tr.my_test->MinNumMasters() + m : p) * NumRuns );
+    }
+
+    char WorkloadName[MaxWorkloadNameLen + 1];
+
+    void PrepareTests () {
+        printf( "Initializing...\r" );
+        NumActiveAffModes = theSettings.my_opts & UseAffinityModes ? NumAffinitizationModes : 1;
+        TotalConfigs = 0;
+        TitleFieldLen = strlen( TestNameColumnTitle );
+        WorkloadFieldLen = strlen( WorkloadNameColumnTitle );
+        int numThreads = MaxThread - MinThread + 1;
+        int numConfigsBase = numThreads * NumActiveAffModes;
+        int totalWorkloads = 0;
+        for ( size_t i = 0; i < theSession.size(); ++i ) {
+            TestResults &tr = theSession[i];
+            Test &t = *tr.my_test;
+            int numWorkloads = theSettings.my_opts & UseSmallestWorkloadOnly ? 1 : t.NumWorkloads();
+            int numConfigs = numConfigsBase * numWorkloads;
+            if ( t.MaxNumMasters() > 1 ) {
+                ASSERT( theSettings.my_opts & UseTaskScheduler, "Multiple masters mode is only valid for task scheduler tests" );
+                if ( MaxTbbMasters < t.MaxNumMasters() )
+                    MaxTbbMasters = t.MaxNumMasters();
+                numConfigs *= t.MaxNumMasters() - t.MinNumMasters() + 1;
+            }
+            totalWorkloads += numWorkloads;
+            TotalConfigs += numConfigs;
+
+            const char* testName = t.Name();
+            if ( testName )
+                tr.my_testName = testName;
+            ASSERT( tr.my_testName, "Neither Test::Name() is implemented, nor RTTI is enabled" );
+            TitleFieldLen = max( TitleFieldLen, strlen(tr.my_testName) );
+
+            tr.my_results.resize( numConfigs );
+            tr.my_serialBaselines.resize( numWorkloads );
+            tr.my_baselines.resize( numWorkloads );
+            tr.my_workloadNames.resize( numWorkloads );
+        }
+        TimingSeries tmpTiming;
+        TlsTimings = &tmpTiming; // All measurements are serial here
+        int n = 0;
+        for ( size_t i = 0; i < theSession.size(); ++i ) {
+            TestResults &tr = theSession[i];
+            Test &t = *tr.my_test;
+            // Detect which methods are overridden by the test implementation
+            g_absentMethods = 0;
+            Test::ThreadInfo ti = { 0 };
+            t.SetWorkload(0);
+            t.OnStart(ti);
+            t.RunSerial(ti);
+            t.OnFinish(ti);
+            if ( theSettings.my_opts & UseSerialBaseline && !(g_absentMethods & idRunSerial) )
+                tr.my_availableMethods |= idRunSerial;
+            if ( !(g_absentMethods & idOnStart) )
+                tr.my_availableMethods |= idOnStart;
+
+            RunConfig rc = { 1, 1, 1, 0, 0 };
+            int numWorkloads = theSettings.my_opts & UseSmallestWorkloadOnly ? 1 : t.NumWorkloads();
+            for ( int w = 0; w < numWorkloads; ++w ) {
+                WorkloadName[0] = 0;
+                t.SetWorkload(w);
+                if ( !WorkloadName[0] )
+                    sprintf( WorkloadName, "%d", w );
+                size_t len = strlen(WorkloadName);
+                tr.my_workloadNames[w] = new char[len + 1];
+                strcpy ( (char*)tr.my_workloadNames[w], WorkloadName );
+                WorkloadFieldLen = max( WorkloadFieldLen, len );
+
+                rc.my_workloadID = w;
+                if ( theSettings.my_opts & UseBaseline )
+                    RunTestImpl( tr, rc, &Test::Baseline, tr.my_baselines[w] );
+                if ( tr.my_availableMethods & idRunSerial )
+                    RunTestImpl( tr, rc, &Test::RunSerial, tr.my_serialBaselines[w] );
+                printf( "Measuring baselines: %04.1f%%\r",  ++n * 100. / totalWorkloads ); fflush(stdout);
+            }
+        }
+        TlsTimings = new TimingSeries[MaxThread + MaxTbbMasters - 1];
+        if ( theSettings.my_opts & UseTaskScheduler ? MaxTbbMasters : MaxThread )
+            WalkTests( &InitTestData, n, false, false, theSettings.my_opts & UseTaskScheduler ? true : false );
+        CalibrationTiming.my_durations.reserve( MaxTbbMasters * 3 );
+        printf( "                                                          \r");
+    }
+
+    FILE* ResFile = NULL;
+
+    void Report ( char const* fmt, ... ) {
+        va_list args;
+        va_start( args, fmt );
+        if ( ResFile )
+            vfprintf( ResFile, fmt, args );
+        va_start( args, fmt );
+        vprintf( fmt, args );
+    }
+
+    void PrintResults () {
+        if ( theSettings.my_resFile )
+            ResFile = fopen( theSettings.my_resFile, "w" );
+        Report( "%-*s %-*s %s", TitleFieldLen, "Test name", WorkloadFieldLen, "Workload", 
+                                MaxTbbMasters > 1 ? "W    M    " : "T    " );
+        if ( theSettings.my_opts & UseAffinityModes )
+            Report( "Aff  " );
+        Report( "%-*s SD, %%  %-*s %-*s %-*s ",
+                RateFieldLen, "Avg.time", OvhdFieldLen, "Par.ovhd,%",
+                RateFieldLen, "Min.time", RateFieldLen, "Max.time" );
+        Report( " | Repeats = %lu, CPUs %d\n", (unsigned long)NumRuns, NumCpus );
+        for ( size_t i = 0; i < theSession.size(); ++i ) {
+            TestResults &tr = theSession[i];
+            for ( size_t j = 0; j < tr.my_results.size(); ++j ) {
+                RunResults &rr = tr.my_results[j];
+                RunConfig &rc = rr.my_config;
+                int w = rc.my_workloadID;
+                TimingSeries &ts = rr.my_timing;
+                duration_t baselineTime = tr.my_baselines[w].my_avgTime,
+                           cleanTime = ts.my_avgTime - baselineTime;
+                Report( "%-*s %-*s ", TitleFieldLen, tr.my_testName, WorkloadFieldLen, tr.my_workloadNames[w] );
+                if ( MaxTbbMasters > 1 )
+                    Report( "%-4d %-4d ", rc.my_numThreads - 1, rc.my_numMasters );
+                else
+                    Report( "%-4d ", rc.my_numThreads );
+                if ( theSettings.my_opts & UseAffinityModes )
+                    Report( "%%-8s ", AffinitizationModeNames[rc.my_affinityMode] );
+                Report( "%-*.2e %-6.1f ", RateFieldLen, cleanTime, ts.my_stdDev);
+                if ( tr.my_availableMethods & idRunSerial  ) {
+                    duration_t serialTime = (tr.my_serialBaselines[w].my_avgTime - baselineTime) / rc.my_maxConcurrency;
+                    Report( "%-*.1f ", OvhdFieldLen, 100*(cleanTime - serialTime)/serialTime );
+                }
+                else
+                    Report( "%*s%*s ", OvhdFieldLen/2, "-", OvhdFieldLen - OvhdFieldLen/2, "" );
+                Report( "%-*.2e %-*.2e ", RateFieldLen, ts.my_minTime - baselineTime, RateFieldLen, ts.my_maxTime - baselineTime);
+                Report( "\n" );
+            }
+        }
+        delete [] TlsTimings;
+        if ( ResFile )
+            fclose(ResFile);
+    }
+
+    __TBB_PERF_API void RegisterTest ( Test* t, const char* className, bool takeOwnership ) {
+        // Just collect test objects at this stage
+        theSession.push_back( TestResults(t, className, takeOwnership) );
+    }
+
+} // namespace internal
+
+__TBB_PERF_API void Test::Baseline ( ThreadInfo& ) {}
+
+__TBB_PERF_API void Test::RunSerial ( ThreadInfo& ) { internal::g_absentMethods |= internal::idRunSerial; }
+
+__TBB_PERF_API void Test::OnStart ( ThreadInfo& ) { internal::g_absentMethods |= internal::idOnStart; }
+
+__TBB_PERF_API void Test::OnFinish ( ThreadInfo& ) { internal::g_absentMethods |= internal::idOnFinish; }
+
+__TBB_PERF_API void WipeCaches () { NativeParallelFor( NumCpus, internal::WiperBody() ); }
+
+__TBB_PERF_API void EmptyFunc () {}
+__TBB_PERF_API void AnchorFunc ( void* ) {}
+__TBB_PERF_API void AnchorFunc2 ( void*, void* ) {}
+
+__TBB_PERF_API void SetWorkloadName( const char* format, ... ) {
+    internal::WorkloadName[MaxWorkloadNameLen] = 0;
+    va_list args;
+    va_start(args, format);
+    vsnprintf( internal::WorkloadName, MaxWorkloadNameLen, format, args );
+    va_end(args);
+}
+
+
+__TBB_PERF_API int TestMain( int argc, char* argv[], const SessionSettings* defaultSettings ) {
+#if _MSC_VER
+    HANDLE hMutex = CreateMutex( NULL, FALSE, "Global\\TBB_OMP_PerfSession" );
+    WaitForSingleObject( hMutex, INFINITE );
+#endif
+    MinThread = MaxThread = NumCpus;
+    if ( defaultSettings )
+        theSettings = *defaultSettings;
+    ParseCommandLine( argc, argv );  // May override data in theSettings
+
+    internal::PrepareTests ();
+    internal::RunTests ();
+    internal::PrintResults();
+    REPORT("\n");
+#if _MSC_VER
+    ReleaseMutex( hMutex );
+    CloseHandle( hMutex );
+#endif
+    return 0;
+}
+
+} // namespace Perf
diff --git a/src/perf/perf.h b/src/perf/perf.h
new file mode 100644
index 0000000..0c13b9d
--- /dev/null
+++ b/src/perf/perf.h
@@ -0,0 +1,266 @@
+/*
+    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.
+*/
+
+
+#ifndef __tbb_perf_h__
+#define __tbb_perf_h__
+
+#ifndef TBB_PERF_TYPEINFO
+#define TBB_PERF_TYPEINFO 1
+#endif
+
+#if TBB_PERF_TYPEINFO
+    #include <typeinfo>
+    #define __TBB_PERF_TEST_CLASS_NAME(T) typeid(T).name()
+#else /* !TBB_PERF_TYPEINFO */
+    #define __TBB_PERF_TEST_CLASS_NAME(T) NULL
+#endif /* !TBB_PERF_TYPEINFO */
+
+
+#include "tbb/tick_count.h"
+
+// TODO: Fix build scripts to provide more reliable build phase identification means
+#ifndef __TBB_PERF_API
+#if _USRDLL
+    #if _MSC_VER
+        #define __TBB_PERF_API __declspec(dllexport)
+    #else /* !_MSC_VER */
+        #define __TBB_PERF_API
+    #endif /* !_MSC_VER */
+#else /* !_USRDLL */
+    #if _MSC_VER
+        #define __TBB_PERF_API __declspec(dllimport)
+    #else /* !_MSC_VER */
+        #define __TBB_PERF_API
+    #endif /* !_MSC_VER */
+#endif /* !_USRDLL */
+#endif /* !__TBB_PERF_API */
+
+#if _WIN32||_WIN64
+
+namespace Perf {
+    typedef unsigned __int64 tick_t;
+    #if defined(_M_X64)
+        inline tick_t rdtsc () { return __rdtsc(); }
+    #elif _M_IX86
+        inline tick_t rdtsc () { __asm { rdtsc } }
+    #else
+        #error Unsupported ISA
+    #endif
+} // namespace Perf
+
+#elif __linux__ || __APPLE__
+
+#include <stdint.h>
+
+namespace Perf {
+    typedef uint64_t tick_t;
+    #if __x86_64__ || __i386__ || __i386
+        inline tick_t rdtsc () {
+            uint32_t lo, hi;
+            __asm__ __volatile__ ( "rdtsc" : "=a" (lo), "=d" (hi) );
+            return (tick_t)lo | ((tick_t)hi) << 32;
+        }
+    #else
+        #error Unsupported ISA
+    #endif
+} // namespace Perf
+
+#else
+    #error Unsupported OS
+#endif /* OS */
+
+__TBB_PERF_API extern int NumThreads,
+                          MaxConcurrency,
+                          NumCpus;
+
+// Functions and global variables provided by the benchmarking framework
+namespace Perf {
+
+typedef double duration_t;
+
+static const int MaxWorkloadNameLen = 64;
+
+static const char* NoHistogram = (char*)-1;
+static const char* DefaultHistogram = (char*)-2;
+
+__TBB_PERF_API void AnchorFunc ( void* );
+__TBB_PERF_API void AnchorFunc2 ( void*, void*  );
+
+//! Helper that can be used in the preprocess handler to clean caches
+/** Cleaning caches is necessary to obtain reproducible results when a test
+    accesses significant ranges of memory. **/
+__TBB_PERF_API void WipeCaches ();
+
+//! Specifies the name to be used to designate the current workload in output
+/** Should be used from Test::SetWorkload(). If necessary workload name will be
+    truncated to MaxWorkloadNameLen characters. **/
+__TBB_PERF_API void SetWorkloadName( const char* format, ... );
+
+class __TBB_PERF_API Test {
+public:
+    virtual ~Test () {}
+
+    //! Struct used by tests running in multiple masters mode
+    struct ThreadInfo {
+        //! Zero based thread ID
+        int     tid;
+        //! Pointer to test specific data
+        /** If used by the test, should be initialized by OnStartLocal(), and 
+            finalized by OnFinishLocal(). **/
+        void*   data;
+    };
+
+    ////////////////////////////////////////////////////////////////////////////////
+    // Mandatory methods
+    
+    //! Returns the number of workloads supported
+    virtual int NumWorkloads () = 0;
+
+    //! Set workload info for the subsequent calls to Run() and RunSerial()
+    /** This method can use global helper function Perf::SetWorkloadName() in order
+        to specify the name of the current workload, which will be used in output
+        to designate the workload. If SetWorkloadName is not called, workloadIndex
+        will be used for this purpose.
+
+        When testing task scheduler, make sure that this method does not trigger
+        its automatic initialization. **/
+    virtual void SetWorkload ( int workloadIndex ) = 0;
+
+    //! Test implementation
+    /** Called by the timing framework several times in a loop to achieve approx.
+        RunDuration time, and this loop is timed NumRuns times to collect statistics.
+        Argument ti specifies information about the master thread calling this method. **/
+    virtual void Run ( ThreadInfo& ti ) = 0;
+
+    ////////////////////////////////////////////////////////////////////////////////
+    // Optional methods
+
+    //! Returns short title string to be used in the regular output to identify the test
+    /** Should uniquely identify the test among other ones in the given benchmark suite.
+        If not implemented, the test implementation class' RTTI name is used. **/
+    virtual const char* Name () { return NULL; };
+
+    //! Returns minimal number of master threads
+    /** Used for task scheduler tests only (when UseTbbScheduler option is specified 
+        in session settings). **/
+    virtual int MinNumMasters () { return 1; }
+
+    //! Returns maximal number of master threads
+    /** Used for task scheduler tests only (when UseTbbScheduler option is specified 
+        in session settings). **/
+    virtual int MaxNumMasters () { return 1; }
+
+    //! Executes serial workload equivalent to the one processed by Run()
+    /** Called by the timing framework several times in a loop to collect statistics. **/
+    virtual void RunSerial ( ThreadInfo& ti );
+
+    //! Invoked before each call to Run() 
+    /** Can be used to preinitialize data necessary for the test, clean up 
+        caches (see Perf::WipeCaches), etc.
+        In multiple masters mode this method is called on each thread. **/
+    virtual void OnStart ( ThreadInfo& ti );
+
+    //! Invoked after each call to Run() 
+    /** Can be used to free resources allocated by OnStart().
+        Note that this method must work correctly independently of whether Run(),
+        RunSerial() or nothing is called between OnStart() and OnFinish().
+        In multiple masters mode this method is called on each thread. **/
+    virtual void OnFinish ( ThreadInfo& ti );
+
+    //! Functionality, the cost of which has to be factored out from timing results
+    /** Applies to both parallel and serial versions. **/
+    virtual void Baseline ( ThreadInfo& );
+
+    //! Returns description string to be used in the benchmark info/summary output
+    virtual const char* Description () { return NULL; }
+
+    //! Specifies if the histogram of individual run times in a series
+    /** If the method is not overridden, histogramName argument of TestMain is used. **/
+    virtual const char* HistogramName () { return DefaultHistogram; }
+}; // class Test
+
+namespace internal {
+    __TBB_PERF_API void RegisterTest ( Test*, const char* testClassName, bool takeOwnership );
+}
+
+template<class T>
+void RegisterTest() { internal::RegisterTest( new T, __TBB_PERF_TEST_CLASS_NAME(T), true ); }
+
+template<class T>
+void RegisterTest( T& t ) { internal::RegisterTest( &t, __TBB_PERF_TEST_CLASS_NAME(T), false ); }
+
+enum SessionOptions {
+    //! Use Test::RunSerial if present
+    UseBaseline = 0x01,
+    UseSerialBaseline = 0x02,
+    UseBaselines = UseBaseline | UseSerialBaseline,
+    UseTaskScheduler = 0x10,
+    UseAffinityModes = 0x20,
+    UseSmallestWorkloadOnly = 0x40
+};
+
+struct SessionSettings {
+    //! A combination of SessionOptions flags
+    uintptr_t my_opts;
+
+    //! Name of a file to store performance results
+    /** These results are duplicates of what is printed on the console. **/
+    const char* my_resFile;
+
+    //! Output destination for the histogram of individual run times in a series
+    /** If it is a string, the histogram is stored in a file with such name. 
+        If it is NULL, the histogram is printed on the console. By default histograms
+        are suppressed.
+
+        The histogram is formatted as two column table: 
+        "time bucket start" "number of tests in this bucket"
+        
+        When this setting enables histogram generation, an individual test 
+        can override it by implementing HistogramName method. **/
+    const char* my_histogramName;
+
+    SessionSettings ( uintptr_t opts = 0, const char* resFile = NULL, const char* histogram = NoHistogram )
+        : my_opts(opts)
+        , my_resFile(resFile)
+        , my_histogramName(histogram)
+    {}
+}; // struct SessionSettings
+
+//! Benchmarking session entry point
+/** Executes all the individual tests registered previously by means of 
+    RegisterTest<MycrotestImpl> **/
+__TBB_PERF_API int TestMain( int argc, char* argv[],
+                             const SessionSettings* defaultSettings = NULL );
+
+
+} // namespace Perf
+
+#endif /* __tbb_perf_h__ */
+
+
diff --git a/src/perf/perf_sched.cpp b/src/perf/perf_sched.cpp
new file mode 100644
index 0000000..489f558
--- /dev/null
+++ b/src/perf/perf_sched.cpp
@@ -0,0 +1,464 @@
+/*
+    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.
+*/
+
+#include "perf.h"
+
+#include <cmath>
+
+#include "tbb/blocked_range.h"
+#include "tbb/parallel_for.h"
+#include "tbb/parallel_reduce.h"
+
+#define NUM_CHILD_TASKS     2096
+#define NUM_ROOT_TASKS      256
+
+#define N               100000000
+#define FINEST_GRAIN    10
+#define FINE_GRAIN      50
+#define MED_GRAIN       200
+#define COARSE_GRAIN    1000
+
+
+typedef int count_t;
+
+const count_t N_finest = (count_t)(N/log((double)N)/10);
+const count_t N_fine = N_finest * 20;
+const count_t N_med = N_fine * (count_t)log((double)N) / 5;
+
+class StaticTaskHolder {
+public:
+    tbb::task *my_leafTaskPtr;
+    StaticTaskHolder ();
+};
+
+static StaticTaskHolder s_tasks;
+
+static count_t NumIterations;
+static count_t NumLeafTasks;
+static count_t NumRootTasks;
+
+class LeafTaskBase : public tbb::task {
+public:
+    count_t my_ID;
+
+    LeafTaskBase () {}
+    LeafTaskBase ( count_t id ) : my_ID(id) {}
+};
+
+class SimpleLeafTask : public LeafTaskBase {
+    task* execute () {
+        volatile count_t anchor = 0;
+        for ( count_t i=0; i < NumIterations; ++i )
+            anchor += i;
+        return NULL;
+    }
+public:
+    SimpleLeafTask ( count_t ) {}
+};
+
+StaticTaskHolder::StaticTaskHolder () {
+    static SimpleLeafTask s_t1(0);
+    my_leafTaskPtr = &s_t1;
+}
+
+class Test_SPMC : public Perf::Test {
+protected:
+    static const int numWorkloads = 4;
+    static const count_t workloads[numWorkloads];
+
+    LeafTaskBase* my_leafTaskPtr;
+
+    const char* Name () { return "SPMC"; }
+
+    int NumWorkloads () { return numWorkloads; }
+
+    void SetWorkload ( int idx ) {
+        NumRootTasks = 1;
+        NumIterations = workloads[idx];
+        NumLeafTasks = NUM_CHILD_TASKS * NUM_ROOT_TASKS / (NumIterations > 1000 ? 32 : 8);
+        Perf::SetWorkloadName( "%d x %d", NumLeafTasks, NumIterations );
+    }
+    
+    void Run ( ThreadInfo& ) {
+        tbb::empty_task &r = *new( tbb::task::allocate_root() ) tbb::empty_task;
+        r.set_ref_count( NumLeafTasks + 1 );
+        for ( count_t i = 0; i < NumLeafTasks; ++i )
+            r.spawn( *new(r.allocate_child()) SimpleLeafTask(0) );
+        r.wait_for_all();
+        tbb::task::destroy(r);
+    }
+
+    void RunSerial ( ThreadInfo& ) {
+        const count_t n = NumLeafTasks * NumRootTasks;
+        for ( count_t i=0; i < n; ++i ) {
+            my_leafTaskPtr->my_ID = i;
+            my_leafTaskPtr->execute();
+        }
+    }
+
+public:
+    Test_SPMC ( LeafTaskBase* leafTaskPtr = NULL ) {
+        static SimpleLeafTask t(0);
+        my_leafTaskPtr = leafTaskPtr ? leafTaskPtr : &t;
+    }
+}; // class Test_SPMC
+
+const count_t Test_SPMC::workloads[Test_SPMC::numWorkloads] = { 1, 50, 500, 5000 };
+
+template<class LeafTask>
+class LeavesLauncherTask : public tbb::task {
+    count_t my_groupId;
+
+    task* execute () {
+        count_t base = my_groupId * NumLeafTasks;
+        set_ref_count(NumLeafTasks + 1);
+        for ( count_t i = 0; i < NumLeafTasks; ++i )
+            spawn( *new(allocate_child()) LeafTask(base + i) );
+        wait_for_all();
+        return NULL;
+    }
+public:
+    LeavesLauncherTask ( count_t groupId ) : my_groupId(groupId) {}
+};
+
+template<class LeafTask>
+void RunShallowTree () {
+    tbb::empty_task &r = *new( tbb::task::allocate_root() ) tbb::empty_task;
+    r.set_ref_count( NumRootTasks + 1 );
+    for ( count_t i = 0; i < NumRootTasks; ++i )
+        r.spawn( *new(r.allocate_child()) LeavesLauncherTask<LeafTask>(i) );
+    r.wait_for_all();
+    tbb::task::destroy(r);
+}
+
+class Test_ShallowTree : public Test_SPMC {
+    const char* Name () { return "ShallowTree"; }
+
+    void SetWorkload ( int idx ) {
+        NumRootTasks = NUM_ROOT_TASKS;
+        NumIterations = workloads[idx];
+        NumLeafTasks = NumIterations > 200 ? NUM_CHILD_TASKS / 10 : 
+                            (NumIterations > 50 ? NUM_CHILD_TASKS / 2 : NUM_CHILD_TASKS * 2);
+        Perf::SetWorkloadName( "%d x %d", NumRootTasks * NumLeafTasks, NumIterations );
+    }
+
+    void Run ( ThreadInfo& ) {
+        RunShallowTree<SimpleLeafTask>();
+    }
+}; // class Test_ShallowTree
+
+class LeafTaskSkewed : public LeafTaskBase {
+    task* execute () {
+        volatile count_t anchor = 0;
+        double K = (double)NumRootTasks * NumLeafTasks;
+        count_t n = count_t(sqrt(double(my_ID)) * double(my_ID) * my_ID / (4 * K * K));
+        for ( count_t i = 0; i < n; ++i )
+            anchor += i;
+        return NULL;
+    }
+public:
+    LeafTaskSkewed ( count_t id ) : LeafTaskBase(id) {}
+};
+
+class Test_ShallowTree_Skewed : public Test_SPMC {
+    static LeafTaskSkewed SerialTaskBody;
+
+    const char* Name () { return "ShallowTree_Skewed"; }
+
+    int NumWorkloads () { return 1; }
+
+    void SetWorkload ( int ) {
+        NumRootTasks = NUM_ROOT_TASKS;
+        NumLeafTasks = NUM_CHILD_TASKS;
+        Perf::SetWorkloadName( "%d", NumRootTasks * NumLeafTasks );
+    }
+
+    void Run ( ThreadInfo& ) {
+        RunShallowTree<LeafTaskSkewed>();
+    }
+
+public:
+    Test_ShallowTree_Skewed () : Test_SPMC(&SerialTaskBody) {}
+}; // class Test_ShallowTree_Skewed
+
+LeafTaskSkewed Test_ShallowTree_Skewed::SerialTaskBody(0);
+
+typedef tbb::blocked_range<count_t> range_t;
+
+static count_t  IterRange = N,
+                IterGrain = 1;
+
+enum PartitionerType {
+    SimplePartitioner = 0,
+    AutoPartitioner = 1
+};
+
+class Test_Algs : public Perf::Test {
+protected:
+    static const int numWorkloads = 4;
+    static const count_t algRanges[numWorkloads];
+    static const count_t algGrains[numWorkloads];
+
+    tbb::simple_partitioner    my_simplePartitioner;
+    tbb::auto_partitioner    my_autoPartitioner;
+    PartitionerType my_partitionerType;
+
+    bool UseAutoPartitioner () const { return my_partitionerType == AutoPartitioner; }
+
+    int NumWorkloads () { return UseAutoPartitioner() ? 3 : numWorkloads; }
+
+    void SetWorkload ( int idx ) {
+        if ( UseAutoPartitioner() ) {
+            IterRange = algRanges[idx ? numWorkloads - 1 : 0];
+            IterGrain = idx > 1 ? algGrains[numWorkloads - 1] : 1;
+        }
+        else {
+            IterRange = algRanges[idx];
+            IterGrain = algGrains[idx];
+        }
+        Perf::SetWorkloadName( "%d / %d", IterRange, IterGrain );
+    }
+public:
+    Test_Algs ( PartitionerType pt = SimplePartitioner ) : my_partitionerType(pt) {}
+}; // class Test_Algs
+
+const count_t Test_Algs::algRanges[] = {N_finest, N_fine, N_med, N};
+const count_t Test_Algs::algGrains[] = {1, FINE_GRAIN, MED_GRAIN, COARSE_GRAIN};
+
+template <typename Body>
+class Test_PFor : public Test_Algs {
+protected:
+    void Run ( ThreadInfo& ) {
+        if ( UseAutoPartitioner() )
+            tbb::parallel_for( range_t(0, IterRange, IterGrain), Body(), my_autoPartitioner );
+        else
+            tbb::parallel_for( range_t(0, IterRange, IterGrain), Body(), my_simplePartitioner );
+    }
+
+    void RunSerial ( ThreadInfo& ) {
+        Body body;
+        body( range_t(0, IterRange, IterGrain) );
+    }
+public:
+    Test_PFor ( PartitionerType pt = SimplePartitioner ) : Test_Algs(pt) {}
+}; // class Test_PFor
+
+class SimpleForBody {
+public:
+    void operator()( const range_t& r ) const {
+        count_t end = r.end();
+        volatile count_t anchor = 0;
+        for( count_t i = r.begin(); i < end; ++i )
+            anchor += i;
+    }
+}; // class SimpleForBody
+
+class Test_PFor_Simple : public Test_PFor<SimpleForBody> {
+protected:
+    const char* Name () { return UseAutoPartitioner() ? "PFor-AP" : "PFor"; }
+public:
+    Test_PFor_Simple ( PartitionerType pt = SimplePartitioner ) : Test_PFor<SimpleForBody>(pt) {}
+}; // class Test_PFor_Simple
+
+class SkewedForBody {
+public:
+    void operator()( const range_t& r ) const {
+        count_t end = (r.end() + 1) * (r.end() + 1);
+        volatile count_t anchor = 0;
+        for( count_t i = r.begin() * r.begin(); i < end; ++i )
+            anchor += i;
+    }
+}; // class SkewedForBody
+
+class Test_PFor_Skewed : public Test_PFor<SkewedForBody> {
+    typedef Test_PFor<SkewedForBody> base_type;
+protected:
+    const char* Name () { return UseAutoPartitioner() ? "PFor-Skewed-AP" : "PFor-Skewed"; }
+
+    void SetWorkload ( int idx ) {
+        base_type::SetWorkload(idx);
+        IterRange = (count_t)(sqrt((double)IterRange) * sqrt(sqrt((double)N / IterRange)));
+        Perf::SetWorkloadName( "%d", IterRange );
+    }
+
+public:
+    Test_PFor_Skewed ( PartitionerType pt = SimplePartitioner ) : base_type(pt) {}
+}; // class Test_PFor_Skewed
+
+PartitionerType gPartitionerType;
+count_t NestingRange;
+count_t NestingGrain;
+
+class NestingForBody {
+    count_t my_depth;
+    tbb::simple_partitioner my_simplePartitioner;
+    tbb::auto_partitioner my_autoPartitioner;
+    
+    template<class Partitioner>
+    void run ( const range_t& r, Partitioner& p ) const {
+        count_t end = r.end();
+        if ( my_depth > 1 )
+            for ( count_t i = r.begin(); i < end; ++i )
+                tbb::parallel_for( range_t(0, IterRange, IterGrain), NestingForBody(my_depth - 1), p );
+        else
+            for ( count_t i = r.begin(); i < end; ++i )
+                tbb::parallel_for( range_t(0, IterRange, IterGrain), SimpleForBody(), p );
+    }
+public:
+    void operator()( const range_t& r ) const {
+        if ( gPartitionerType == AutoPartitioner )
+            run( r, my_autoPartitioner );
+        else
+            run( r, my_simplePartitioner );
+    }
+    NestingForBody ( count_t depth = 1 ) : my_depth(depth) {}
+}; // class NestingForBody
+
+enum NestingType {
+    HollowNesting,
+    ShallowNesting,
+    DeepNesting
+};
+
+class Test_PFor_Nested : public Test_Algs {
+    typedef Test_Algs base_type;
+
+    NestingType my_nestingType;
+    count_t my_nestingDepth;
+
+protected:
+    const char* Name () {
+        static const char* names[] = { "PFor-HollowNested", "PFor-HollowNested-AP",
+                                       "PFor-ShallowNested", "PFor-ShallowNested-AP",
+                                       "PFor-DeeplyNested", "PFor-DeeplyNested-AP" };
+        return names[my_nestingType * 2 + my_partitionerType];
+    }
+
+    int NumWorkloads () { return my_nestingType == ShallowNesting ? (UseAutoPartitioner() ? 3 : 2) : 1; }
+
+    void SetWorkload ( int idx ) {
+        gPartitionerType = my_partitionerType;
+        if ( my_nestingType == DeepNesting ) {
+            NestingRange = 1024;
+            IterGrain = NestingGrain = 1;
+            IterRange = 4;
+            my_nestingDepth = 4;
+        }
+        else if ( my_nestingType == ShallowNesting ) {
+            int i = idx ? numWorkloads - 1 : 0;
+            count_t baseRange = algRanges[i];
+            count_t baseGrain = !UseAutoPartitioner() || idx > 1 ? algGrains[i] : 1;
+            NestingRange = IterRange = (count_t)sqrt((double)baseRange);
+            NestingGrain = IterGrain = (count_t)sqrt((double)baseGrain);
+        }
+        else {
+            NestingRange = N / 100;
+            NestingGrain = COARSE_GRAIN / 10;
+            IterRange = 2;
+            IterGrain = 1;
+        }
+        Perf::SetWorkloadName( "%d / %d", NestingRange, NestingGrain );
+    }
+
+    void Run ( ThreadInfo& ) {
+        if ( UseAutoPartitioner() )
+            tbb::parallel_for( range_t(0, NestingRange, NestingGrain), NestingForBody(my_nestingDepth), my_autoPartitioner );
+        else
+            tbb::parallel_for( range_t(0, NestingRange, NestingGrain), NestingForBody(my_nestingDepth), my_simplePartitioner );
+    }
+
+    void RunSerial ( ThreadInfo& ) {
+        for ( int i = 0; i < NestingRange; ++i ) {
+            SimpleForBody body;
+            body( range_t(0, IterRange, IterGrain) );
+        }
+    }
+public:
+    Test_PFor_Nested ( NestingType nt, PartitionerType pt ) : base_type(pt), my_nestingType(nt), my_nestingDepth(1) {}
+}; // class Test_PFor_Nested
+
+class SimpleReduceBody {
+public:
+    count_t my_sum;
+    SimpleReduceBody () : my_sum(0) {}
+    SimpleReduceBody ( SimpleReduceBody&, tbb::split ) : my_sum(0) {}
+    void join( SimpleReduceBody& rhs ) { my_sum += rhs.my_sum;}
+    void operator()( const range_t& r ) {
+        count_t end = r.end();
+        volatile count_t anchor = 0;
+        for( count_t i = r.begin(); i < end; ++i )
+            anchor += i;
+        my_sum = anchor;
+    }
+}; // class SimpleReduceBody
+
+class Test_PReduce : public Test_Algs {
+protected:
+    const char* Name () { return UseAutoPartitioner() ? "PReduce-AP" : "PReduce"; }
+
+    void Run ( ThreadInfo& ) {
+        SimpleReduceBody body;
+        if ( UseAutoPartitioner() )
+            tbb::parallel_reduce( range_t(0, IterRange, IterGrain), body, my_autoPartitioner );
+        else
+            tbb::parallel_reduce( range_t(0, IterRange, IterGrain), body, my_simplePartitioner );
+    }
+
+    void RunSerial ( ThreadInfo& ) {
+        SimpleReduceBody body;
+        body( range_t(0, IterRange, IterGrain) );
+    }
+public:
+    Test_PReduce ( PartitionerType pt = SimplePartitioner ) : Test_Algs(pt) {}
+}; // class Test_PReduce
+
+int main( int argc, char* argv[] ) {
+    Perf::SessionSettings opts (Perf::UseTaskScheduler | Perf::UseSerialBaseline, "perf_sched.txt");   // Perf::UseBaseline, Perf::UseSmallestWorkloadOnly
+    Perf::RegisterTest<Test_SPMC>();
+    Perf::RegisterTest<Test_ShallowTree>();
+    Perf::RegisterTest<Test_ShallowTree_Skewed>();
+    Test_PFor_Simple pf_sp(SimplePartitioner), pf_ap(AutoPartitioner);
+    Perf::RegisterTest(pf_sp);
+    Perf::RegisterTest(pf_ap);
+    Test_PReduce pr_sp(SimplePartitioner), pr_ap(AutoPartitioner);
+    Perf::RegisterTest(pr_sp);
+    Perf::RegisterTest(pr_ap);
+    Test_PFor_Skewed pf_s_sp(SimplePartitioner), pf_s_ap(AutoPartitioner);
+    Perf::RegisterTest(pf_s_sp);
+    Perf::RegisterTest(pf_s_ap);
+    Test_PFor_Nested pf_hn_sp(HollowNesting, SimplePartitioner), pf_hn_ap(HollowNesting, AutoPartitioner),
+                     pf_sn_sp(ShallowNesting, SimplePartitioner), pf_sn_ap(ShallowNesting, AutoPartitioner),
+                     pf_dn_sp(DeepNesting, SimplePartitioner), pf_dn_ap(DeepNesting, AutoPartitioner);
+    Perf::RegisterTest(pf_hn_sp);
+    Perf::RegisterTest(pf_hn_ap);
+    Perf::RegisterTest(pf_sn_sp);
+    Perf::RegisterTest(pf_sn_ap);
+    Perf::RegisterTest(pf_dn_sp);
+    Perf::RegisterTest(pf_dn_ap);
+    return Perf::TestMain(argc, argv, &opts);
+}
diff --git a/src/perf/perf_util.h b/src/perf/perf_util.h
deleted file mode 100644
index badbef4..0000000
--- a/src/perf/perf_util.h
+++ /dev/null
@@ -1,292 +0,0 @@
-/*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks.
-
-    Threading Building Blocks is free software; you can redistribute it
-    and/or modify it under the terms of the GNU General Public License
-    version 2 as published by the Free Software Foundation.
-
-    Threading Building Blocks is distributed in the hope that it will be
-    useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-    of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with Threading Building Blocks; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    As a special exception, you may use this file as part of a free software
-    library without restriction.  Specifically, if other files instantiate
-    templates or use macros or inline functions from this file, or you compile
-    this file and link it with other files to produce an executable, this
-    file does not by itself cause the resulting executable to be covered by
-    the GNU General Public License.  This exception does not however
-    invalidate any other reasons why the executable file might be covered by
-    the GNU General Public License.
-*/
-
-#include "tbb/task_scheduler_init.h"
-#include "tbb/tick_count.h"
-#include <cmath>
-#include <cstdlib>
-#include <cerrno>
-#include <cfloat>
-#include <vector>
-#include <algorithm>
-
-#include "../src/test/harness.h"
-
-#if  __linux__ || __APPLE__ || __FreeBSD__
-    #include <sys/resource.h>
-#endif /* __APPLE__ */
-
-// The code, performance of which is to be measured, is surrounded by the StartSimpleTiming
-// and StopSimpleTiming macros. It is called "target code" or "code of interest" hereafter.
-//
-// The target code is executed inside the nested loop. Nesting is necessary to allow
-// measurements on arrays that fit cache of a particular level, while making the load
-// big enough to eliminate the influence of random deviations.
-//
-// Macro StartSimpleTiming defines reduction variable "util::anchor", which may be modified (usually 
-// by adding to) by the target code. This can be necessary to prevent optimizing compilers 
-// from throwing out the code of interest. Besides, if the target code is complex enough, 
-// make sure that all its branches contribute (directly or indirectly) to the value 
-// being added to the "util::anchor" variable.
-//
-// To factor out overhead introduced by the measurement infra code it is recommended to make 
-// a calibration run with target code replaced by a no-op (but still modifying "sum"), and
-// store the resulting time in the "util::base" variable.
-//
-// A generally good approach is to make the target code use elements of a preliminary 
-// initialized array. Then for calibration run you just need to add vector elements 
-// to the "sum" variable. To get rid of memory access delays make the array small 
-// enough to fit L2 or L1 cache (play with StartSimpleTiming arguments if necessary).
-//
-// Macro CalibrateSimpleTiming performs default calibration using "util::anchor += i;" operation.
-//
-// Macro ANCHOR_TYPE defines the type of the reduction variable. If it was not 
-// defined  before including this header, it is defined as size_t. Depending on 
-// the target code modern super scalar architectures may blend reduction operation
-// and instructions of interest differently for different target alternatives. So
-// you may play with the type to minimize out-of-order and parallel execution impact
-// on the calibration time veracity. You may even end up with different reduction 
-// variable types (and different calibration times) for different measurements.
-
-
-namespace util {
-
-typedef std::vector<double>    durations_t;
-
-    void trace_histogram ( const durations_t& t, char* histogramFileName )
-    {
-        FILE* f = histogramFileName ? fopen(histogramFileName, "wt") : stdout;
-        size_t  n = t.size();
-        const size_t num_buckets = 100;
-        double  min_val = *std::min_element(t.begin(), t.end()),
-                max_val = *std::max_element(t.begin(), t.end()),
-                bucket_size = (max_val - min_val) / num_buckets;
-        std::vector<size_t> hist(num_buckets + 1, 0);
-        for ( size_t i = 0; i < n; ++i )
-            ++hist[size_t((t[i]-min_val)/bucket_size)];
-        fprintf (f, "Histogram: nvals = %u, min = %g, max = %g, nbuckets = %u\n", (unsigned)n, min_val, max_val, (unsigned)num_buckets);
-        double bucket = min_val;
-        for ( size_t i = 0; i <= num_buckets; ++i, bucket+=bucket_size )
-            fprintf (f, "%12g\t%u\n", bucket, (unsigned)hist[i]);
-        fclose(f);
-    }
-
-    double average ( const durations_t& d, double& variation_percent, double& std_dev_percent )
-    {
-        durations_t t = d;
-        if ( t.size() > 5 ) {
-            t.erase(std::min_element(t.begin(), t.end()));
-            t.erase(std::max_element(t.begin(), t.end()));
-        }
-        size_t  n = t.size();
-        double  sum = 0,
-                min_val = *std::min_element(t.begin(), t.end()),
-                max_val = *std::max_element(t.begin(), t.end());
-        for ( size_t i = 0; i < n; ++i )
-            sum += t[i];
-        double  avg = sum / n,
-                std_dev = 0;
-        for ( size_t i = 0; i < n; ++i ) {
-            double    dev = fabs(t[i] - avg);
-            std_dev += dev * dev;
-        }
-        std_dev = sqrt(std_dev / n);
-        std_dev_percent = std_dev / avg * 100;
-        variation_percent = 100 * (max_val - min_val) / avg;
-        return avg;
-    }
-
-    static int num_threads;
-
-    static double   base = 0,
-                    base_dev = 0,
-                    base_dev_percent = 0;
-
-    static char *empty_fmt = "";
-    static int rate_field_len = 11;
-
-#if !defined(ANCHOR_TYPE)
-    #define ANCHOR_TYPE size_t
-#endif
-
-    static ANCHOR_TYPE anchor = 0;
-    
-    static double sequential_time = 0;
-
-
-#define StartSimpleTiming(nOuter, nInner) {             \
-    tbb::tick_count t1, t0 = tbb::tick_count::now();    \
-    for ( size_t j = 0; l < nOuter; ++l ) {             \
-        for ( size_t i = 0; i < nInner; ++i ) {
-
-#define StopSimpleTiming(res)                   \
-        }                                       \
-        util::anchor += (ANCHOR_TYPE)l;         \
-    }                                           \
-    t1 = tbb::tick_count::now();                \
-    printf (util::empty_fmt, util::anchor);     \
-    res = (t1-t0).seconds() - util::base;       \
-}
-
-#define CalibrateSimpleTiming(T, nOuter, nInner)    \
-    StartSimpleTiming(nOuter, nInner);              \
-        util::anchor += (ANCHOR_TYPE)i;             \
-    StopSimpleTiming(util::base);
-
-
-#define StartTimingImpl(nRuns, nOuter, nInner)      \
-    tbb::tick_count t1, t0;                         \
-    for ( size_t k = 0; k < nRuns; ++k )  {         \
-        t0 = tbb::tick_count::now();                \
-        for ( size_t l = 0; l < nOuter; ++l ) {     \
-            for ( size_t i = 0; i < nInner; ++i ) {
-
-#define StartTiming(nRuns, nOuter, nInner) {        \
-    util::durations_t  t_(nRuns);                   \
-    StartTimingImpl(nRuns, nOuter, nInner)
-
-#define StartTimingEx(vDurations, nRuns, nOuter, nInner) {  \
-    util::durations_t  &t_ = vDurations;                    \
-    vDurations.resize(nRuns);                               \
-    StartTimingImpl(nRuns, nOuter, nInner)
-
-#define StopTiming(Avg, StdDev, StdDevPercent)      \
-            }                                       \
-            util::anchor += (ANCHOR_TYPE)l;         \
-        }                                           \
-        t1 = tbb::tick_count::now();                \
-        t_[k] = (t1 - t0).seconds()/nrep;           \
-    }                                               \
-    printf (util::empty_fmt, util::anchor);         \
-    Avg = util::average(t_, StdDev, StdDevPercent); \
-}
-
-#define CalibrateTiming(nRuns, nOuter, nInner)      \
-    StartTiming(nRuns, nOuter, nInner);             \
-        util::anchor += (ANCHOR_TYPE)i;             \
-    StopTiming(util::base, util::base_dev, util::base_dev_percent);
-
-} // namespace util
-
-
-#ifndef NRUNS
-    #define NRUNS               7
-#endif
-
-#ifndef ONE_TEST_DURATION
-    #define ONE_TEST_DURATION   0.01
-#endif
-
-#define no_histogram  ((char*)-1)
-
-inline 
-double RunTestImpl ( const char* title, void (*pfn)(), char* histogramFileName = no_histogram ) {
-    double  time = 0, variation = 0, deviation = 0;
-    size_t nrep = 1;
-    for (;;) {
-        CalibrateTiming(NRUNS, 1, nrep);
-        StartTiming(NRUNS, 1, nrep);
-        pfn();
-        StopTiming(time, variation, deviation);
-        time -= util::base;
-        if ( time > 1e-6 )
-            break;
-        nrep *= 2;
-    }
-    nrep *= (size_t)ceil(ONE_TEST_DURATION/time);
-    CalibrateTiming(NRUNS, 1, nrep);    // sets util::base
-    util::durations_t  t;
-    StartTimingEx(t, NRUNS, 1, nrep);
-        pfn();
-    StopTiming(time, variation, deviation);
-    if ( histogramFileName != (char*)-1 )
-        util::trace_histogram(t, histogramFileName);
-    double clean_time = time - util::base;
-    if ( title ) {
-        // Deviation (in percent) is calculated for the Gross time
-        printf ("\n%-34s %.2e  %5.1f      ", title, clean_time, deviation);
-        if ( util::sequential_time != 0  )
-            //printf ("% .2e  ", clean_time - util::sequential_time);
-            printf ("% 10.1f      ", 100*(clean_time - util::sequential_time)/util::sequential_time);
-        else
-            printf ("%*s ", util::rate_field_len, "");
-        printf ("%-9u %1.6f    |", (unsigned)nrep, time * nrep);
-    }
-    return clean_time;
-}
-
-
-/// Runs the test function, does statistical processing, and, if title is nonzero, prints results.
-/** If histogramFileName is a string, the histogram of individual runs is generated and stored
-    in a file with the given name. If it is NULL then the histogram is printed on the console.
-    By default no histogram is generated. 
-    The histogram format is: "rate bucket start" "number of tests in this bucket". **/
-inline 
-void RunTest ( const char* title_fmt, size_t workload_param, void (*pfn_test)(), char* histogramFileName = no_histogram ) {
-    char title[1024];
-    sprintf(title, title_fmt, (long)workload_param);
-    RunTestImpl(title, pfn_test, histogramFileName);
-}
-
-inline 
-void CalcSequentialTime ( void (*pfn)() ) {
-    util::sequential_time = RunTestImpl(NULL, pfn) / util::num_threads;
-}
-
-inline 
-void ResetSequentialTime () {
-    util::sequential_time = 0;
-}
-
-
-inline void PrintTitle() {
-    //printf ("%-32s %-*s Std Dev,%%  %-*s  Repeats   Gross time  Infra time  | NRUNS = %u", 
-    //        "Test name", util::rate_field_len, "Rate", util::rate_field_len, "Overhead", NRUNS);
-    printf ("%-34s %-*s Std Dev,%%  Par.overhead,%%  Repeats   Gross time  | Nruns %u, Nthreads %d", 
-            "Test name", util::rate_field_len, "Rate", NRUNS, util::num_threads);
-}
-
-void Test();
-
-inline
-int test_main( int argc, char* argv[] ) {
-    MinThread = 1;
-    MaxThread = tbb::task_scheduler_init::default_num_threads();
-    ParseCommandLine( argc, argv );
-    char buf[128];
-    util::rate_field_len = 2 + sprintf(buf, "%.1e", 1.1);
-    for ( int i = MinThread; i <= MaxThread; ++i ) {
-        tbb::task_scheduler_init init (i);
-        util::num_threads = i;
-        PrintTitle();
-        Test();
-        printf("\n");
-    }
-    printf("done\n");
-    return 0;
-}
diff --git a/src/perf/run_statistics.sh b/src/perf/run_statistics.sh
new file mode 100644
index 0000000..a1f7463
--- /dev/null
+++ b/src/perf/run_statistics.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+#
+# 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.
+
+export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
+#setting output format .csv, 'pivot' - is pivot table mode, ++ means append
+export STAT_FORMAT=pivot-csv++
+#check existing files because of apend mode
+ls *.csv
+rm -i *.csv
+#setting a delimiter in txt or csv file
+#export STAT_DELIMITER=,
+export STAT_RUNINFO1=Host=`hostname -s`
+#append a suffix after the filename
+#export STAT_SUFFIX=$STAT_RUNINFO1
+for ((i=1;i<=${repeat:=100};++i)); do echo $i of $repeat: && STAT_RUNINFO2=Run=$i $* || break; done
diff --git a/src/perf/statistics.cpp b/src/perf/statistics.cpp
index 25788fa..3d8bc36 100644
--- a/src/perf/statistics.cpp
+++ b/src/perf/statistics.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -124,6 +124,12 @@ void StatisticsCollector::AddStatisticValue(const char *type, const char *fmt, .
     CurrentKey->Analysis[type] = buff;
 }
 
+void StatisticsCollector::SetRunInfo(const char *title, const char *fmt, ...)
+{
+    vargf2buff(buff, 256, fmt);
+    RunInfo.push_back(make_pair(title, buff));
+}
+
 void StatisticsCollector::SetStatisticFormula(const char *name, const char *formula)
 {
     Formulas[name] = formula;
@@ -151,6 +157,31 @@ string ExcelFormula(const string &fmt, size_t place, size_t rounds, bool is_hori
 void StatisticsCollector::Print(int dataOutput, const char *ModeName)
 {
     FILE *OutputFile;
+    const char *file_suffix = getenv("STAT_SUFFIX");
+    if( !file_suffix ) file_suffix = "";
+    const char *file_format = getenv("STAT_FORMAT");
+    if( file_format ) {
+        dataOutput = 0;
+        if( strstr(file_format, "con")||strstr(file_format, "std") ) dataOutput |= StatisticsCollector::Stdout;
+        if( strstr(file_format, "txt")||strstr(file_format, "csv") ) dataOutput |= StatisticsCollector::TextFile;
+        if( strstr(file_format, "excel")||strstr(file_format, "xml") ) dataOutput |= StatisticsCollector::ExcelXML;
+        if( strstr(file_format, "htm") ) dataOutput |= StatisticsCollector::HTMLFile;
+        if( strstr(file_format, "pivot") ) dataOutput |= StatisticsCollector::PivotMode;
+    }
+    for(int i = 1; i < 10; i++) {
+        string env = Format("STAT_RUNINFO%d", i);
+        const char *info = getenv(env.c_str());
+        if( info ) {
+            string title(info);
+            size_t pos = title.find('=');
+            if( pos != string::npos ) {
+                env = title.substr(pos+1);
+                title.resize(pos);
+            } else env = title;
+            RunInfo.push_back(make_pair(title, env));
+        }
+    }
+
     if (dataOutput & StatisticsCollector::Stdout)
     {
         printf("\n-=# %s #=-\n", Title.c_str());
@@ -181,10 +212,90 @@ void StatisticsCollector::Print(int dataOutput, const char *ModeName)
         }
         printf("\n");
     }
+    if (dataOutput & StatisticsCollector::TextFile)
+    {
+        bool append = false;
+        const char *file_ext = ".txt";
+        if( file_format && strstr(file_format, "++") ) append = true;
+        if( file_format && strstr(file_format, "csv") ) file_ext = ".csv";
+        if ((OutputFile = fopen((Name+file_suffix+file_ext).c_str(), append?"at":"wt")) == NULL) {
+            printf("Can't open .txt file\n");
+        } else {
+            const char *delim = getenv("STAT_DELIMITER");
+            if( !delim || !delim[0] ) {
+                if( file_format && strstr(file_format, "csv") ) delim = ",";
+                else delim = "\t";
+            }
+            if( !append || !ftell(OutputFile) ) { // header needed
+                append = false;
+                if(SortMode == ByThreads) fprintf(OutputFile, "Name%s#%s%s", delim, delim, ModeName);
+                else fprintf(OutputFile, "Name%s%s%s#", delim, ModeName, delim);
+                for( size_t k = 0; k < RunInfo.size(); k++ )
+                    fprintf(OutputFile, "%s%s", delim, RunInfo[k].first.c_str());
+            }
+            if(dataOutput & StatisticsCollector::PivotMode) {
+                if( !append) fprintf(OutputFile, "%sColumn%sValue", delim, delim);
+                for (Statistics_t::iterator i = Statistics.begin(); i != Statistics.end(); i++)
+                {
+                    string RowHead;
+                    if(SortMode == ByThreads)
+                        RowHead = Format("\n%s%s%d%s%s%s", i->second->Name.c_str(), delim, i->second->Threads, delim, i->second->Mode.c_str(), delim);
+                    else
+                        RowHead = Format("\n%s%s%s%s%d%s", i->second->Name.c_str(), delim, i->second->Mode.c_str(), delim, i->second->Threads, delim);
+                    for( size_t k = 0; k < RunInfo.size(); k++ )
+                        RowHead.append(RunInfo[k].second + delim);
+                    Analysis_t &analisis = i->second->Analysis;
+                    for (Analysis_t::iterator a = analisis.begin(); a != analisis.end(); ++a)
+                        fprintf(OutputFile, "%s%s%s%s", RowHead.c_str(), a->first.c_str(), delim, a->second.c_str());
+                    Results_t &r = i->second->Results;
+                    for (size_t k = 0; k < r.size(); k++) {
+                        fprintf(OutputFile, "%s%s%s", RowHead.c_str(), RoundTitles[k].c_str(), delim);
+                        fprintf(OutputFile, ResultsFmt, r[k]);
+                    }
+                }
+            } else {
+                if( !append ) {
+                    for( size_t k = 0; k < RunInfo.size(); k++ )
+                        fprintf(OutputFile, "%s%s", delim, RunInfo[k].first.c_str());
+                    for (AnalysisTitles_t::iterator i = AnalysisTitles.begin(); i != AnalysisTitles.end(); i++)
+                        fprintf(OutputFile, "%s%s", delim, i->c_str()+1);
+                    for (size_t i = 0; i < RoundTitles.size(); i++)
+                        fprintf(OutputFile, "%s%s", delim, RoundTitles[i].c_str());
+                }
+                for (Statistics_t::iterator i = Statistics.begin(); i != Statistics.end(); i++)
+                {
+                    if(SortMode == ByThreads)
+                        fprintf(OutputFile, "\n%s%s%d%s%s", i->second->Name.c_str(), delim, i->second->Threads, delim, i->second->Mode.c_str());
+                    else
+                        fprintf(OutputFile, "\n%s%s%s%s%d", i->second->Name.c_str(), delim, i->second->Mode.c_str(), delim, i->second->Threads);
+                    for( size_t k = 0; k < RunInfo.size(); k++ )
+                        fprintf(OutputFile, "%s%s", delim, RunInfo[k].second.c_str());
+                    Analysis_t &analisis = i->second->Analysis;
+                    AnalysisTitles_t::iterator t = AnalysisTitles.begin();
+                    for (Analysis_t::iterator a = analisis.begin(); a != analisis.end(); ++t) {
+                        fprintf(OutputFile, "%s", delim);
+                        if(*t == a->first) {
+                            fprintf(OutputFile, "%s", a->second.c_str()); ++a;
+                        }
+                    }
+                    //data
+                    Results_t &r = i->second->Results;
+                    for (size_t k = 0; k < r.size(); k++)
+                    {
+                        fprintf(OutputFile, "%s", delim);
+                        fprintf(OutputFile, ResultsFmt, r[k]);
+                    }
+                }
+            }
+            fprintf(OutputFile, "\n");
+            fclose(OutputFile);
+        }
+    }
     if (dataOutput & StatisticsCollector::HTMLFile)
     {
-        if ((OutputFile = fopen((Name+".html").c_str(), "w+t")) != NULL)
-        {
+        if ((OutputFile = fopen((Name+file_suffix+".html").c_str(), "w+t")) == NULL) {
+            printf("Can't open .html file\n");
+        } else {
             char TimerBuff[100], DateBuff[100];
             GetTime(TimerBuff,sizeof(TimerBuff));
             GetDate(DateBuff,sizeof(DateBuff));
@@ -193,9 +304,11 @@ void StatisticsCollector::Print(int dataOutput, const char *ModeName)
             fprintf(OutputFile, "<table id=\"h\" style=\"position:absolute;top:20\" border=1 cellspacing=0 cellpadding=2>\n");
             fprintf(OutputFile, "<tr><td><a name=hr href=#vr onclick=\"v.style.visibility='visible';"
                                 "h.style.visibility='hidden';\">Flip[H]</a></td>"
-                                "<td>%s</td><td>%s</td><td colspan=%u>%s</td>",
+                                "<td>%s</td><td>%s</td><td colspan=%u>%s",
                 DateBuff, TimerBuff, unsigned(AnalysisTitles.size() + RoundTitles.size()), Title.c_str());
-            fprintf(OutputFile, "</tr>\n<tr bgcolor=#CCFFFF><td>Name</td><td>Threads</td><td>%s</td>", ModeName);
+            for( size_t k = 0; k < RunInfo.size(); k++ )
+                fprintf(OutputFile, "; %s: %s", RunInfo[k].first.c_str(), RunInfo[k].second.c_str());
+            fprintf(OutputFile, "</td></tr>\n<tr bgcolor=#CCFFFF><td>Name</td><td>Threads</td><td>%s</td>", ModeName);
             for (AnalysisTitles_t::iterator i = AnalysisTitles.begin(); i != AnalysisTitles.end(); i++)
                 fprintf(OutputFile, "<td>%s</td>", i->c_str()+1);
             for (size_t i = 0; i < RoundTitles.size(); i++)
@@ -263,14 +376,11 @@ void StatisticsCollector::Print(int dataOutput, const char *ModeName)
     }
     if (dataOutput & StatisticsCollector::ExcelXML)
     {
-        if ((OutputFile = fopen((Name+".xml").c_str(), "w+t")) == NULL) {
+        if ((OutputFile = fopen((Name+file_suffix+".xml").c_str(), "w+t")) == NULL) {
             printf("Can't open .xml file\n");
         } else {
-            //vector<value_t> *TmpVect;
-            //Statistics_t::iterator ii, i = Statistics.begin();
-            //Analysis_t::iterator jj, j = i->second.Analysis.begin();
+            // TODO:PivotMode
             char UserName[100];
-            char SheetName[20];
             char TimerBuff[100], DateBuff[100];
 #if _WIN32 || _WIN64
             strcpy(UserName,getenv("USERNAME"));
@@ -278,13 +388,12 @@ void StatisticsCollector::Print(int dataOutput, const char *ModeName)
             strcpy(UserName,getenv("USER"));
 #endif
             //--------------------------------
-            strcpy(SheetName,"Horizontal");
             GetTime(TimerBuff,sizeof(TimerBuff));
             GetDate(DateBuff,sizeof(DateBuff));
             //--------------------------
             fprintf(OutputFile, XMLHead, UserName, TimerBuff);
             fprintf(OutputFile, XMLStyles);
-            fprintf(OutputFile, XMLBeginSheet, SheetName);
+            fprintf(OutputFile, XMLBeginSheet, "Horizontal");
             fprintf(OutputFile, XMLNames,1,1,1,int(AnalysisTitles.size()+Formulas.size()+COUNT_PARAMETERS));
             fprintf(OutputFile, XMLBeginTable, int(RoundTitles.size()+Formulas.size()+AnalysisTitles.size()+COUNT_PARAMETERS+1/*title*/), int(Statistics.size()+1));
             fprintf(OutputFile, XMLBRow);
@@ -297,7 +406,10 @@ void StatisticsCollector::Print(int dataOutput, const char *ModeName)
                 fprintf(OutputFile, XMLAnalysisTitle, j->first.c_str()+1);
             for (RoundTitles_t::iterator j = RoundTitles.begin(); j != RoundTitles.end(); j++)
                 fprintf(OutputFile, XMLAnalysisTitle, j->c_str());
-            fprintf(OutputFile, XMLCellEmptyWhite, Title.c_str());
+            string Info = Title;
+            for( size_t k = 0; k < RunInfo.size(); k++ )
+                Info.append("; " + RunInfo[k].first + "=" + RunInfo[k].second);
+            fprintf(OutputFile, XMLCellEmptyWhite, Info.c_str());
             fprintf(OutputFile, XMLERow);
             //------------------------
             for (Statistics_t::iterator i = Statistics.begin(); i != Statistics.end(); i++)
diff --git a/src/perf/statistics.h b/src/perf/statistics.h
index 04412fd..c4d96ae 100644
--- a/src/perf/statistics.h
+++ b/src/perf/statistics.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -100,6 +100,8 @@ protected:
     Formulas_t   Formulas;
     typedef set<string> AnalysisTitles_t;
     AnalysisTitles_t AnalysisTitles;
+    typedef vector<pair<string, string> > RunInfo_t;
+    RunInfo_t RunInfo;
 
 public:
     struct TestCase {
@@ -129,7 +131,8 @@ public:
         Stdout   = 1<<8,    //< Output to the console
         TextFile = 1<<9,    //< Output to plain text file "name.txt" (delimiter is TAB by default)
         ExcelXML = 1<<10,   //< Output to Excel-readable XML-file "name.xml"
-        HTMLFile = 1<<11    //< Output to HTML file "name.html"
+        HTMLFile = 1<<11,   //< Output to HTML file "name.html"
+        PivotMode= 1<<15    //< Puts all the rounds into one columt to better fit for pivot table in Excel
     };
 
     //! Constructor. Specify tests set name which used as name of output files
@@ -166,6 +169,9 @@ public:
     //TODO://! #1 .. #n templates represent data cells from the first to the last
     //TODO: merge with Analisis
     void SetStatisticFormula(const char *name, const char *formula);
+    //! Add information about run or compile parameters
+    void SetRunInfo(const char *title, const char *fmt, ...);
+    void SetRunInfo(const char *title, int num) { SetRunInfo(title, "%d", num); }
 
     //! Data output
     void Print(int dataOutput, const char *ModeName = "Mode");
diff --git a/src/perf/statistics_xml.h b/src/perf/statistics_xml.h
index 7be259e..b050ab3 100644
--- a/src/perf/statistics_xml.h
+++ b/src/perf/statistics_xml.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/perf/time_base.cpp b/src/perf/time_base.cpp
deleted file mode 100644
index 70bdeae..0000000
--- a/src/perf/time_base.cpp
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks.
-
-    Threading Building Blocks is free software; you can redistribute it
-    and/or modify it under the terms of the GNU General Public License
-    version 2 as published by the Free Software Foundation.
-
-    Threading Building Blocks is distributed in the hope that it will be
-    useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-    of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with Threading Building Blocks; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    As a special exception, you may use this file as part of a free software
-    library without restriction.  Specifically, if other files instantiate
-    templates or use macros or inline functions from this file, or you compile
-    this file and link it with other files to produce an executable, this
-    file does not by itself cause the resulting executable to be covered by
-    the GNU General Public License.  This exception does not however
-    invalidate any other reasons why the executable file might be covered by
-    the GNU General Public License.
-*/
-
-#include "tbb/blocked_range.h"
-#include "tbb/parallel_for.h"
-#include "tbb/parallel_reduce.h"
-
-
-#define NRUNS               10
-#define ONE_TEST_DURATION   0.01
-
-#include "perf_util.h"
-
-
-#define NUM_CHILD_TASKS     128
-#define NUM_ROOT_TASKS      16
-
-#define N               1000000
-#define FINE_GRAIN      50
-#define MED_GRAIN       500
-#define COARSE_GRAIN    10000
-
-
-typedef ANCHOR_TYPE count_type;
-typedef tbb::blocked_range<count_type> range_type;
-
-const count_type NUM_leaf_tasks = NUM_CHILD_TASKS * NUM_ROOT_TASKS;
-
-const count_type N_finest = (count_type)(N/log((double)N)/10);
-const count_type N_fine = N_finest * 10;
-
-
-class static_task_holder {
-public:
-    tbb::task   *my_simple_leaf_task_ptr;
-    
-    static_task_holder ();
-};
-
-static static_task_holder s_tasks;
-
-
-static size_t s_num_iterations = 0;
-
-
-class simple_leaf_task : public tbb::task
-{
-    task* execute () {
-        for ( size_t i=0; i < s_num_iterations; ++i )
-            util::anchor += i;
-            //util::anchor += size_t(log10((double)util::anchor)*10);
-        return NULL;
-    }
-};
-
-class simple_root_task : public tbb::task
-{
-    task* execute () {
-        set_ref_count(NUM_leaf_tasks + 1);
-        for ( size_t i = 0; i < NUM_leaf_tasks; ++i ) {
-            simple_leaf_task &t = *new( allocate_child() ) simple_leaf_task;
-            spawn(t);
-        }
-        wait_for_all();
-        return NULL;
-    }
-};
-
-void Work1 () {
-    for ( size_t i=0; i < NUM_leaf_tasks; ++i )
-        s_tasks.my_simple_leaf_task_ptr->execute();
-}
-
-void Test1_1 () {
-    tbb::empty_task &r = *new( tbb::task::allocate_root() ) tbb::empty_task;
-    r.set_ref_count(NUM_leaf_tasks + 1);
-    for ( size_t i = 0; i < NUM_leaf_tasks; ++i ) {
-        simple_leaf_task &t = *new( r.allocate_child() ) simple_leaf_task;
-        r.spawn(t);
-    }
-    r.wait_for_all();
-    r.destroy(r);
-}
-
-void Test1_2 ()
-{
-    simple_root_task &r = *new( tbb::task::allocate_root() ) simple_root_task;
-    tbb::task::spawn_root_and_wait(r);
-}
-
-
-class children_launcher_task : public tbb::task
-{
-    task* execute () {
-        set_ref_count(NUM_CHILD_TASKS + 1);
-        for ( size_t i = 0; i < NUM_CHILD_TASKS; ++i ) {
-            simple_leaf_task &t = *new( allocate_child() ) simple_leaf_task;
-            spawn(t);
-        }
-        wait_for_all();
-        return NULL;
-    }
-};
-
-class root_launcher_task : public tbb::task
-{
-    task* execute () {
-        children_launcher_task &r = *new( allocate_root() ) children_launcher_task;
-        spawn_root_and_wait(r);
-        return NULL;
-    }
-};
-
-class hierarchy_root_task : public tbb::task
-{
-    task* execute () {
-        tbb::task_list  tl;
-        for ( size_t i = 0; i < NUM_ROOT_TASKS; ++i ) {
-            root_launcher_task &r = *new( allocate_root() ) root_launcher_task;
-            tl.push_back(r);
-        }
-        spawn_root_and_wait(tl);
-        return NULL;
-    }
-};
-
-void Test1_3 ()
-{
-    hierarchy_root_task &r = *new( tbb::task::allocate_root() ) hierarchy_root_task;
-    tbb::task::spawn_root_and_wait(r);
-}
-
-
-static size_t   s_range = N,
-                s_grain = 1;
-
-class simple_pfor_body {
-public:
-    void operator()( const range_type& r ) const {
-        count_type end = r.end();
-        for( count_type i = r.begin(); i < end; ++i )
-            util::anchor += i;
-    }
-};
-
-void Work2 () {
-    simple_pfor_body body;
-    range_type range(0, s_range, s_grain);
-    body(range);
-}
-
-void Test2 () {
-    tbb::parallel_for( range_type(0, s_range, s_grain), simple_pfor_body() );
-}
-
-void Test2_0 () {
-    volatile count_type zero = 0;
-    tbb::parallel_for( range_type(0, zero, 1), simple_pfor_body() );
-}
-
-
-class simple_preduce_body {
-public:
-    count_type my_sum;
-    simple_preduce_body () : my_sum(0) {}
-    simple_preduce_body ( simple_preduce_body&, tbb::split ) : my_sum(0) {}
-    void join( simple_preduce_body& rhs ) { my_sum += rhs.my_sum;}
-    void operator()( const range_type& r ) {
-        count_type end = r.end();
-        for( count_type i = r.begin(); i < end; ++i )
-            util::anchor += i;
-        my_sum = util::anchor;
-    }
-};
-
-void Work3 () {
-    simple_preduce_body body;
-    range_type range(0, s_range, s_grain);
-    body(range);
-}
-
-void Test3 () {
-    simple_preduce_body body;
-    tbb::parallel_reduce( range_type(0, s_range, s_grain), body );
-}
-
-void Test3_0 () {
-    volatile count_type zero = 0;
-    simple_preduce_body body;
-    tbb::parallel_reduce( range_type(0, zero, 1), body );
-}
-
-
-static_task_holder::static_task_holder () {
-    static simple_leaf_task s_t1;
-    my_simple_leaf_task_ptr = &s_t1;
-}
-
-void Test () {
-    const size_t num_task_tree_workloads = 4;
-    size_t task_tree_workloads[num_task_tree_workloads] = {0, 50, 500, 10000};
-    for (size_t i = 0; i < num_task_tree_workloads; ++i ) {
-        size_t n = task_tree_workloads[i];
-        s_num_iterations = n;
-        CalcSequentialTime(Work1);
-        RunTest ("Bunch of leaves: %d adds/task", n, Test1_1);
-        RunTest ("Simple task tree: %d adds/task", n, Test1_2);
-        RunTest ("Complex task tree: %d adds/task", n, Test1_3);
-    }
-
-    // Using N_fine constant in the body of this function results in incorrect code
-    // generation by icl 10.1.014
-    const size_t num_alg_workloads = 4;
-    size_t alg_ranges[num_alg_workloads] = {N_fine/10, N_fine, N, N};
-    size_t alg_grains[num_alg_workloads] = {1, FINE_GRAIN, MED_GRAIN, COARSE_GRAIN};
-    
-    //RunTest ("Empty pfor", 0, Test2_0);
-    for (size_t i = 0; i < num_alg_workloads; ++i ) {
-        s_range = alg_ranges[i];
-        s_grain = alg_grains[i];
-        CalcSequentialTime(Work2);
-        RunTest ("pfor: %d adds/body", s_grain, Test2);
-    }
-
-    //RunTest ("Empty preduce", Test3_0);
-    for (size_t i = 0; i < num_alg_workloads; ++i ) {
-        s_range = alg_ranges[i];
-        s_grain = alg_grains[i];
-        CalcSequentialTime(Work3);
-        RunTest ("preduce: %d adds/body", s_grain, Test3);
-    }
-}
-
-int main( int argc, char* argv[] ) {
-    test_main(argc, argv);
-    return 0;
-}
diff --git a/src/perf/time_framework.h b/src/perf/time_framework.h
index 59a636c..3e61ac5 100644
--- a/src/perf/time_framework.h
+++ b/src/perf/time_framework.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -76,8 +76,11 @@ protected:
     //! some value for tester
     arg_t value;
 
+    //! tester name
+    const char *tester_name;
+
     // avoid false sharing
-    char pad[128 - sizeof(arg_t) - sizeof(int)*2 - sizeof(void*) ];
+    char pad[128 - sizeof(arg_t) - sizeof(int)*2 - sizeof(void*)*2 ];
 
 public:
     //! init tester base. @arg ntests is number of embeded tests in this tester.
@@ -157,11 +160,21 @@ class ValuePerSecond : public Tester {
     /*override*/ value_t test(int testn, int threadn) {
         Timer timer;
         Tester::test(testn, threadn);
-        // return time value per seconds/scale
+        // return value per seconds/scale
         return double(Tester::value)/(timer.get_time()*scale);
     }
 };
 
+template<typename Tester, int scale = 1>
+class NumberPerSecond : public Tester {
+    /*override*/ value_t test(int testn, int threadn) {
+        Timer timer;
+        Tester::test(testn, threadn);
+        // return a scale per seconds
+        return double(scale)/timer.get_time();
+    }
+};
+
 // operate with single tester
 class TestRunner {
     friend class TestProcessor;
@@ -178,7 +191,9 @@ public:
     template<typename Test>
     TestRunner(const char *name, Test *test)
         : tester_name(name), tester(*static_cast<TesterBase*>(test))
-    {}
+    {
+        test->tester_name = name;
+    }
     
     ~TestRunner() { delete &tester; }
 
diff --git a/src/perf/time_hash_map.cpp b/src/perf/time_hash_map.cpp
index 10205d5..b3a5535 100644
--- a/src/perf/time_hash_map.cpp
+++ b/src/perf/time_hash_map.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 fff0484..01e1aa5 100644
--- a/src/perf/time_hash_map_fill.cpp
+++ b/src/perf/time_hash_map_fill.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -28,10 +28,11 @@
 
 // configuration:
 
-// Size of input array
-const int INPUT_SIZE = 2000000;
-// Specify list of unique percents to test against. Max - 10
-#define SOURCE_ARRAY UNIQUE_PERCENT(5); UNIQUE_PERCENT(10); UNIQUE_PERCENT(20); UNIQUE_PERCENT(40)
+// Size of final table (must be multiple of STEP_*)
+int MAX_TABLE_SIZE = 2000000;
+
+// Specify list of unique percents (5-30,100) to test against. Max 10 values
+#define UNIQUE_PERCENTS PERCENT(5); PERCENT(10); PERCENT(20); PERCENT(30); PERCENT(100)
 
 // enable/disable tests for:
 #define BOX1 "CHMap"
@@ -78,52 +79,49 @@ using namespace tbb;
 using namespace tbb::internal;
 
 /////////////////////////////////////////////////////////////////////////////////////////
-// Input data built for SOURCE_ARRAY settings
-int Mixtures = 0;
-int Percents[10];
-int *Data[10];
+// Input data built for test
+int *Data;
 
 // Main test class used to run the timing tests. All overridden methods are called by the framework
 template<typename TableType>
 struct Uniques : TesterBase {
-    TableType *Table;
+    TableType Table;
     int n_items;
 
     // Initializes base class with number of test modes
-    Uniques() : TesterBase(Mixtures+1), Table(0) {}
-    ~Uniques() { if(Table) delete Table; }
+    Uniques() : TesterBase(2), Table(MaxThread*16) {
+        //Table->max_load_factor(1); // add stub into hash_map to uncomment it
+    }
+    ~Uniques() {}
     
     // Returns name of test mode specified by number
     /*override*/ std::string get_name(int testn) {
-        if(testn == Mixtures) return "find existing";
-        return Format("%d%% uniques", Percents[testn]);
+        if(testn == 1) return "find";
+        return "insert";
     }
 
     // Informs the class that value and threads number become known
     /*override*/ void init() {
-        n_items = value/threads_count;
+        n_items = value/threads_count; // operations
     }
 
     // Informs the class that the test mode for specified thread is about to start
     /*override*/ void test_prefix(int testn, int t) {
         barrier->wait();
-        if( t || testn == Mixtures ) return;
-        if(Table) delete Table;
-        Table = new TableType(MaxThread*4);
-        //Table->max_load_factor(1); // add stub into hash_map to uncomment it
+        if(Verbose && !t && testn) printf("%s: inserted %u, %g%% of operations\n", tester_name, unsigned(Table.size()), 100.0*Table.size()/(value*testn));
     }
 
     // Executes test mode for a given thread. Return value is ignored when used with timing wrappers.
     /*override*/ double test(int testn, int t)
     {
-        if( testn != Mixtures ) { // do insertions
-            for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {
-                Table->insert( std::make_pair(Data[testn][i],t) );
+        if( testn != 1 ) { // do insertions
+            for(int i = testn*value+t*n_items, e = testn*value+(t+1)*n_items; i < e; i++) {
+                Table.insert( std::make_pair(Data[i],t) );
             }
-        } else { // do finds
-            --testn; // on the last dataset
+        } else { // do last finds
             for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {
-                size_t c = Table->count( Data[testn][i] );
+                size_t c =
+                    Table.count( Data[i] );
                 ASSERT( c == 1, NULL ); // must exist
             }
         }
@@ -132,39 +130,41 @@ struct Uniques : TesterBase {
 };
 
 /////////////////////////////////////////////////////////////////////////////////////////
+#include <limits>
 
 // Using BOX declarations from configuration
 #include "time_sandbox.h"
 
+int rounds = 0;
 // Prepares the input data for given unique percent
-inline void UNIQUE_PERCENT(int p) {
-    Percents[Mixtures] = p;
-    Data[Mixtures] = new int[INPUT_SIZE];
-    int uniques = INPUT_SIZE/100*p;
-    srand(10101);
-    for(int i = 0; i < INPUT_SIZE; i++)
-        Data[Mixtures][i] = rand()%uniques;
-    Mixtures++;
+void execute_percent(test_sandbox &the_test, int p) {
+    int input_size = MAX_TABLE_SIZE*100/p;
+    Data = new int[input_size];
+    int uniques = p==100?std::numeric_limits<int>::max() : MAX_TABLE_SIZE;
+    ASSERT(p==100 || p <= 30, "Function is broken for %% > 30 except for 100%%");
+    for(int i = 0; i < input_size; i++)
+        Data[i] = rand()%uniques;
+    for(int t = MinThread; t <= MaxThread; t++)
+        the_test.factory(input_size, t); // executes the tests specified in BOX-es for given 'value' and threads
+    the_test.report.SetRoundTitle(rounds++, "%d%%", p);
 }
+#define PERCENT(x) execute_percent(the_test, x)
 
 int main(int argc, char* argv[]) {
     if(argc>1) Verbose = true;
     //if(argc>2) ExtraVerbose = true;
     MinThread = 1; MaxThread = task_scheduler_init::default_num_threads();
     ParseCommandLine( argc, argv );
+    if(getenv("TABLE_SIZE"))
+        MAX_TABLE_SIZE = atoi(getenv("TABLE_SIZE"));
 
     ASSERT(tbb_allocator<int>::allocator_type() == tbb_allocator<int>::scalable, "expecting scalable allocator library to be loaded. Please build it by:\n\t\tmake tbbmalloc");
-    SOURCE_ARRAY; // prepare source array
-    ASSERT(Mixtures > 0, NULL);
-
-    {
-        // Declares test processor
-        TEST_PROCESSOR_NAME the_test("time_hash_map_fill"/*, StatisticsCollector::ByThreads*/);
-        for( int t=MinThread; t <= MaxThread; t++)
-            the_test.factory(INPUT_SIZE, t); // executes the tests specified in BOX-es for given 'value' and threads
-        the_test.report.SetTitle("Operations per nanosecond", INPUT_SIZE);
-        the_test.report.Print(StatisticsCollector::HTMLFile|StatisticsCollector::ExcelXML); // Write files
-    }
+    // Declares test processor
+    test_sandbox the_test("time_hash_map_fill"/*, StatisticsCollector::ByThreads*/);
+    srand(10101);
+    UNIQUE_PERCENTS; // test the percents
+    the_test.report.SetTitle("Operations per nanosecond");
+    the_test.report.SetRunInfo("Items", MAX_TABLE_SIZE);
+    the_test.report.Print(StatisticsCollector::HTMLFile|StatisticsCollector::ExcelXML); // Write files
     return 0;
 }
-
diff --git a/src/perf/time_hash_map_fill.html b/src/perf/time_hash_map_fill.html
new file mode 100644
index 0000000..f5f1864
--- /dev/null
+++ b/src/perf/time_hash_map_fill.html
@@ -0,0 +1,121 @@
+<HTML><BODY>
+<H2>time_hash_map_fill</H2>
+<P><a href=time_hash_map_fill.cpp>time_hash_map_fill.cpp</a> is a micro-benchmark specifically designed to highlight aspects of concurrent resizing algorithm of the hash tables.
+It was derived from the Count Strings example that counts the number of unique words. But to exclude synchronization on the counters from the picture,
+it was simplified to build just a set of unique numbers from an input array. The array is filled evenly by using a pseudo-random number generator from the standard C library for various proportions of unique numbers.
+For example, for 5% of unique numbers, the same number is repeated 20 times on average. Together, it gives 5% of actual insertions and 95% are just lookups. However, in the beginning, there are more new keys occur than in the end.
+In addition, a size of the source array correlates with input rates in order to produce the same number of unique keys at the end, and so exclude cache effects from the equation.
+<H2>Diagram</H2><img src="time_hash_map_fill.gif">
+<H3>Prepare results</H3>
+<P>This benchmark outputs results in Excel* and html file formats by default. To generate text (CSV) file instead, specify STAT_FORMAT=pivot-csv evironment variable. To change the default table size, set TABLE_SIZE.
+<code><b><pre>src$    make time_hash_map_fill args=-v STAT_FORMAT=pivot-csv TABLE_SIZE=250000</pre></b></code>Or to get statistics from different runs:
+<code><b><pre>src$    make time_hash_map_fill TABLE_SIZE=50000 run_cmd="bash ../../src/perf/<a href=run_statistics.sh>run_statistics.sh</a>"</pre></b></code>
+<H3>Build diagram</H3>You can use <a href="http://ploticus.sourceforge.net/">Ploticus</a> to build diagram from the prepared data using this html file as a script. But first, the input data file should be sorted to join lines from different runs together, e.g.:
+<code><b><pre>src$    sort -t , -k 1dr,2 -k 3n,4 -k 7n,7 ../build/<i>{scrambled_path}</i>/time_hash_map_fill.csv -o perf/time_hash_map_fill.csv</pre></b></code>Here, field 7 is "Column" field that contains input rates because run_statistics.sh adds hostname and number of the run as 5 and 6 fields. Now, to build gif diagram, run:
+<code><b><pre>perf$   pl -maxrows 200000 -maxfields 1500000 -maxvector 1200000 -gif -scale 1.8 time_hash_map_fill.html</pre></b></code>
+<H3>Script body</H3>
+<hr><pre>
+
+#setifnotgiven NAMES = $makelist("1.CHMap 2.CUMap 3.OLD")
+#setifnotgiven LABLESIZE = 0.06
+
+#proc settings
+  encodenames: yes
+  units: cm
+
+#proc getdata
+  file: time_hash_map_fill.csv
+  fieldnameheader: yes
+  delim: comma
+  showdata: no
+  select: @@Mode = insert
+  pf_fieldnames: Name Mode Threads Value
+  filter:
+    ##print @@Name,"@@Items on @@Column",@@3,@@Value
+
+#endproc
+
+#proc page
+  pagesize: 70 50
+  tightcrop: yes
+#endproc
+
+#proc processdata
+  action: summary
+  fields: Name Mode Threads
+  valfield: Value
+  fieldnames: Name Mode Threads Average sd sem n_obs Min Max
+  showdata: no
+
+#proc categories
+  axis: x
+  datafield: Mode
+
+#proc areadef
+  title: Throughput on Insert operation
+  titledetails: size=14  align=C
+  areaname: slide
+  xscaletype: categories
+  xautorange: datafield=Mode
+  xaxis.stubs: usecategories
+  xaxis.label: Threads across table sizes and % of input rates
+//  yrange: 0 70
+  yautorange: datafield=Max,Min
+  yaxis.stubs: inc
+  yaxis.label: ops/ns
+//  yaxis.stubformat: %3.1f
+  autowidth: 1.1
+  autoheight: 0.07
+  frame: yes
+
+#for LABEL in @NAMES
+#set NLABEL = $arithl(@NLABEL+1)
+#set COLOR = $icolor( @NLABEL )
+#proc legendentry
+  label: @LABEL
+  sampletype: color
+  details: @COLOR
+
+#procdef catlines
+  select: @Name = @LABEL
+  catfield: Mode
+  subcatfield: Threads
+  subcats: auto
+  plotwidth: 0.8
+  #saveas C
+
+#proc catlines
+  #clone C
+  dpsymbol: shape=square radius=@LABLESIZE style=solid color=@COLOR
+  valfield: Average
+  errfield: sd
+
+#proc catlines
+  #clone C
+  valfield: Max
+  dpsymbol: shape=triangle radius=@LABLESIZE style=solid color=@COLOR
+
+#proc catlines
+  #clone C
+  valfield: Min
+  dpsymbol: shape=downtriangle radius=@LABLESIZE style=solid color=@COLOR
+
+#endloop
+
+#proc legend
+  location: 3.2 max
+  seglen: 0.2
+#endproc
+</pre>
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<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.
+</BODY>
+</HTML>
diff --git a/src/perf/time_locked_work.cpp b/src/perf/time_locked_work.cpp
index 13a9391..4c21ccf 100644
--- a/src/perf/time_locked_work.cpp
+++ b/src/perf/time_locked_work.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/perf/time_sandbox.h b/src/perf/time_sandbox.h
index 950e674..28f07d8 100644
--- a/src/perf/time_sandbox.h
+++ b/src/perf/time_sandbox.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/perf/time_unit.cpp b/src/perf/time_unit.cpp
deleted file mode 100644
index 7facf1c..0000000
--- a/src/perf/time_unit.cpp
+++ /dev/null
@@ -1,291 +0,0 @@
-/*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks.
-
-    Threading Building Blocks is free software; you can redistribute it
-    and/or modify it under the terms of the GNU General Public License
-    version 2 as published by the Free Software Foundation.
-
-    Threading Building Blocks is distributed in the hope that it will be
-    useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-    of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with Threading Building Blocks; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    As a special exception, you may use this file as part of a free software
-    library without restriction.  Specifically, if other files instantiate
-    templates or use macros or inline functions from this file, or you compile
-    this file and link it with other files to produce an executable, this
-    file does not by itself cause the resulting executable to be covered by
-    the GNU General Public License.  This exception does not however
-    invalidate any other reasons why the executable file might be covered by
-    the GNU General Public License.
-*/
-
-#include "tbb/task_scheduler_init.h"
-#include "tbb/tick_count.h"
-#include <cmath>
-#include <cstdlib>
-#include <cerrno>
-#include <cfloat>
-#include <vector>
-#include <algorithm>
-
-#include "../src/test/harness.h"
-
-#if  __linux__ || __APPLE__ || __FreeBSD__
-    #include <sys/resource.h>
-#endif /* __APPLE__ */
-
-// The code, performance of which is to be measured, is surrounded by the StartSimpleTiming
-// and StopSimpleTiming macros. It is called "target code" or "code of interest" hereafter.
-//
-// The target code is executed inside the nested loop. Nesting is necessary to allow
-// measurements on arrays that fit cache of a particular level, while making the load
-// big enough to eliminate the influence of random deviations.
-//
-// Macro StartSimpleTiming defines reduction variable "util::anchor", which may be modified (usually 
-// by adding to) by the target code. This can be necessary to prevent optimizing compilers 
-// from throwing out the code of interest. Besides, if the target code is complex enough, 
-// make sure that all its branches contribute (directly or indirectly) to the value 
-// being added to the "util::anchor" variable.
-//
-// To factor out overhead introduced by the measurement infra code it is recommended to make 
-// a calibration run with target code replaced by a no-op (but still modifying "sum"), and
-// store the resulting time in the "util::base" variable.
-//
-// A generally good approach is to make the target code use elements of a preliminary 
-// initialized array. Then for calibration run you just need to add vector elements 
-// to the "sum" variable. To get rid of memory access delays make the array small 
-// enough to fit L2 or L1 cache (play with StartSimpleTiming arguments if necessary).
-//
-// Macro CalibrateSimpleTiming performs default calibration using "util::anchor += i;" operation.
-//
-// Macro ANCHOR_TYPE defines the type of the reduction variable. If it was not 
-// defined  before including this header, it is defined as size_t. Depending on 
-// the target code modern super scalar architectures may blend reduction operation
-// and instructions of interest differently for different target alternatives. So
-// you may play with the type to minimize out-of-order and parallel execution impact
-// on the calibration time veracity. You may even end up with different reduction 
-// variable types (and different calibration times) for different measurements.
-
-
-namespace util {
-
-typedef std::vector<double>    durations_t;
-
-    void trace_histogram ( const durations_t& t, char* histogramFileName )
-    {
-        FILE* f = histogramFileName ? fopen(histogramFileName, "wt") : stdout;
-        size_t  n = t.size();
-        const size_t num_buckets = 100;
-        double  min_val = *std::min_element(t.begin(), t.end()),
-                max_val = *std::max_element(t.begin(), t.end()),
-                bucket_size = (max_val - min_val) / num_buckets;
-        std::vector<size_t> hist(num_buckets + 1, 0);
-        for ( size_t i = 0; i < n; ++i )
-            ++hist[size_t((t[i]-min_val)/bucket_size)];
-        fprintf (f, "Histogram: nvals = %u, min = %g, max = %g, nbuckets = %u\n", (unsigned)n, min_val, max_val, (unsigned)num_buckets);
-        double bucket = min_val;
-        for ( size_t i = 0; i <= num_buckets; ++i, bucket+=bucket_size )
-            fprintf (f, "%12g\t%u\n", bucket, (unsigned)hist[i]);
-        fclose(f);
-    }
-
-    double average ( const durations_t& d, double& variation_percent, double& std_dev_percent )
-    {
-        durations_t t = d;
-        if ( t.size() > 5 ) {
-            t.erase(std::min_element(t.begin(), t.end()));
-            t.erase(std::max_element(t.begin(), t.end()));
-        }
-        size_t  n = t.size();
-        double  sum = 0,
-                min_val = *std::min_element(t.begin(), t.end()),
-                max_val = *std::max_element(t.begin(), t.end());
-        for ( size_t i = 0; i < n; ++i )
-            sum += t[i];
-        double  avg = sum / n,
-                std_dev = 0;
-        for ( size_t i = 0; i < n; ++i ) {
-            double    dev = fabs(t[i] - avg);
-            std_dev += dev * dev;
-        }
-        std_dev = sqrt(std_dev / n);
-        std_dev_percent = std_dev / avg * 100;
-        variation_percent = 100 * (max_val - min_val) / avg;
-        return avg;
-    }
-
-    static int num_threads;
-
-    static double   base = 0,
-                    base_dev = 0,
-                    base_dev_percent = 0;
-
-    static char *empty_fmt = "";
-    static int rate_field_len = 11;
-
-#if !defined(ANCHOR_TYPE)
-    #define ANCHOR_TYPE size_t
-#endif
-
-    static ANCHOR_TYPE anchor = 0;
-    
-    static double sequential_time = 0;
-
-
-#define StartSimpleTiming(nOuter, nInner) {             \
-    tbb::tick_count t1, t0 = tbb::tick_count::now();    \
-    for ( size_t j = 0; l < nOuter; ++l ) {             \
-        for ( size_t i = 0; i < nInner; ++i ) {
-
-#define StopSimpleTiming(res)                   \
-        }                                       \
-        util::anchor += (ANCHOR_TYPE)l;         \
-    }                                           \
-    t1 = tbb::tick_count::now();                \
-    printf (util::empty_fmt, util::anchor);     \
-    res = (t1-t0).seconds() - util::base;       \
-}
-
-#define CalibrateSimpleTiming(T, nOuter, nInner)    \
-    StartSimpleTiming(nOuter, nInner);              \
-        util::anchor += (ANCHOR_TYPE)i;             \
-    StopSimpleTiming(util::base);
-
-
-#define StartTimingImpl(nRuns, nOuter, nInner)      \
-    tbb::tick_count t1, t0;                         \
-    for ( size_t k = 0; k < nRuns; ++k )  {         \
-        t0 = tbb::tick_count::now();                \
-        for ( size_t l = 0; l < nOuter; ++l ) {     \
-            for ( size_t i = 0; i < nInner; ++i ) {
-
-#define StartTiming(nRuns, nOuter, nInner) {        \
-    util::durations_t  t_(nRuns);                   \
-    StartTimingImpl(nRuns, nOuter, nInner)
-
-#define StartTimingEx(vDurations, nRuns, nOuter, nInner) {  \
-    util::durations_t  &t_ = vDurations;                    \
-    vDurations.resize(nRuns);                               \
-    StartTimingImpl(nRuns, nOuter, nInner)
-
-#define StopTiming(Avg, StdDev, StdDevPercent)      \
-            }                                       \
-            util::anchor += (ANCHOR_TYPE)l;         \
-        }                                           \
-        t1 = tbb::tick_count::now();                \
-        t_[k] = (t1 - t0).seconds()/nrep;           \
-    }                                               \
-    printf (util::empty_fmt, util::anchor);         \
-    Avg = util::average(t_, StdDev, StdDevPercent); \
-}
-
-#define CalibrateTiming(nRuns, nOuter, nInner)      \
-    StartTiming(nRuns, nOuter, nInner);             \
-        util::anchor += (ANCHOR_TYPE)i;             \
-    StopTiming(util::base, util::base_dev, util::base_dev_percent);
-
-} // namespace util
-
-
-#ifndef NRUNS
-    #define NRUNS               7
-#endif
-
-#ifndef ONE_TEST_DURATION
-    #define ONE_TEST_DURATION   0.01
-#endif
-
-#define no_histogram  ((char*)-1)
-
-inline 
-double RunTestImpl ( const char* title, void (*pfn)(), char* histogramFileName = no_histogram ) {
-    double  time = 0, variation = 0, deviation = 0;
-    size_t nrep = 1;
-    while (true) {
-        CalibrateTiming(NRUNS, 1, nrep);
-        StartTiming(NRUNS, 1, nrep);
-        pfn();
-        StopTiming(time, variation, deviation);
-        time -= util::base;
-        if ( time > 1e-6 )
-            break;
-        nrep *= 2;
-    }
-    nrep *= (size_t)ceil(ONE_TEST_DURATION/time);
-    CalibrateTiming(NRUNS, 1, nrep);    // sets util::base
-    util::durations_t  t;
-    StartTimingEx(t, NRUNS, 1, nrep);
-        pfn();
-    StopTiming(time, variation, deviation);
-    if ( histogramFileName != (char*)-1 )
-        util::trace_histogram(t, histogramFileName);
-    double clean_time = time - util::base;
-    if ( title ) {
-        // Deviation (in percent) is calulated for the Gross time
-        printf ("\n%-34s %.2e  %5.1f      ", title, clean_time, deviation);
-        if ( util::sequential_time != 0  )
-            //printf ("% .2e  ", clean_time - util::sequential_time);
-            printf ("% 10.1f      ", 100*(clean_time - util::sequential_time)/util::sequential_time);
-        else
-            printf ("%*s ", util::rate_field_len, "");
-        printf ("%-9u %1.6f    |", (unsigned)nrep, time * nrep);
-    }
-    return clean_time;
-}
-
-
-/// Runs the test function, does statistical processing, and, if title is nonzero, prints results.
-/** If histogramFileName is a string, the histogram of individual runs is generated and stored
-    in a file with the given name. If it is NULL then the histogram is printed on the console.
-    By default no histogram is generated. 
-    The histogram format is: "rate bucket start" "number of tests in this bucket". **/
-inline 
-void RunTest ( const char* title_fmt, size_t workload_param, void (*pfn_test)(), char* histogramFileName = no_histogram ) {
-    char title[1024];
-    sprintf(title, title_fmt, (long)workload_param);
-    RunTestImpl(title, pfn_test, histogramFileName);
-}
-
-inline 
-void CalcSequentialTime ( void (*pfn)() ) {
-    util::sequential_time = RunTestImpl(NULL, pfn) / util::num_threads;
-}
-
-inline 
-void ResetSequentialTime () {
-    util::sequential_time = 0;
-}
-
-
-inline void PrintTitle() {
-    //printf ("%-32s %-*s Std Dev,%%  %-*s  Repeats   Gross time  Infra time  | NRUNS = %u", 
-    //        "Test name", util::rate_field_len, "Rate", util::rate_field_len, "Overhead", NRUNS);
-    printf ("%-34s %-*s Std Dev,%%  Par.overhead,%%  Repeats   Gross time  | Nruns %u, Nthreads %d", 
-            "Test name", util::rate_field_len, "Rate", NRUNS, util::num_threads);
-}
-
-void Test();
-
-inline
-int test_main( int argc, char* argv[] ) {
-    ParseCommandLine( argc, argv );
-    ASSERT (MinThread>=2, "Minimal number of threads must be 2 or more");
-    char buf[128];
-    util::rate_field_len = 2 + sprintf(buf, "%.1e", 1.1);
-    for ( int i = MinThread; i <= MaxThread; ++i ) {
-        tbb::task_scheduler_init init (i);
-        util::num_threads = i;
-        PrintTitle();
-        Test();
-        printf("\n");
-    }
-    printf("done\n");
-    return 0;
-}
diff --git a/src/perf/time_vector.cpp b/src/perf/time_vector.cpp
index 36442f1..adeb275 100644
--- a/src/perf/time_vector.cpp
+++ b/src/perf/time_vector.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 e92185c..8a22f54 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-2010 Intel Corporation.  All Rights Reserved.
+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 
diff --git a/src/rml/client/library_assert.h b/src/rml/client/library_assert.h
index f198fa5..c640028 100644
--- a/src/rml/client/library_assert.h
+++ b/src/rml/client/library_assert.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 c40e941..a46e524 100644
--- a/src/rml/client/omp_dynamic_link.cpp
+++ b/src/rml/client/omp_dynamic_link.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 02f306c..0bcdcd1 100644
--- a/src/rml/client/omp_dynamic_link.h
+++ b/src/rml/client/omp_dynamic_link.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 2414692..e012675 100644
--- a/src/rml/client/rml_factory.h
+++ b/src/rml/client/rml_factory.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -41,7 +41,7 @@
 #define RML_SERVER_NAME "libirml" DEBUG_SUFFIX ".dylib"
 #elif __linux__
 #define RML_SERVER_NAME "libirml" DEBUG_SUFFIX ".so.1"
-#elif __FreeBSD__ || __sun
+#elif __FreeBSD__ || __NetBSD__ || __sun || _AIX
 #define RML_SERVER_NAME "libirml" DEBUG_SUFFIX ".so"
 #else
 #error Unknown OS
@@ -75,9 +75,7 @@ const ::rml::versioned_object::version_type CLIENT_VERSION = 2;
         GET_INFO(my_call_with_server_info_routine),
     };
     status_type result;
-    dynamic_link_handle h;
-    if( dynamic_link( RML_SERVER_NAME, server_link_table, 4, 4, &h ) ) {
-        library_handle = h; 
+    if( dynamic_link( RML_SERVER_NAME, server_link_table, 4, 4, &library_handle ) ) {
         version_type server_version;
         result = (*open_factory_routine)( *this, server_version, CLIENT_VERSION );
         // server_version can be checked here for incompatibility here if necessary.
@@ -92,8 +90,7 @@ void FACTORY::close() {
     if( library_handle )
         (*my_wait_to_close_routine)(*this);
     if( (size_t)library_handle>FACTORY::c_dont_unload ) {
-        dynamic_link_handle h = library_handle;
-        dynamic_unlink(h);
+        dynamic_unlink(library_handle);
         library_handle = NULL;
     }
 }
diff --git a/src/rml/client/rml_omp.cpp b/src/rml/client/rml_omp.cpp
index 336fd9c..0648fa4 100644
--- a/src/rml/client/rml_omp.cpp
+++ b/src/rml/client/rml_omp.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 d627737..2ac8a84 100644
--- a/src/rml/client/rml_tbb.cpp
+++ b/src/rml/client/rml_tbb.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 6a47794..a580ac5 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-2010 Intel Corporation.  All Rights Reserved.
+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 
diff --git a/src/rml/include/rml_base.h b/src/rml/include/rml_base.h
index f172fc7..ceb66d9 100644
--- a/src/rml/include/rml_base.h
+++ b/src/rml/include/rml_base.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -32,12 +32,10 @@
 #define __RML_rml_base_H
 
 #include <cstddef>
+
 #if _WIN32||_WIN64
 #include <windows.h>
 #endif /* _WIN32||_WIN64 */
-#if __SUNPRO_CC
-using std::size_t;
-#endif
 
 #ifdef RML_PURE_VIRTUAL_HANDLER
 #define RML_PURE(T) {RML_PURE_VIRTUAL_HANDLER(); return (T)0;}
@@ -187,7 +185,7 @@ public:
 #endif /* _WIN32||_WIN64 */ 
 
     //! Special marker to keep dll from being unloaded prematurely
-    static const size_t c_dont_unload = 1;
+    static const std::size_t c_dont_unload = 1;
 };
 
 //! Typedef for callback functions to print server info
diff --git a/src/rml/include/rml_omp.h b/src/rml/include/rml_omp.h
index 8202ade..bc6b74f 100644
--- a/src/rml/include/rml_omp.h
+++ b/src/rml/include/rml_omp.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 6e9ea7e..be9598e 100644
--- a/src/rml/include/rml_tbb.h
+++ b/src/rml/include/rml_tbb.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 1582714..e390620 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-2010 Intel Corporation.  All Rights Reserved.
+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 
diff --git a/src/rml/perfor/omp_nested.cpp b/src/rml/perfor/omp_nested.cpp
index d72801b..bfed45e 100644
--- a/src/rml/perfor/omp_nested.cpp
+++ b/src/rml/perfor/omp_nested.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 ddfcef8..efba5bb 100644
--- a/src/rml/perfor/omp_simple.cpp
+++ b/src/rml/perfor/omp_simple.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 9f4442b..4b8522c 100644
--- a/src/rml/perfor/tbb_multi_omp.cpp
+++ b/src/rml/perfor/tbb_multi_omp.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 0b01fa9..3beb204 100644
--- a/src/rml/perfor/tbb_simple.cpp
+++ b/src/rml/perfor/tbb_simple.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 339b72e..7f949f1 100644
--- a/src/rml/perfor/thread_level.h
+++ b/src/rml/perfor/thread_level.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 238b166..cb61e8e 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-2010 Intel Corporation.  All Rights Reserved.
+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 
diff --git a/src/rml/server/irml.rc b/src/rml/server/irml.rc
index 267c2f2..80b711c 100644
--- a/src/rml/server/irml.rc
+++ b/src/rml/server/irml.rc
@@ -1,4 +1,4 @@
-// Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+// Copyright 2005-2011 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-2010 Intel Corporation.  All Rights Reserved.\0"
+            VALUE "LegalCopyright", "Copyright 2005-2011 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 514418e..5114e7f 100644
--- a/src/rml/server/job_automaton.h
+++ b/src/rml/server/job_automaton.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 868b65a..012116b 100644
--- a/src/rml/server/lin-rml-export.def
+++ b/src/rml/server/lin-rml-export.def
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 decf627..451698f 100644
--- a/src/rml/server/rml_server.cpp
+++ b/src/rml/server/rml_server.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -36,7 +36,7 @@
 #include "tbb/aligned_space.h"
 #include "tbb/atomic.h"
 #include "tbb/spin_mutex.h"
-#include "tbb/tbb_misc.h"           // Get DetectNumberOfWorkers() from here.
+#include "tbb/tbb_misc.h"           // Get AvailableHwConcurrency() from here.
 #if _MSC_VER==1500 && !defined(__INTEL_COMPILER)
 // VS2008/VC9 seems to have an issue; 
 #pragma warning( push )
@@ -71,14 +71,6 @@ using namespace Concurrency;
 namespace rml {
 namespace internal {
 
-//! Number of hardware contexts
-static inline unsigned hardware_concurrency() {
-    static unsigned DefaultNumberOfThreads = 0;
-    unsigned n = DefaultNumberOfThreads;
-    if( !n ) DefaultNumberOfThreads = n = tbb::internal::DetectNumberOfWorkers();
-    return n;
-}
-
 using tbb::internal::rml::tbb_client;
 using tbb::internal::rml::tbb_server;
 
@@ -489,7 +481,6 @@ class connection_scavenger_thread {
      */
     // FIXME: pad these?
     thread_monitor monitor;
-    int default_concurrency;
     HANDLE thr_handle;
 #if TBB_USE_ASSERT
     tbb::atomic<int> n_scavenger_threads;
@@ -516,8 +507,7 @@ public:
 
     static __RML_DECL_THREAD_ROUTINE thread_routine( void* arg );
 
-    void launch( int dc ) { 
-        default_concurrency = dc; 
+    void launch() { 
         thread_monitor::launch( connection_scavenger_thread::thread_routine, this, NULL ); 
     }
 
@@ -594,8 +584,9 @@ class padded: public T {
 #endif
 
 // FIXME - should we pad out memory to avoid false sharing of our global variables?
+static unsigned the_default_concurrency;
 static tbb::atomic<int> the_balance;
-static tbb::atomic<int> the_balance_inited;
+static tbb::atomic<tbb::internal::do_once_state> rml_module_state;
 
 #if !RML_USE_WCRM
 //! Per thread information 
@@ -721,7 +712,6 @@ public:
     }
 };
 
-
 //! Forward declaration
 void wakeup_some_tbb_threads();
 
@@ -1043,7 +1033,7 @@ class generic_connection: public Server, no_copy {
     /*override*/ version_type version() const {return SERVER_VERSION;}
     /*override*/ void yield() {thread_monitor::yield();}
     /*override*/ void independent_thread_number_changed( int delta ) { my_thread_map.adjust_balance( -delta ); }
-    /*override*/ unsigned default_concurrency() const {return hardware_concurrency()-1;}
+    /*override*/ unsigned default_concurrency() const { return the_default_concurrency; }
     friend void wakeup_some_tbb_threads();
     friend class connection_scavenger_thread;
 
@@ -1535,6 +1525,8 @@ void tbb_connection_v2::adjust_job_count_estimate( int delta ) {
 
         server_thread* new_threads_anchor = NULL;
         thread_map::size_type i;
+        {
+        tbb::internal::affinity_helper fpa;
         for( i=0; i<n; ++i ) {
             // Obtain unrealized threads
             thread_map::value_type* k = my_thread_map.add_one_thread( false );
@@ -1542,12 +1534,15 @@ void tbb_connection_v2::adjust_job_count_estimate( int delta ) {
                 // No unrealized threads left.
                 break;
             // Eagerly start the thread off.
+            fpa.protect_affinity_mask();
             my_thread_map.bind_one_thread( *this, *k );
             server_thread& t = k->thread();
             __TBB_ASSERT( !t.link, NULL );
             t.link = new_threads_anchor;
             new_threads_anchor = &t;
         }
+        // Implicit destruction of fpa resets original affinity mask.
+        }
 
         thread_map::size_type j=0; 
         for( ; the_balance>0 && j<i; ++j ) {
@@ -1925,7 +1920,11 @@ __RML_DECL_THREAD_ROUTINE server_thread::thread_routine( void* arg ) {
 #endif
 
 void server_thread::launch( size_t stack_size ) {
+#if USE_WINTHREAD
+    thread_monitor::launch( thread_routine, this, stack_size, &this->my_index );
+#else
     thread_monitor::launch( thread_routine, this, stack_size );
+#endif /* USE_PTHREAD */
 }
 
 void server_thread::sleep_perhaps( thread_state_t asleep ) {
@@ -3028,7 +3027,7 @@ void assist_cleanup_connections()
         connection_scavenger.process_requests( head );
     }
     __TBB_ASSERT( connections_to_reclaim.tail==garbage_connection_queue::plugged||connections_to_reclaim.tail==garbage_connection_queue::plugged_acked, "someone else added a request after termination has initiated" );
-    __TBB_ASSERT( the_balance==connection_scavenger.default_concurrency, NULL );
+    __TBB_ASSERT( (unsigned)the_balance==the_default_concurrency, NULL );
 }
 
 void connection_scavenger_thread::sleep_perhaps() {
@@ -3209,6 +3208,13 @@ static factory::status_type connect( factory& f, Server*& server, Client& client
     return factory::st_success; 
 }
 
+void init_rml_module () {
+    the_balance = the_default_concurrency = tbb::internal::AvailableHwConcurrency() - 1;
+#if RML_USE_WCRM
+    connection_scavenger.launch();
+#endif
+}
+
 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. 
     // This code will be removed once we figure out how to do shutdown of the RML perfectly.
@@ -3224,17 +3230,7 @@ extern "C" factory::status_type __RML_open_factory( factory& f, version_type& se
     // End of hack
 
     // Initialize the_balance only once
-    if( the_balance_inited!=2 ) {
-        if( the_balance_inited.compare_and_swap( 1, 0 )==0 ) {
-            the_balance = hardware_concurrency()-1;
-            the_balance_inited = 2;
-#if RML_USE_WCRM
-            connection_scavenger.launch( the_balance );
-#endif
-        } else {
-            tbb::internal::spin_wait_until_eq( the_balance_inited, 2 );
-        }
-    }
+    tbb::internal::atomic_do_once ( &init_rml_module, rml_module_state );
 
     server_version = SERVER_VERSION;
     f.scratch_ptr = 0;
diff --git a/src/rml/server/thread_monitor.h b/src/rml/server/thread_monitor.h
index ea04465..9e690c9 100644
--- a/src/rml/server/thread_monitor.h
+++ b/src/rml/server/thread_monitor.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -35,6 +35,7 @@
 #include <windows.h>
 #include <process.h>
 #include <malloc.h> //_alloca
+#include "tbb/tbb_misc.h" // NumberOfProcessorGroups, MoveThreadIntoProcessorGroup, FindProcessorGroupIndex
 #elif USE_PTHREAD
 #include <pthread.h>
 #include <string.h>
@@ -45,7 +46,6 @@
 #include <stdio.h>
 #include "tbb/itt_notify.h"
 
-
 // All platform-specific threading support is in this header.
 
 #if (_WIN32||_WIN64)&&!__TBB_ipf
@@ -101,49 +101,55 @@ public:
     void cancel_wait();
 
 #if USE_WINTHREAD
-#define __RML_DECL_THREAD_ROUTINE unsigned WINAPI
+    #define __RML_DECL_THREAD_ROUTINE unsigned WINAPI
     typedef unsigned (WINAPI *thread_routine_type)(void*);
-#endif /* USE_WINTHREAD */
 
-#if USE_PTHREAD
-#define __RML_DECL_THREAD_ROUTINE void*
+    //! Launch a thread
+    static void launch( thread_routine_type thread_routine, void* arg, size_t stack_size, const size_t* worker_index = NULL );
+
+#elif USE_PTHREAD
+    #define __RML_DECL_THREAD_ROUTINE void*
     typedef void*(*thread_routine_type)(void*);
-#endif /* USE_PTHREAD */
 
     //! Launch a thread
     static void launch( thread_routine_type thread_routine, void* arg, size_t stack_size );
-    static void yield();
-
+#endif /* USE_PTHREAD */
 
+    static void yield();
 
 private:
     cookie my_cookie;
 #if USE_WINTHREAD
     CRITICAL_SECTION critical_section;
     HANDLE event;
-#endif /* USE_WINTHREAD */
-#if USE_PTHREAD
+#elif USE_PTHREAD
     pthread_mutex_t my_mutex;
     pthread_cond_t my_cond;
     static void check( int error_code, const char* routine );
 #endif /* USE_PTHREAD */
 };
 
-
-
 #if USE_WINTHREAD
+
 #ifndef STACK_SIZE_PARAM_IS_A_RESERVATION
 #define STACK_SIZE_PARAM_IS_A_RESERVATION 0x00010000
 #endif
-inline void thread_monitor::launch( thread_routine_type thread_routine, void* arg, size_t stack_size ) {
+
+inline void thread_monitor::launch( thread_routine_type thread_routine, void* arg, size_t stack_size, const size_t* worker_index ) {
     unsigned thread_id;
-    uintptr_t status = _beginthreadex( NULL, unsigned(stack_size), thread_routine, arg, STACK_SIZE_PARAM_IS_A_RESERVATION, &thread_id );
+    int number_of_processor_groups = ( worker_index ) ? tbb::internal::NumberOfProcessorGroups() : 0;
+    unsigned create_flags = ( number_of_processor_groups > 1 ) ? CREATE_SUSPENDED : 0;
+    uintptr_t status = _beginthreadex( NULL, unsigned(stack_size), thread_routine, arg, STACK_SIZE_PARAM_IS_A_RESERVATION | create_flags, &thread_id );
     if( status==0 ) {
         fprintf(stderr,"thread_monitor::launch: _beginthreadex failed\n");
         exit(1); 
-    } else {
-        CloseHandle((HANDLE)status);
     }
+    if ( number_of_processor_groups > 1 ) {
+        tbb::internal::MoveThreadIntoProcessorGroup( (HANDLE)status,
+                        tbb::internal::FindProcessorGroupIndex( static_cast<int>(*worker_index) ) );
+        ResumeThread( (HANDLE)status );
+    }
+    CloseHandle( (HANDLE)status );
 }
 
 inline void thread_monitor::yield() {
diff --git a/src/rml/server/wait_counter.h b/src/rml/server/wait_counter.h
index 4018d1b..4f567da 100644
--- a/src/rml/server/wait_counter.h
+++ b/src/rml/server/wait_counter.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 7902330..a52ab52 100644
--- a/src/rml/server/win32-rml-export.def
+++ b/src/rml/server/win32-rml-export.def
@@ -1,4 +1,4 @@
-; Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+; Copyright 2005-2011 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 7902330..a52ab52 100644
--- a/src/rml/server/win64-rml-export.def
+++ b/src/rml/server/win64-rml-export.def
@@ -1,4 +1,4 @@
-; Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+; Copyright 2005-2011 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 f0a9587..5b41dc1 100644
--- a/src/rml/test/rml_omp_stub.cpp
+++ b/src/rml/test/rml_omp_stub.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 0aae636..2bb8613 100644
--- a/src/rml/test/test_job_automaton.cpp
+++ b/src/rml/test/test_job_automaton.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 32c2f25..364c9de 100644
--- a/src/rml/test/test_rml_mixed.cpp
+++ b/src/rml/test/test_rml_mixed.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/rml/test/test_rml_omp.cpp b/src/rml/test/test_rml_omp.cpp
index bbd3650..86d3136 100644
--- a/src/rml/test/test_rml_omp.cpp
+++ b/src/rml/test/test_rml_omp.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -27,13 +27,17 @@
 */
 
 #include "rml_omp.h"
-#define HARNESS_DEFAULT_MIN_THREADS 0
-#include "test_server.h"
-#include "tbb/tbb_misc.h"
 
 typedef __kmp::rml::omp_server MyServer;
 typedef __kmp::rml::omp_factory MyFactory;
 
+// Forward declaration for the function used in test_server.h
+void DoClientSpecificVerification( MyServer& , int );
+
+#define HARNESS_DEFAULT_MIN_THREADS 0
+#include "test_server.h"
+#include "tbb/tbb_misc.h"
+
 static bool StrictTeam;
 
 class MyTeam {
@@ -176,7 +180,7 @@ void FireUpJobs( MyServer& server, MyClient& client, int max_thread, int n_extra
 
 void DoClientSpecificVerification( MyServer& server, int /*n_thread*/ )
 {
-    ASSERT( server.current_balance()==int(tbb::internal::DetectNumberOfWorkers())-1, NULL );
+    ASSERT( server.current_balance()==int(tbb::internal::AvailableHwConcurrency())-1, NULL );
 }
 
 int TestMain () {
diff --git a/src/rml/test/test_rml_omp_c_linkage.c b/src/rml/test/test_rml_omp_c_linkage.c
index cb984bd..4fb0565 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-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 247e2b3..269c99f 100644
--- a/src/rml/test/test_rml_tbb.cpp
+++ b/src/rml/test/test_rml_tbb.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -27,12 +27,16 @@
 */
 
 #include "rml_tbb.h"
-#define HARNESS_DEFAULT_MIN_THREADS 0
-#include "test_server.h"
 
 typedef tbb::internal::rml::tbb_server MyServer;
 typedef tbb::internal::rml::tbb_factory MyFactory;
 
+// Forward declaration of the function used in test_server.h
+void DoClientSpecificVerification( MyServer&, int );
+
+#define HARNESS_DEFAULT_MIN_THREADS 0
+#include "test_server.h"
+
 tbb::atomic<int> n_available_hw_threads;
 
 class MyClient: public ClientBase<tbb::internal::rml::tbb_client> {
diff --git a/src/rml/test/test_server.h b/src/rml/test/test_server.h
index 1c24eef..c993c38 100644
--- a/src/rml/test/test_server.h
+++ b/src/rml/test/test_server.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -40,7 +40,6 @@
 #include "harness_memory.h"
 #include "harness_concurrency_tracker.h"
 
-
 //! Define TRIVIAL as 1 to test only a single client, no nesting, no extra threads.
 #define TRIVIAL 0
 
@@ -215,7 +214,6 @@ protected:
         // Half of the stack is reserved for RSE, so test only remaining half.
         UseStackSpace( (my_stack_size-OverheadStackSize)/2 );
 #else
-        // XNMetaScheduler does not expose API for changing stack size.
         UseStackSpace( my_stack_size-OverheadStackSize );
 #endif
         j.update(MyJob::idle,MyJob::busy);
diff --git a/src/rml/test/test_thread_monitor.cpp b/src/rml/test/test_thread_monitor.cpp
index 6a168e9..747bda6 100644
--- a/src/rml/test/test_thread_monitor.cpp
+++ b/src/rml/test/test_thread_monitor.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -46,7 +46,6 @@ public:
     ThreadState() : request(-1), ack(-1), clock(0) {}
 };
 
-
 void ThreadState::loop() {
     for(;;) {
         ++clock;
diff --git a/src/tbb/arena.cpp b/src/tbb/arena.cpp
index 8838043..5eff384 100644
--- a/src/tbb/arena.cpp
+++ b/src/tbb/arena.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -31,157 +31,160 @@
 #include "scheduler.h"
 #include "itt_notify.h"
 
-#include <stdlib.h> // for rand()
+#if !__TBB_CPU_CTL_ENV_PRESENT
+inline void __TBB_get_cpu_ctl_env ( __TBB_cpu_ctl_env_t* ctl ) { fegetenv(ctl); }
+inline void __TBB_set_cpu_ctl_env ( const __TBB_cpu_ctl_env_t* ctl ) { fesetenv(ctl); }
+#endif /* !__TBB_CPU_CTL_ENV_PRESENT */
 
-namespace tbb {
-namespace internal {
-
-#if !__TBB_ARENA_PER_MASTER
-//------------------------------------------------------------------------
-// UnpaddedArenaPrefix
-//------------------------------------------------------------------------
-inline arena& UnpaddedArenaPrefix::Arena() {
-    return *static_cast<tbb::internal::arena*>(static_cast<void*>( static_cast<ArenaPrefix*>(this)+1 ));
-}
-
-void UnpaddedArenaPrefix::process( job& j ) {
-    generic_scheduler& s = static_cast<generic_scheduler&>(j);
-    __TBB_ASSERT( governor::is_set(&s), NULL );
-    __TBB_ASSERT( !s.innermost_running_task, NULL );
-    // Try to steal a task.
-    // Passing reference count is technically unnecessary in this context,
-    // but omitting it here would add checks inside the function.
-    task* t = s.receive_or_steal_task( s.dummy_task->prefix().ref_count, /*return_if_no_work=*/true );
-    if (t) {
-        // A side effect of receive_or_steal_task is that innermost_running_task can be set.
-        // But for the outermost dispatch loop of a worker it has to be NULL.
-        s.innermost_running_task = NULL;
-        s.local_wait_for_all(*s.dummy_task,t);
-    }
-    __TBB_ASSERT( s.inbox.assert_is_idle(true), NULL );
-    __TBB_ASSERT( !s.innermost_running_task, NULL );
-}
-
-void UnpaddedArenaPrefix::cleanup( job& j ) {
-    generic_scheduler& s = static_cast<generic_scheduler&>(j);
-    if( !governor::is_set( &s ) ) {
-        bool is_master = governor::is_set( NULL );
-        governor::assume_scheduler( &s );
-        generic_scheduler::cleanup_worker( &s, !is_master );
-        governor::assume_scheduler( NULL );
-    } else {
-        generic_scheduler::cleanup_worker( &s, true );
-    }
-}
+#include <functional>
 
-void UnpaddedArenaPrefix::acknowledge_close_connection() {
-    Arena().free_arena();
-}
-
-::rml::job* UnpaddedArenaPrefix::create_one_job() {
-    generic_scheduler* s = generic_scheduler::create_worker( Arena(), next_job_index++ );
-    governor::sign_on(s);
-    return s;
-}
-#endif /* !__TBB_ARENA_PER_MASTER */
-
-//------------------------------------------------------------------------
-// arena
-//------------------------------------------------------------------------
+#if __TBB_STATISTICS_STDOUT
+#include <cstdio>
+#endif
 
-#if __TBB_ARENA_PER_MASTER
+namespace tbb {
+namespace internal {
 
 void arena::process( generic_scheduler& s ) {
+    __TBB_ASSERT( is_alive(my_guard), NULL );
     __TBB_ASSERT( governor::is_set(&s), NULL );
-    __TBB_ASSERT( !s.innermost_running_task, NULL );
+    __TBB_ASSERT( !s.my_innermost_running_task, NULL );
+#if __TBB_TASK_PRIORITY
+    __TBB_ASSERT( !s.my_dispatching_task, NULL );
+#endif /* __TBB_TASK_PRIORITY */
 
     __TBB_ASSERT( my_num_slots != 1, NULL );
     // Start search for an empty slot from the one we occupied the last time
-    unsigned index = s.arena_index < my_num_slots ? s.arena_index : s.random.get() % (my_num_slots - 1) + 1,
+    unsigned index = s.my_arena_index < my_num_slots ? s.my_arena_index : s.my_random.get() % (my_num_slots - 1) + 1,
              end = index;
     __TBB_ASSERT( index != 0, "A worker cannot occupy slot 0" );
     __TBB_ASSERT( index < my_num_slots, NULL );
 
     // Find a vacant slot
     for ( ;; ) {
-        if ( !slot[index].my_scheduler && __TBB_CompareAndSwapW( &slot[index].my_scheduler, (intptr_t)&s, 0 ) == 0 )
+        if ( !my_slots[index].my_scheduler && __TBB_CompareAndSwapW( &my_slots[index].my_scheduler, (intptr_t)&s, 0 ) == 0 )
             break;
         if ( ++index == my_num_slots )
             index = 1;
         if ( index == end ) {
             // Likely this arena is already saturated
-            if ( --my_num_threads_active == 0 )
-                close_arena();
-            return;
+            goto quit;
         }
     }
-    ITT_NOTIFY(sync_acquired, &slot[index]);
+    ITT_NOTIFY(sync_acquired, my_slots + index);
     s.my_arena = this;
-    s.arena_index = index;
+    s.my_arena_index = index;
+#if __TBB_TASK_PRIORITY
+    s.my_local_reload_epoch = my_reload_epoch;
+    __TBB_ASSERT( !s.my_offloaded_tasks, NULL );
+#endif /* __TBB_TASK_PRIORITY */
     s.attach_mailbox( affinity_id(index+1) );
 
-    slot[index].hint_for_push = index ^ unsigned(&s-(generic_scheduler*)NULL)>>16; // randomizer seed
-    slot[index].hint_for_pop  = index; // initial value for round-robin
+    my_slots[index].hint_for_push = index ^ unsigned(&s-(generic_scheduler*)NULL)>>16; // randomizer seed
+    my_slots[index].hint_for_pop  = index; // initial value for round-robin
 
-    unsigned new_limit = index + 1;
-    unsigned old_limit = my_limit;
-    while ( new_limit > old_limit ) {
-        if ( my_limit.compare_and_swap(new_limit, old_limit) == old_limit )
-            break;
-        old_limit = my_limit;
-    }
+    __TBB_set_cpu_ctl_env(&my_cpu_ctl_env);
+
+    atomic_update( my_limit, index + 1, std::less<unsigned>() );
 
-    unsigned num_threads_left;
     for ( ;; ) {
         // Try to steal a task.
         // Passing reference count is technically unnecessary in this context,
         // but omitting it here would add checks inside the function.
-        task* t = s.receive_or_steal_task( s.dummy_task->prefix().ref_count, /*return_if_no_work=*/true );
+        __TBB_ASSERT( is_alive(my_guard), NULL );
+        task* t = s.receive_or_steal_task( s.my_dummy_task->prefix().ref_count, /*return_if_no_work=*/true );
         if (t) {
-            // A side effect of receive_or_steal_task is that innermost_running_task can be set.
+            // A side effect of receive_or_steal_task is that my_innermost_running_task can be set.
             // But for the outermost dispatch loop of a worker it has to be NULL.
-            s.innermost_running_task = NULL;
-            s.local_wait_for_all(*s.dummy_task,t);
+            s.my_innermost_running_task = NULL;
+#if __TBB_TASK_PRIORITY
+            __TBB_ASSERT( !s.my_dispatching_task, NULL );
+#endif /* __TBB_TASK_PRIORITY */
+            s.local_wait_for_all(*s.my_dummy_task,t);
         }
-        num_threads_left = --my_num_threads_active;
-        __TBB_ASSERT ( slot[index].head == slot[index].tail, "Worker cannot leave arena when the task pool is not empty" );
-        __TBB_ASSERT( slot[index].task_pool == EmptyTaskPool, "Worker cannot leave arena when the task pool is not empty" );
+        __TBB_ASSERT ( my_slots[index].head == my_slots[index].tail, "Worker cannot leave arena while its task pool is not empty" );
+        __TBB_ASSERT( my_slots[index].task_pool == EmptyTaskPool, "Empty task pool is not marked appropriately" );
         // Revalidate quitting condition
         // This check prevents relinquishing more than necessary workers because 
         // of the non-atomicity of the decision making procedure
         if ( num_workers_active() >= my_num_workers_allotted || !my_num_workers_requested )
             break;
-        // Restore ref count
-        __TBB_ASSERT( !slot[0].my_scheduler || my_num_threads_active > 0, "Who requested more workers after the last one left the dispatch loop and the master's gone?" );
-        ++my_num_threads_active;
     }
-    __TBB_store_with_release( slot[index].my_scheduler, (generic_scheduler*)NULL );
-    s.inbox.detach();
-    __TBB_ASSERT( s.inbox.assert_is_idle(true), NULL );
-    __TBB_ASSERT( !s.innermost_running_task, NULL );
-    if ( !num_threads_left )
-        close_arena();
+#if __TBB_TASK_PRIORITY
+    if ( s.my_offloaded_tasks ) {
+        GATHER_STATISTIC( ++s.my_counters.prio_orphanings );
+        ++my_abandonment_epoch;
+        __TBB_ASSERT( s.my_offloaded_task_list_tail_link && !*s.my_offloaded_task_list_tail_link, NULL );
+        task* orphans;
+        do {
+            orphans = const_cast<task*>(my_orphaned_tasks);
+            *s.my_offloaded_task_list_tail_link = orphans;
+        } while ( __TBB_CompareAndSwapW(&my_orphaned_tasks, (ptrdiff_t)s.my_offloaded_tasks, (ptrdiff_t)orphans) != (ptrdiff_t)orphans );
+        s.my_offloaded_tasks = NULL;
+#if TBB_USE_ASSERT
+        s.my_offloaded_task_list_tail_link = NULL;
+#endif /* TBB_USE_ASSERT */
+    }
+#endif /* __TBB_TASK_PRIORITY */
+#if __TBB_STATISTICS
+    ++s.my_counters.arena_roundtrips;
+    *my_slots[index].my_counters += s.my_counters;
+    s.my_counters.reset();
+#endif /* __TBB_STATISTICS */
+    __TBB_store_with_release( my_slots[index].my_scheduler, (generic_scheduler*)NULL );
+    s.my_inbox.detach();
+    __TBB_ASSERT( s.my_inbox.is_idle_state(true), NULL );
+    __TBB_ASSERT( !s.my_innermost_running_task, NULL );
+#if __TBB_TASK_PRIORITY
+    __TBB_ASSERT( !s.my_dispatching_task, NULL );
+#endif /* __TBB_TASK_PRIORITY */
+    __TBB_ASSERT( is_alive(my_guard), NULL );
+quit:
+    // In contrast to earlier versions of TBB (before 3.0 U5) now it is possible
+    // that arena may be temporarily left unpopulated by threads. See comments in
+    // arena::on_thread_leaving() for more details.
+#if !__TBB_TRACK_PRIORITY_LEVEL_SATURATION
+    on_thread_leaving();
+#endif /* !__TBB_TRACK_PRIORITY_LEVEL_SATURATION */
 }
 
 arena::arena ( market& m, unsigned max_num_workers ) {
-    __TBB_ASSERT( sizeof(slot[0]) % NFS_GetLineSize()==0, "arena::slot size not multiple of cache line size" );
+    __TBB_ASSERT( !my_guard, "improperly allocated arena?" );
+    __TBB_ASSERT( sizeof(my_slots[0]) % NFS_GetLineSize()==0, "arena::slot size not multiple of cache line size" );
     __TBB_ASSERT( (uintptr_t)this % NFS_GetLineSize()==0, "arena misaligned" );
+#if __TBB_TASK_PRIORITY
+    __TBB_ASSERT( !my_reload_epoch && !my_orphaned_tasks && !my_skipped_fifo_priority, "New arena object is not zeroed" );
+#endif /* __TBB_TASK_PRIORITY */
     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_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 */
     __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 ) {
-        __TBB_ASSERT( !slot[i].my_scheduler && !slot[i].task_pool, NULL );
-        ITT_SYNC_CREATE(slot + i, SyncType_Scheduler, SyncObj_WorkerTaskPool);
+        __TBB_ASSERT( !my_slots[i].my_scheduler && !my_slots[i].task_pool, NULL );
+        ITT_SYNC_CREATE(my_slots + i, SyncType_Scheduler, SyncObj_WorkerTaskPool);
         mailbox(i+1).construct();
         ITT_SYNC_CREATE(&mailbox(i+1), SyncType_Scheduler, SyncObj_Mailbox);
+#if __TBB_STATISTICS
+        my_slots[i].my_counters = new ( NFS_Allocate(sizeof(statistics_counters), 1, NULL) ) statistics_counters;
+#endif /* __TBB_STATISTICS */
+    }
+#if __TBB_TASK_PRIORITY
+    for ( intptr_t i = 0; i < num_priority_levels; ++i ) {
+        my_task_stream[i].initialize(my_num_slots);
+        ITT_SYNC_CREATE(my_task_stream + i, SyncType_Scheduler, SyncObj_TaskStream);
     }
+#else /* !__TBB_TASK_PRIORITY */
     my_task_stream.initialize(my_num_slots);
     ITT_SYNC_CREATE(&my_task_stream, SyncType_Scheduler, SyncObj_TaskStream);
+#endif /* !__TBB_TASK_PRIORITY */
     my_mandatory_concurrency = false;
 #if __TBB_TASK_GROUP_CONTEXT
     my_master_default_ctx = NULL;
@@ -192,22 +195,25 @@ arena& arena::allocate_arena( market& m, unsigned max_num_workers ) {
     __TBB_ASSERT( sizeof(base_type) + sizeof(arena_slot) == sizeof(arena), "All arena data fields must go to arena_base" );
     __TBB_ASSERT( sizeof(base_type) % NFS_GetLineSize() == 0, "arena slots area misaligned: wrong padding" );
     __TBB_ASSERT( sizeof(mail_outbox) == NFS_MaxLineSize, "Mailbox padding is wrong" );
-
-    unsigned num_slots = max(2u, max_num_workers + 1);
-    size_t n = sizeof(base_type) + num_slots * (sizeof(mail_outbox) + sizeof(arena_slot));
-
+    size_t n = allocation_size(max_num_workers);
     unsigned char* storage = (unsigned char*)NFS_Allocate( n, 1, NULL );
     // Zero all slots to indicate that they are empty
     memset( storage, 0, n );
-    return *new( storage + num_slots * sizeof(mail_outbox) ) arena(m, max_num_workers);
+    return *new( storage + num_slots_to_reserve(max_num_workers) * sizeof(mail_outbox) ) arena(m, max_num_workers);
 }
 
 void arena::free_arena () {
     __TBB_ASSERT( !my_num_threads_active, "There are threads in the dying arena" );
+    poison_value( my_guard );
     intptr_t drained = 0;
     for ( unsigned i = 1; i <= my_num_slots; ++i )
         drained += mailbox(i).drain();
+#if __TBB_TASK_PRIORITY && TBB_USE_ASSERT
+    for ( intptr_t i = 0; i < num_priority_levels; ++i )
+        __TBB_ASSERT(my_task_stream[i].empty() && my_task_stream[i].drain()==0, "Not all enqueued tasks were executed");
+#elif !__TBB_TASK_PRIORITY
     __TBB_ASSERT(my_task_stream.empty() && my_task_stream.drain()==0, "Not all enqueued tasks were executed");
+#endif /* !__TBB_TASK_PRIORITY */
 #if __TBB_COUNT_TASK_NODES
     my_market->update_task_node_count( -drained );
 #endif /* __TBB_COUNT_TASK_NODES */
@@ -217,124 +223,215 @@ void arena::free_arena () {
     my_master_default_ctx->~task_group_context();
     NFS_Free(my_master_default_ctx);
 #endif /* __TBB_TASK_GROUP_CONTEXT */
+#if __TBB_STATISTICS
+    for( unsigned i = 0; i < my_num_slots; ++i )
+        NFS_Free( my_slots[i].my_counters );
+#endif /* __TBB_STATISTICS */
     void* storage  = &mailbox(my_num_slots);
+    __TBB_ASSERT( my_num_threads_active == 0, NULL );
+    __TBB_ASSERT( my_pool_state == SNAPSHOT_EMPTY || !my_max_num_workers, NULL );
     this->~arena();
+#if TBB_USE_ASSERT > 1
+    memset( storage, 0, allocation_size(my_max_num_workers) );
+#endif /* TBB_USE_ASSERT */
     NFS_Free( storage );
 }
 
-#else /* !__TBB_ARENA_PER_MASTER */
-
-arena* arena::allocate_arena( unsigned number_of_slots, unsigned number_of_workers, stack_size_type stack_size ) {
-    __TBB_ASSERT( sizeof(ArenaPrefix) % NFS_GetLineSize()==0, "ArenaPrefix not multiple of cache line size" );
-    __TBB_ASSERT( sizeof(mail_outbox)==NFS_MaxLineSize, NULL );
-    __TBB_ASSERT( stack_size>0, NULL );
-
-    size_t n = sizeof(ArenaPrefix) + number_of_slots*(sizeof(mail_outbox)+sizeof(arena_slot));
-
-    unsigned char* storage = (unsigned char*)NFS_Allocate( n, 1, NULL );
-    // Zero all slots to indicate that they are empty
-    memset( storage, 0, n );
-    arena* a = (arena*)(storage + sizeof(ArenaPrefix)+ number_of_slots*(sizeof(mail_outbox)));
-    __TBB_ASSERT( sizeof(a->slot[0]) % NFS_GetLineSize()==0, "arena::slot size not multiple of cache line size" );
-    __TBB_ASSERT( (uintptr_t)a % NFS_GetLineSize()==0, NULL );
-    new( &a->prefix() ) ArenaPrefix( number_of_slots, number_of_workers );
-
-    // Allocate the worker_list
-    WorkerDescriptor * w = new WorkerDescriptor[number_of_workers];
-    memset( w, 0, sizeof(WorkerDescriptor)*(number_of_workers));
-    a->prefix().worker_list = w;
-
-    // Construct mailboxes.
-    for( unsigned j=1; j<=number_of_slots; ++j ) 
-        a->mailbox(j).construct();
+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();
+}
 
-    a->prefix().stack_size = stack_size;
-    size_t k;
-    // Mark each internal sync element for the tools
-    for( k=0; k<number_of_workers; ++k ) {
-        ITT_SYNC_CREATE(a->slot + k, SyncType_Scheduler, SyncObj_WorkerTaskPool);
-        ITT_SYNC_CREATE(&w[k].scheduler, SyncType_Scheduler, SyncObj_WorkerLifeCycleMgmt);
-        ITT_SYNC_CREATE(&a->mailbox(k+1), SyncType_Scheduler, SyncObj_Mailbox);
-    }
-    for( ; k<number_of_slots; ++k ) {
-        ITT_SYNC_CREATE(a->slot + k, SyncType_Scheduler, SyncObj_MasterTaskPool);
-        ITT_SYNC_CREATE(&a->mailbox(k+1), SyncType_Scheduler, SyncObj_Mailbox);
+#if __TBB_STATISTICS
+void arena::dump_arena_statistics () {
+    statistics_counters total;
+    for( unsigned i = 0; i < my_num_slots; ++i ) {
+#if __TBB_STATISTICS_EARLY_DUMP
+        generic_scheduler* s = my_slots[i].my_scheduler;
+        if ( s )
+            *my_slots[i].my_counters += s->my_counters;
+#else
+        __TBB_ASSERT( !my_slots[i].my_scheduler, NULL );
+#endif
+        if ( i != 0 ) {
+            total += *my_slots[i].my_counters;
+            dump_statistics( *my_slots[i].my_counters, i );
+        }
     }
-
-    return a;
+    dump_statistics( *my_slots[0].my_counters, 0 );
+#if __TBB_STATISTICS_STDOUT
+#if !__TBB_STATISTICS_TOTALS_ONLY
+    printf( "----------------------------------------------\n" );
+#endif
+    dump_statistics( total, workers_counters_total );
+    total += *my_slots[0].my_counters;
+    dump_statistics( total, arena_counters_total );
+#if !__TBB_STATISTICS_TOTALS_ONLY
+    printf( "==============================================\n" );
+#endif
+#endif /* __TBB_STATISTICS_STDOUT */
 }
-
-void arena::free_arena () {
-    // Drain mailboxes
-    // TODO: each scheduler should plug-and-drain its own mailbox when it terminates.
-    intptr_t drain_count = 0;
-    for( unsigned i=1; i<=prefix().number_of_slots; ++i )
-        drain_count += mailbox(i).drain();
-#if __TBB_COUNT_TASK_NODES
-    prefix().task_node_count -= drain_count;
-    if( prefix().task_node_count ) {
-        runtime_warning( "Leaked %ld task objects\n", long(prefix().task_node_count) );
+#endif /* __TBB_STATISTICS */
+
+#if __TBB_TASK_PRIORITY
+inline bool arena::may_have_tasks ( generic_scheduler* s, arena_slot& slot, bool& tasks_present, bool& dequeuing_possible ) {
+    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" );
+        return false;
     }
-#endif /* __TBB_COUNT_TASK_NODES */
-    void* storage  = &mailbox(prefix().number_of_slots);
-    delete[] prefix().worker_list;
-    prefix().~ArenaPrefix();
-    NFS_Free( storage );
+    dequeuing_possible |= s->worker_outermost_level();
+    if ( s->my_pool_reshuffling_pending ) {
+        // This primary task pool is nonempty and may contain tasks at the current
+        // priority level. Its owner is winnowing lower priority tasks at the moment.
+        tasks_present = true;
+        return true;
+    }
+    if ( s->my_offloaded_tasks ) {
+        tasks_present = true;
+        if ( s->my_local_reload_epoch < *s->my_ref_reload_epoch ) {
+            // This scheduler's offload area is nonempty and may contain tasks at the
+            // current priority level.
+            return true;
+        }
+    }
+    return false;
 }
-
-#endif /* !__TBB_ARENA_PER_MASTER */
+#endif /* __TBB_TASK_PRIORITY */
 
 bool arena::is_out_of_work() {
     // TODO: rework it to return at least a hint about where a task was found; better if the task itself.
     for(;;) {
-        pool_state_t snapshot = prefix().pool_state;
+        pool_state_t snapshot = prefix().my_pool_state;
         switch( snapshot ) {
             case SNAPSHOT_EMPTY:
-#if !__TBB_ARENA_PER_MASTER
-            case SNAPSHOT_SERVER_GOING_AWAY:
-#endif /* !__TBB_ARENA_PER_MASTER */
                 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);
                 // Request permission to take snapshot
-                if( prefix().pool_state.compare_and_swap( busy, SNAPSHOT_FULL )==SNAPSHOT_FULL ) {
-                    // Got permission.  Take the snapshot.
-#if __TBB_ARENA_PER_MASTER
+                if( prefix().my_pool_state.compare_and_swap( busy, SNAPSHOT_FULL )==SNAPSHOT_FULL ) {
+                    // Got permission. Take the snapshot.
+                    // NOTE: This is not a lock, as the state can be set to FULL at 
+                    //       any moment by a thread that spawns/enqueues new task.
                     size_t n = my_limit;
-#else /* !__TBB_ARENA_PER_MASTER */
-                    size_t n = prefix().limit;
-#endif /* !__TBB_ARENA_PER_MASTER */
+                    // Make local copies of volatile parameters. Their change during
+                    // snapshot taking procedure invalidates the attempt, and returns
+                    // this thread into the dispatch loop.
+#if __TBB_TASK_PRIORITY
+                    intptr_t top_priority = my_top_priority;
+                    uintptr_t reload_epoch = my_reload_epoch;
+                    // Inspect primary task pools first
+#endif /* __TBB_TASK_PRIORITY */
                     size_t k; 
-                    for( k=0; k<n; ++k ) 
-                        if( slot[k].task_pool != EmptyTaskPool && slot[k].head < slot[k].tail )
+                    for( k=0; k<n; ++k ) {
+                        if( my_slots[k].task_pool != EmptyTaskPool && my_slots[k].head < my_slots[k].tail )
+                            // k-th primary task pool is nonempty and does contain tasks.
                             break;
-                    bool work_absent = k>=n;
-#if __TBB_ARENA_PER_MASTER
-                    work_absent = work_absent && my_task_stream.empty();
-#endif /* __TBB_ARENA_PER_MASTER */
+                    }
+                    __TBB_ASSERT( k <= n, NULL );
+                    bool work_absent = k == n;
+#if __TBB_TASK_PRIORITY
+                    // Variable tasks_present indicates presence of tasks at any priority
+                    // level, while work_absent refers only to the current priority.
+                    bool tasks_present = !work_absent || my_orphaned_tasks;
+                    bool dequeuing_possible = false;
+                    if ( work_absent ) {
+                        // Check for the possibility that recent priority changes
+                        // brought some tasks to the current priority level
+
+                        uintptr_t abandonment_epoch = my_abandonment_epoch;
+                        // Master thread's scheduler needs special handling as it 
+                        // may be destroyed at any moment (workers' schedulers are 
+                        // guaranteed to be alive while at least one thread is in arena).
+                        // Have to exclude concurrency with task group state change propagation too.
+                        my_market->my_arenas_list_mutex.lock();
+                        generic_scheduler *s = my_slots[0].my_scheduler;
+                        if ( s && __TBB_CompareAndSwapW(&my_slots[0].my_scheduler, (intptr_t)LockedMaster, (intptr_t)s) == (intptr_t)s ) {
+                            __TBB_ASSERT( my_slots[0].my_scheduler == LockedMaster && s != LockedMaster, NULL );
+                            work_absent = !may_have_tasks( s, my_slots[0], tasks_present, dequeuing_possible );
+                            __TBB_store_with_release( my_slots[0].my_scheduler, s );
+                        }
+                        my_market->my_arenas_list_mutex.unlock();
+                        // The following loop is subject to data races. While k-th slot's
+                        // scheduler is being examined, corresponding worker can either
+                        // leave to RML or migrate to another arena.
+                        // But the races are not prevented because all of them are benign.
+                        // First, the code relies on the fact that worker thread's scheduler
+                        // object persists until the whole library is deinitialized.  
+                        // Second, in the worst case the races can only cause another 
+                        // round of stealing attempts to be undertaken. Introducing complex 
+                        // synchronization into this coldest part of the scheduler's control 
+                        // flow does not seem to make sense because it both is unlikely to 
+                        // ever have any observable performance effect, and will require 
+                        // additional synchronization code on the hotter paths.
+                        for( k = 1; work_absent && k < n; ++k )
+                            work_absent = !may_have_tasks( my_slots[k].my_scheduler, my_slots[k], tasks_present, dequeuing_possible );
+                        // Preclude premature switching arena off because of a race in the previous loop.
+                        work_absent = work_absent
+                                      && !__TBB_load_with_acquire(my_orphaned_tasks)
+                                      && abandonment_epoch == my_abandonment_epoch;
+                    }
+#endif /* __TBB_TASK_PRIORITY */
                     // Test and test-and-set.
-                    if( prefix().pool_state==busy ) {
+                    if( prefix().my_pool_state==busy ) {
+#if __TBB_TASK_PRIORITY
+                        bool no_fifo_tasks = my_task_stream[top_priority].empty();
+                        work_absent = work_absent && (!dequeuing_possible || no_fifo_tasks)
+                                      && top_priority == my_top_priority && reload_epoch == my_reload_epoch;
+#else
+                        bool no_fifo_tasks = my_task_stream.empty();
+                        work_absent = work_absent && no_fifo_tasks;
+#endif /* __TBB_TASK_PRIORITY */
                         if( work_absent ) {
-#if __TBB_ARENA_PER_MASTER
-                            // save current demand value before setting SNAPSHOT_EMPTY,
-                            // to avoid race with advertise_new_work.
-                            int current_demand = (int)my_max_num_workers;
-#endif
-                            if( prefix().pool_state.compare_and_swap( SNAPSHOT_EMPTY, busy )==busy ) {
-                                // This thread transitioned pool to empty state, and thus is responsible for
-                                // telling RML that there is no other work to do.
-#if __TBB_ARENA_PER_MASTER
-                                my_market->adjust_demand( *this, -current_demand );
-#else /* !__TBB_ARENA_PER_MASTER */
-                                prefix().server->adjust_job_count_estimate( -int(prefix().number_of_workers) );
-#endif /* !__TBB_ARENA_PER_MASTER */
-                                return true;
+#if __TBB_TASK_PRIORITY
+                            if ( top_priority > my_bottom_priority ) {
+                                if ( my_market->lower_arena_priority(*this, top_priority - 1, top_priority)
+                                     && !my_task_stream[top_priority].empty() )
+                                {
+                                    atomic_update( my_skipped_fifo_priority, top_priority, std::less<uintptr_t>());
+                                }
+                            }
+                            else if ( !tasks_present && !my_orphaned_tasks && no_fifo_tasks ) {
+#endif /* __TBB_TASK_PRIORITY */
+                                // save current demand value before setting SNAPSHOT_EMPTY,
+                                // to avoid race with advertise_new_work.
+                                int current_demand = (int)my_max_num_workers;
+                                if( prefix().my_pool_state.compare_and_swap( SNAPSHOT_EMPTY, busy )==busy ) {
+                                    // This thread transitioned pool to empty state, and thus is 
+                                    // responsible for telling RML that there is no other work to do.
+                                    my_market->adjust_demand( *this, -current_demand );
+#if __TBB_TASK_PRIORITY
+                                    // Check for the presence of enqueued tasks "lost" on some of
+                                    // priority levels because updating arena priority and switching
+                                    // arena into "populated" (FULL) state happen non-atomically.
+                                    // Imposing atomicity would require task::enqueue() to use a lock,
+                                    // which is unacceptable. 
+                                    bool switch_back = false;
+                                    for ( int p = 0; p < num_priority_levels; ++p ) {
+                                        if ( !my_task_stream[p].empty() ) {
+                                            switch_back = true;
+                                            if ( p < my_bottom_priority || p > my_top_priority )
+                                                my_market->update_arena_priority(*this, p);
+                                        }
+                                    }
+                                    if ( switch_back )
+                                        advertise_new_work<true>();
+#endif /* __TBB_TASK_PRIORITY */
+                                    return true;
+                                }
+                                return false;
+#if __TBB_TASK_PRIORITY
                             }
-                        } else {
-                            // Undo previous transition SNAPSHOT_FULL-->busy, unless another thread undid it.
-                            prefix().pool_state.compare_and_swap( SNAPSHOT_FULL, busy );
+#endif /* __TBB_TASK_PRIORITY */
                         }
+                        // Undo previous transition SNAPSHOT_FULL-->busy, unless another thread undid it.
+                        prefix().my_pool_state.compare_and_swap( SNAPSHOT_FULL, busy );
                     }
                 } 
                 return false;
@@ -346,37 +443,13 @@ bool arena::is_out_of_work() {
     }
 }
 
-void arena::close_arena () {
-#if __TBB_ARENA_PER_MASTER
-    my_market->detach_arena( *this );
-    free_arena();
-#else /* !__TBB_ARENA_PER_MASTER */
-    for(;;) {
-        pool_state_t snapshot = prefix().pool_state;
-        if( snapshot==SNAPSHOT_SERVER_GOING_AWAY ) 
-            break;
-        if( prefix().pool_state.compare_and_swap( SNAPSHOT_SERVER_GOING_AWAY, snapshot )==snapshot ) {
-            if( snapshot!=SNAPSHOT_EMPTY )
-                prefix().server->adjust_job_count_estimate( -int(prefix().number_of_workers) );
-            break;
-        }
-    }
-    prefix().server->request_close_connection();
-#endif /* !__TBB_ARENA_PER_MASTER */
-}
-
 #if __TBB_COUNT_TASK_NODES 
 intptr_t arena::workers_task_node_count() {
     intptr_t result = 0;
-#if __TBB_ARENA_PER_MASTER
     for( unsigned i = 1; i < my_num_slots; ++i ) {
-        generic_scheduler* s = slot[i].my_scheduler;
-#else /* !__TBB_ARENA_PER_MASTER */
-    for( unsigned i=0; i<prefix().number_of_workers; ++i ) {
-        generic_scheduler* s = prefix().worker_list[i].scheduler;
-#endif /* !__TBB_ARENA_PER_MASTER */
+        generic_scheduler* s = my_slots[i].my_scheduler;
         if( s )
-            result += s->task_node_count;
+            result += s->my_task_node_count;
     }
     return result;
 }
diff --git a/src/tbb/arena.h b/src/tbb/arena.h
index 30c455a..acf783a 100644
--- a/src/tbb/arena.h
+++ b/src/tbb/arena.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -32,22 +32,23 @@
 #include "tbb/tbb_stddef.h"
 #include "tbb/atomic.h"
 
-#if __TBB_ARENA_PER_MASTER
-#include "market.h"
+#include "tbb/tbb_machine.h"
+
+#if !__TBB_CPU_CTL_ENV_PRESENT
+    #include <fenv.h>
+    typedef fenv_t __TBB_cpu_ctl_env_t;
+#endif /* !__TBB_CPU_CTL_ENV_PRESENT */
+
+#include "scheduler_common.h"
 #include "intrusive_list.h"
 #include "task_stream.h"
-#else /* !__TBB_ARENA_PER_MASTER */
 #include "../rml/include/rml_tbb.h"
-#endif /* !__TBB_ARENA_PER_MASTER */
-
 #include "mailbox.h"
 
 namespace tbb {
 
-#if __TBB_ARENA_PER_MASTER
 class task_group_context;
 class allocate_root_with_context_proxy;
-#endif /* __TBB_ARENA_PER_MASTER */
 
 namespace internal {
 
@@ -56,176 +57,11 @@ class arena;
 class generic_scheduler;
 template<typename SchedulerTraits> class custom_scheduler;
 
-#if !__TBB_ARENA_PER_MASTER
-//------------------------------------------------------------------------
-// UnpaddedArenaPrefix
-//------------------------------------------------------------------------
-
-struct WorkerDescriptor {
-    //! NULL until worker is published.  -1 if worker should not be published.
-    generic_scheduler* scheduler;
-};
-
-//! The useful contents of an ArenaPrefix
-class UnpaddedArenaPrefix: no_copy, rml::tbb_client {
-    friend class generic_scheduler;
-    template<typename SchedulerTraits> friend class custom_scheduler;
-    friend class arena;
-    friend class governor;
-    friend struct WorkerDescriptor;
-
-    //! Arena slot to try to acquire first for the next new master.
-    unsigned limit;
-
-    //! Number of masters that own this arena.
-    /** This may be smaller than the number of masters who have entered the arena. */
-    unsigned number_of_masters;
-
-    //! Total number of slots in the arena
-    const unsigned number_of_slots;
-
-    //! Number of workers that belong to this arena
-    const unsigned number_of_workers;
-
-    //! Pointer to the RML server object that services requests for this arena.
-    rml::tbb_server* server;
-
-    //! Counter used to allocate job indices
-    tbb::atomic<size_t> next_job_index;
-
-    //! Stack size of worker threads
-    size_t stack_size;
-
-    //! Array of workers.
-    WorkerDescriptor* worker_list;
-
-#if __TBB_COUNT_TASK_NODES
-    //! Net number of nodes that have been allocated from heap.
-    /** Updated each time a scheduler is destroyed. */
-    atomic<intptr_t> task_node_count;
-#endif /* __TBB_COUNT_TASK_NODES */
-
-    //! Estimate of number of available tasks.  
-    /** The estimate is either 0 (SNAPSHOT_EMPTY), infinity (SNAPSHOT_FULL), or a special value. 
-        The implementation of arena::is_busy_or_empty requires that pool_state_t be unsigned. */
-    typedef uintptr_t pool_state_t;
-
-    //! Current estimate of number of available tasks.  
-    tbb::atomic<pool_state_t> pool_state;
- 
-protected:
-    UnpaddedArenaPrefix( unsigned number_of_slots_, unsigned number_of_workers_ ) :
-        number_of_masters(1),
-        number_of_slots(number_of_slots_),
-        number_of_workers(number_of_workers_)
-    {
-#if __TBB_COUNT_TASK_NODES
-        task_node_count = 0;
-#endif /* __TBB_COUNT_TASK_NODES */
-        limit = number_of_workers_;
-        server = NULL;
-        stack_size = 0;
-        next_job_index = 0;
-    }
-        
-private:
-    //! Return reference to corresponding arena.
-    arena& Arena();
-
-    /*override*/ version_type version() const {
-        return 0;
-    }
-
-    /*override*/ unsigned max_job_count() const {
-        return number_of_workers;
-    }
-
-    /*override*/ size_t min_stack_size() const {
-        return stack_size;
-    }
-
-    /*override*/ policy_type policy() const {
-        return throughput;
-    }
-
-    /*override*/ job* create_one_job();
-
-    /*override*/ void cleanup( job& j );
-
-    /*override*/ void acknowledge_close_connection();
-
-    /*override*/ void process( job& j );
-}; // class UnpaddedArenaPrefix
-
-//------------------------------------------------------------------------
-// ArenaPrefix
-//------------------------------------------------------------------------
-
-//! The prefix to arena with padding.
-class ArenaPrefix: public UnpaddedArenaPrefix {
-    //! Padding to fill out to multiple of cache line size.
-    char pad[(sizeof(UnpaddedArenaPrefix)/NFS_MaxLineSize+1)*NFS_MaxLineSize-sizeof(UnpaddedArenaPrefix)];
-
-public:
-    ArenaPrefix( unsigned number_of_slots_, unsigned number_of_workers_ ) :
-        UnpaddedArenaPrefix(number_of_slots_,number_of_workers_)
-    {
-    }
-}; // class ArenaPrefix
-
-#endif /* !__TBB_ARENA_PER_MASTER */
-
-//------------------------------------------------------------------------
-// arena_slot
-//------------------------------------------------------------------------
-
-struct arena_slot {
-#if __TBB_ARENA_PER_MASTER
-    //! Scheduler of the thread attached to the slot
-    /** Marks the slot as busy, and is used to iterate through the schedulers belonging to this arena **/
-    generic_scheduler* my_scheduler;
-#endif /* __TBB_ARENA_PER_MASTER */
-
-    // Task pool (the deque of task pointers) of the scheduler that owns this slot
-    /** Also is used to specify if the slot is empty or locked:
-         0 - empty
-        -1 - locked **/
-    task** task_pool;
-
-    //! Index of the first ready task in the deque.
-    /** Modified by thieves, and by the owner during compaction/reallocation **/
-    size_t head;
-
-    //! Padding to avoid false sharing caused by the thieves accessing this slot
-    char pad1[NFS_MaxLineSize - sizeof(size_t) - sizeof(task**)
-#if __TBB_ARENA_PER_MASTER
-              - sizeof(generic_scheduler*)
-#endif /* __TBB_ARENA_PER_MASTER */
-             ];
-
-    //! Index of the element following the last ready task in the deque.
-    /** Modified by the owner thread. **/
-    size_t tail;
-
-#if __TBB_ARENA_PER_MASTER
-    //! Hints provided for operations with the container of starvation-resistant tasks.
-    /** Modified by the owner thread (during these operations). **/
-    unsigned hint_for_push, hint_for_pop;
-
-#endif /* __TBB_ARENA_PER_MASTER */
-    //! Padding to avoid false sharing caused by the thieves accessing the next slot
-    char pad2[NFS_MaxLineSize - sizeof(size_t)
-#if __TBB_ARENA_PER_MASTER
-              - 2*sizeof(unsigned)
-#endif /* __TBB_ARENA_PER_MASTER */
-             ];
-}; // class arena_slot
-
 //------------------------------------------------------------------------
 // arena
 //------------------------------------------------------------------------
 
-#if __TBB_ARENA_PER_MASTER
+class market;
 
 //! arena data except the array of slots
 /** Separated in order to simplify padding. 
@@ -244,7 +80,7 @@ struct arena_base : intrusive_list_node {
     unsigned my_max_num_workers;
 
     //! Number of workers that are currently requested from the resource manager
-    atomic<int> my_num_workers_requested;
+    int my_num_workers_requested;
 
     //! Number of workers that have been marked out by the resource manager to service the arena
     unsigned my_num_workers_allotted;
@@ -254,40 +90,88 @@ struct arena_base : intrusive_list_node {
         arena shutdown and detaches from it. Plays the role of the arena's ref count. **/
     atomic<unsigned> my_num_threads_active;
 
+    //! FPU control settings of arena's master thread captured at the moment of arena instantiation.
+    __TBB_cpu_ctl_env_t my_cpu_ctl_env;
+
+#if __TBB_TRACK_PRIORITY_LEVEL_SATURATION
+    int my_num_workers_present;
+#endif /* __TBB_TRACK_PRIORITY_LEVEL_SATURATION */
+
     //! Current task pool state and estimate of available tasks amount.
     /** The estimate is either 0 (SNAPSHOT_EMPTY) or infinity (SNAPSHOT_FULL). 
         Special state is "busy" (any other unsigned value). 
         Note that the implementation of arena::is_busy_or_empty() requires 
-        pool_state to be unsigned. */
-    tbb::atomic<uintptr_t> pool_state;
+        my_pool_state to be unsigned. */
+    tbb::atomic<uintptr_t> my_pool_state;
 
 #if __TBB_TASK_GROUP_CONTEXT
-    //! Pointer to the "default" task_group_context allocated by the arena's master.
+    //! Default task group context.
+    /** Used by root tasks allocated directly by the master thread (not from inside
+        a TBB task) without explicit context specification. **/
     task_group_context* my_master_default_ctx;
-#endif
+#endif /* __TBB_TASK_GROUP_CONTEXT */
 
-    //! The task pool that guarantees eventual execution even if new tasks are constantly coming.
+#if __TBB_TASK_PRIORITY
+    //! Highest priority of recently spawned or enqueued tasks.
+    volatile intptr_t my_top_priority;
+
+    //! Lowest normalized priority of available spawned or enqueued tasks.
+    intptr_t my_bottom_priority;
+
+    //! Tracks events that may bring tasks in offload areas to the top priority level.
+    /** Incremented when arena top priority changes or a task group priority
+        is elevated to the current arena's top level. **/
+    uintptr_t my_reload_epoch;
+
+    //! List of offloaded tasks abandoned by workers revoked by the market
+    task* my_orphaned_tasks;
+
+    //! Counter used to track the occurrence of recent orphaning and re-sharing operations.
+    tbb::atomic<uintptr_t> my_abandonment_epoch;
+
+    //! Task pool for the tasks scheduled via task::enqueue() method
+    /** Such scheduling guarantees eventual execution even if
+        - new tasks are constantly coming (by extracting scheduled tasks in 
+          relaxed FIFO order);
+        - the enqueuing thread does not call any of wait_for_all methods. **/
+    task_stream my_task_stream[num_priority_levels];
+
+    //! Highest priority level containing enqueued tasks
+    /** It being greater than 0 means that high priority enqueued tasks had to be
+        bypassed because all workers were blocked in nested dispatch loops and
+        were unable to progress at then current priority level. **/
+    tbb::atomic<intptr_t> my_skipped_fifo_priority;
+#else /* !__TBB_TASK_PRIORITY */
+
+    //! Task pool for the tasks scheduled via task::enqueue() method
+    /** Such scheduling guarantees eventual execution even if
+        - new tasks are constantly coming (by extracting scheduled tasks in 
+          relaxed FIFO order);
+        - the enqueuing thread does not call any of wait_for_all methods. **/
     task_stream my_task_stream;
+#endif /* !__TBB_TASK_PRIORITY */
 
+    //! Indicates if there is an oversubscribing worker created to service enqueued tasks.
     bool my_mandatory_concurrency;
-}; // struct arena_base
 
-#endif /* __TBB_ARENA_PER_MASTER */
+#if TBB_USE_ASSERT
+    //! Used to trap accesses to the object after its destruction.
+    uintptr_t my_guard;
+#endif /* TBB_USE_ASSERT */
+}; // struct arena_base
 
 class arena
-#if __TBB_ARENA_PER_MASTER
 #if (__GNUC__<4 || __GNUC__==4 && __GNUC_MINOR__==0) && !__INTEL_COMPILER
     : public padded<arena_base>
 #else
-    : padded<arena_base>
+    : private padded<arena_base>
 #endif
-#endif /* __TBB_ARENA_PER_MASTER */
 {
+private:
     friend class generic_scheduler;
     template<typename SchedulerTraits> friend class custom_scheduler;
     friend class governor;
 
-#if __TBB_ARENA_PER_MASTER
     friend class market;
     friend class tbb::task_group_context;
     friend class allocate_root_with_context_proxy;
@@ -303,37 +187,28 @@ class arena
     //! Allocate an instance of arena.
     static arena& allocate_arena( market&, unsigned max_num_workers );
 
+    static int unsigned num_slots_to_reserve ( unsigned max_num_workers ) {
+        return max(2u, max_num_workers + 1);
+    }
+
+    static int allocation_size ( unsigned max_num_workers ) {
+        return sizeof(base_type) + num_slots_to_reserve(max_num_workers) * (sizeof(mail_outbox) + sizeof(arena_slot));
+    }
+
 #if __TBB_TASK_GROUP_CONTEXT
-    //! Propagates cancellation request to all descendants of the context.
+    //! Finds all contexts affected by the state change and propagates the new state to them.
     /** The propagation is relayed to the market because tasks created by one 
         master thread can be passed to and executed by other masters. This means 
-        that context trees can span several arenas at once and thus cancellation
+        that context trees can span several arenas at once and thus state change
         propagation cannot be generally localized to one arena only. **/
-    void propagate_cancellation ( task_group_context& ctx ) {
-        my_market->propagate_cancellation( ctx );
-    }
+    template <typename T>
+    bool propagate_task_group_state ( T task_group_context::*mptr_state, task_group_context& src, T new_state );
 #endif /* __TBB_TASK_GROUP_CONTEXT */
 
-#else /* !__TBB_ARENA_PER_MASTER */
-
-    friend class UnpaddedArenaPrefix;
-    friend struct WorkerDescriptor;
-
-    //! Get reference to prefix portion
-    ArenaPrefix& prefix() const {return ((ArenaPrefix*)(void*)this)[-1];}
-
-    //! Allocate an instance of arena, and prepare everything to start workers.
-    static arena* allocate_arena( unsigned num_slots, unsigned num_workers, size_t stack_size );
-#endif /* !__TBB_ARENA_PER_MASTER */
-
     //! Get reference to mailbox corresponding to given affinity_id.
     mail_outbox& mailbox( affinity_id id ) {
         __TBB_ASSERT( 0<id, "affinity id must be positive integer" );
-#if __TBB_ARENA_PER_MASTER
         __TBB_ASSERT( id <= my_num_slots, "affinity id out of bounds" );
-#else /* !__TBB_ARENA_PER_MASTER */
-        __TBB_ASSERT( id <= prefix().number_of_slots, "id out of bounds" );
-#endif /* !__TBB_ARENA_PER_MASTER */
 
         return ((mail_outbox*)&prefix())[-(int)id];
     }
@@ -349,27 +224,16 @@ class arena
     //! At least one task has been offered for stealing since the last snapshot started
     static const pool_state_t SNAPSHOT_FULL = pool_state_t(-1);
 
-#if __TBB_ARENA_PER_MASTER
     //! No tasks to steal or snapshot is being taken.
     static bool is_busy_or_empty( pool_state_t s ) { return s < SNAPSHOT_FULL; }
 
     //! The number of workers active in the arena.
     unsigned num_workers_active( ) {
-        return my_num_threads_active - (slot[0].my_scheduler? 1: 0);
+        return my_num_threads_active - (my_slots[0].my_scheduler? 1 : 0);
     }
 
     //! If necessary, raise a flag that there is new job in arena.
     template<bool Spawned> void advertise_new_work();
-#else /*__TBB_ARENA_PER_MASTER*/
-    //! Server is going away and hence further calls to adjust_job_count_estimate are unsafe.
-    static const pool_state_t SNAPSHOT_SERVER_GOING_AWAY = pool_state_t(-2);
-
-    //! No tasks to steal or snapshot is being taken.
-    static bool is_busy_or_empty( pool_state_t s ) { return s < SNAPSHOT_SERVER_GOING_AWAY; }
-
-    //! If necessary, raise a flag that task was added to pool recently.
-    inline void mark_pool_full();
-#endif /* __TBB_ARENA_PER_MASTER */
 
     //! Check if there is job anywhere in arena.
     /** Return true if no job or if arena is being cleaned up. */
@@ -378,9 +242,22 @@ class arena
     //! Initiates arena shutdown.
     void close_arena ();
 
-#if __TBB_ARENA_PER_MASTER
-    void process( generic_scheduler& s );
-#endif
+    //! 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 ();
+
+#if __TBB_STATISTICS
+    //! Outputs internal statistics accumulated by the arena
+    void dump_arena_statistics ();
+#endif /* __TBB_STATISTICS */
+
+#if __TBB_TASK_PRIORITY
+    //! Check if recent priority changes may bring some tasks to the current priority level soon
+    /** /param tasks_present indicates presence of tasks at any priority level. **/
+    inline bool may_have_tasks ( generic_scheduler*, arena_slot&, bool& tasks_present, bool& dequeuing_possible );
+#endif /* __TBB_TASK_PRIORITY */
 
 #if __TBB_COUNT_TASK_NODES
     //! Returns the number of task objects "living" in worker threads
@@ -388,23 +265,59 @@ class arena
 #endif
 
     /** Must be the last data field */
-    arena_slot slot[1];
+    arena_slot my_slots[1];
 }; // class arena
 
+} // namespace internal
+} // namespace tbb
+
+#include "market.h"
+#include "scheduler_common.h"
+
+namespace tbb {
+namespace internal {
+
+inline void arena::on_thread_leaving () {
+    // 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
+    // to RML for threads, the arena object is destroyed only when both the last
+    // 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 
+    // 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.
+    //
+    // 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.
+    //
+    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();
+    }
+}
 
-#if __TBB_ARENA_PER_MASTER
 template<bool Spawned> void arena::advertise_new_work() {
     if( !Spawned ) { // i.e. the work was enqueued
         if( my_max_num_workers==0 ) {
             my_max_num_workers = 1;
             my_mandatory_concurrency = true;
-            prefix().pool_state = SNAPSHOT_FULL;
+            prefix().my_pool_state = SNAPSHOT_FULL;
             my_market->adjust_demand( *this, 1 );
             return;
         }
         // Local memory fence is required to avoid missed wakeups; see the comment below.
         // Starvation resistant tasks require mandatory concurrency, so missed wakeups are unacceptable.
-        __TBB_full_memory_fence(); 
+        atomic_fence(); 
     }
     // Double-check idiom that, in case of spawning, is deliberately sloppy about memory fences.
     // Technically, to avoid missed wakeups, there should be a full memory fence between the point we 
@@ -412,17 +325,17 @@ template<bool Spawned> void arena::advertise_new_work() {
     // fence might hurt overall performance more than it helps, because the fence would be executed 
     // on every task pool release, even when stealing does not occur.  Since TBB allows parallelism, 
     // but never promises parallelism, the missed wakeup is not a correctness problem.
-    pool_state_t snapshot = prefix().pool_state;
+    pool_state_t snapshot = prefix().my_pool_state;
     if( is_busy_or_empty(snapshot) ) {
         // Attempt to mark as full.  The compare_and_swap below is a little unusual because the 
         // result is compared to a value that can be different than the comparand argument.
-        if( prefix().pool_state.compare_and_swap( SNAPSHOT_FULL, snapshot )==SNAPSHOT_EMPTY ) {
+        if( prefix().my_pool_state.compare_and_swap( SNAPSHOT_FULL, snapshot )==SNAPSHOT_EMPTY ) {
             if( snapshot!=SNAPSHOT_EMPTY ) {
                 // This thread read "busy" into snapshot, and then another thread transitioned 
-                // pool_state to "empty" in the meantime, which caused the compare_and_swap above 
-                // to fail.  Attempt to transition pool_state from "empty" to "full".
-                if( prefix().pool_state.compare_and_swap( SNAPSHOT_FULL, SNAPSHOT_EMPTY )!=SNAPSHOT_EMPTY ) {
-                    // Some other thread transitioned pool_state from "empty", and hence became
+                // my_pool_state to "empty" in the meantime, which caused the compare_and_swap above 
+                // to fail.  Attempt to transition my_pool_state from "empty" to "full".
+                if( prefix().my_pool_state.compare_and_swap( SNAPSHOT_FULL, SNAPSHOT_EMPTY )!=SNAPSHOT_EMPTY ) {
+                    // Some other thread transitioned my_pool_state from "empty", and hence became
                     // responsible for waking up workers.
                     return;
                 }
@@ -445,36 +358,6 @@ template<bool Spawned> void arena::advertise_new_work() {
         }
     }
 }
-#else /* !__TBB_ARENA_PER_MASTER */
-inline void arena::mark_pool_full()  {
-    // Double-check idiom that is deliberately sloppy about memory fences.
-    // Technically, to avoid missed wakeups, there should be a full memory fence between the point we 
-    // released the task pool (i.e. spawned task) and read the arena's state.  However, adding such a 
-    // fence might hurt overall performance more than it helps, because the fence would be executed 
-    // on every task pool release, even when stealing does not occur.  Since TBB allows parallelism, 
-    // but never promises parallelism, the missed wakeup is not a correctness problem.
-    pool_state_t snapshot = prefix().pool_state;
-    if( is_busy_or_empty(snapshot) ) {
-        // Attempt to mark as full.  The compare_and_swap below is a little unusual because the 
-        // result is compared to a value that can be different than the comparand argument.
-        if( prefix().pool_state.compare_and_swap( SNAPSHOT_FULL, snapshot )==SNAPSHOT_EMPTY ) {
-            if( snapshot!=SNAPSHOT_EMPTY ) {
-                // This thread read "busy" into snapshot, and then another thread transitioned 
-                // pool_state to "empty" in the meantime, which caused the compare_and_swap above 
-                // to fail.  Attempt to transition pool_state from "empty" to "full".
-                if( prefix().pool_state.compare_and_swap( SNAPSHOT_FULL, SNAPSHOT_EMPTY )!=SNAPSHOT_EMPTY ) {
-                    // Some other thread transitioned pool_state from "empty", and hence became
-                    // responsible for waking up workers.
-                    return;
-                }
-            }
-            // This thread transitioned pool from empty to full state, and thus is responsible for
-            // telling RML that there is work to do.
-            prefix().server->adjust_job_count_estimate( int(prefix().number_of_workers) );
-        }
-    }
-}
-#endif /* !__TBB_ARENA_PER_MASTER */
 
 } // namespace internal
 } // namespace tbb
diff --git a/src/tbb/cache_aligned_allocator.cpp b/src/tbb/cache_aligned_allocator.cpp
index 3c1464c..e8e6b78 100644
--- a/src/tbb/cache_aligned_allocator.cpp
+++ b/src/tbb/cache_aligned_allocator.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -34,13 +34,7 @@
 #include <cstdlib>
 
 #if _WIN32||_WIN64
-#if _XBOX
-    #define NONET
-    #define NOD3D
-    #include <xtl.h>
-#else
-#include <windows.h>
-#endif // _XBOX
+#include "tbb/machine/windows_api.h"
 #else
 #include <dlfcn.h>
 #endif /* _WIN32||_WIN64 */
@@ -51,16 +45,18 @@ using namespace std;
 
 #pragma weak scalable_malloc
 #pragma weak scalable_free
+#pragma weak scalable_aligned_malloc
+#pragma weak scalable_aligned_free
 
 extern "C" {
     void* scalable_malloc( size_t );
-    void scalable_free( void* );
+    void  scalable_free( void* );
+    void* scalable_aligned_malloc( size_t, size_t );
+    void  scalable_aligned_free( void* );
 }
 
 #endif /* __TBB_WEAK_SYMBOLS */
 
-#define __TBB_IS_SCALABLE_MALLOC_FIX_READY 0
-
 namespace tbb {
 
 namespace internal {
@@ -77,13 +73,6 @@ static void* (*MallocHandler)( size_t size ) = &DummyMalloc;
 //! Handler for memory deallocation
 static void (*FreeHandler)( void* pointer ) = &DummyFree;
 
-//! Table describing the how to link the handlers.
-static const dynamic_link_descriptor MallocLinkTable[] = {
-    DLD(scalable_malloc, MallocHandler),
-    DLD(scalable_free, FreeHandler),
-};
-
-#if __TBB_IS_SCALABLE_MALLOC_FIX_READY 
 //! Dummy routine used for first indirect call via padded_allocate_handler.
 static void* dummy_padded_allocate( size_t bytes, size_t alignment );
 
@@ -93,9 +82,6 @@ static void dummy_padded_free( void * ptr );
 // ! Allocates memory using standard malloc. It is used when scalable_allocator is not available
 static void* padded_allocate( size_t bytes, size_t alignment );
 
-// ! Allocates memory using scalable_malloc
-static void* padded_allocate_via_scalable_malloc( size_t bytes, size_t alignment );
-
 // ! Allocates memory using standard free. It is used when scalable_allocator is not available
 static void padded_free( void* p );
 
@@ -105,7 +91,13 @@ static void* (*padded_allocate_handler)( size_t bytes, size_t alignment ) = &dum
 //! Handler for padded memory deallocation
 static void (*padded_free_handler)( void* p ) = &dummy_padded_free;
 
-#endif // #if __TBB_IS_SCALABLE_MALLOC_FIX_READY 
+//! Table describing how to link the handlers.
+static const dynamic_link_descriptor MallocLinkTable[] = {
+    DLD(scalable_malloc, MallocHandler),
+    DLD(scalable_free, FreeHandler),
+    DLD(scalable_aligned_malloc, padded_allocate_handler),
+    DLD(scalable_aligned_free, padded_free_handler),
+};
 
 
 #if TBB_USE_DEBUG
@@ -121,7 +113,7 @@ static void (*padded_free_handler)( void* p ) = &dummy_padded_free;
 #define MALLOCLIB_NAME "libtbbmalloc" DEBUG_SUFFIX ".dylib"
 #elif __linux__
 #define MALLOCLIB_NAME "libtbbmalloc" DEBUG_SUFFIX  __TBB_STRING(.so.TBB_COMPATIBLE_INTERFACE_VERSION)
-#elif __FreeBSD__ || __sun
+#elif __FreeBSD__ || __NetBSD__ || __sun || _AIX
 #define MALLOCLIB_NAME "libtbbmalloc" DEBUG_SUFFIX ".so"
 #else
 #error Unknown OS
@@ -133,29 +125,23 @@ static void (*padded_free_handler)( void* p ) = &dummy_padded_free;
     If that allocator is not found, it links to malloc and free. */
 void initialize_cache_aligned_allocator() {
     __TBB_ASSERT( MallocHandler==&DummyMalloc, NULL );
-    bool success = dynamic_link( MALLOCLIB_NAME, MallocLinkTable, 2 );
+    bool success = dynamic_link( MALLOCLIB_NAME, MallocLinkTable, 4 );
     if( !success ) {
         // If unsuccessful, set the handlers to the default routines.
-        // This must be done now, and not before FillDynanmicLinks runs, because if other
+        // This must be done now, and not before FillDynamicLinks runs, because if other
         // threads call the handlers, we want them to go through the DoOneTimeInitializations logic,
         // which forces them to wait.
         FreeHandler = &free;
         MallocHandler = &malloc;
-#if __TBB_IS_SCALABLE_MALLOC_FIX_READY 
         padded_allocate_handler = &padded_allocate;
         padded_free_handler = &padded_free;
-    }else{
-        padded_allocate_handler = &padded_allocate_via_scalable_malloc;
-        __TBB_ASSERT(FreeHandler != &free && FreeHandler != &DummyFree, NULL);
-        padded_free_handler = FreeHandler;
-#endif // __TBB_IS_SCALABLE_MALLOC_FIX_READY 
     }
 #if !__TBB_RML_STATIC
     PrintExtraVersionInfo( "ALLOCATOR", success?"scalable_malloc":"malloc" );
 #endif
 }
 
-//! Defined in task.cpp
+//! Defined in tbb_main.cpp
 extern void DoOneTimeInitializations();
 
 //! Executed on very first call through MallocHandler
@@ -172,7 +158,6 @@ static void DummyFree( void * ptr ) {
     (*FreeHandler)( ptr );
 }
 
-#if __TBB_IS_SCALABLE_MALLOC_FIX_READY 
 //! Executed on very first call through padded_allocate_handler
 static void* dummy_padded_allocate( size_t bytes, size_t alignment ) {
     DoOneTimeInitializations();
@@ -186,7 +171,6 @@ static void dummy_padded_free( void * ptr ) {
     __TBB_ASSERT( padded_free_handler!=&dummy_padded_free, NULL );
     (*padded_free_handler)( ptr );
 }    
-#endif // __TBB_IS_SCALABLE_MALLOC_FIX_READY 
 
 static size_t NFS_LineSize = 128;
 
@@ -194,9 +178,6 @@ size_t NFS_GetLineSize() {
     return NFS_LineSize;
 }
 
-//! Requests for blocks this size and higher are handled via malloc/free,
-const size_t BigSize = 4096;
-
 #if _MSC_VER && !defined(__INTEL_COMPILER)
     // unary minus operator applied to unsigned type, result still unsigned
     #pragma warning( disable: 4146 4706 )
@@ -207,69 +188,35 @@ void* NFS_Allocate( size_t n, size_t element_size, void* /*hint*/ ) {
     __TBB_ASSERT( m<=NFS_MaxLineSize, "illegal value for NFS_LineSize" );
     __TBB_ASSERT( (m & (m-1))==0, "must be power of two" );
     size_t bytes = n*element_size;
-#if __TBB_IS_SCALABLE_MALLOC_FIX_READY 
 
     if (bytes<n || bytes+m<bytes) {
         // Overflow
         throw_exception(eid_bad_alloc);
     }
+    // scalable_aligned_malloc considers zero size request an error, and returns NULL
+    if (bytes==0) bytes = 1;
     
     void* result = (*padded_allocate_handler)( bytes, m );
-#else
-    unsigned char* base = 0;
-    if( bytes<n || bytes+m<bytes || !(base=(unsigned char*)(bytes>=BigSize?malloc(m+bytes):(*MallocHandler)(m+bytes))) ) {
-        // Overflow
+    if (!result)
         throw_exception(eid_bad_alloc);
-    }
-    // Round up to next line
-    unsigned char* result = (unsigned char*)((uintptr_t)(base+m)&-m);
-    // Record where block actually starts.  Use low order bit to record whether we used malloc or MallocHandler.
-    ((uintptr_t*)result)[-1] = uintptr_t(base)|(bytes>=BigSize);
-#endif // __TBB_IS_SCALABLE_MALLOC_FIX_READY    
-    /** The test may fail with TBB_IS_SCALABLE_MALLOC_FIX_READY = 1 
-        because scalable_malloc returns addresses aligned to 64 when large block is allocated */
+
     __TBB_ASSERT( ((size_t)result&(m-1)) == 0, "The address returned isn't aligned to cache line size" );
     return result;
 }
 
 void NFS_Free( void* p ) {
-#if __TBB_IS_SCALABLE_MALLOC_FIX_READY 
     (*padded_free_handler)( p );
-#else
-    if( p ) {
-        __TBB_ASSERT( (uintptr_t)p>=0x4096, "attempt to free block not obtained from cache_aligned_allocator" );
-        // Recover where block actually starts
-        unsigned char* base = ((unsigned char**)p)[-1];
-        __TBB_ASSERT( (void*)((uintptr_t)(base+NFS_LineSize)&-NFS_LineSize)==p, "not allocated by NFS_Allocate?" );
-        if( uintptr_t(base)&1 ) {
-            // Is a big block - use free
-            free(base-1);
-        } else {
-            // Is a small block - use scalable allocator
-            (*FreeHandler)( base );
-        }
-    }
-#endif // __TBB_IS_SCALABLE_MALLOC_FIX_READY
-}
-
-#if __TBB_IS_SCALABLE_MALLOC_FIX_READY
-static void* padded_allocate_via_scalable_malloc( size_t bytes, size_t alignment  ) {  
-    unsigned char* base;
-    if( !(base=(unsigned char*)(*MallocHandler)((bytes+alignment)&-alignment))) {
-        throw_exception(eid_bad_alloc);
-    }        
-    return base; // scalable_malloc returns aligned pointer
 }
 
 static void* padded_allocate( size_t bytes, size_t alignment ) {    
-    unsigned char* base;
-    if( !(base=(unsigned char*)malloc(alignment+bytes)) ) {        
-        throw_exception(eid_bad_alloc);
+    unsigned char* result = NULL;
+    unsigned char* base = (unsigned char*)malloc(alignment+bytes);
+    if( base ) {        
+        // Round up to the next line
+        result = (unsigned char*)((uintptr_t)(base+alignment)&-alignment);
+        // Record where block actually starts.
+        ((uintptr_t*)result)[-1] = uintptr_t(base);
     }
-    // Round up to the next line
-    unsigned char* result = (unsigned char*)((uintptr_t)(base+alignment)&-alignment);
-    // Record where block actually starts.
-    ((uintptr_t*)result)[-1] = uintptr_t(base);
     return result;    
 }
 
@@ -282,13 +229,10 @@ static void padded_free( void* p ) {
         free(base);
     }
 }
-#endif // #if __TBB_IS_SCALABLE_MALLOC_FIX_READY
 
 void* __TBB_EXPORTED_FUNC allocate_via_handler_v3( size_t n ) {    
-    void* result;
-    result = (*MallocHandler) (n);
+    void* result = (*MallocHandler) (n);
     if (!result) {
-        // Overflow
         throw_exception(eid_bad_alloc);
     }
     return result;
@@ -306,9 +250,10 @@ bool __TBB_EXPORTED_FUNC is_malloc_used_v3() {
         (*FreeHandler)(void_ptr);
     }
     __TBB_ASSERT( MallocHandler!=&DummyMalloc && FreeHandler!=&DummyFree, NULL );
-    __TBB_ASSERT((MallocHandler==&malloc && FreeHandler==&free) ||
-                 (MallocHandler!=&malloc && FreeHandler!=&free), NULL );
-    return MallocHandler == &malloc;
+    // Cast to void avoids type mismatch errors on some compilers (e.g. __IBMCPP__)
+    __TBB_ASSERT( !(((void*)MallocHandler==(void*)&malloc) ^ ((void*)FreeHandler==(void*)&free)),
+                  "Both shim pointers must refer to routines from the same package (either TBB or CRT)" );
+    return (void*)MallocHandler == (void*)&malloc;
 }
 
 } // namespace internal
@@ -316,21 +261,11 @@ bool __TBB_EXPORTED_FUNC is_malloc_used_v3() {
 } // namespace tbb
 
 #if __TBB_RML_STATIC
-#include "tbb/atomic.h"
-static tbb::atomic<int> module_inited;
 namespace tbb {
 namespace internal {
+static tbb::atomic<do_once_state> module_state;
 void DoOneTimeInitializations() {
-    if( module_inited!=2 ) {
-        if( module_inited.compare_and_swap(1, 0)==0 ) {
-            initialize_cache_aligned_allocator();
-            module_inited = 2;
-        } else {
-            do {
-                __TBB_Yield();
-            } while( module_inited!=2 );
-        }
-    }
+    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
new file mode 100644
index 0000000..c13e40f
--- /dev/null
+++ b/src/tbb/cilk-tbb-interop.h
@@ -0,0 +1,120 @@
+/*
+    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.
+*/
+
+#ifndef CILK_TBB_INTEROP_H
+#define CILK_TBB_INTEROP_H
+
+#ifndef _WIN32
+#ifdef IN_CILK_RUNTIME
+#define CILK_EXPORT __attribute__((visibility("protected")))
+#else
+#define CILK_EXPORT /* nothing */
+#endif
+#else
+#ifdef IN_CILK_RUNTIME
+#define CILK_EXPORT __declspec(dllexport)
+#else
+#define CILK_EXPORT __declspec(dllimport)
+#endif  // IN_CILK_RUNTIME
+#endif // _WIN32
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/* A return code.  0 indicates success */
+typedef int __cilk_tbb_retcode;
+
+enum __cilk_tbb_stack_op {
+    CILK_TBB_STACK_ORPHAN, // disconnecting stack from a thread
+    CILK_TBB_STACK_ADOPT,  // reconnecting orphaned stack to a trhead
+    CILK_TBB_STACK_RELEASE // releasing stack
+};
+
+typedef __cilk_tbb_retcode (*__cilk_tbb_pfn_stack_op)(enum __cilk_tbb_stack_op, void* data);
+
+typedef __cilk_tbb_retcode (*__cilk_tbb_pfn_unwatch_stacks)(void *data);
+
+/* Each thunk structure has two pointers: "routine" and "data".
+   The caller of the thunk invokes *routine, passing "data" as the void* parameter. */
+
+/* Thunk invoked by Cilk when it changes the relationship between a stack and a thread.
+   It does not matter what stack the thunk runs on.
+   The thread (not fiber) on which the thunk runs is important.
+
+   CILK_TBB_STACK_ORPHAN
+      The thunk must be invoked on the thread disconnecting itself from the stack.
+      Must "happen before" the stack is adopted elsewhere.
+   CILK_TBB_STACK_ADOPT
+      The thunk must be invoked on the thread adopting the stack.
+   CILK_TBB_STACK_RELEASE
+      The thunk must be invoked on the thread doing the releasing,
+      Must "happen before" the stack is used elsewhere.
+
+   When a non-empty stack is transfered between threads, the first thread must orphan it 
+   and the second thread must adopt it.
+
+   An empty stack can be transfered similarly, or simply released by the first thread.
+
+   Here is a summary of the actions as transitions on a state machine.
+
+                       watch                                    ORPHAN
+                       -->-->                                   -->--
+                      /      \                                 /     \
+   (freed empty stack)       (TBB sees stack running on thread)      (stack in limbo)
+                |     \     /                                  \     /     |
+                |      --<--                                    --<--      |
+                ^      RELEASE or                              ADOPT       V
+                 \     unwatch                                            / 
+                  \                                                      /
+                   --------------------------<---------------------------
+                                          RELEASE
+*/
+struct __cilk_tbb_stack_op_thunk {
+    __cilk_tbb_pfn_stack_op routine;
+    void* data;                 /* Set by TBB */
+};
+
+/* Thunk invoked by TBB when it is no longer interested in watching the stack bound to the current thread. */
+struct __cilk_tbb_unwatch_thunk {
+    __cilk_tbb_pfn_unwatch_stacks routine;
+    void* data;      
+};
+
+/* Called by TBB, defined by Cilk. 
+   Requests that callee invoke __cilk_tbb_stack_op_thunk when it orphans a stack. 
+   Callee sets *u to a thunk that TBB should call when it is no longer interested in watching the stack. */
+CILK_EXPORT
+__cilk_tbb_retcode __cilkrts_watch_stack(struct __cilk_tbb_unwatch_thunk* u,
+                                         struct __cilk_tbb_stack_op_thunk o);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif  // CILK_TBB_INTEROP_H
diff --git a/src/tbb/concurrent_hash_map.cpp b/src/tbb/concurrent_hash_map.cpp
index b37387d..9b55ac3 100644
--- a/src/tbb/concurrent_hash_map.cpp
+++ b/src/tbb/concurrent_hash_map.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 3cd5054..637d1b7 100644
--- a/src/tbb/concurrent_monitor.cpp
+++ b/src/tbb/concurrent_monitor.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -44,7 +44,7 @@ void concurrent_monitor::prepare_wait( thread_context& thr, void* ctx ) {
         thr.epoch = epoch;
         waitset_ec.add( (waitset_t::node_t*)&thr );
     }
-    __TBB_full_memory_fence();
+    atomic_fence();
 }
 
 void concurrent_monitor::cancel_wait( thread_context& thr ) {
diff --git a/src/tbb/concurrent_monitor.h b/src/tbb/concurrent_monitor.h
index 8a626a0..e1fbdd9 100644
--- a/src/tbb/concurrent_monitor.h
+++ b/src/tbb/concurrent_monitor.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -32,103 +32,11 @@
 #include "tbb/tbb_stddef.h"
 #include "tbb/atomic.h"
 #include "tbb/spin_mutex.h"
-
-#if _WIN32||_WIN64
-#if _XBOX
-    #define NONET
-    #define NOD3D
-    #include <xtl.h>
-#else
-#include <windows.h>
-#endif
-#elif __APPLE__
-#include <pthread.h>
-#include <mach/semaphore.h>
-#include <mach/task.h>
-#include <mach/mach_init.h>
-#include <mach/error.h>
-#else
-#include <pthread.h>
-#include <semaphore.h>
-#ifdef TBB_USE_DEBUG
-#include <errno.h>
-#endif
-#endif /*_WIN32||_WIN64*/
+#include "semaphore.h"
 
 namespace tbb {
 namespace internal {
 
-
-#if _WIN32||_WIN64
-typedef LONG sem_count_t;
-//! semaphore for concurrent_monitor
-class semaphore : no_copy {
-public:
-    //! ctor
-    semaphore() {sem = CreateSemaphore( NULL, 0, 1, NULL );}
-    //! dtor
-    ~semaphore() {CloseHandle( sem );}
-    //! wait/acquire
-    void P() {WaitForSingleObject( sem, INFINITE );}
-    //! post/release 
-    void V() {ReleaseSemaphore( sem, 1, NULL );}
-private:
-    HANDLE sem;
-};
-#elif __APPLE__
-//! semaphore for concurrent monitor
-class semaphore : no_copy {
-public:
-    //! ctor
-    semaphore() : sem(0) {
-        kern_return_t ret = semaphore_create( mach_task_self(), &sem, SYNC_POLICY_FIFO, 0 );
-        __TBB_ASSERT_EX( ret==err_none, "failed to create a semaphore" );
-    }
-    //! dtor
-    ~semaphore() {
-        kern_return_t ret = semaphore_destroy( mach_task_self(), sem );
-        __TBB_ASSERT_EX( ret==err_none, NULL );
-    }
-    //! wait/acquire
-    void P() { 
-        int ret;
-        do {
-            ret = semaphore_wait( sem );
-        } while( ret==KERN_ABORTED );
-        __TBB_ASSERT( ret==KERN_SUCCESS, "semaphore_wait() failed" );
-    }
-    //! post/release 
-    void V() { semaphore_signal( sem ); }
-private:
-    semaphore_t sem;
-};
-#else /* Linux/Unix */
-typedef uint32_t sem_count_t;
-//! semaphore for concurrent monitor
-class semaphore : no_copy {
-public:
-    //! ctor
-    semaphore() {
-        int ret = sem_init( &sem, /*shared among threads*/ 0, 0 );
-        __TBB_ASSERT_EX( !ret, NULL );
-    }
-    //! dtor
-    ~semaphore() {
-        int ret = sem_destroy( &sem );
-        __TBB_ASSERT_EX( !ret, NULL );
-    }
-    //! wait/acquire
-    void P() {
-        while( sem_wait( &sem )!=0 )
-            __TBB_ASSERT( errno==EINTR, NULL );
-    }
-    //! post/release 
-    void V() { sem_post( &sem ); }
-private:
-    sem_t sem;
-};
-#endif /* _WIN32||_WIN64 */
-
 //! Circular doubly-linked list with sentinel
 /** head.next points to the front and  head.prev points to the back */
 class circular_doubly_linked_list_with_sentinel : no_copy {
@@ -234,19 +142,19 @@ public:
     void cancel_wait( thread_context& thr );
 
     //! Notify one thread about the event
-    void notify_one() {__TBB_full_memory_fence(); notify_one_relaxed();}
+    void notify_one() {atomic_fence(); notify_one_relaxed();}
  
     //! Notify one thread about the event. Relaxed version.
     void notify_one_relaxed();
 
     //! Notify all waiting threads of the event
-    void notify_all() {__TBB_full_memory_fence(); notify_all_relaxed();}
+    void notify_all() {atomic_fence(); notify_all_relaxed();}
  
     //! Notify all waiting threads of the event; Relaxed version
     void notify_all_relaxed();
 
     //! Notify waiting threads of the event that satisfies the given predicate
-    template<typename P> void notify( const P& predicate ) {__TBB_full_memory_fence(); notify_relaxed( predicate );}
+    template<typename P> void notify( const P& predicate ) {atomic_fence(); notify_relaxed( predicate );}
  
     //! Notify waiting threads of the event that satisfies the given predicate; Relaxed version
     template<typename P> void notify_relaxed( const P& predicate );
diff --git a/src/tbb/concurrent_queue.cpp b/src/tbb/concurrent_queue.cpp
index 6089660..ae86be6 100644
--- a/src/tbb/concurrent_queue.cpp
+++ b/src/tbb/concurrent_queue.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -65,7 +65,7 @@ typedef concurrent_queue_base_v3 concurrent_queue_base;
 typedef size_t ticket;
 
 //! A queue using simple locking.
-/** For efficient, 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;
@@ -125,7 +125,7 @@ struct predicate_leq {
 };
 
 //! Internal representation of a ConcurrentQueue.
-/** For efficient, 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:
diff --git a/src/tbb/concurrent_vector.cpp b/src/tbb/concurrent_vector.cpp
index aa90c3f..cb9c6d2 100644
--- a/src/tbb/concurrent_vector.cpp
+++ b/src/tbb/concurrent_vector.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/condition_variable.cpp b/src/tbb/condition_variable.cpp
index d4b63ec..b8b4e91 100644
--- a/src/tbb/condition_variable.cpp
+++ b/src/tbb/condition_variable.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -28,6 +28,7 @@
 
 #include "tbb/compat/condition_variable"
 #include "tbb/atomic.h"
+#include "tbb_misc.h"
 #include "dynamic_link.h"
 #include "itt_notify.h"
 
@@ -39,7 +40,7 @@ namespace internal {
 #if _WIN32||_WIN64
 using tbb::interface5::internal::condition_variable_using_event;
 
-static atomic<int> condvar_module_inited;
+static atomic<do_once_state> condvar_api_state;
 
 void WINAPI init_condvar_using_event( condition_variable_using_event* cv_event )
 {
@@ -135,7 +136,7 @@ static void (WINAPI *__TBB_condvar_notify_one)( PCONDITION_VARIABLE ) = (void (W
 static void (WINAPI *__TBB_condvar_notify_all)( PCONDITION_VARIABLE ) = (void (WINAPI *)(PCONDITION_VARIABLE))&wake_all_condition_variable_using_event;
 static void (WINAPI *__TBB_destroy_condvar)( PCONDITION_VARIABLE ) = (void (WINAPI *)(PCONDITION_VARIABLE))&destroy_condvar_using_event;
 
-//! Table describing the how to link the handlers.
+//! Table describing how to link the handlers.
 static const dynamic_link_descriptor CondVarLinkTable[] = {
     DLD(InitializeConditionVariable, __TBB_init_condvar),
     DLD(SleepConditionVariableCS,    __TBB_condvar_wait),
@@ -146,7 +147,7 @@ static const dynamic_link_descriptor CondVarLinkTable[] = {
 void init_condvar_module()
 {
     __TBB_ASSERT( (uintptr_t)__TBB_init_condvar==(uintptr_t)&init_condvar_using_event, NULL );
-    if( dynamic_link( "Kernel32.dll", CondVarLinkTable, 4 ) )
+    if( dynamic_link( GetModuleHandle( "Kernel32.dll" ), CondVarLinkTable, 4 ) )
         __TBB_destroy_condvar = (void (WINAPI *)(PCONDITION_VARIABLE))&destroy_condvar_noop;
 }
 #endif /* _WIN32||_WIN64 */
@@ -158,7 +159,7 @@ void init_condvar_module()
 namespace interface5 {
 namespace internal {
 
-using tbb::internal::condvar_module_inited;
+using tbb::internal::condvar_api_state;
 using tbb::internal::__TBB_init_condvar;
 using tbb::internal::__TBB_condvar_wait;
 using tbb::internal::__TBB_condvar_notify_one;
@@ -168,16 +169,7 @@ using tbb::internal::init_condvar_module;
 
 void internal_initialize_condition_variable( condvar_impl_t& cv )
 {
-    if( condvar_module_inited!=2 ) {
-        if( condvar_module_inited==0 ) {
-            if( condvar_module_inited.compare_and_swap( 1, 0 )==0 ) {
-                init_condvar_module();
-                condvar_module_inited = 2;
-            }
-        } 
-
-        spin_wait_until_eq( condvar_module_inited, 2 );
-    }
+    atomic_do_once( &init_condvar_module, condvar_api_state );
     __TBB_init_condvar( &cv.cv_native );
 }
 
diff --git a/src/tbb/critical_section.cpp b/src/tbb/critical_section.cpp
index c67621f..ceebef6 100644
--- a/src/tbb/critical_section.cpp
+++ b/src/tbb/critical_section.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 c56bf54..47c5adc 100644
--- a/src/tbb/custom_scheduler.h
+++ b/src/tbb/custom_scheduler.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -118,12 +118,9 @@ class custom_scheduler: private generic_scheduler {
 
 public:
     static generic_scheduler* allocate_scheduler( arena* a, size_t index ) {
-#if !__TBB_ARENA_PER_MASTER
-        __TBB_ASSERT( a, "missing arena" );
-#endif /* !__TBB_ARENA_PER_MASTER */
         scheduler_type* s = (scheduler_type*)NFS_Allocate(sizeof(scheduler_type),1,NULL);
         new( s ) scheduler_type( a, index );
-        __TBB_ASSERT( s->assert_okay(), NULL );
+        s->assert_task_pool_valid();
         ITT_SYNC_CREATE(s, SyncType_Scheduler, SyncObj_TaskPoolSpinning);
         return s;
     }
@@ -142,7 +139,7 @@ template<typename SchedulerTraits>
 task* custom_scheduler<SchedulerTraits>::receive_or_steal_task( reference_count& completion_ref_count,
                                                                 bool return_if_no_work ) {
     task* t = NULL;
-    inbox.set_is_idle( true );
+    my_inbox.set_is_idle( true );
     // The state "failure_count==-1" is used only when itt_possible is true,
     // and denotes that a sync_prepare has not yet been issued.
     for( int failure_count = -static_cast<int>(SchedulerTraits::itt_possible);; ++failure_count) {
@@ -155,79 +152,87 @@ task* custom_scheduler<SchedulerTraits>::receive_or_steal_task( reference_count&
                 }
                 ITT_NOTIFY(sync_acquired, &completion_ref_count);
             }
-            inbox.set_is_idle( false );
-            return NULL;
+            __TBB_ASSERT( !t, NULL );
+            break; // exit stealing loop and return;
         }
-#if __TBB_ARENA_PER_MASTER
+        __TBB_ASSERT( my_arena->my_limit > 0, NULL );
         size_t n = my_arena->my_limit;
-        __TBB_ASSERT( arena_index < n, NULL );
-#else /* !__TBB_ARENA_PER_MASTER */
-        size_t n = my_arena->prefix().limit;
-#endif /* !__TBB_ARENA_PER_MASTER */
-        if( n>1 ) {
-            if( my_affinity_id && (t=get_mailbox_task()) ) {
-                GATHER_STATISTIC( ++mail_received_count );
+        __TBB_ASSERT( my_arena_index < n, NULL );
+        if ( n > 1 ) {
+            // Check if the resource manager requires our arena to relinquish some threads 
+            if ( return_if_no_work && my_arena->my_num_workers_allotted < my_arena->num_workers_active() ) {
+                __TBB_ASSERT( is_worker(), NULL );
+                if( SchedulerTraits::itt_possible && failure_count != -1 )
+                    ITT_NOTIFY(sync_cancel, this);
+                return NULL;
+            }
+            // Check if there are tasks mailed to this thread via task-to-thread affinity mechanism.
+            if ( my_affinity_id && (t=get_mailbox_task()) ) {
+                GATHER_STATISTIC( ++my_counters.mails_received );
             }
-#if __TBB_ARENA_PER_MASTER
             // Check if there are tasks in starvation-resistant stream.
             // Only allowed for workers with empty stack, which is identified by return_if_no_work.
             else if ( return_if_no_work && (t=dequeue_task()) ) {
                 // just proceed with the obtained task
             }
-            // Check if the resource manager requires our arena to relinquish some threads 
-            else if ( return_if_no_work && (my_arena->my_num_workers_allotted < my_arena->num_workers_active()) ) {
-                if( SchedulerTraits::itt_possible ) {
-                    if( failure_count!=-1 )
-                        ITT_NOTIFY(sync_cancel, this);
-                }
-                return NULL;
+#if __TBB_TASK_PRIORITY
+            // Check if any earlier offloaded non-top priority tasks become returned to the top level
+            else if ( my_offloaded_tasks && (t=reload_tasks()) ) {
+                // just proceed with the obtained task
             }
-#endif /* __TBB_ARENA_PER_MASTER */
-            else {
+#endif /* __TBB_TASK_PRIORITY */
+            else if ( can_steal() && n > 1 ) {
                 // Try to steal a task from a random victim.
-                if ( !can_steal() )
-                    goto fail;
-                size_t k = random.get() % (n-1);
-                arena_slot* victim = &my_arena->slot[k];
+                size_t k = my_random.get() % (n - 1);
+                arena_slot* victim = &my_arena->my_slots[k];
                 // The following condition excludes the master that might have 
                 // already taken our previous place in the arena from the list .
                 // of potential victims. But since such a situation can take 
                 // place only in case of significant oversubscription, keeping
                 // the checks simple seems to be preferable to complicating the code.
-                if( k >= arena_index )
+                if( k >= my_arena_index )
                     ++victim;               // Adjusts random distribution to exclude self
                 t = steal_task( *victim );
                 if( !t ) goto fail;
                 if( is_proxy(*t) ) {
                     t = strip_proxy((task_proxy*)t);
                     if( !t ) goto fail;
-                    GATHER_STATISTIC( ++proxy_steal_count );
+                    GATHER_STATISTIC( ++my_counters.proxies_stolen );
                 }
                 t->prefix().extra_state |= es_task_is_stolen;
                 if( is_version_3_task(*t) ) {
-                    innermost_running_task = t;
+                    my_innermost_running_task = t;
+                    t->prefix().owner = this;
                     t->note_affinity( my_affinity_id );
                 }
-                GATHER_STATISTIC( ++steal_count );
-            }
-            __TBB_ASSERT(t,NULL);
+                GATHER_STATISTIC( ++my_counters.steals_committed );
+            } // end of stealing branch
+            else
+                goto fail;
+        } // end of nonlocal retrieval branch
+        else {
+            // This is the only thread in this arena, so nowhere to steal
+#if __TBB_TASK_PRIORITY
+            if ( !my_offloaded_tasks || !(t = reload_tasks()) )
+#endif /* __TBB_TASK_PRIORITY */
+                goto fail;
+        }
+        // A task was successfully obtained somewhere
+        __TBB_ASSERT(t,NULL);
 #if __TBB_SCHEDULER_OBSERVER
-            // No memory fence required for read of global_last_observer_proxy, because prior fence on steal/mailbox suffices.
-            if( local_last_observer_proxy!=global_last_observer_proxy ) {
-                notify_entry_observers();
-            }
+        // No memory fence required for read of global_last_observer_proxy, because prior fence on steal/mailbox suffices.
+        if( my_local_last_observer_proxy!=global_last_observer_proxy ) {
+            notify_entry_observers();
+        }
 #endif /* __TBB_SCHEDULER_OBSERVER */
-            if( SchedulerTraits::itt_possible ) {
-                if( failure_count!=-1 ) {
-                    // FIXME - might be victim, or might be selected from a mailbox
-                    // Notify Intel(R) Thread Profiler that thread has stopped spinning.
-                    ITT_NOTIFY(sync_acquired, this);
-                }
-            }
-            inbox.set_is_idle( false );
-            break; // jumps to: return t;
+        if ( SchedulerTraits::itt_possible && failure_count != -1 ) {
+            // FIXME - might be victim, or might be selected from a mailbox
+            // Notify Intel(R) Thread Profiler that thread has stopped spinning.
+            ITT_NOTIFY(sync_acquired, this);
         }
+        break; // exit stealing loop and return
 fail:
+        GATHER_STATISTIC( ++my_counters.steals_failed );
         if( SchedulerTraits::itt_possible && failure_count==-1 ) {
             // The first attempt to steal work failed, so notify Intel(R) Thread Profiler that
             // the thread has started spinning.  Ideally, we would do this notification
@@ -241,37 +246,81 @@ fail:
         int yield_threshold = 2*int(n);
         if( failure_count>=yield_threshold ) {
             __TBB_Yield();
+#if __TBB_TASK_PRIORITY
+            // Check if there are tasks abandoned by other workers
+            if ( my_arena->my_orphaned_tasks ) {
+                // Epoch must be advanced before seizing the list pointer
+                ++my_arena->my_abandonment_epoch;
+                task* orphans = (task*)__TBB_FetchAndStoreW( &my_arena->my_orphaned_tasks, 0 );
+                if ( orphans ) {
+                    task** link = NULL;
+                    // Get local counter out of the way (we've just brought in external tasks)
+                    my_local_reload_epoch = 0;
+                    t = reload_tasks( orphans, link, *my_ref_top_priority );
+                    if ( orphans ) {
+                        *link = my_offloaded_tasks;
+                        if ( !my_offloaded_tasks )
+                            my_offloaded_task_list_tail_link = link;
+                        my_offloaded_tasks = orphans;
+                    }
+                    __TBB_ASSERT( !my_offloaded_tasks == !my_offloaded_task_list_tail_link, NULL );
+                    if ( t ) {
+                        if( SchedulerTraits::itt_possible )
+                            ITT_NOTIFY(sync_cancel, this);
+                        break; // exit stealing loop and return
+                    }
+                }
+            }
+#endif /* __TBB_TASK_PRIORITY */
             if( failure_count>=yield_threshold+100 ) {
                 // When a worker thread has nothing to do, return it to RML.
                 // For purposes of affinity support, the thread is considered idle while in RML.
-                if( return_if_no_work && my_arena->is_out_of_work() ) {
-                    if( SchedulerTraits::itt_possible ) {
-                        if( failure_count!=-1 )
+#if __TBB_TASK_PRIORITY
+                if( return_if_no_work || my_arena->my_top_priority > my_arena->my_bottom_priority ) {
+                    if ( my_arena->is_out_of_work() && return_if_no_work ) {
+#else /* !__TBB_TASK_PRIORITY */
+                    if ( return_if_no_work && my_arena->is_out_of_work() ) {
+#endif /* !__TBB_TASK_PRIORITY */
+                        if( SchedulerTraits::itt_possible )
                             ITT_NOTIFY(sync_cancel, this);
+                        return NULL;
+                    }
+#if __TBB_TASK_PRIORITY
+                }
+                if ( my_offloaded_tasks ) {
+                    // Safeguard against any sloppiness in managing reload epoch
+                    // counter (e.g. on the hot path bacause of performnace reasons).
+                    my_local_reload_epoch = 0;
+                    // Break the deadlock caused by a higher priority dispatch loop
+                    // stealing and offloading a lower priority task. Priority check
+                    // at the stealing moment cannot completely preclude such cases
+                    // because priorities can changes dynamically.
+                    if ( !return_if_no_work && *my_ref_top_priority > my_arena->my_top_priority ) {
+                        GATHER_STATISTIC( ++my_counters.prio_ref_fixups );
+                        my_ref_top_priority = &my_arena->my_top_priority;
+                        my_ref_reload_epoch = &my_arena->my_reload_epoch;
                     }
-                    return NULL;
                 }
+#endif /* __TBB_TASK_PRIORITY */
                 failure_count = yield_threshold;
-            }
-        }
-    }
+            } // end of arena snapshot branch
+        } // end of yielding branch
+    } // end of nonlocal task retrieval loop
+    my_inbox.set_is_idle( false );
     return t;
 }
 
 template<typename SchedulerTraits>
 void custom_scheduler<SchedulerTraits>::local_wait_for_all( task& parent, task* child ) {
     __TBB_ASSERT( governor::is_set(this), NULL );
-    if( child ) {
-        child->prefix().owner = this;
-    }
     __TBB_ASSERT( parent.ref_count() >= (child && child->parent() == &parent ? 2 : 1), "ref_count is too small" );
-    __TBB_ASSERT( assert_okay(), NULL );
+    assert_task_pool_valid();
     // Using parent's refcount in sync_prepare (in the stealing loop below) is 
     // a workaround for TP. We need to name it here to display correctly in Ampl.
     if( SchedulerTraits::itt_possible )
         ITT_SYNC_CREATE(&parent.prefix().ref_count, SyncType_Scheduler, SyncObj_TaskStealingLoop);
 #if __TBB_TASK_GROUP_CONTEXT
-    __TBB_ASSERT( parent.prefix().context || (is_worker() && &parent == dummy_task), "parent task does not have context" );
+    __TBB_ASSERT( parent.prefix().context || (is_worker() && &parent == my_dummy_task), "parent task does not have context" );
 #endif /* __TBB_TASK_GROUP_CONTEXT */
     task* t = child;
     // Constant all_local_work_done is an unreacheable refcount value that prevents
@@ -283,73 +332,124 @@ void custom_scheduler<SchedulerTraits>::local_wait_for_all( task& parent, task*
         // For termination dispatch loops in masters
         all_local_work_done = (reference_count)3 << (sizeof(reference_count) * 8 - 2);
     reference_count quit_point;
-    if( innermost_running_task == dummy_task ) {
+#if __TBB_TASK_PRIORITY
+    __TBB_ASSERT( (uintptr_t)*my_ref_top_priority < (uintptr_t)num_priority_levels, NULL );
+    volatile intptr_t *old_ref_top_priority = my_ref_top_priority;
+    // When entering nested parallelism level market level counter
+    // must be replaced with the one local to this arena.
+    volatile uintptr_t *old_ref_reload_epoch = my_ref_reload_epoch;
+    task* old_dispatching_task = my_dispatching_task;
+    my_dispatching_task = my_innermost_running_task;
+#else /* !__TBB_TASK_PRIORITY */
+    task* old_innermost_running_task = my_innermost_running_task;
+#endif /* __TBB_TASK_PRIORITY */
+    if( master_outermost_level() ) {
         // We are in the outermost task dispatch loop of a master thread,
         __TBB_ASSERT( !is_worker(), NULL );
-        quit_point = &parent == dummy_task ? all_local_work_done : parents_work_done;
+        quit_point = &parent == my_dummy_task ? all_local_work_done : parents_work_done;
     } else {
         quit_point = parents_work_done;
+#if __TBB_TASK_PRIORITY
+        if ( &parent != my_dummy_task ) {
+            // We are in a nested dispatch loop.
+            // Market or arena priority must not prevent child tasks from being
+            // executed so that dynamic priority changes did not cause deadlock.
+            my_ref_top_priority = &parent.prefix().context->my_priority;
+            my_ref_reload_epoch = &my_arena->my_reload_epoch;
+        }
+#endif /* __TBB_TASK_PRIORITY */
     }
-    task* old_innermost_running_task = innermost_running_task;
 #if __TBB_TASK_GROUP_CONTEXT && TBB_USE_EXCEPTIONS
-exception_was_caught:
+    // Infinite safeguard EH loop
+    for (;;) {
     try {
 #endif /* __TBB_TASK_GROUP_CONTEXT && TBB_USE_EXCEPTIONS */
-    // Outer loop steals tasks when necessary.
+    // Outer loop receives tasks from global environment (via mailbox, FIFO queue(s),
+    // and by  stealing from other threads' task pools).
+    // All exit points from the dispatch loop are located in its immediate scope.
     for(;;) {
-        // Middle loop evaluates tasks that are pulled off "array".
+        // Middle loop retrieves tasks from the local task pool.
         do {
-            // Inner loop evaluates tasks that are handed directly to us by other tasks.
+            // Inner loop evaluates tasks coming from nesting loops and those returned 
+            // by just executed tasks (bypassing spawn or enqueue calls).
             while(t) {
-                __TBB_ASSERT( inbox.assert_is_idle(false), NULL );
-#if TBB_USE_ASSERT
+                __TBB_ASSERT( my_inbox.is_idle_state(false), NULL );
                 __TBB_ASSERT(!is_proxy(*t),"unexpected proxy");
-                __TBB_ASSERT( t->prefix().owner==this, NULL );
-#if __TBB_TASK_GROUP_CONTEXT
+                __TBB_ASSERT( t->prefix().owner, NULL );
+                assert_task_valid(*t);
+#if __TBB_TASK_GROUP_CONTEXT && TBB_USE_ASSERT
                 if ( !t->prefix().context->my_cancellation_requested ) 
 #endif
-                    __TBB_ASSERT( 1L<<t->state() & (1L<<task::allocated|1L<<task::ready|1L<<task::reexecute), NULL );
-                __TBB_ASSERT(assert_okay(),NULL);
-#endif /* TBB_USE_ASSERT */
+                __TBB_ASSERT( 1L<<t->state() & (1L<<task::allocated|1L<<task::ready|1L<<task::reexecute), NULL );
+                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_arena->my_top_priority ) {
+                        my_market->update_arena_priority( *my_arena, p );
+                    }
+                    if ( p < *my_ref_top_priority ) {
+                        if ( !my_offloaded_tasks ) {
+                            my_offloaded_task_list_tail_link = &t->prefix().next_offloaded;
+                            // Erase possible reference to the owner scheduler (next_offloaded is a union member)
+                            *my_offloaded_task_list_tail_link = NULL;
+                        }
+                        offload_task( *t, p );
+                        if ( in_arena() ) {
+                            t = winnow_task_pool();
+                            if ( t )
+                                continue;
+                        }
+                        else {
+                            // Mark arena as full to unlock arena priority level adjustment 
+                            // by arena::is_out_of_work(), and ensure worker's presence.
+                            my_arena->advertise_new_work<false>();
+                        }
+                        goto stealing_ground;
+                    }
+                }
+#endif /* __TBB_TASK_PRIORITY */
                 task* t_next = NULL;
-                innermost_running_task = t;
+                my_innermost_running_task = t;
+                t->prefix().owner = this;
                 t->prefix().state = task::executing;
 #if __TBB_TASK_GROUP_CONTEXT
                 if ( !t->prefix().context->my_cancellation_requested )
 #endif
                 {
-                    GATHER_STATISTIC( ++execute_count );
-#if __TBB_TASK_GROUP_CONTEXT
-                    if( SchedulerTraits::itt_possible )
-                        ITT_STACK(callee_enter, t->prefix().context->itt_caller);
-#endif
+                    GATHER_STATISTIC( ++my_counters.tasks_executed );
+                    GATHER_STATISTIC( my_counters.avg_arena_concurrency += my_arena->my_num_threads_active );
+                    GATHER_STATISTIC( my_counters.avg_assigned_workers += my_arena->my_num_workers_allotted );
+#if __TBB_TASK_PRIORITY
+                    GATHER_STATISTIC( my_counters.avg_arena_prio += p );
+                    GATHER_STATISTIC( my_counters.avg_market_prio += my_market->my_global_top_priority );
+#endif /* __TBB_TASK_PRIORITY */
+                    ITT_STACK(SchedulerTraits::itt_possible, callee_enter, t->prefix().context->itt_caller);
                     t_next = t->execute();
-#if __TBB_TASK_GROUP_CONTEXT
-                    if( SchedulerTraits::itt_possible )
-                        ITT_STACK(callee_leave, t->prefix().context->itt_caller);
-#endif
+                    ITT_STACK(SchedulerTraits::itt_possible, callee_leave, t->prefix().context->itt_caller);
                     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;
-#if STATISTICS
+#if TBB_USE_ASSERT
                         affinity_id next_affinity=t_next->prefix().affinity;
                         if (next_affinity != 0 && next_affinity != my_affinity_id)
-                            GATHER_STATISTIC( ++proxy_bypass_count );
+                            GATHER_STATISTIC( ++my_counters.affinity_ignored );
 #endif
                     }
                 }
-                __TBB_ASSERT(assert_okay(),NULL);
+                assert_task_pool_valid();
                 switch( task::state_type(t->prefix().state) ) {
                     case task::executing: {
                         task* s = t->parent();
-                        __TBB_ASSERT( innermost_running_task==t, NULL );
+                        __TBB_ASSERT( my_innermost_running_task==t, NULL );
                         __TBB_ASSERT( t->prefix().ref_count==0, "Task still has children after it has been executed" );
                         t->~task();
                         if( s )
                             tally_completion_of_predecessor(*s, t_next);
                         free_task<no_hint>( *t );
-                        __TBB_ASSERT(assert_okay(),NULL);
+                        assert_task_pool_valid();
                         break;
                     }
 
@@ -359,7 +459,7 @@ exception_was_caught:
                         t->prefix().extra_state &= ~es_task_is_stolen;
                         // for safe continuation, need atomically decrement ref_count;
                         tally_completion_of_predecessor(*t, t_next);
-                        __TBB_ASSERT(assert_okay(),NULL);
+                        assert_task_pool_valid();
                         break;
 
                     case task::reexecute: // set by recycle_to_reexecute()
@@ -368,7 +468,7 @@ exception_was_caught:
                         t->prefix().state = task::allocated;
                         t->prefix().extra_state &= ~es_task_is_stolen;
                         local_spawn( *t, t->prefix().next );
-                        __TBB_ASSERT(assert_okay(),NULL);
+                        assert_task_pool_valid();
                         break;
                     case task::allocated:
                         t->prefix().extra_state &= ~es_task_is_stolen;
@@ -384,55 +484,86 @@ exception_was_caught:
                         break;
 #endif /* TBB_USE_ASSERT */
                 }
-
-                if( t_next ) {
-                    // The store here has a subtle secondary effect - it fetches *t_next into cache.
-                    t_next->prefix().owner = this;
-                }
+                GATHER_STATISTIC( t_next ? ++my_counters.spawns_bypassed : 0 );
                 t = t_next;
             } // end of scheduler bypass loop
-            __TBB_ASSERT(assert_okay(),NULL);
 
+            assert_task_pool_valid();
             if ( parent.prefix().ref_count == quit_point )
                 break;
-            t = get_task();
+            if ( in_arena() )
+                t = get_task();
+            else
+                __TBB_ASSERT( my_arena_slot->head == 0 && my_arena_slot->tail == 0, NULL );
             __TBB_ASSERT(!t || !is_proxy(*t),"unexpected proxy");
-#if TBB_USE_ASSERT
-            __TBB_ASSERT(assert_okay(),NULL);
-            if(t) {
-                AssertOkay(*t);
-                __TBB_ASSERT( t->prefix().owner==this, "thread got task that it does not own" );
+            assert_task_pool_valid();
+        } while( t ); // end of local task pool retrieval loop
+
+#if __TBB_TASK_PRIORITY
+stealing_ground:
+        task* &dispatching_task = my_dispatching_task;
+        if ( worker_outermost_level() && my_arena->my_skipped_fifo_priority ) {
+            // This thread can dequeue FIFO tasks, and some priority levels of 
+            // FIFO tasks have been bypassed (to prevent deadlock caused by 
+            // dynamic priority changes in nested task group hierarchy).
+            intptr_t skipped_priority = my_arena->my_skipped_fifo_priority;
+            if ( my_arena->my_skipped_fifo_priority.compare_and_swap(0, skipped_priority) == skipped_priority &&
+                 skipped_priority > my_arena->my_top_priority )
+            {
+                my_market->update_arena_priority( *my_arena, skipped_priority );
             }
-#endif /* TBB_USE_ASSERT */
-        } while( t ); // end of local task array processing loop
-
+        }
+#else /* !__TBB_TASK_PRIORITY */
+        task* &dispatching_task = old_innermost_running_task;
+#endif /* __TBB_TASK_PRIORITY */
         if ( quit_point == all_local_work_done ) {
-            __TBB_ASSERT( my_arena_slot == &dummy_slot && my_arena_slot->head == 0 && my_arena_slot->tail == 0, NULL );
-            innermost_running_task = old_innermost_running_task;
+            __TBB_ASSERT( my_arena_slot == &my_dummy_slot
+                          && my_arena_slot->head == 0 && my_arena_slot->tail == 0, NULL );
+            my_innermost_running_task = dispatching_task;
+#if __TBB_TASK_PRIORITY
+            my_dispatching_task = old_dispatching_task;
+            my_ref_top_priority = old_ref_top_priority;
+            my_ref_reload_epoch = old_ref_reload_epoch;
+#endif /* __TBB_TASK_PRIORITY */
             return;
         }
-#if __TBB_ARENA_PER_MASTER
-        __TBB_ASSERT( my_arena->my_max_num_workers > 0 || parent.prefix().ref_count == 1, "deadlock detected" );
-#else /* !__TBB_ARENA_PER_MASTER */
-        __TBB_ASSERT( my_arena->prefix().number_of_workers>0||parent.prefix().ref_count==1, "deadlock detected" );
-#endif /* !__TBB_ARENA_PER_MASTER */
-        // old_innermost_running_task is NULL *iff* a worker thread is in its "inborn" dispath loop
-        // (i.e. its execution stack is empty), and it should return from there if no work is available.
-        t = receive_or_steal_task( parent.prefix().ref_count, !old_innermost_running_task );
+        __TBB_ASSERT( my_arena->my_max_num_workers > 0 || my_market->my_ref_count > 1
+                      || parent.prefix().ref_count == 1, "deadlock detected" );
+        // Dispatching task pointer is NULL *iff* this is a worker thread in its outermost
+        // dispatch loop (i.e. its execution stack is empty). In this case it should exit it
+        // either when there is no more work in the current arena, or when revoked by the market.
+        t = receive_or_steal_task( parent.prefix().ref_count, !dispatching_task );
         if (!t) {
-            if( parent.prefix().ref_count==1 ) goto done;
-            __TBB_ASSERT( is_worker() && !old_innermost_running_task, "a thread exits dispatch loop prematurely" );
-            innermost_running_task = NULL;
-            return;
+            my_innermost_running_task = dispatching_task;
+#if __TBB_TASK_PRIORITY
+            my_dispatching_task = old_dispatching_task;
+            my_ref_top_priority = old_ref_top_priority;
+            my_ref_reload_epoch = old_ref_reload_epoch;
+#endif /* __TBB_TASK_PRIORITY */
+            if ( !ConcurrentWaitsEnabled(parent) ) {
+                if ( parent.prefix().ref_count != parents_work_done ) {
+                    // This is a worker that was revoked by the market.
+                    __TBB_ASSERT( is_worker() && !dispatching_task,
+                                  "Worker thread exits nested dispatch loop prematurely" );
+                    return;
+                }
+                parent.prefix().ref_count = 0;
+            }
+#if TBB_USE_ASSERT
+            parent.prefix().extra_state &= ~es_ref_count_active;
+#endif /* TBB_USE_ASSERT */
+            goto done;
         }
         __TBB_ASSERT(t,NULL);
         __TBB_ASSERT(!is_proxy(*t),"unexpected proxy");
-        t->prefix().owner = this;
-    } // end of stealing loop
+    } // end of infinite stealing loop
+    __TBB_ASSERT( false, "Must never get here" );
 #if __TBB_TASK_GROUP_CONTEXT && TBB_USE_EXCEPTIONS
-    } TbbCatchAll( t->prefix().context );
-
-    if( task::state_type(t->prefix().state) == task::recycle ) { // state set by recycle_as_safe_continuation()
+    } // end of try-block
+    TbbCatchAll( t->prefix().context );
+    // Complete post-processing ...
+    if( task::state_type(t->prefix().state) == task::recycle ) {
+        // ... for tasks recycled with recycle_as_safe_continuation
         t->prefix().state = task::allocated;
         // for safe continuation, need to atomically decrement ref_count;
         if( SchedulerTraits::itt_possible )
@@ -444,37 +575,31 @@ exception_was_caught:
             t = NULL;
         }
     }
-    goto exception_was_caught;
+    } // end of infinite EH loop
 #endif /* __TBB_TASK_GROUP_CONTEXT && TBB_USE_EXCEPTIONS */
+    __TBB_ASSERT( false, "Must never get here too" );
 done:
-    if ( !ConcurrentWaitsEnabled(parent) )
-        parent.prefix().ref_count = 0;
-#if TBB_USE_ASSERT
-    parent.prefix().extra_state &= ~es_ref_count_active;
-#endif /* TBB_USE_ASSERT */
-    innermost_running_task = old_innermost_running_task;
 #if __TBB_TASK_GROUP_CONTEXT
-    __TBB_ASSERT(parent.prefix().context && dummy_task->prefix().context, NULL);
+    __TBB_ASSERT(parent.prefix().context && default_context(), NULL);
     task_group_context* parent_ctx = parent.prefix().context;
     if ( parent_ctx->my_cancellation_requested ) {
         task_group_context::exception_container_type *pe = parent_ctx->my_exception;
-        if ( innermost_running_task == dummy_task && parent_ctx == dummy_task->prefix().context ) {
+        if ( master_outermost_level() && parent_ctx == default_context() ) {
             // We are in the outermost task dispatch loop of a master thread, and 
             // the whole task tree has been collapsed. So we may clear cancellation data.
             parent_ctx->my_cancellation_requested = 0;
-            __TBB_ASSERT(dummy_task->prefix().context == parent_ctx || !CancellationInfoPresent(*dummy_task), 
-                         "Unexpected exception or cancellation data in the dummy task");
-            // If possible, add assertion that master's dummy task context does not have children
+            // TODO: Add assertion that master's dummy task context does not have children
+            parent_ctx->my_state &= ~(uintptr_t)task_group_context::may_have_children;
         }
         if ( pe )
             pe->throw_self();
     }
-    __TBB_ASSERT(!is_worker() || !CancellationInfoPresent(*dummy_task), 
-                 "Worker's dummy task context modified");
-    __TBB_ASSERT(innermost_running_task != dummy_task || !CancellationInfoPresent(*dummy_task), 
-                 "Unexpected exception or cancellation data in the master's dummy task");
+    __TBB_ASSERT(!is_worker() || !CancellationInfoPresent(*my_dummy_task), 
+        "Worker's dummy task context modified");
+    __TBB_ASSERT(!master_outermost_level() || !CancellationInfoPresent(*my_dummy_task), 
+        "Unexpected exception or cancellation data in the master's dummy task");
 #endif /* __TBB_TASK_GROUP_CONTEXT */
-    __TBB_ASSERT( assert_okay(), NULL );
+    assert_task_pool_valid();
 }
 
 } // namespace internal
diff --git a/src/tbb/dynamic_link.cpp b/src/tbb/dynamic_link.cpp
index abefa62..7ea9197 100644
--- a/src/tbb/dynamic_link.cpp
+++ b/src/tbb/dynamic_link.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -28,27 +28,124 @@
 
 #include "dynamic_link.h"
 
+/*
+    This file is used by both TBB and OpenMP RTL. Do not use __TBB_ASSERT() macro
+    and runtime_warning() function because they are not available in OpenMP. Use
+    LIBRARY_ASSERT and DYNAMIC_LINK_WARNING instead.
+*/
+
+
 #ifndef LIBRARY_ASSERT
-#include "tbb/tbb_stddef.h"
-#define LIBRARY_ASSERT(x,y) __TBB_ASSERT(x,y)
-#endif /* LIBRARY_ASSERT */
+    #include "tbb/tbb_stddef.h"
+    #define LIBRARY_ASSERT(x,y) __TBB_ASSERT(x,y)
+#endif /* !LIBRARY_ASSERT */
 
+#include <cstdarg>          // va_list etc.
 #if _WIN32||_WIN64
     #include <malloc.h>     /* alloca */
 #else
     #include <dlfcn.h>
-#if __FreeBSD__
+#if __FreeBSD__ || __NetBSD__
     #include <stdlib.h>     /* alloca */
 #else
     #include <alloca.h>
 #endif
 #endif
 
+#ifdef __TBB_BUILD
+#include "tbb/atomic.h"
+#endif /* __TBB_BUILD */
+
 OPEN_INTERNAL_NAMESPACE
 
+#if !defined(DYNAMIC_LINK_WARNING) && (!__TBB_WEAK_SYMBOLS || __TBB_TASK_CPP_DIRECTLY_INCLUDED)
+    // Report runtime errors and continue.
+    #define DYNAMIC_LINK_WARNING dynamic_link_warning
+    static void dynamic_link_warning( dynamic_link_error_t code, ... ) {
+        (void) code;
+    } // library_warning
+#endif /* DYNAMIC_LINK_WARNING */
+
+#if _WIN32 || _WIN64
+/*
+    There is a security issue on Windows: LoadLibrary() may load and execute malicious code.
+    See http://www.microsoft.com/technet/security/advisory/2269637.mspx for details.
+    To avoid the issue, we have to pass full path (not just library name) to LoadLibrary. This
+    function constructs full path to the specified library (it is assumed the library located
+    side-by-side with the tbb.dll.
+
+    The function constructs absolute path for given relative path. Important: Base directory is not
+    current one, it is the directory tbb.dll loaded from.
+
+    Example:
+        Let us assume "tbb.dll" is located in "c:\program files\common\intel\" directory, e. g.
+        absolute path of tbb library is "c:\program files\common\intel\tbb.dll". Absolute path for
+        "tbbmalloc.dll" would be "c:\program files\common\intel\tbbmalloc.dll". Absolute path for
+        "malloc\tbbmalloc.dll" would be "c:\program files\common\intel\malloc\tbbmalloc.dll".
+
+    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.
+*/
+static size_t abs_path( char const * name, char * path, size_t len ) {
+    // Get handle of our DLL first.
+    HMODULE handle;
+    BOOL brc =
+        GetModuleHandleEx(
+            GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
+            (LPCSTR)( & abs_path ),
+            & handle
+        );
+    if ( ! brc ) {    // Error occurred.
+        int err = GetLastError();
+        DYNAMIC_LINK_WARNING( dl_sys_fail, "GetModuleHandleEx", err );
+        return 0;
+    } // if
+
+    // Now get path to our DLL.
+    DWORD drc = GetModuleFileName( handle, path, static_cast< DWORD >( len ) );
+    if ( drc == 0 ) {    // Error occured.
+        int err = GetLastError();
+        DYNAMIC_LINK_WARNING( dl_sys_fail, "GetModuleFileName", err );
+        return drc;
+    } // if
+    if ( drc >= len ) {  // Buffer too short.
+        DYNAMIC_LINK_WARNING( dl_buff_too_small );
+        return drc;
+    } // if
+
+    // Find the position of the last backslash.
+    char * backslash = path + drc;            // backslash points behind the path.
+    LIBRARY_ASSERT( * backslash == 0, NULL );
+    while ( backslash > path && * backslash != '\\' ) {
+        -- backslash;
+    } // while
+    if ( backslash <= path ) {    // Backslash not found.
+        return 0;                 // Unbelievable.
+    } // if
+
+    // Now append name to construct the full path.
+    LIBRARY_ASSERT( * backslash == '\\', NULL );
+    size_t rc = ( backslash + 1 - path ) + strlen( name );
+    if ( rc >= len ) {
+        DYNAMIC_LINK_WARNING( dl_buff_too_small );
+        return rc + 1;
+    } // if
+    strcpy( backslash + 1, name );
+    LIBRARY_ASSERT( rc == strlen( path ), NULL );
+    return rc;
+} // abs_path
+
+#endif /* WIN */
+
 #if __TBB_WEAK_SYMBOLS
 
-bool dynamic_link( void*, const dynamic_link_descriptor descriptors[], size_t n, size_t required )
+bool dynamic_link( dynamic_link_handle, const dynamic_link_descriptor descriptors[], size_t n, size_t required )
 {
     if ( required == ~(size_t)0 )
         required = n;
@@ -67,21 +164,36 @@ bool dynamic_link( void*, const dynamic_link_descriptor descriptors[], size_t n,
 
 #else /* !__TBB_WEAK_SYMBOLS */
 
-bool dynamic_link( void* module, const dynamic_link_descriptor descriptors[], size_t n, size_t required )
+bool dynamic_link( dynamic_link_handle module, const dynamic_link_descriptor descriptors[], size_t n, size_t required )
 {
+    LIBRARY_ASSERT( module != NULL, "Module handle is NULL" );
+    if ( module == NULL ) {
+        return false;
+    } // if
     pointer_to_handler *h = (pointer_to_handler*)alloca(n * sizeof(pointer_to_handler));
     if ( required == ~(size_t)0 )
         required = n;
     LIBRARY_ASSERT( required<=n, "Number of required entry points exceeds their total number" );
     size_t k = 0;
     for ( ; k < n; ++k ) {
+        dynamic_link_descriptor const & desc = descriptors[k];
 #if _WIN32||_WIN64
-        h[k] = pointer_to_handler(GetProcAddress( (HMODULE)module, descriptors[k].name ));
-#else
+        FARPROC addr = GetProcAddress( module, desc.name );
+        if ( addr == NULL ) {
+            int err = GetLastError();
+            DYNAMIC_LINK_WARNING( dl_sym_not_found, desc.name, err );
+        } // if
+        h[k] = pointer_to_handler( addr );
+#else /* !WIN */
+        void * addr = dlsym( module, desc.name );
+        if ( addr == NULL ) {
+            char const * err = dlerror();
+            DYNAMIC_LINK_WARNING( dl_sym_not_found, desc.name, err );
+        } // if
         // Lvalue casting is used; this way icc -strict-ansi does not warn about nonstandard pointer conversion
-        (void *&)h[k] = dlsym( module, descriptors[k].name );
-#endif /* _WIN32||_WIN64 */
-        if ( !h[k] && k < required )
+        (void *&)h[k] = addr;
+#endif /* !WIN */
+      if ( !h[k] && k < required )
             return false;
     }
     LIBRARY_ASSERT( k == n, "if required entries are initialized, all entries are expected to be walked");
@@ -94,45 +206,173 @@ bool dynamic_link( void* module, const dynamic_link_descriptor descriptors[], si
 
 #endif /* !__TBB_WEAK_SYMBOLS */
 
-bool dynamic_link( const char* library, const dynamic_link_descriptor descriptors[], size_t n, size_t required, dynamic_link_handle* handle )
-{
+void dynamic_unlink( dynamic_link_handle handle ) {
+    if ( handle ) {
+#if __TBB_DYNAMIC_LOAD_ENABLED
 #if _WIN32||_WIN64
-    // Interpret non-NULL handle parameter as request to really link against another library.
-    if ( !handle && dynamic_link( GetModuleHandle(NULL), descriptors, n, required ) )
-        // Target library was statically linked into this executable
-        return true;
-    // Prevent Windows from displaying silly message boxes if it fails to load library
-    // (e.g. because of MS runtime problems - one of those crazy manifest related ones)
-#if _XBOX
-    dynamic_link_handle module = LoadLibrary (library);
+        FreeLibrary( handle );
 #else
-    UINT prev_mode = SetErrorMode (SEM_FAILCRITICALERRORS);
-    dynamic_link_handle module = LoadLibrary (library);
-    SetErrorMode (prev_mode);
-#endif /* _XBOX */
+        dlclose( handle );
+#endif
+        (void)handle;
+#endif /* !__TBB_DYNAMIC_LOAD_ENABLED */
+    }
+}
+
+#if __TBB_BUILD
+
+// Class handle_storage is used by dynamic_link routine to store handles of 
+// all loaded or pinned dynamic libraries. When TBB is shut down, it calls 
+// dynamic_unlink_all() that unloads modules referenced by handle_storage. 
+// This functionality is only used by TBB. It should not be used by other 
+// libraries reusing this source file to avoid dependency on tbb::atomic<>.
+
+#define MAX_LOADED_MODULES 8 // The number of maximum possible modules which can be loaded
+
+class handle_storage {
+    tbb::atomic<size_t> my_size;
+    dynamic_link_handle my_handles[MAX_LOADED_MODULES];
+public:
+
+    handle_storage() {
+        my_size = 0;
+    }
+
+    void add_handle(dynamic_link_handle &handle) {
+        const size_t ind = my_size++;
+        LIBRARY_ASSERT( ind < MAX_LOADED_MODULES, "Too many modules are loaded" );
+        my_handles[ind] = handle;
+        
+    }
+
+    void free_handles() {
+        const size_t size = my_size.fetch_and_store( 0 );
+        for (size_t i=0; i<size; ++i)
+            dynamic_unlink( my_handles[i] );
+    }
+
+} handles;
+#endif /* __TBB_BUILD */
+
+bool dynamic_link( const char* library, const dynamic_link_descriptor descriptors[], size_t n, size_t required, dynamic_link_handle *handle ) {
+    // Get library handle in case it is already loaded into the current process
+#if _WIN32||_WIN64
+    dynamic_link_handle library_handle = GetModuleHandle( library );
 #else
-    dynamic_link_handle module = dlopen( library, RTLD_LAZY ); 
+    dynamic_link_handle library_handle = dlopen( NULL, RTLD_LAZY );
 #endif /* _WIN32||_WIN64 */
-    if( module ) {
-        if( !dynamic_link( module, descriptors, n, required ) ) {
-            // Return true if the library is there and it contains all the expected entry points.
-            dynamic_unlink(module);
-            module = NULL;
+
+    // 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
+        return true;
+#else
+        // The library have 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
+        char library_full_name[ MAX_PATH+1 ];
+        // Get library's name from earlier found handle
+        if ( GetModuleFileName( library_handle, library_full_name, MAX_PATH+1 ) ) {
+            // Pin the library
+            library_handle = LoadLibrary( library_full_name );
+            if ( library_handle == NULL ) {
+                int err = GetLastError();
+                DYNAMIC_LINK_WARNING( dl_lib_not_found, library_full_name, err );
+            } // if
+        } // if
+#else /* !WIN */
+        Dl_info info;
+        // Get library's name from earlier found symbol
+        if ( dladdr( (void*)*descriptors[0].handler, &info ) ) {
+            // Pin the library
+            library_handle = dlopen( info.dli_fname, RTLD_LAZY );
+            if ( library_handle == NULL ) {
+                char const * err = dlerror();
+                DYNAMIC_LINK_WARNING( dl_lib_not_found, info.dli_fname, err );
+            } // if
+        } // if
+#endif /* !WIN */
+        else {
+            // The library have been unloaded by another thread
+            library_handle = 0;
+        }
+        if ( library_handle ) {
+            // If original library was unloaded before we pinned it
+            // and then another module loaded in its place, the earlier
+            // found symbols would become invalid. So revalidate them.
+            if ( !dynamic_link( library_handle, descriptors, n, required ) ) {
+                // Wrong library.
+                dynamic_unlink(library_handle);
+                library_handle = 0;
+            }
         }
+        if ( !library_handle ) {
+            // Failed to pin the library, so clear the descriptors too.
+            for( size_t i=0; i<n; ++i )
+                *descriptors[i].handler = 0;
+        }
+#endif /* __TBB_DYNAMIC_LOAD_ENABLED */
+    } else {
+        library_handle = 0;
     }
-    if( handle ) 
-        *handle = module;
-    return module!=NULL;
-}
 
-void dynamic_unlink( dynamic_link_handle handle ) {
-    if( handle ) {
+#if __TBB_DYNAMIC_LOAD_ENABLED || __TBB_TASK_CPP_DIRECTLY_INCLUDED
+    if ( !library_handle ) {
 #if _WIN32||_WIN64
-        FreeLibrary( handle );
+        // Prevent Windows from displaying silly message boxes if it fails to load library
+        // (e.g. because of MS runtime problems - one of those crazy manifest related ones)
+#if _XBOX
+        library_handle = LoadLibrary (library);
 #else
-        dlclose( handle );
-#endif /* _WIN32||_WIN64 */    
+        library_handle = NULL;
+        // Construct absolute path to the library to avoid security issue.
+        size_t const len = MAX_PATH + 1;
+        char path[ len ];
+        size_t rc = abs_path( library, path, len );
+        if ( 0 < rc && rc < len ) {
+            UINT prev_mode = SetErrorMode (SEM_FAILCRITICALERRORS);
+            library_handle = LoadLibrary (path);
+            SetErrorMode (prev_mode);
+            if ( library_handle == NULL ) {
+                int err = GetLastError();
+                DYNAMIC_LINK_WARNING( dl_lib_not_found, path, err );
+            } // if
+        } // 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 );
+        } // if
+#endif /* !WIN */
+        if( library_handle ) {
+            if( !dynamic_link( library_handle, descriptors, n, required ) ) {
+                // The loaded library does not contain all the expected entry points
+                dynamic_unlink( library_handle );
+                library_handle = NULL;
+            }
+        }
     }
+#endif /* __TBB_DYNAMIC_LOAD_ENABLED */
+
+    if ( library_handle ) {
+        if ( handle )
+            *handle = library_handle;
+#if __TBB_BUILD
+        else
+            handles.add_handle( library_handle );
+#endif /* __TBB_BUILD */
+        return true;
+    }
+    return false;
+}
+
+#if __TBB_BUILD
+void dynamic_unlink_all() {
+    handles.free_handles();
 }
+#endif /* __TBB_BUILD */
 
 CLOSE_INTERNAL_NAMESPACE
diff --git a/src/tbb/dynamic_link.h b/src/tbb/dynamic_link.h
index 794f508..d6f5006 100644
--- a/src/tbb/dynamic_link.h
+++ b/src/tbb/dynamic_link.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -29,12 +29,15 @@
 #ifndef __TBB_dynamic_link
 #define __TBB_dynamic_link
 
-// Support for dynamically linking to a shared library.
-// By default, the symbols defined here go in namespace tbb::internal.
-// The symbols can be put in another namespace by defining the preprocessor
-// symbols OPEN_INTERNAL_NAMESPACE and CLOSE_INTERNAL_NAMESPACE to open and
-// close the other namespace.  See default definition below for an example.
+// Support for dynamic loading entry points from other shared libraries.
 
+#ifndef LIBRARY_ASSERT
+    #include "tbb/tbb_config.h"
+#endif /* !LIBRARY_ASSERT */
+
+/** By default, symbols declared and defined here go into namespace tbb::internal.
+    To put them in other namespace, define macros OPEN_INTERNAL_NAMESPACE
+    and CLOSE_INTERNAL_NAMESPACE to override the following default definitions. **/
 #ifndef OPEN_INTERNAL_NAMESPACE
 #define OPEN_INTERNAL_NAMESPACE namespace tbb { namespace internal {
 #define CLOSE_INTERNAL_NAMESPACE }}
@@ -42,13 +45,7 @@
 
 #include <stddef.h>
 #if _WIN32||_WIN64
-#if _XBOX
-    #define NONET
-    #define NOD3D
-    #include <xtl.h>
-#else
-#include <windows.h>
-#endif
+#include "tbb/machine/windows_api.h"
 #endif /* _WIN32||_WIN64 */
 
 OPEN_INTERNAL_NAMESPACE
@@ -56,7 +53,7 @@ OPEN_INTERNAL_NAMESPACE
 //! Type definition for a pointer to a void somefunc(void)
 typedef void (*pointer_to_handler)();
 
-// Double cast through the void* from func_ptr in DLD macro is necessary to 
+// Double cast through the void* from func_ptr in DLD macro is necessary to
 // prevent warnings from some compilers (g++ 4.1)
 #if __TBB_WEAK_SYMBOLS
 
@@ -84,25 +81,43 @@ struct dynamic_link_descriptor {
 
 #if _WIN32||_WIN64
 typedef HMODULE dynamic_link_handle;
-#else 
+#else
 typedef void* dynamic_link_handle;
 #endif /* _WIN32||_WIN64 */
 
 //! Fill in dynamically linked handlers.
 /** 'n' is the length of the array descriptors[].
-    'required' is the number of the initial entries in the array descriptors[] 
-    that have to be found in order for the call to succeed. If the library and 
-    all the required handlers are found, then the corresponding handler pointers 
-    are set, and the return value is true.  Otherwise the original array of 
+    'required' is the number of the initial entries in the array descriptors[]
+    that have to be found in order for the call to succeed. If the library and
+    all the required handlers are found, then the corresponding handler pointers
+    are set, and the return value is true.  Otherwise the original array of
     descriptors is left untouched and the return value is false. **/
-bool dynamic_link( const char* libraryname, 
-                   const dynamic_link_descriptor descriptors[], 
-                   size_t n, 
+bool dynamic_link( const char* libraryname,
+                   const dynamic_link_descriptor descriptors[],
+                   size_t n,
                    size_t required = ~(size_t)0,
                    dynamic_link_handle* handle = 0 );
 
+bool dynamic_link( dynamic_link_handle module,
+                   const dynamic_link_descriptor descriptors[],
+                   size_t n,
+                   size_t required  = ~(size_t)0 );
+
 void dynamic_unlink( dynamic_link_handle handle );
 
+#if __TBB_BUILD
+void dynamic_unlink_all();
+#endif /* __TBB_BUILD */
+
+enum dynamic_link_error_t {
+    dl_success = 0,
+    dl_lib_not_found,     // char const * lib, dlerr_t err
+    dl_sym_not_found,     // char const * sym, dlerr_t err
+                          // Note: dlerr_t depends on OS: it is char const * on Linux and Mac, int on Windows.
+    dl_sys_fail,          // char const * func, int err
+    dl_buff_too_small     // none
+}; // dynamic_link_error_t
+
 CLOSE_INTERNAL_NAMESPACE
 
 #endif /* __TBB_dynamic_link */
diff --git a/src/tbb/governor.cpp b/src/tbb/governor.cpp
index 74ba859..3a6b0c0 100644
--- a/src/tbb/governor.cpp
+++ b/src/tbb/governor.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -29,13 +29,13 @@
 #include "governor.h"
 #include "tbb_main.h"
 #include "scheduler.h"
-#if __TBB_ARENA_PER_MASTER
 #include "market.h"
-#endif /* __TBB_ARENA_PER_MASTER */
 #include "arena.h"
 
 #include "tbb/task_scheduler_init.h"
 
+#include "dynamic_link.h"
+
 namespace tbb {
 namespace internal {
 
@@ -43,6 +43,36 @@ namespace internal {
 // governor
 //------------------------------------------------------------------------
 
+#if __TBB_SURVIVE_THREAD_SWITCH
+
+#if _WIN32
+#define CILKLIB_NAME "cilkrts20.dll"
+#else
+#define CILKLIB_NAME "libcilkrts.so"
+#endif
+
+//! Handler for memory allocation
+static __cilk_tbb_retcode (*watch_stack_handler)(struct __cilk_tbb_unwatch_thunk* u,
+                                                 struct __cilk_tbb_stack_op_thunk o);
+
+#if __TBB_WEAK_SYMBOLS
+    #pragma weak __cilkrts_watch_stack
+#endif
+
+//! Table describing how to link the handlers.
+static const dynamic_link_descriptor CilkLinkTable[] = {
+    DLD(__cilkrts_watch_stack, watch_stack_handler)
+};
+
+static atomic<do_once_state> cilkrts_load_state;
+
+bool initialize_cilk_interop() {
+    // Pinning can fail. This is a normal situation, and means that the current
+    // thread does not use Cilk and consequently does not need interop.
+    return dynamic_link( CILKLIB_NAME, CilkLinkTable, 1 );
+}
+#endif /* __TBB_SURVIVE_THREAD_SWITCH */
+
 namespace rml {
     tbb_server* make_private_server( tbb_client& client );
 }
@@ -69,6 +99,7 @@ void governor::release_resources () {
     int status = theTLS.destroy();
     if( status )
         handle_perror(status, "TBB failed to destroy TLS storage");
+    dynamic_unlink_all();
 }
 
 rml::tbb_server* governor::create_rml_server ( rml::tbb_client& client ) {
@@ -88,64 +119,37 @@ rml::tbb_server* governor::create_rml_server ( rml::tbb_client& client ) {
     return server;
 }
 
-#if !__TBB_ARENA_PER_MASTER
-
-arena* governor::obtain_arena( int number_of_threads, stack_size_type thread_stack_size ) {
-    mutex::scoped_lock lock( theArenaMutex );
-    arena* arena = theArena;
-    if( arena ) {
-        arena->prefix().number_of_masters += 1;
-    } else {
-        __TBB_ASSERT( number_of_threads > 0, NULL );
-        arena = arena::allocate_arena( 2*number_of_threads, number_of_threads-1,
-                                   thread_stack_size ? thread_stack_size : ThreadStackSize );
-        __TBB_ASSERT( arena->prefix().number_of_masters==1, NULL );
-        NumWorkers = arena->prefix().number_of_workers;
-
-        arena->prefix().server = create_rml_server( arena->prefix() );
-
-        // Publish the arena.  
-        // A memory release fence is not required here, because workers have not started yet,
-        // and concurrent masters inspect theArena while holding theArenaMutex.
-        __TBB_ASSERT( !theArena, NULL );
-        theArena = arena;
-    }
-    return arena;
-}
-
-void governor::finish_with_arena() {
-    mutex::scoped_lock lock( theArenaMutex );
-    arena* a = theArena;
-    __TBB_ASSERT( a, "theArena is missing" );
-    if( --(a->prefix().number_of_masters) )
-        a = NULL;
-    else {
-        theArena = NULL;
-        // Must do this while holding lock, otherwise terminate message might reach
-        // RML thread *after* initialize message reaches it for the next arena,
-        // which causes TLS to be set to new value before old one is erased!
-        a->close_arena();
-    }
-}
-#endif /* !__TBB_ARENA_PER_MASTER */
-
 void governor::sign_on(generic_scheduler* s) {
-    __TBB_ASSERT( !s->is_registered, NULL );  
-    s->is_registered = true;
-#if !__TBB_ARENA_PER_MASTER
-    __TBB_InitOnce::add_ref();
-#endif /* !__TBB_ARENA_PER_MASTER */
+    __TBB_ASSERT( !s->my_registered, NULL );  
+    s->my_registered = true;
     theTLS.set(s);
+#if __TBB_SURVIVE_THREAD_SWITCH
+    __cilk_tbb_stack_op_thunk o;
+    o.routine = &stack_op_handler;
+    o.data = s;
+    if( watch_stack_handler ) {
+        if( (*watch_stack_handler)(&s->my_cilk_unwatch_thunk, o) ) {
+            // Failed to register with Cilk, make sure we are clean
+            s->my_cilk_unwatch_thunk.routine = NULL;
+        }
+#if TBB_USE_ASSERT
+        else
+            s->my_cilk_state = generic_scheduler::cs_running;
+#endif /* TBB_USE_ASSERT */
+    }
+#endif /* __TBB_SURVIVE_THREAD_SWITCH */
 }
 
 void governor::sign_off(generic_scheduler* s) {
-    if( s->is_registered ) {
+    if( s->my_registered ) {
         __TBB_ASSERT( theTLS.get()==s || (!s->is_worker() && !theTLS.get()), "attempt to unregister a wrong scheduler instance" );
         theTLS.set(NULL);
-        s->is_registered = false;
-#if !__TBB_ARENA_PER_MASTER
-        __TBB_InitOnce::remove_ref();
-#endif /* !__TBB_ARENA_PER_MASTER */
+        s->my_registered = false;
+#if __TBB_SURVIVE_THREAD_SWITCH
+        __cilk_tbb_unwatch_thunk &ut = s->my_cilk_unwatch_thunk;
+        if ( ut.routine )
+           (*ut.routine)(ut.data);
+#endif /* __TBB_SURVIVE_THREAD_SWITCH */
     }
 }
 
@@ -154,32 +158,31 @@ generic_scheduler* governor::init_scheduler( unsigned num_threads, stack_size_ty
         DoOneTimeInitializations();
     generic_scheduler* s = theTLS.get();
     if( s ) {
-        s->ref_count += 1;
+        s->my_ref_count += 1;
         return s;
     }
+#if __TBB_SURVIVE_THREAD_SWITCH
+    atomic_do_once( &initialize_cilk_interop, cilkrts_load_state );
+#endif /* __TBB_SURVIVE_THREAD_SWITCH */
     if( (int)num_threads == task_scheduler_init::automatic )
         num_threads = default_num_threads();
-#if __TBB_ARENA_PER_MASTER
     s = generic_scheduler::create_master( 
             market::create_arena( num_threads - 1, stack_size ? stack_size : ThreadStackSize ) );
-#else /* !__TBB_ARENA_PER_MASTER */
-    s = generic_scheduler::create_master( *obtain_arena(num_threads, stack_size) );
-#endif /* !__TBB_ARENA_PER_MASTER */
     __TBB_ASSERT(s, "Somehow a local scheduler creation for a master thread failed");
-    s->is_auto_initialized = auto_init;
+    s->my_auto_initialized = auto_init;
     return s;
 }
 
 void governor::terminate_scheduler( generic_scheduler* s ) {
     __TBB_ASSERT( s == theTLS.get(), "Attempt to terminate non-local scheduler instance" );
-    if( !--(s->ref_count) )
+    if( !--(s->my_ref_count) )
         s->cleanup_master();
 }
 
 void governor::auto_terminate(void* arg){
     generic_scheduler* s = static_cast<generic_scheduler*>(arg);
-    if( s && s->is_auto_initialized ) {
-        if( !--(s->ref_count) ) {
+    if( s && s->my_auto_initialized ) {
+        if( !--(s->my_ref_count) ) {
             if ( !theTLS.get() && !s->local_task_pool_empty() ) {
                 // This thread's TLS slot is already cleared. But in order to execute
                 // remaining tasks cleanup_master() will need TLS correctly set.
@@ -201,8 +204,61 @@ void governor::print_version_info () {
         PrintExtraVersionInfo( "RML", "shared" );
         theRMLServerFactory.call_with_server_info( PrintRMLVersionInfo, (void*)"" );
     }
+#if __TBB_SURVIVE_THREAD_SWITCH
+    if( watch_stack_handler )
+        PrintExtraVersionInfo( "CILK", CILKLIB_NAME );
+#endif /* __TBB_SURVIVE_THREAD_SWITCH */
 }
 
+#if __TBB_SURVIVE_THREAD_SWITCH
+__cilk_tbb_retcode governor::stack_op_handler( __cilk_tbb_stack_op op, void* data ) {
+    __TBB_ASSERT(data,NULL);
+    generic_scheduler* s = static_cast<generic_scheduler*>(data);
+#if TBB_USE_ASSERT
+    void* current = theTLS.get();
+#if _WIN32||_WIN64
+    unsigned thread_id = GetCurrentThreadId();
+#else
+    unsigned thread_id = unsigned(pthread_self());
+#endif
+
+#endif /* TBB_USE_ASSERT */
+    switch( op ) {
+        default:
+            __TBB_ASSERT( 0, "invalid op" );
+        case CILK_TBB_STACK_ADOPT: {
+            __TBB_ASSERT( !current && s->my_cilk_state==generic_scheduler::cs_limbo || 
+                          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 );
+            s->my_cilk_state = generic_scheduler::cs_running;
+#endif /* TBB_USE_ASSERT */
+            theTLS.set(s);
+            break;
+        }
+        case CILK_TBB_STACK_ORPHAN: {
+            __TBB_ASSERT( current==s && s->my_cilk_state==generic_scheduler::cs_running, "invalid orphaning" ); 
+#if TBB_USE_ASSERT
+            s->my_cilk_state = generic_scheduler::cs_limbo;
+#endif /* TBB_USE_ASSERT */
+            theTLS.set(NULL);
+            break;
+        }
+        case CILK_TBB_STACK_RELEASE: {
+            __TBB_ASSERT( !current && s->my_cilk_state==generic_scheduler::cs_limbo || 
+                          current==s && s->my_cilk_state==generic_scheduler::cs_running, "invalid release" );
+#if TBB_USE_ASSERT
+            s->my_cilk_state = generic_scheduler::cs_freed;
+#endif /* TBB_USE_ASSERT */
+            s->my_cilk_unwatch_thunk.routine = NULL;
+            auto_terminate( s );
+        } 
+    }
+    return 0;
+}
+#endif /* __TBB_SURVIVE_THREAD_SWITCH */
+
 } // namespace internal
 
 //------------------------------------------------------------------------
@@ -217,20 +273,49 @@ void task_scheduler_init::initialize( int number_of_threads ) {
 }
 
 void task_scheduler_init::initialize( int number_of_threads, stack_size_type thread_stack_size ) {
+#if __TBB_TASK_GROUP_CONTEXT && TBB_USE_EXCEPTIONS
+    uintptr_t new_mode = thread_stack_size & propagation_mode_mask;
+    thread_stack_size &= ~(stack_size_type)propagation_mode_mask;
+#endif
     if( number_of_threads!=deferred ) {
         __TBB_ASSERT( !my_scheduler, "task_scheduler_init already initialized" );
         __TBB_ASSERT( number_of_threads==-1 || number_of_threads>=1,
                     "number_of_threads for task_scheduler_init must be -1 or positive" );
-        my_scheduler = governor::init_scheduler( number_of_threads, thread_stack_size );
+        internal::generic_scheduler *s = governor::init_scheduler( number_of_threads, thread_stack_size );
+#if __TBB_TASK_GROUP_CONTEXT && TBB_USE_EXCEPTIONS
+        if ( s->master_outermost_level() ) {
+            uintptr_t &vt = s->default_context()->my_version_and_traits;
+            uintptr_t prev_mode = vt & task_group_context::exact_exception ? propagation_mode_exact : 0;
+            vt = new_mode & propagation_mode_exact ? vt | task_group_context::exact_exception
+                    : new_mode & propagation_mode_captured ? vt & ~task_group_context::exact_exception : vt;
+            // Use least significant bit of the scheduler pointer to store previous mode.
+            // This is necessary when components compiled with different compilers and/or
+            // TBB versions initialize the 
+            my_scheduler = static_cast<scheduler*>((generic_scheduler*)((uintptr_t)s | prev_mode));
+        }
+        else
+#endif /* __TBB_TASK_GROUP_CONTEXT && TBB_USE_EXCEPTIONS */
+            my_scheduler = s;
     } else {
         __TBB_ASSERT( !thread_stack_size, "deferred initialization ignores stack size setting" );
     }
 }
 
 void task_scheduler_init::terminate() {
+#if __TBB_TASK_GROUP_CONTEXT && TBB_USE_EXCEPTIONS
+    uintptr_t prev_mode = (uintptr_t)my_scheduler & propagation_mode_exact;
+    my_scheduler = (scheduler*)((uintptr_t)my_scheduler & ~(uintptr_t)propagation_mode_exact);
+#endif /* __TBB_TASK_GROUP_CONTEXT && TBB_USE_EXCEPTIONS */
     generic_scheduler* s = static_cast<generic_scheduler*>(my_scheduler);
     my_scheduler = NULL;
     __TBB_ASSERT( s, "task_scheduler_init::terminate without corresponding task_scheduler_init::initialize()");
+#if __TBB_TASK_GROUP_CONTEXT && TBB_USE_EXCEPTIONS
+    if ( s->master_outermost_level() ) {
+        uintptr_t &vt = s->default_context()->my_version_and_traits;
+        vt = prev_mode & propagation_mode_exact ? vt | task_group_context::exact_exception
+                                        : vt & ~task_group_context::exact_exception;
+    }
+#endif /* __TBB_TASK_GROUP_CONTEXT && TBB_USE_EXCEPTIONS */
     governor::terminate_scheduler(s);
 }
 
diff --git a/src/tbb/governor.h b/src/tbb/governor.h
index 981c260..b3aa6e3 100644
--- a/src/tbb/governor.h
+++ b/src/tbb/governor.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -30,22 +30,19 @@
 #define _TBB_governor_H
 
 #include "tbb/task_scheduler_init.h"
-#if !__TBB_ARENA_PER_MASTER
-#include "tbb/mutex.h"
-#endif /* !__TBB_ARENA_PER_MASTER */
 #include "../rml/include/rml_tbb.h"
 
-#include "tbb_misc.h" // for DetectNumberOfWorkers and ThreadStackSize
+#include "tbb_misc.h" // for AvailableHwConcurrency and ThreadStackSize
 #include "tls.h"
 
+#if __TBB_SURVIVE_THREAD_SWITCH
+#include "cilk-tbb-interop.h"
+#endif /* __TBB_SURVIVE_THREAD_SWITCH */
+
 namespace tbb {
 namespace internal {
 
-#if __TBB_ARENA_PER_MASTER
 class market;
-#else /* !__TBB_ARENA_PER_MASTER */
-class arena;
-#endif /* !__TBB_ARENA_PER_MASTER */
 class generic_scheduler;
 class __TBB_InitOnce;
 
@@ -53,35 +50,16 @@ class __TBB_InitOnce;
 // Class governor
 //------------------------------------------------------------------------
 
-#if __TBB_ARENA_PER_MASTER
 //! The class handles access to the single instance of market, and to TLS to keep scheduler instances.
-#else /* !__TBB_ARENA_PER_MASTER */
-//! The class handles access to the single instance of arena, and to TLS to keep scheduler instances.
-#endif /* !__TBB_ARENA_PER_MASTER */
-/** It also supports automatic on-demand intialization of the TBB scheduler.
+/** It also supports automatic on-demand initialization of the TBB scheduler.
     The class contains only static data members and methods.*/
 class governor {
     friend class __TBB_InitOnce;
-#if __TBB_ARENA_PER_MASTER
     friend class market;
-#else /* !__TBB_ARENA_PER_MASTER */
-    friend void ITT_DoUnsafeOneTimeInitialization ();
-#endif /* __TBB_ARENA_PER_MASTER */
 
     //! TLS for scheduler instances associated with individual threads
     static basic_tls<generic_scheduler*> theTLS;
 
-#if !__TBB_ARENA_PER_MASTER
-    //! Currently active arena
-    static arena* theArena;
-
-    //! Mutex guarding creation/destruction of theArena
-    static mutex  theArenaMutex;
-
-    //! Caches the number of workers in the currently active arena
-    static unsigned NumWorkers;
-#endif /* !__TBB_ARENA_PER_MASTER */
-
     //! Caches the maximal level of paralellism supported by the hardware 
     static unsigned DefaultNumberOfThreads;
     
@@ -97,12 +75,6 @@ class governor {
 
     static rml::tbb_server* create_rml_server ( rml::tbb_client& );
 
-#if !__TBB_ARENA_PER_MASTER
-    //! Obtain the instance of arena to register a new master thread
-    /** If there is no active arena, create one. */
-    static arena* obtain_arena( int number_of_threads, stack_size_type thread_stack_size );
-#endif /* !__TBB_ARENA_PER_MASTER */
-
     //! The internal routine to undo automatic initialization.
     /** The signature is written with void* so that the routine
         can be the destructor argument to pthread_key_create. */
@@ -110,9 +82,9 @@ class governor {
 
 public:
     static unsigned default_num_threads () {
-        // No memory fence required, because at worst each invoking thread calls DetectNumberOfWorkers once.
+        // No memory fence required, because at worst each invoking thread calls AvailableHwConcurrency once.
         return DefaultNumberOfThreads ? DefaultNumberOfThreads : 
-                                        DefaultNumberOfThreads = DetectNumberOfWorkers();
+                                        DefaultNumberOfThreads = AvailableHwConcurrency();
     }
     //! Processes scheduler initialization request (possibly nested) in a master thread
     /** If necessary creates new instance of arena and/or local scheduler.
@@ -122,21 +94,9 @@ public:
     //! Processes scheduler termination request (possibly nested) in a master thread
     static void terminate_scheduler( generic_scheduler* s );
 
-#if __TBB_ARENA_PER_MASTER
     //! Returns number of worker threads in the currently active arena.
     inline static unsigned max_number_of_workers ();
 
-#else /* !__TBB_ARENA_PER_MASTER */
-    //! Dereference arena when a master thread stops using TBB.
-    /** If no more masters in the arena, terminate workers and destroy it. */
-    static void finish_with_arena();
-
-    static unsigned max_number_of_workers() {
-        __TBB_ASSERT( theArena, "thread did not activate a task_scheduler_init object?" );
-        return NumWorkers;
-    }
-#endif /* !__TBB_ARENA_PER_MASTER */
-
     //! Register TBB scheduler instance in thread local storage.
     static void sign_on(generic_scheduler* s);
 
@@ -147,13 +107,7 @@ public:
     static bool is_set ( generic_scheduler* s ) { return theTLS.get() == s; }
 
     //! Temporarily set TLS slot to the given scheduler
-    static void assume_scheduler( generic_scheduler* s ) { 
-#if !__TBB_ARENA_PER_MASTER
-        // should be called by a Master
-        __TBB_ASSERT( !s || !theTLS.get(), "should be called by master" );
-#endif
-        theTLS.set( s ); 
-    }
+    static void assume_scheduler( generic_scheduler* s ) { theTLS.set( s ); }
 
     //! Obtain the thread local instance of the TBB scheduler.
     /** If the scheduler has not been initialized yet, initialization is done automatically.
@@ -173,17 +127,19 @@ public:
     }
 
     static void print_version_info ();
+
+#if __TBB_SURVIVE_THREAD_SWITCH
+    static __cilk_tbb_retcode stack_op_handler( __cilk_tbb_stack_op op, void* );
+#endif /* __TBB_SURVIVE_THREAD_SWITCH */
 }; // class governor
 
 } // namespace internal
 } // namespace tbb
 
-#if __TBB_ARENA_PER_MASTER
 #include "scheduler.h"
 
 inline unsigned tbb::internal::governor::max_number_of_workers () {
     return local_scheduler()->number_of_workers_in_my_arena();
 }
-#endif /* __TBB_ARENA_PER_MASTER */
 
 #endif /* _TBB_governor_H */
diff --git a/src/tbb/ia32-masm/atomic_support.asm b/src/tbb/ia32-masm/atomic_support.asm
index 8c881dc..42af4a8 100644
--- a/src/tbb/ia32-masm/atomic_support.asm
+++ b/src/tbb/ia32-masm/atomic_support.asm
@@ -1,4 +1,4 @@
-; Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+; Copyright 2005-2011 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 be1552f..9fc42b3 100644
--- a/src/tbb/ia32-masm/lock_byte.asm
+++ b/src/tbb/ia32-masm/lock_byte.asm
@@ -1,4 +1,4 @@
-; Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+; Copyright 2005-2011 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 f7c6835..833b940 100644
--- a/src/tbb/ia64-gas/atomic_support.s
+++ b/src/tbb/ia64-gas/atomic_support.s
@@ -1,4 +1,4 @@
-// Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+// Copyright 2005-2011 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 d4233d2..77ca492 100644
--- a/src/tbb/ia64-gas/ia64_misc.s
+++ b/src/tbb/ia64-gas/ia64_misc.s
@@ -1,4 +1,4 @@
-// Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+// Copyright 2005-2011 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 932bd37..147b73f 100644
--- a/src/tbb/ia64-gas/lock_byte.s
+++ b/src/tbb/ia64-gas/lock_byte.s
@@ -1,4 +1,4 @@
-// Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+// Copyright 2005-2011 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 ed07b98..d79b762 100644
--- a/src/tbb/ia64-gas/log2.s
+++ b/src/tbb/ia64-gas/log2.s
@@ -1,4 +1,4 @@
-// Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+// Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 //
 // This file is part of Threading Building Blocks.
 //
diff --git a/src/tbb/ia64-gas/pause.s b/src/tbb/ia64-gas/pause.s
index 45c2bb7..292268a 100644
--- a/src/tbb/ia64-gas/pause.s
+++ b/src/tbb/ia64-gas/pause.s
@@ -1,4 +1,4 @@
-// Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+// Copyright 2005-2011 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 b72fe7a..ed128fc 100644
--- a/src/tbb/ibm_aix51/atomic_support.c
+++ b/src/tbb/ibm_aix51/atomic_support.c
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 7ac305c..5def5fe 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-2010 Intel Corporation.  All Rights Reserved.
+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 
diff --git a/src/tbb/intel64-masm/atomic_support.asm b/src/tbb/intel64-masm/atomic_support.asm
index 0431221..beb6843 100644
--- a/src/tbb/intel64-masm/atomic_support.asm
+++ b/src/tbb/intel64-masm/atomic_support.asm
@@ -1,4 +1,4 @@
-; Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+; Copyright 2005-2011 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
new file mode 100644
index 0000000..72c831c
--- /dev/null
+++ b/src/tbb/intel64-masm/intel64_misc.asm
@@ -0,0 +1,41 @@
+; 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.
+
+.code
+	ALIGN 8
+	PUBLIC __TBB_get_cpu_ctl_env
+__TBB_get_cpu_ctl_env:
+    stmxcsr [rcx]
+    fstcw   [rcx+4]
+	ret
+.code
+	ALIGN 8
+	PUBLIC __TBB_set_cpu_ctl_env
+__TBB_set_cpu_ctl_env:
+    ldmxcsr [rcx]
+    fldcw   [rcx+4]
+	ret
+end
diff --git a/src/tbb/intrusive_list.h b/src/tbb/intrusive_list.h
index ed1bf1d..4064069 100644
--- a/src/tbb/intrusive_list.h
+++ b/src/tbb/intrusive_list.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -31,8 +31,6 @@
 
 #include "tbb/tbb_stddef.h"
 
-#if __TBB_ARENA_PER_MASTER
-
 namespace tbb {
 namespace internal {
 
@@ -188,6 +186,7 @@ public:
 
     void remove( T& val ) {
         __TBB_ASSERT( node(val).my_prev_node != &node(val) && node(val).my_next_node != &node(val), "Element to remove is not in the list" );
+        __TBB_ASSERT( node(val).my_prev_node->my_next_node == &node(val) && node(val).my_next_node->my_prev_node == &node(val), "Element to remove is not in the list" );
         --my_size;
         node(val).my_next_node->my_prev_node = node(val).my_prev_node;
         node(val).my_prev_node->my_next_node = node(val).my_next_node;
@@ -250,6 +249,4 @@ class intrusive_list : public intrusive_list_base<intrusive_list<T>, T>
 } // namespace internal
 } // namespace tbb
 
-#endif /* __TBB_ARENA_PER_MASTER */
-
 #endif /* _TBB_intrusive_list_H */
diff --git a/src/tbb/itt_notify.cpp b/src/tbb/itt_notify.cpp
index 4e39943..b1a643d 100644
--- a/src/tbb/itt_notify.cpp
+++ b/src/tbb/itt_notify.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -76,13 +76,5 @@ namespace tbb {
             ;
 #endif /* DO_ITT_NOTIFY */
 
-namespace internal {
-
-#if DO_ITT_NOTIFY
-    bool InitializeITT () {
-        return __TBB_load_ittnotify() != 0;
-    }
-#endif /* DO_ITT_NOTIFY */
-} // namespace internal
 } // namespace tbb
 
diff --git a/src/tbb/itt_notify.h b/src/tbb/itt_notify.h
index 38cafd8..1c26792 100644
--- a/src/tbb/itt_notify.h
+++ b/src/tbb/itt_notify.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -105,7 +105,11 @@ namespace tbb {
 #define ITT_SYNC_CREATE(obj, type, name) __itt_sync_create(obj, type, name, 2)
 #define ITT_SYNC_RENAME(obj, name)      __itt_sync_rename(obj, name)
 #define ITT_STACK_CREATE(obj)           obj = __itt_stack_caller_create()
-#define ITT_STACK(name, obj)            __itt_stack_##name(obj)
+#if __TBB_TASK_GROUP_CONTEXT
+#define ITT_STACK(precond, name, obj)   (precond) ? __itt_stack_##name(obj) : ((void)0);
+#else
+#define ITT_STACK(precond, name, obj)      ((void)0)
+#endif /* !__TBB_TASK_GROUP_CONTEXT */
 
 #else /* !DO_ITT_NOTIFY */
 
@@ -114,7 +118,7 @@ namespace tbb {
 #define ITT_SYNC_CREATE(obj, type, name) ((void)0)
 #define ITT_SYNC_RENAME(obj, name)      ((void)0)
 #define ITT_STACK_CREATE(obj)           ((void)0)
-#define ITT_STACK(name, obj)            ((void)0)
+#define ITT_STACK(precond, name, obj)   ((void)0)
 
 #endif /* !DO_ITT_NOTIFY */
 
diff --git a/src/tbb/lin32-tbb-export.def b/src/tbb/lin32-tbb-export.def
index 59c9b49..5e4aabe 100644
--- a/src/tbb/lin32-tbb-export.def
+++ b/src/tbb/lin32-tbb-export.def
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -26,329 +26,11 @@
     the GNU General Public License.
 */
 
-#include "tbb/tbb_config.h"
-
 {
 global:
 
-/* cache_aligned_allocator.cpp */
-_ZN3tbb8internal12NFS_AllocateEjjPv;
-_ZN3tbb8internal15NFS_GetLineSizeEv;
-_ZN3tbb8internal8NFS_FreeEPv;
-_ZN3tbb8internal23allocate_via_handler_v3Ej;
-_ZN3tbb8internal25deallocate_via_handler_v3EPv;
-_ZN3tbb8internal17is_malloc_used_v3Ev;
-
-/* task.cpp v3 */
-_ZN3tbb4task13note_affinityEt;
-_ZN3tbb4task22internal_set_ref_countEi;
-_ZN3tbb4task28internal_decrement_ref_countEv;
-_ZN3tbb4task22spawn_and_wait_for_allERNS_9task_listE;
-_ZN3tbb4task4selfEv;
-_ZN3tbb10interface58internal9task_base7destroyERNS_4taskE;
-_ZNK3tbb4task26is_owned_by_current_threadEv;
-_ZN3tbb8internal19allocate_root_proxy4freeERNS_4taskE;
-_ZN3tbb8internal19allocate_root_proxy8allocateEj;
-_ZN3tbb8internal28affinity_partitioner_base_v36resizeEj;
-_ZNK3tbb8internal20allocate_child_proxy4freeERNS_4taskE;
-_ZNK3tbb8internal20allocate_child_proxy8allocateEj;
-_ZNK3tbb8internal27allocate_continuation_proxy4freeERNS_4taskE;
-_ZNK3tbb8internal27allocate_continuation_proxy8allocateEj;
-_ZNK3tbb8internal34allocate_additional_child_of_proxy4freeERNS_4taskE;
-_ZNK3tbb8internal34allocate_additional_child_of_proxy8allocateEj;
-_ZTIN3tbb4taskE;
-_ZTSN3tbb4taskE;
-_ZTVN3tbb4taskE;
-_ZN3tbb19task_scheduler_init19default_num_threadsEv;
-_ZN3tbb19task_scheduler_init10initializeEij;
-_ZN3tbb19task_scheduler_init10initializeEi;
-_ZN3tbb19task_scheduler_init9terminateEv;
-_ZN3tbb8internal26task_scheduler_observer_v37observeEb;
-_ZN3tbb10empty_task7executeEv;
-_ZN3tbb10empty_taskD0Ev;
-_ZN3tbb10empty_taskD1Ev;
-_ZTIN3tbb10empty_taskE;
-_ZTSN3tbb10empty_taskE;
-_ZTVN3tbb10empty_taskE;
-
-#if !TBB_NO_LEGACY
-/* task_v2.cpp */
-_ZN3tbb4task7destroyERS0_;
-#endif /* !TBB_NO_LEGACY */
-
-/* Exception handling in task scheduler */
-#if __TBB_TASK_GROUP_CONTEXT
-_ZNK3tbb8internal32allocate_root_with_context_proxy8allocateEj;
-_ZNK3tbb8internal32allocate_root_with_context_proxy4freeERNS_4taskE;
-_ZNK3tbb18task_group_context28is_group_execution_cancelledEv;
-_ZN3tbb18task_group_context22cancel_group_executionEv;
-_ZN3tbb18task_group_context26register_pending_exceptionEv;
-_ZN3tbb18task_group_context5resetEv;
-_ZN3tbb18task_group_context4initEv;
-_ZN3tbb18task_group_contextD1Ev;
-_ZN3tbb18task_group_contextD2Ev;
-_ZNK3tbb18captured_exception4nameEv;
-_ZNK3tbb18captured_exception4whatEv;
-_ZN3tbb18captured_exception10throw_selfEv;
-_ZN3tbb18captured_exception3setEPKcS2_;
-_ZN3tbb18captured_exception4moveEv;
-_ZN3tbb18captured_exception5clearEv;
-_ZN3tbb18captured_exception7destroyEv;
-_ZN3tbb18captured_exception8allocateEPKcS2_;
-_ZN3tbb18captured_exceptionD0Ev;
-_ZN3tbb18captured_exceptionD1Ev;
-_ZTIN3tbb18captured_exceptionE;
-_ZTSN3tbb18captured_exceptionE;
-_ZTVN3tbb18captured_exceptionE;
-_ZN3tbb13tbb_exceptionD2Ev;
-_ZTIN3tbb13tbb_exceptionE;
-_ZTSN3tbb13tbb_exceptionE;
-_ZTVN3tbb13tbb_exceptionE;
-#endif /* __TBB_TASK_GROUP_CONTEXT */
-
-/* Symbols for exceptions thrown from TBB */
-_ZN3tbb8internal33throw_bad_last_alloc_exception_v4Ev;
-_ZN3tbb8internal18throw_exception_v4ENS0_12exception_idE;
-_ZN3tbb14bad_last_allocD0Ev;
-_ZN3tbb14bad_last_allocD1Ev;
-_ZNK3tbb14bad_last_alloc4whatEv;
-_ZTIN3tbb14bad_last_allocE;
-_ZTSN3tbb14bad_last_allocE;
-_ZTVN3tbb14bad_last_allocE;
-_ZN3tbb12missing_waitD0Ev;
-_ZN3tbb12missing_waitD1Ev;
-_ZNK3tbb12missing_wait4whatEv;
-_ZTIN3tbb12missing_waitE;
-_ZTSN3tbb12missing_waitE;
-_ZTVN3tbb12missing_waitE;
-_ZN3tbb27invalid_multiple_schedulingD0Ev;
-_ZN3tbb27invalid_multiple_schedulingD1Ev;
-_ZNK3tbb27invalid_multiple_scheduling4whatEv;
-_ZTIN3tbb27invalid_multiple_schedulingE;
-_ZTSN3tbb27invalid_multiple_schedulingE;
-_ZTVN3tbb27invalid_multiple_schedulingE;
-_ZN3tbb13improper_lockD0Ev;
-_ZN3tbb13improper_lockD1Ev;
-_ZNK3tbb13improper_lock4whatEv;
-_ZTIN3tbb13improper_lockE;
-_ZTSN3tbb13improper_lockE;
-_ZTVN3tbb13improper_lockE;
-
-/* tbb_misc.cpp */
-_ZN3tbb17assertion_failureEPKciS1_S1_;
-_ZN3tbb21set_assertion_handlerEPFvPKciS1_S1_E;
-_ZN3tbb8internal36get_initial_auto_partitioner_divisorEv;
-_ZN3tbb8internal13handle_perrorEiPKc;
-_ZN3tbb8internal15runtime_warningEPKcz;
-__TBB_machine_store8_slow_perf_warning;
-__TBB_machine_store8_slow;
-TBB_runtime_interface_version;
-
-/* itt_notify.cpp */
-_ZN3tbb8internal32itt_load_pointer_with_acquire_v3EPKv;
-_ZN3tbb8internal33itt_store_pointer_with_release_v3EPvS1_;
-_ZN3tbb8internal20itt_set_sync_name_v3EPvPKc;
-_ZN3tbb8internal19itt_load_pointer_v3EPKv;
-
-/* pipeline.cpp */
-_ZTIN3tbb6filterE;
-_ZTSN3tbb6filterE;
-_ZTVN3tbb6filterE;
-_ZN3tbb6filterD2Ev;
-_ZN3tbb8pipeline10add_filterERNS_6filterE;
-_ZN3tbb8pipeline12inject_tokenERNS_4taskE;
-_ZN3tbb8pipeline13remove_filterERNS_6filterE;
-_ZN3tbb8pipeline3runEj;
-#if __TBB_TASK_GROUP_CONTEXT
-_ZN3tbb8pipeline3runEjRNS_18task_group_contextE;
-#endif
-_ZN3tbb8pipeline5clearEv;
-_ZN3tbb19thread_bound_filter12process_itemEv;
-_ZN3tbb19thread_bound_filter16try_process_itemEv;
-_ZTIN3tbb8pipelineE;
-_ZTSN3tbb8pipelineE;
-_ZTVN3tbb8pipelineE;
-_ZN3tbb8pipelineC1Ev;
-_ZN3tbb8pipelineC2Ev;
-_ZN3tbb8pipelineD0Ev;
-_ZN3tbb8pipelineD1Ev;
-_ZN3tbb8pipelineD2Ev;
-
-/* queuing_rw_mutex.cpp */
-_ZN3tbb16queuing_rw_mutex18internal_constructEv;
-_ZN3tbb16queuing_rw_mutex11scoped_lock17upgrade_to_writerEv;
-_ZN3tbb16queuing_rw_mutex11scoped_lock19downgrade_to_readerEv;
-_ZN3tbb16queuing_rw_mutex11scoped_lock7acquireERS0_b;
-_ZN3tbb16queuing_rw_mutex11scoped_lock7releaseEv;
-_ZN3tbb16queuing_rw_mutex11scoped_lock11try_acquireERS0_b;
-
-/* reader_writer_lock.cpp */
-_ZN3tbb10interface518reader_writer_lock11scoped_lock16internal_destroyEv;
-_ZN3tbb10interface518reader_writer_lock11scoped_lock18internal_constructERS1_;
-_ZN3tbb10interface518reader_writer_lock13try_lock_readEv;
-_ZN3tbb10interface518reader_writer_lock16scoped_lock_read16internal_destroyEv;
-_ZN3tbb10interface518reader_writer_lock16scoped_lock_read18internal_constructERS1_;
-_ZN3tbb10interface518reader_writer_lock16internal_destroyEv;
-_ZN3tbb10interface518reader_writer_lock18internal_constructEv;
-_ZN3tbb10interface518reader_writer_lock4lockEv;
-_ZN3tbb10interface518reader_writer_lock6unlockEv;
-_ZN3tbb10interface518reader_writer_lock8try_lockEv;
-_ZN3tbb10interface518reader_writer_lock9lock_readEv;
-
-#if !TBB_NO_LEGACY
-/* spin_rw_mutex.cpp v2 */
-_ZN3tbb13spin_rw_mutex16internal_upgradeEPS0_;
-_ZN3tbb13spin_rw_mutex22internal_itt_releasingEPS0_;
-_ZN3tbb13spin_rw_mutex23internal_acquire_readerEPS0_;
-_ZN3tbb13spin_rw_mutex23internal_acquire_writerEPS0_;
-_ZN3tbb13spin_rw_mutex18internal_downgradeEPS0_;
-_ZN3tbb13spin_rw_mutex23internal_release_readerEPS0_;
-_ZN3tbb13spin_rw_mutex23internal_release_writerEPS0_;
-_ZN3tbb13spin_rw_mutex27internal_try_acquire_readerEPS0_;
-_ZN3tbb13spin_rw_mutex27internal_try_acquire_writerEPS0_;
-#endif
-
-/* spin_rw_mutex v3 */
-_ZN3tbb16spin_rw_mutex_v318internal_constructEv;
-_ZN3tbb16spin_rw_mutex_v316internal_upgradeEv;
-_ZN3tbb16spin_rw_mutex_v318internal_downgradeEv;
-_ZN3tbb16spin_rw_mutex_v323internal_acquire_readerEv;
-_ZN3tbb16spin_rw_mutex_v323internal_acquire_writerEv;
-_ZN3tbb16spin_rw_mutex_v323internal_release_readerEv;
-_ZN3tbb16spin_rw_mutex_v323internal_release_writerEv;
-_ZN3tbb16spin_rw_mutex_v327internal_try_acquire_readerEv;
-_ZN3tbb16spin_rw_mutex_v327internal_try_acquire_writerEv;
-
-/* spin_mutex.cpp */
-_ZN3tbb10spin_mutex18internal_constructEv;
-_ZN3tbb10spin_mutex11scoped_lock16internal_acquireERS0_;
-_ZN3tbb10spin_mutex11scoped_lock16internal_releaseEv;
-_ZN3tbb10spin_mutex11scoped_lock20internal_try_acquireERS0_;
-
-/* mutex.cpp */
-_ZN3tbb5mutex11scoped_lock16internal_acquireERS0_;
-_ZN3tbb5mutex11scoped_lock16internal_releaseEv;
-_ZN3tbb5mutex11scoped_lock20internal_try_acquireERS0_;
-_ZN3tbb5mutex16internal_destroyEv;
-_ZN3tbb5mutex18internal_constructEv;
-
-/* recursive_mutex.cpp */
-_ZN3tbb15recursive_mutex11scoped_lock16internal_acquireERS0_;
-_ZN3tbb15recursive_mutex11scoped_lock16internal_releaseEv;
-_ZN3tbb15recursive_mutex11scoped_lock20internal_try_acquireERS0_;
-_ZN3tbb15recursive_mutex16internal_destroyEv;
-_ZN3tbb15recursive_mutex18internal_constructEv;
-
-/* QueuingMutex.cpp */
-_ZN3tbb13queuing_mutex18internal_constructEv;
-_ZN3tbb13queuing_mutex11scoped_lock7acquireERS0_;
-_ZN3tbb13queuing_mutex11scoped_lock7releaseEv;
-_ZN3tbb13queuing_mutex11scoped_lock11try_acquireERS0_;
-
-/* critical_section.cpp */
-_ZN3tbb8internal19critical_section_v418internal_constructEv;
-
-#if !TBB_NO_LEGACY
-/* concurrent_hash_map */
-_ZNK3tbb8internal21hash_map_segment_base23internal_grow_predicateEv;
-
-/* concurrent_queue.cpp v2 */
-_ZN3tbb8internal21concurrent_queue_base12internal_popEPv;
-_ZN3tbb8internal21concurrent_queue_base13internal_pushEPKv;
-_ZN3tbb8internal21concurrent_queue_base21internal_set_capacityEij;
-_ZN3tbb8internal21concurrent_queue_base23internal_pop_if_presentEPv;
-_ZN3tbb8internal21concurrent_queue_base25internal_push_if_not_fullEPKv;
-_ZN3tbb8internal21concurrent_queue_baseC2Ej;
-_ZN3tbb8internal21concurrent_queue_baseD2Ev;
-_ZTIN3tbb8internal21concurrent_queue_baseE;
-_ZTSN3tbb8internal21concurrent_queue_baseE;
-_ZTVN3tbb8internal21concurrent_queue_baseE;
-_ZN3tbb8internal30concurrent_queue_iterator_base6assignERKS1_;
-_ZN3tbb8internal30concurrent_queue_iterator_base7advanceEv;
-_ZN3tbb8internal30concurrent_queue_iterator_baseC2ERKNS0_21concurrent_queue_baseE;
-_ZN3tbb8internal30concurrent_queue_iterator_baseD2Ev;
-_ZNK3tbb8internal21concurrent_queue_base13internal_sizeEv;
-#endif
-
-/* concurrent_queue v3 */
-/* constructors */
-_ZN3tbb8internal24concurrent_queue_base_v3C2Ej;
-_ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3E;
-_ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3Ej;
-/* destructors */
-_ZN3tbb8internal24concurrent_queue_base_v3D2Ev;
-_ZN3tbb8internal33concurrent_queue_iterator_base_v3D2Ev;
-/* typeinfo */
-_ZTIN3tbb8internal24concurrent_queue_base_v3E;
-_ZTSN3tbb8internal24concurrent_queue_base_v3E;
-/* vtable */
-_ZTVN3tbb8internal24concurrent_queue_base_v3E;
-/* methods */
-_ZN3tbb8internal33concurrent_queue_iterator_base_v37advanceEv;
-_ZN3tbb8internal33concurrent_queue_iterator_base_v36assignERKS1_;
-_ZN3tbb8internal24concurrent_queue_base_v313internal_pushEPKv;
-_ZN3tbb8internal24concurrent_queue_base_v325internal_push_if_not_fullEPKv;
-_ZN3tbb8internal24concurrent_queue_base_v312internal_popEPv;
-_ZN3tbb8internal24concurrent_queue_base_v323internal_pop_if_presentEPv;
-_ZN3tbb8internal24concurrent_queue_base_v321internal_set_capacityEij;
-_ZNK3tbb8internal24concurrent_queue_base_v313internal_sizeEv;
-_ZNK3tbb8internal24concurrent_queue_base_v314internal_emptyEv;
-_ZN3tbb8internal24concurrent_queue_base_v321internal_finish_clearEv;
-_ZNK3tbb8internal24concurrent_queue_base_v324internal_throw_exceptionEv;
-_ZN3tbb8internal24concurrent_queue_base_v36assignERKS1_;
-
-#if !TBB_NO_LEGACY
-/* concurrent_vector.cpp v2 */
-_ZN3tbb8internal22concurrent_vector_base13internal_copyERKS1_jPFvPvPKvjE;
-_ZN3tbb8internal22concurrent_vector_base14internal_clearEPFvPvjEb;
-_ZN3tbb8internal22concurrent_vector_base15internal_assignERKS1_jPFvPvjEPFvS4_PKvjESA_;
-_ZN3tbb8internal22concurrent_vector_base16internal_grow_byEjjPFvPvjE;
-_ZN3tbb8internal22concurrent_vector_base16internal_reserveEjjj;
-_ZN3tbb8internal22concurrent_vector_base18internal_push_backEjRj;
-_ZN3tbb8internal22concurrent_vector_base25internal_grow_to_at_leastEjjPFvPvjE;
-_ZNK3tbb8internal22concurrent_vector_base17internal_capacityEv;
-#endif
-
-/* concurrent_vector v3 */
-_ZN3tbb8internal25concurrent_vector_base_v313internal_copyERKS1_jPFvPvPKvjE;
-_ZN3tbb8internal25concurrent_vector_base_v314internal_clearEPFvPvjE;
-_ZN3tbb8internal25concurrent_vector_base_v315internal_assignERKS1_jPFvPvjEPFvS4_PKvjESA_;
-_ZN3tbb8internal25concurrent_vector_base_v316internal_grow_byEjjPFvPvPKvjES4_;
-_ZN3tbb8internal25concurrent_vector_base_v316internal_reserveEjjj;
-_ZN3tbb8internal25concurrent_vector_base_v318internal_push_backEjRj;
-_ZN3tbb8internal25concurrent_vector_base_v325internal_grow_to_at_leastEjjPFvPvPKvjES4_;
-_ZNK3tbb8internal25concurrent_vector_base_v317internal_capacityEv;
-_ZN3tbb8internal25concurrent_vector_base_v316internal_compactEjPvPFvS2_jEPFvS2_PKvjE;
-_ZN3tbb8internal25concurrent_vector_base_v313internal_swapERS1_;
-_ZNK3tbb8internal25concurrent_vector_base_v324internal_throw_exceptionEj;
-_ZN3tbb8internal25concurrent_vector_base_v3D2Ev;
-_ZN3tbb8internal25concurrent_vector_base_v315internal_resizeEjjjPKvPFvPvjEPFvS4_S3_jE;
-_ZN3tbb8internal25concurrent_vector_base_v337internal_grow_to_at_least_with_resultEjjPFvPvPKvjES4_;
-
-/* tbb_thread */
-#if __MINGW32__
-_ZN3tbb8internal13tbb_thread_v314internal_startEPFjPvES2_;
-#else
-_ZN3tbb8internal13tbb_thread_v314internal_startEPFPvS2_ES2_;
-#endif
-_ZN3tbb8internal13tbb_thread_v320hardware_concurrencyEv;
-_ZN3tbb8internal13tbb_thread_v34joinEv;
-_ZN3tbb8internal13tbb_thread_v36detachEv;
-_ZN3tbb8internal15free_closure_v3EPv;
-_ZN3tbb8internal15thread_sleep_v3ERKNS_10tick_count10interval_tE;
-_ZN3tbb8internal15thread_yield_v3Ev;
-_ZN3tbb8internal16thread_get_id_v3Ev;
-_ZN3tbb8internal19allocate_closure_v3Ej;
-_ZN3tbb8internal7move_v3ERNS0_13tbb_thread_v3ES2_;
-
-#if __MINGW32__
-/* condition_variable */
-_ZN3tbb10interface58internal32internal_condition_variable_waitERNS1_14condvar_impl_tEPNS_5mutexEPKNS_10tick_count10interval_tE;
-_ZN3tbb10interface58internal35internal_destroy_condition_variableERNS1_14condvar_impl_tE;
-_ZN3tbb10interface58internal38internal_condition_variable_notify_allERNS1_14condvar_impl_tE;
-_ZN3tbb10interface58internal38internal_condition_variable_notify_oneERNS1_14condvar_impl_tE;
-_ZN3tbb10interface58internal38internal_initialize_condition_variableERNS1_14condvar_impl_tE;
-#endif
+#define __TBB_SYMBOL( sym ) sym;
+#include "lin32-tbb-export.lst"
 
 local:
 
@@ -356,6 +38,9 @@ local:
 *3tbb*;
 *__TBB*;
 
+/* ITT symbols */
+__itt_*;
+
 /* Intel Compiler (libirc) symbols */
 __intel_*;
 _intel_*;
diff --git a/src/tbb/lin32-tbb-export.lst b/src/tbb/lin32-tbb-export.lst
new file mode 100644
index 0000000..10c093e
--- /dev/null
+++ b/src/tbb/lin32-tbb-export.lst
@@ -0,0 +1,358 @@
+/*
+    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.
+*/
+
+#include "tbb/tbb_config.h"
+
+/* cache_aligned_allocator.cpp */
+__TBB_SYMBOL( _ZN3tbb8internal12NFS_AllocateEjjPv )
+__TBB_SYMBOL( _ZN3tbb8internal15NFS_GetLineSizeEv )
+__TBB_SYMBOL( _ZN3tbb8internal8NFS_FreeEPv )
+__TBB_SYMBOL( _ZN3tbb8internal23allocate_via_handler_v3Ej )
+__TBB_SYMBOL( _ZN3tbb8internal25deallocate_via_handler_v3EPv )
+__TBB_SYMBOL( _ZN3tbb8internal17is_malloc_used_v3Ev )
+
+/* task.cpp v3 */
+__TBB_SYMBOL( _ZN3tbb4task13note_affinityEt )
+__TBB_SYMBOL( _ZN3tbb4task22internal_set_ref_countEi )
+__TBB_SYMBOL( _ZN3tbb4task28internal_decrement_ref_countEv )
+__TBB_SYMBOL( _ZN3tbb4task22spawn_and_wait_for_allERNS_9task_listE )
+__TBB_SYMBOL( _ZN3tbb4task4selfEv )
+__TBB_SYMBOL( _ZN3tbb10interface58internal9task_base7destroyERNS_4taskE )
+__TBB_SYMBOL( _ZNK3tbb4task26is_owned_by_current_threadEv )
+__TBB_SYMBOL( _ZN3tbb8internal19allocate_root_proxy4freeERNS_4taskE )
+__TBB_SYMBOL( _ZN3tbb8internal19allocate_root_proxy8allocateEj )
+__TBB_SYMBOL( _ZN3tbb8internal28affinity_partitioner_base_v36resizeEj )
+__TBB_SYMBOL( _ZNK3tbb8internal20allocate_child_proxy4freeERNS_4taskE )
+__TBB_SYMBOL( _ZNK3tbb8internal20allocate_child_proxy8allocateEj )
+__TBB_SYMBOL( _ZNK3tbb8internal27allocate_continuation_proxy4freeERNS_4taskE )
+__TBB_SYMBOL( _ZNK3tbb8internal27allocate_continuation_proxy8allocateEj )
+__TBB_SYMBOL( _ZNK3tbb8internal34allocate_additional_child_of_proxy4freeERNS_4taskE )
+__TBB_SYMBOL( _ZNK3tbb8internal34allocate_additional_child_of_proxy8allocateEj )
+__TBB_SYMBOL( _ZTIN3tbb4taskE )
+__TBB_SYMBOL( _ZTSN3tbb4taskE )
+__TBB_SYMBOL( _ZTVN3tbb4taskE )
+__TBB_SYMBOL( _ZN3tbb19task_scheduler_init19default_num_threadsEv )
+__TBB_SYMBOL( _ZN3tbb19task_scheduler_init10initializeEij )
+__TBB_SYMBOL( _ZN3tbb19task_scheduler_init10initializeEi )
+__TBB_SYMBOL( _ZN3tbb19task_scheduler_init9terminateEv )
+__TBB_SYMBOL( _ZN3tbb8internal26task_scheduler_observer_v37observeEb )
+__TBB_SYMBOL( _ZN3tbb10empty_task7executeEv )
+__TBB_SYMBOL( _ZN3tbb10empty_taskD0Ev )
+__TBB_SYMBOL( _ZN3tbb10empty_taskD1Ev )
+__TBB_SYMBOL( _ZTIN3tbb10empty_taskE )
+__TBB_SYMBOL( _ZTSN3tbb10empty_taskE )
+__TBB_SYMBOL( _ZTVN3tbb10empty_taskE )
+
+#if !TBB_NO_LEGACY
+/* task_v2.cpp */
+__TBB_SYMBOL( _ZN3tbb4task7destroyERS0_ )
+#endif /* !TBB_NO_LEGACY */
+
+/* Exception handling in task scheduler */
+#if __TBB_TASK_GROUP_CONTEXT
+__TBB_SYMBOL( _ZNK3tbb8internal32allocate_root_with_context_proxy8allocateEj )
+__TBB_SYMBOL( _ZNK3tbb8internal32allocate_root_with_context_proxy4freeERNS_4taskE )
+__TBB_SYMBOL( _ZN3tbb4task12change_groupERNS_18task_group_contextE )
+__TBB_SYMBOL( _ZNK3tbb18task_group_context28is_group_execution_cancelledEv )
+__TBB_SYMBOL( _ZN3tbb18task_group_context22cancel_group_executionEv )
+__TBB_SYMBOL( _ZN3tbb18task_group_context26register_pending_exceptionEv )
+__TBB_SYMBOL( _ZN3tbb18task_group_context5resetEv )
+__TBB_SYMBOL( _ZN3tbb18task_group_context4initEv )
+__TBB_SYMBOL( _ZN3tbb18task_group_contextD1Ev )
+__TBB_SYMBOL( _ZN3tbb18task_group_contextD2Ev )
+#if __TBB_TASK_PRIORITY
+__TBB_SYMBOL( _ZN3tbb18task_group_context12set_priorityENS_10priority_tE )
+__TBB_SYMBOL( _ZNK3tbb18task_group_context8priorityEv )
+#endif /* __TBB_TASK_PRIORITY */
+__TBB_SYMBOL( _ZNK3tbb18captured_exception4nameEv )
+__TBB_SYMBOL( _ZNK3tbb18captured_exception4whatEv )
+__TBB_SYMBOL( _ZN3tbb18captured_exception10throw_selfEv )
+__TBB_SYMBOL( _ZN3tbb18captured_exception3setEPKcS2_ )
+__TBB_SYMBOL( _ZN3tbb18captured_exception4moveEv )
+__TBB_SYMBOL( _ZN3tbb18captured_exception5clearEv )
+__TBB_SYMBOL( _ZN3tbb18captured_exception7destroyEv )
+__TBB_SYMBOL( _ZN3tbb18captured_exception8allocateEPKcS2_ )
+__TBB_SYMBOL( _ZN3tbb18captured_exceptionD0Ev )
+__TBB_SYMBOL( _ZN3tbb18captured_exceptionD1Ev )
+__TBB_SYMBOL( _ZN3tbb18captured_exceptionD2Ev )
+__TBB_SYMBOL( _ZTIN3tbb18captured_exceptionE )
+__TBB_SYMBOL( _ZTSN3tbb18captured_exceptionE )
+__TBB_SYMBOL( _ZTVN3tbb18captured_exceptionE )
+__TBB_SYMBOL( _ZN3tbb13tbb_exceptionD2Ev )
+__TBB_SYMBOL( _ZTIN3tbb13tbb_exceptionE )
+__TBB_SYMBOL( _ZTSN3tbb13tbb_exceptionE )
+__TBB_SYMBOL( _ZTVN3tbb13tbb_exceptionE )
+#endif /* __TBB_TASK_GROUP_CONTEXT */
+
+/* Symbols for exceptions thrown from TBB */
+__TBB_SYMBOL( _ZN3tbb8internal33throw_bad_last_alloc_exception_v4Ev )
+__TBB_SYMBOL( _ZN3tbb8internal18throw_exception_v4ENS0_12exception_idE )
+__TBB_SYMBOL( _ZN3tbb14bad_last_allocD0Ev )
+__TBB_SYMBOL( _ZN3tbb14bad_last_allocD1Ev )
+__TBB_SYMBOL( _ZNK3tbb14bad_last_alloc4whatEv )
+__TBB_SYMBOL( _ZTIN3tbb14bad_last_allocE )
+__TBB_SYMBOL( _ZTSN3tbb14bad_last_allocE )
+__TBB_SYMBOL( _ZTVN3tbb14bad_last_allocE )
+__TBB_SYMBOL( _ZN3tbb12missing_waitD0Ev )
+__TBB_SYMBOL( _ZN3tbb12missing_waitD1Ev )
+__TBB_SYMBOL( _ZNK3tbb12missing_wait4whatEv )
+__TBB_SYMBOL( _ZTIN3tbb12missing_waitE )
+__TBB_SYMBOL( _ZTSN3tbb12missing_waitE )
+__TBB_SYMBOL( _ZTVN3tbb12missing_waitE )
+__TBB_SYMBOL( _ZN3tbb27invalid_multiple_schedulingD0Ev )
+__TBB_SYMBOL( _ZN3tbb27invalid_multiple_schedulingD1Ev )
+__TBB_SYMBOL( _ZNK3tbb27invalid_multiple_scheduling4whatEv )
+__TBB_SYMBOL( _ZTIN3tbb27invalid_multiple_schedulingE )
+__TBB_SYMBOL( _ZTSN3tbb27invalid_multiple_schedulingE )
+__TBB_SYMBOL( _ZTVN3tbb27invalid_multiple_schedulingE )
+__TBB_SYMBOL( _ZN3tbb13improper_lockD0Ev )
+__TBB_SYMBOL( _ZN3tbb13improper_lockD1Ev )
+__TBB_SYMBOL( _ZNK3tbb13improper_lock4whatEv )
+__TBB_SYMBOL( _ZTIN3tbb13improper_lockE )
+__TBB_SYMBOL( _ZTSN3tbb13improper_lockE )
+__TBB_SYMBOL( _ZTVN3tbb13improper_lockE )
+
+/* tbb_misc.cpp */
+__TBB_SYMBOL( _ZN3tbb17assertion_failureEPKciS1_S1_ )
+__TBB_SYMBOL( _ZN3tbb21set_assertion_handlerEPFvPKciS1_S1_E )
+__TBB_SYMBOL( _ZN3tbb8internal36get_initial_auto_partitioner_divisorEv )
+__TBB_SYMBOL( _ZN3tbb8internal13handle_perrorEiPKc )
+__TBB_SYMBOL( _ZN3tbb8internal15runtime_warningEPKcz )
+__TBB_SYMBOL( __TBB_machine_store8_slow_perf_warning )
+__TBB_SYMBOL( __TBB_machine_store8_slow )
+__TBB_SYMBOL( TBB_runtime_interface_version )
+
+/* tbb_main.cpp */
+__TBB_SYMBOL( _ZN3tbb8internal32itt_load_pointer_with_acquire_v3EPKv )
+__TBB_SYMBOL( _ZN3tbb8internal33itt_store_pointer_with_release_v3EPvS1_ )
+__TBB_SYMBOL( _ZN3tbb8internal18call_itt_notify_v5EiPv )
+__TBB_SYMBOL( _ZN3tbb8internal20itt_set_sync_name_v3EPvPKc )
+__TBB_SYMBOL( _ZN3tbb8internal19itt_load_pointer_v3EPKv )
+
+/* pipeline.cpp */
+__TBB_SYMBOL( _ZTIN3tbb6filterE )
+__TBB_SYMBOL( _ZTSN3tbb6filterE )
+__TBB_SYMBOL( _ZTVN3tbb6filterE )
+__TBB_SYMBOL( _ZN3tbb6filterD2Ev )
+__TBB_SYMBOL( _ZN3tbb8pipeline10add_filterERNS_6filterE )
+__TBB_SYMBOL( _ZN3tbb8pipeline12inject_tokenERNS_4taskE )
+__TBB_SYMBOL( _ZN3tbb8pipeline13remove_filterERNS_6filterE )
+__TBB_SYMBOL( _ZN3tbb8pipeline3runEj )
+#if __TBB_TASK_GROUP_CONTEXT
+__TBB_SYMBOL( _ZN3tbb8pipeline3runEjRNS_18task_group_contextE )
+#endif
+__TBB_SYMBOL( _ZN3tbb8pipeline5clearEv )
+__TBB_SYMBOL( _ZN3tbb19thread_bound_filter12process_itemEv )
+__TBB_SYMBOL( _ZN3tbb19thread_bound_filter16try_process_itemEv )
+__TBB_SYMBOL( _ZTIN3tbb8pipelineE )
+__TBB_SYMBOL( _ZTSN3tbb8pipelineE )
+__TBB_SYMBOL( _ZTVN3tbb8pipelineE )
+__TBB_SYMBOL( _ZN3tbb8pipelineC1Ev )
+__TBB_SYMBOL( _ZN3tbb8pipelineC2Ev )
+__TBB_SYMBOL( _ZN3tbb8pipelineD0Ev )
+__TBB_SYMBOL( _ZN3tbb8pipelineD1Ev )
+__TBB_SYMBOL( _ZN3tbb8pipelineD2Ev )
+__TBB_SYMBOL( _ZN3tbb6filter16set_end_of_inputEv )
+
+/* queuing_rw_mutex.cpp */
+__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex18internal_constructEv )
+__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock17upgrade_to_writerEv )
+__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock19downgrade_to_readerEv )
+__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock7acquireERS0_b )
+__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock7releaseEv )
+__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock11try_acquireERS0_b )
+
+/* reader_writer_lock.cpp */
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock11scoped_lock16internal_destroyEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock11scoped_lock18internal_constructERS1_ )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock13try_lock_readEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock16scoped_lock_read16internal_destroyEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock16scoped_lock_read18internal_constructERS1_ )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock16internal_destroyEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock18internal_constructEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock4lockEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock6unlockEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock8try_lockEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock9lock_readEv )
+
+#if !TBB_NO_LEGACY
+/* spin_rw_mutex.cpp v2 */
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex16internal_upgradeEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex22internal_itt_releasingEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_acquire_readerEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_acquire_writerEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex18internal_downgradeEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_release_readerEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_release_writerEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex27internal_try_acquire_readerEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex27internal_try_acquire_writerEPS0_ )
+#endif
+
+/* spin_rw_mutex v3 */
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v318internal_constructEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v316internal_upgradeEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v318internal_downgradeEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_acquire_readerEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_acquire_writerEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_release_readerEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_release_writerEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v327internal_try_acquire_readerEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v327internal_try_acquire_writerEv )
+
+/* spin_mutex.cpp */
+__TBB_SYMBOL( _ZN3tbb10spin_mutex18internal_constructEv )
+__TBB_SYMBOL( _ZN3tbb10spin_mutex11scoped_lock16internal_acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb10spin_mutex11scoped_lock16internal_releaseEv )
+__TBB_SYMBOL( _ZN3tbb10spin_mutex11scoped_lock20internal_try_acquireERS0_ )
+
+/* mutex.cpp */
+__TBB_SYMBOL( _ZN3tbb5mutex11scoped_lock16internal_acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb5mutex11scoped_lock16internal_releaseEv )
+__TBB_SYMBOL( _ZN3tbb5mutex11scoped_lock20internal_try_acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb5mutex16internal_destroyEv )
+__TBB_SYMBOL( _ZN3tbb5mutex18internal_constructEv )
+
+/* recursive_mutex.cpp */
+__TBB_SYMBOL( _ZN3tbb15recursive_mutex11scoped_lock16internal_acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb15recursive_mutex11scoped_lock16internal_releaseEv )
+__TBB_SYMBOL( _ZN3tbb15recursive_mutex11scoped_lock20internal_try_acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb15recursive_mutex16internal_destroyEv )
+__TBB_SYMBOL( _ZN3tbb15recursive_mutex18internal_constructEv )
+
+/* QueuingMutex.cpp */
+__TBB_SYMBOL( _ZN3tbb13queuing_mutex18internal_constructEv )
+__TBB_SYMBOL( _ZN3tbb13queuing_mutex11scoped_lock7acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb13queuing_mutex11scoped_lock7releaseEv )
+__TBB_SYMBOL( _ZN3tbb13queuing_mutex11scoped_lock11try_acquireERS0_ )
+
+/* critical_section.cpp */
+__TBB_SYMBOL( _ZN3tbb8internal19critical_section_v418internal_constructEv )
+
+#if !TBB_NO_LEGACY
+/* concurrent_hash_map */
+__TBB_SYMBOL( _ZNK3tbb8internal21hash_map_segment_base23internal_grow_predicateEv )
+
+/* concurrent_queue.cpp v2 */
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base12internal_popEPv )
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base13internal_pushEPKv )
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base21internal_set_capacityEij )
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base23internal_pop_if_presentEPv )
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base25internal_push_if_not_fullEPKv )
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_baseC2Ej )
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_baseD2Ev )
+__TBB_SYMBOL( _ZTIN3tbb8internal21concurrent_queue_baseE )
+__TBB_SYMBOL( _ZTSN3tbb8internal21concurrent_queue_baseE )
+__TBB_SYMBOL( _ZTVN3tbb8internal21concurrent_queue_baseE )
+__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_base6assignERKS1_ )
+__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_base7advanceEv )
+__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_baseC2ERKNS0_21concurrent_queue_baseE )
+__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_baseD2Ev )
+__TBB_SYMBOL( _ZNK3tbb8internal21concurrent_queue_base13internal_sizeEv )
+#endif
+
+/* concurrent_queue v3 */
+/* constructors */
+__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v3C2Ej )
+__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3E )
+__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3Ej )
+/* destructors */
+__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v3D2Ev )
+__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v3D2Ev )
+/* typeinfo */
+__TBB_SYMBOL( _ZTIN3tbb8internal24concurrent_queue_base_v3E )
+__TBB_SYMBOL( _ZTSN3tbb8internal24concurrent_queue_base_v3E )
+/* vtable */
+__TBB_SYMBOL( _ZTVN3tbb8internal24concurrent_queue_base_v3E )
+/* methods */
+__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v37advanceEv )
+__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v36assignERKS1_ )
+__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_v321internal_set_capacityEij )
+__TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v313internal_sizeEv )
+__TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v314internal_emptyEv )
+__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v321internal_finish_clearEv )
+__TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v324internal_throw_exceptionEv )
+__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v36assignERKS1_ )
+
+#if !TBB_NO_LEGACY
+/* concurrent_vector.cpp v2 */
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base13internal_copyERKS1_jPFvPvPKvjE )
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base14internal_clearEPFvPvjEb )
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base15internal_assignERKS1_jPFvPvjEPFvS4_PKvjESA_ )
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base16internal_grow_byEjjPFvPvjE )
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base16internal_reserveEjjj )
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base18internal_push_backEjRj )
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base25internal_grow_to_at_leastEjjPFvPvjE )
+__TBB_SYMBOL( _ZNK3tbb8internal22concurrent_vector_base17internal_capacityEv )
+#endif
+
+/* concurrent_vector v3 */
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v313internal_copyERKS1_jPFvPvPKvjE )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v314internal_clearEPFvPvjE )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v315internal_assignERKS1_jPFvPvjEPFvS4_PKvjESA_ )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v316internal_grow_byEjjPFvPvPKvjES4_ )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v316internal_reserveEjjj )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v318internal_push_backEjRj )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v325internal_grow_to_at_leastEjjPFvPvPKvjES4_ )
+__TBB_SYMBOL( _ZNK3tbb8internal25concurrent_vector_base_v317internal_capacityEv )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v316internal_compactEjPvPFvS2_jEPFvS2_PKvjE )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v313internal_swapERS1_ )
+__TBB_SYMBOL( _ZNK3tbb8internal25concurrent_vector_base_v324internal_throw_exceptionEj )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v3D2Ev )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v315internal_resizeEjjjPKvPFvPvjEPFvS4_S3_jE )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v337internal_grow_to_at_least_with_resultEjjPFvPvPKvjES4_ )
+
+/* tbb_thread */
+#if __MINGW32__
+__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v314internal_startEPFjPvES2_ )
+#else
+__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v314internal_startEPFPvS2_ES2_ )
+#endif
+__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v320hardware_concurrencyEv )
+__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v34joinEv )
+__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v36detachEv )
+__TBB_SYMBOL( _ZN3tbb8internal15free_closure_v3EPv )
+__TBB_SYMBOL( _ZN3tbb8internal15thread_sleep_v3ERKNS_10tick_count10interval_tE )
+__TBB_SYMBOL( _ZN3tbb8internal15thread_yield_v3Ev )
+__TBB_SYMBOL( _ZN3tbb8internal16thread_get_id_v3Ev )
+__TBB_SYMBOL( _ZN3tbb8internal19allocate_closure_v3Ej )
+__TBB_SYMBOL( _ZN3tbb8internal7move_v3ERNS0_13tbb_thread_v3ES2_ )
+
+#if __MINGW32__
+/* condition_variable */
+__TBB_SYMBOL( _ZN3tbb10interface58internal32internal_condition_variable_waitERNS1_14condvar_impl_tEPNS_5mutexEPKNS_10tick_count10interval_tE )
+__TBB_SYMBOL( _ZN3tbb10interface58internal35internal_destroy_condition_variableERNS1_14condvar_impl_tE )
+__TBB_SYMBOL( _ZN3tbb10interface58internal38internal_condition_variable_notify_allERNS1_14condvar_impl_tE )
+__TBB_SYMBOL( _ZN3tbb10interface58internal38internal_condition_variable_notify_oneERNS1_14condvar_impl_tE )
+__TBB_SYMBOL( _ZN3tbb10interface58internal38internal_initialize_condition_variableERNS1_14condvar_impl_tE )
+#endif
+
+#undef __TBB_SYMBOL
diff --git a/src/tbb/lin64-tbb-export.def b/src/tbb/lin64-tbb-export.def
index 2406c86..97ffe14 100644
--- a/src/tbb/lin64-tbb-export.def
+++ b/src/tbb/lin64-tbb-export.def
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -26,314 +26,11 @@
     the GNU General Public License.
 */
 
-#include "tbb/tbb_config.h"
-
 {
 global:
 
-/* cache_aligned_allocator.cpp */
-_ZN3tbb8internal12NFS_AllocateEmmPv;
-_ZN3tbb8internal15NFS_GetLineSizeEv;
-_ZN3tbb8internal8NFS_FreeEPv;
-_ZN3tbb8internal23allocate_via_handler_v3Em;
-_ZN3tbb8internal25deallocate_via_handler_v3EPv;
-_ZN3tbb8internal17is_malloc_used_v3Ev;
-
-/* task.cpp v3 */
-_ZN3tbb4task13note_affinityEt;
-_ZN3tbb4task22internal_set_ref_countEi;
-_ZN3tbb4task28internal_decrement_ref_countEv;
-_ZN3tbb4task22spawn_and_wait_for_allERNS_9task_listE;
-_ZN3tbb4task4selfEv;
-_ZN3tbb10interface58internal9task_base7destroyERNS_4taskE;
-_ZNK3tbb4task26is_owned_by_current_threadEv;
-_ZN3tbb8internal19allocate_root_proxy4freeERNS_4taskE;
-_ZN3tbb8internal19allocate_root_proxy8allocateEm;
-_ZN3tbb8internal28affinity_partitioner_base_v36resizeEj;
-_ZNK3tbb8internal20allocate_child_proxy4freeERNS_4taskE;
-_ZNK3tbb8internal20allocate_child_proxy8allocateEm;
-_ZNK3tbb8internal27allocate_continuation_proxy4freeERNS_4taskE;
-_ZNK3tbb8internal27allocate_continuation_proxy8allocateEm;
-_ZNK3tbb8internal34allocate_additional_child_of_proxy4freeERNS_4taskE;
-_ZNK3tbb8internal34allocate_additional_child_of_proxy8allocateEm;
-_ZTIN3tbb4taskE;
-_ZTSN3tbb4taskE;
-_ZTVN3tbb4taskE;
-_ZN3tbb19task_scheduler_init19default_num_threadsEv;
-_ZN3tbb19task_scheduler_init10initializeEim;
-_ZN3tbb19task_scheduler_init10initializeEi;
-_ZN3tbb19task_scheduler_init9terminateEv;
-_ZN3tbb8internal26task_scheduler_observer_v37observeEb;
-_ZN3tbb10empty_task7executeEv;
-_ZN3tbb10empty_taskD0Ev;
-_ZN3tbb10empty_taskD1Ev;
-_ZTIN3tbb10empty_taskE;
-_ZTSN3tbb10empty_taskE;
-_ZTVN3tbb10empty_taskE;
-
-#if !TBB_NO_LEGACY
-/* task_v2.cpp */
-_ZN3tbb4task7destroyERS0_;
-#endif /* !TBB_NO_LEGACY */
-
-/* Exception handling in task scheduler */
-#if __TBB_TASK_GROUP_CONTEXT
-_ZNK3tbb8internal32allocate_root_with_context_proxy8allocateEm;
-_ZNK3tbb8internal32allocate_root_with_context_proxy4freeERNS_4taskE;
-_ZNK3tbb18task_group_context28is_group_execution_cancelledEv;
-_ZN3tbb18task_group_context22cancel_group_executionEv;
-_ZN3tbb18task_group_context26register_pending_exceptionEv;
-_ZN3tbb18task_group_context5resetEv;
-_ZN3tbb18task_group_context4initEv;
-_ZN3tbb18task_group_contextD1Ev;
-_ZN3tbb18task_group_contextD2Ev;
-_ZNK3tbb18captured_exception4nameEv;
-_ZNK3tbb18captured_exception4whatEv;
-_ZN3tbb18captured_exception10throw_selfEv;
-_ZN3tbb18captured_exception3setEPKcS2_;
-_ZN3tbb18captured_exception4moveEv;
-_ZN3tbb18captured_exception5clearEv;
-_ZN3tbb18captured_exception7destroyEv;
-_ZN3tbb18captured_exception8allocateEPKcS2_;
-_ZN3tbb18captured_exceptionD0Ev;
-_ZN3tbb18captured_exceptionD1Ev;
-_ZTIN3tbb18captured_exceptionE;
-_ZTSN3tbb18captured_exceptionE;
-_ZTVN3tbb18captured_exceptionE;
-_ZN3tbb13tbb_exceptionD2Ev;
-_ZTIN3tbb13tbb_exceptionE;
-_ZTSN3tbb13tbb_exceptionE;
-_ZTVN3tbb13tbb_exceptionE;
-#endif /* __TBB_TASK_GROUP_CONTEXT */
-
-/* Symbols for exceptions thrown from TBB */
-_ZN3tbb8internal33throw_bad_last_alloc_exception_v4Ev;
-_ZN3tbb8internal18throw_exception_v4ENS0_12exception_idE;
-_ZN3tbb14bad_last_allocD0Ev;
-_ZN3tbb14bad_last_allocD1Ev;
-_ZNK3tbb14bad_last_alloc4whatEv;
-_ZTIN3tbb14bad_last_allocE;
-_ZTSN3tbb14bad_last_allocE;
-_ZTVN3tbb14bad_last_allocE;
-_ZN3tbb12missing_waitD0Ev;
-_ZN3tbb12missing_waitD1Ev;
-_ZNK3tbb12missing_wait4whatEv;
-_ZTIN3tbb12missing_waitE;
-_ZTSN3tbb12missing_waitE;
-_ZTVN3tbb12missing_waitE;
-_ZN3tbb27invalid_multiple_schedulingD0Ev;
-_ZN3tbb27invalid_multiple_schedulingD1Ev;
-_ZNK3tbb27invalid_multiple_scheduling4whatEv;
-_ZTIN3tbb27invalid_multiple_schedulingE;
-_ZTSN3tbb27invalid_multiple_schedulingE;
-_ZTVN3tbb27invalid_multiple_schedulingE;
-_ZN3tbb13improper_lockD0Ev;
-_ZN3tbb13improper_lockD1Ev;
-_ZNK3tbb13improper_lock4whatEv;
-_ZTIN3tbb13improper_lockE;
-_ZTSN3tbb13improper_lockE;
-_ZTVN3tbb13improper_lockE;
-
-/* tbb_misc.cpp */
-_ZN3tbb17assertion_failureEPKciS1_S1_;
-_ZN3tbb21set_assertion_handlerEPFvPKciS1_S1_E;
-_ZN3tbb8internal36get_initial_auto_partitioner_divisorEv;
-_ZN3tbb8internal13handle_perrorEiPKc;
-_ZN3tbb8internal15runtime_warningEPKcz;
-TBB_runtime_interface_version;
-
-/* itt_notify.cpp */
-_ZN3tbb8internal32itt_load_pointer_with_acquire_v3EPKv;
-_ZN3tbb8internal33itt_store_pointer_with_release_v3EPvS1_;
-_ZN3tbb8internal20itt_set_sync_name_v3EPvPKc;
-_ZN3tbb8internal19itt_load_pointer_v3EPKv;
-
-/* pipeline.cpp */
-_ZTIN3tbb6filterE;
-_ZTSN3tbb6filterE;
-_ZTVN3tbb6filterE;
-_ZN3tbb6filterD2Ev;
-_ZN3tbb8pipeline10add_filterERNS_6filterE;
-_ZN3tbb8pipeline12inject_tokenERNS_4taskE;
-_ZN3tbb8pipeline13remove_filterERNS_6filterE;
-_ZN3tbb8pipeline3runEm;
-#if __TBB_TASK_GROUP_CONTEXT
-_ZN3tbb8pipeline3runEmRNS_18task_group_contextE;
-#endif
-_ZN3tbb8pipeline5clearEv;
-_ZN3tbb19thread_bound_filter12process_itemEv;
-_ZN3tbb19thread_bound_filter16try_process_itemEv;
-_ZTIN3tbb8pipelineE;
-_ZTSN3tbb8pipelineE;
-_ZTVN3tbb8pipelineE;
-_ZN3tbb8pipelineC1Ev;
-_ZN3tbb8pipelineC2Ev;
-_ZN3tbb8pipelineD0Ev;
-_ZN3tbb8pipelineD1Ev;
-_ZN3tbb8pipelineD2Ev;
-
-/* queuing_rw_mutex.cpp */
-_ZN3tbb16queuing_rw_mutex18internal_constructEv;
-_ZN3tbb16queuing_rw_mutex11scoped_lock17upgrade_to_writerEv;
-_ZN3tbb16queuing_rw_mutex11scoped_lock19downgrade_to_readerEv;
-_ZN3tbb16queuing_rw_mutex11scoped_lock7acquireERS0_b;
-_ZN3tbb16queuing_rw_mutex11scoped_lock7releaseEv;
-_ZN3tbb16queuing_rw_mutex11scoped_lock11try_acquireERS0_b;
-
-/* reader_writer_lock.cpp */
-_ZN3tbb10interface518reader_writer_lock11scoped_lock16internal_destroyEv;
-_ZN3tbb10interface518reader_writer_lock11scoped_lock18internal_constructERS1_;
-_ZN3tbb10interface518reader_writer_lock13try_lock_readEv;
-_ZN3tbb10interface518reader_writer_lock16scoped_lock_read16internal_destroyEv;
-_ZN3tbb10interface518reader_writer_lock16scoped_lock_read18internal_constructERS1_;
-_ZN3tbb10interface518reader_writer_lock16internal_destroyEv;
-_ZN3tbb10interface518reader_writer_lock18internal_constructEv;
-_ZN3tbb10interface518reader_writer_lock4lockEv;
-_ZN3tbb10interface518reader_writer_lock6unlockEv;
-_ZN3tbb10interface518reader_writer_lock8try_lockEv;
-_ZN3tbb10interface518reader_writer_lock9lock_readEv;
-
-#if !TBB_NO_LEGACY
-/* spin_rw_mutex.cpp v2 */
-_ZN3tbb13spin_rw_mutex16internal_upgradeEPS0_;
-_ZN3tbb13spin_rw_mutex22internal_itt_releasingEPS0_;
-_ZN3tbb13spin_rw_mutex23internal_acquire_readerEPS0_;
-_ZN3tbb13spin_rw_mutex23internal_acquire_writerEPS0_;
-_ZN3tbb13spin_rw_mutex18internal_downgradeEPS0_;
-_ZN3tbb13spin_rw_mutex23internal_release_readerEPS0_;
-_ZN3tbb13spin_rw_mutex23internal_release_writerEPS0_;
-_ZN3tbb13spin_rw_mutex27internal_try_acquire_readerEPS0_;
-_ZN3tbb13spin_rw_mutex27internal_try_acquire_writerEPS0_;
-#endif
-
-/* spin_rw_mutex v3 */
-_ZN3tbb16spin_rw_mutex_v318internal_constructEv;
-_ZN3tbb16spin_rw_mutex_v316internal_upgradeEv;
-_ZN3tbb16spin_rw_mutex_v318internal_downgradeEv;
-_ZN3tbb16spin_rw_mutex_v323internal_acquire_readerEv;
-_ZN3tbb16spin_rw_mutex_v323internal_acquire_writerEv;
-_ZN3tbb16spin_rw_mutex_v323internal_release_readerEv;
-_ZN3tbb16spin_rw_mutex_v323internal_release_writerEv;
-_ZN3tbb16spin_rw_mutex_v327internal_try_acquire_readerEv;
-_ZN3tbb16spin_rw_mutex_v327internal_try_acquire_writerEv;
-
-/* spin_mutex.cpp */
-_ZN3tbb10spin_mutex11scoped_lock16internal_acquireERS0_;
-_ZN3tbb10spin_mutex11scoped_lock16internal_releaseEv;
-_ZN3tbb10spin_mutex11scoped_lock20internal_try_acquireERS0_;
-_ZN3tbb10spin_mutex18internal_constructEv;
-
-/* mutex.cpp */
-_ZN3tbb5mutex11scoped_lock16internal_acquireERS0_;
-_ZN3tbb5mutex11scoped_lock16internal_releaseEv;
-_ZN3tbb5mutex11scoped_lock20internal_try_acquireERS0_;
-_ZN3tbb5mutex16internal_destroyEv;
-_ZN3tbb5mutex18internal_constructEv;
-
-/* recursive_mutex.cpp */
-_ZN3tbb15recursive_mutex11scoped_lock16internal_acquireERS0_;
-_ZN3tbb15recursive_mutex11scoped_lock16internal_releaseEv;
-_ZN3tbb15recursive_mutex11scoped_lock20internal_try_acquireERS0_;
-_ZN3tbb15recursive_mutex16internal_destroyEv;
-_ZN3tbb15recursive_mutex18internal_constructEv;
-
-/* QueuingMutex.cpp */
-_ZN3tbb13queuing_mutex18internal_constructEv;
-_ZN3tbb13queuing_mutex11scoped_lock7acquireERS0_;
-_ZN3tbb13queuing_mutex11scoped_lock7releaseEv;
-_ZN3tbb13queuing_mutex11scoped_lock11try_acquireERS0_;
-
-/* critical_section.cpp */
-_ZN3tbb8internal19critical_section_v418internal_constructEv;
-
-#if !TBB_NO_LEGACY
-/* concurrent_hash_map */
-_ZNK3tbb8internal21hash_map_segment_base23internal_grow_predicateEv;
-
-/* concurrent_queue.cpp v2 */
-_ZN3tbb8internal21concurrent_queue_base12internal_popEPv;
-_ZN3tbb8internal21concurrent_queue_base13internal_pushEPKv;
-_ZN3tbb8internal21concurrent_queue_base21internal_set_capacityElm;
-_ZN3tbb8internal21concurrent_queue_base23internal_pop_if_presentEPv;
-_ZN3tbb8internal21concurrent_queue_base25internal_push_if_not_fullEPKv;
-_ZN3tbb8internal21concurrent_queue_baseC2Em;
-_ZN3tbb8internal21concurrent_queue_baseD2Ev;
-_ZTIN3tbb8internal21concurrent_queue_baseE;
-_ZTSN3tbb8internal21concurrent_queue_baseE;
-_ZTVN3tbb8internal21concurrent_queue_baseE;
-_ZN3tbb8internal30concurrent_queue_iterator_base6assignERKS1_;
-_ZN3tbb8internal30concurrent_queue_iterator_base7advanceEv;
-_ZN3tbb8internal30concurrent_queue_iterator_baseC2ERKNS0_21concurrent_queue_baseE;
-_ZN3tbb8internal30concurrent_queue_iterator_baseD2Ev;
-_ZNK3tbb8internal21concurrent_queue_base13internal_sizeEv;
-#endif
-
-/* concurrent_queue v3 */
-/* constructors */
-_ZN3tbb8internal24concurrent_queue_base_v3C2Em;
-_ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3E;
-_ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3Em;
-/* destructors */
-_ZN3tbb8internal24concurrent_queue_base_v3D2Ev;
-_ZN3tbb8internal33concurrent_queue_iterator_base_v3D2Ev;
-/* typeinfo */
-_ZTIN3tbb8internal24concurrent_queue_base_v3E;
-_ZTSN3tbb8internal24concurrent_queue_base_v3E;
-/* vtable */
-_ZTVN3tbb8internal24concurrent_queue_base_v3E;
-/* methods */
-_ZN3tbb8internal33concurrent_queue_iterator_base_v36assignERKS1_;
-_ZN3tbb8internal33concurrent_queue_iterator_base_v37advanceEv;
-_ZN3tbb8internal24concurrent_queue_base_v313internal_pushEPKv;
-_ZN3tbb8internal24concurrent_queue_base_v325internal_push_if_not_fullEPKv;
-_ZN3tbb8internal24concurrent_queue_base_v312internal_popEPv;
-_ZN3tbb8internal24concurrent_queue_base_v323internal_pop_if_presentEPv;
-_ZN3tbb8internal24concurrent_queue_base_v321internal_finish_clearEv;
-_ZN3tbb8internal24concurrent_queue_base_v321internal_set_capacityElm;
-_ZNK3tbb8internal24concurrent_queue_base_v313internal_sizeEv;
-_ZNK3tbb8internal24concurrent_queue_base_v314internal_emptyEv;
-_ZNK3tbb8internal24concurrent_queue_base_v324internal_throw_exceptionEv;
-_ZN3tbb8internal24concurrent_queue_base_v36assignERKS1_;
-
-#if !TBB_NO_LEGACY
-/* concurrent_vector.cpp v2 */
-_ZN3tbb8internal22concurrent_vector_base13internal_copyERKS1_mPFvPvPKvmE;
-_ZN3tbb8internal22concurrent_vector_base14internal_clearEPFvPvmEb;
-_ZN3tbb8internal22concurrent_vector_base15internal_assignERKS1_mPFvPvmEPFvS4_PKvmESA_;
-_ZN3tbb8internal22concurrent_vector_base16internal_grow_byEmmPFvPvmE;
-_ZN3tbb8internal22concurrent_vector_base16internal_reserveEmmm;
-_ZN3tbb8internal22concurrent_vector_base18internal_push_backEmRm;
-_ZN3tbb8internal22concurrent_vector_base25internal_grow_to_at_leastEmmPFvPvmE;
-_ZNK3tbb8internal22concurrent_vector_base17internal_capacityEv;
-#endif
-
-/* concurrent_vector v3 */
-_ZN3tbb8internal25concurrent_vector_base_v313internal_copyERKS1_mPFvPvPKvmE;
-_ZN3tbb8internal25concurrent_vector_base_v314internal_clearEPFvPvmE;
-_ZN3tbb8internal25concurrent_vector_base_v315internal_assignERKS1_mPFvPvmEPFvS4_PKvmESA_;
-_ZN3tbb8internal25concurrent_vector_base_v316internal_grow_byEmmPFvPvPKvmES4_;
-_ZN3tbb8internal25concurrent_vector_base_v316internal_reserveEmmm;
-_ZN3tbb8internal25concurrent_vector_base_v318internal_push_backEmRm;
-_ZN3tbb8internal25concurrent_vector_base_v325internal_grow_to_at_leastEmmPFvPvPKvmES4_;
-_ZNK3tbb8internal25concurrent_vector_base_v317internal_capacityEv;
-_ZN3tbb8internal25concurrent_vector_base_v316internal_compactEmPvPFvS2_mEPFvS2_PKvmE;
-_ZN3tbb8internal25concurrent_vector_base_v313internal_swapERS1_;
-_ZNK3tbb8internal25concurrent_vector_base_v324internal_throw_exceptionEm;
-_ZN3tbb8internal25concurrent_vector_base_v3D2Ev;
-_ZN3tbb8internal25concurrent_vector_base_v315internal_resizeEmmmPKvPFvPvmEPFvS4_S3_mE;
-_ZN3tbb8internal25concurrent_vector_base_v337internal_grow_to_at_least_with_resultEmmPFvPvPKvmES4_;
-
-/* tbb_thread */
-_ZN3tbb8internal13tbb_thread_v320hardware_concurrencyEv;
-_ZN3tbb8internal13tbb_thread_v36detachEv;
-_ZN3tbb8internal16thread_get_id_v3Ev;
-_ZN3tbb8internal15free_closure_v3EPv;
-_ZN3tbb8internal13tbb_thread_v34joinEv;
-_ZN3tbb8internal13tbb_thread_v314internal_startEPFPvS2_ES2_;
-_ZN3tbb8internal19allocate_closure_v3Em;
-_ZN3tbb8internal7move_v3ERNS0_13tbb_thread_v3ES2_;
-_ZN3tbb8internal15thread_yield_v3Ev;
-_ZN3tbb8internal15thread_sleep_v3ERKNS_10tick_count10interval_tE;
+#define __TBB_SYMBOL( sym ) sym;
+#include "lin64-tbb-export.lst"
 
 local:
 
@@ -341,6 +38,9 @@ local:
 *3tbb*;
 *__TBB*;
 
+/* ITT symbols */
+__itt_*;
+
 /* Intel Compiler (libirc) symbols */
 __intel_*;
 _intel_*;
diff --git a/src/tbb/lin64-tbb-export.lst b/src/tbb/lin64-tbb-export.lst
new file mode 100644
index 0000000..abbd167
--- /dev/null
+++ b/src/tbb/lin64-tbb-export.lst
@@ -0,0 +1,343 @@
+/*
+    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.
+*/
+
+#include "tbb/tbb_config.h"
+
+/* cache_aligned_allocator.cpp */
+__TBB_SYMBOL( _ZN3tbb8internal12NFS_AllocateEmmPv )
+__TBB_SYMBOL( _ZN3tbb8internal15NFS_GetLineSizeEv )
+__TBB_SYMBOL( _ZN3tbb8internal8NFS_FreeEPv )
+__TBB_SYMBOL( _ZN3tbb8internal23allocate_via_handler_v3Em )
+__TBB_SYMBOL( _ZN3tbb8internal25deallocate_via_handler_v3EPv )
+__TBB_SYMBOL( _ZN3tbb8internal17is_malloc_used_v3Ev )
+
+/* task.cpp v3 */
+__TBB_SYMBOL( _ZN3tbb4task13note_affinityEt )
+__TBB_SYMBOL( _ZN3tbb4task22internal_set_ref_countEi )
+__TBB_SYMBOL( _ZN3tbb4task28internal_decrement_ref_countEv )
+__TBB_SYMBOL( _ZN3tbb4task22spawn_and_wait_for_allERNS_9task_listE )
+__TBB_SYMBOL( _ZN3tbb4task4selfEv )
+__TBB_SYMBOL( _ZN3tbb10interface58internal9task_base7destroyERNS_4taskE )
+__TBB_SYMBOL( _ZNK3tbb4task26is_owned_by_current_threadEv )
+__TBB_SYMBOL( _ZN3tbb8internal19allocate_root_proxy4freeERNS_4taskE )
+__TBB_SYMBOL( _ZN3tbb8internal19allocate_root_proxy8allocateEm )
+__TBB_SYMBOL( _ZN3tbb8internal28affinity_partitioner_base_v36resizeEj )
+__TBB_SYMBOL( _ZNK3tbb8internal20allocate_child_proxy4freeERNS_4taskE )
+__TBB_SYMBOL( _ZNK3tbb8internal20allocate_child_proxy8allocateEm )
+__TBB_SYMBOL( _ZNK3tbb8internal27allocate_continuation_proxy4freeERNS_4taskE )
+__TBB_SYMBOL( _ZNK3tbb8internal27allocate_continuation_proxy8allocateEm )
+__TBB_SYMBOL( _ZNK3tbb8internal34allocate_additional_child_of_proxy4freeERNS_4taskE )
+__TBB_SYMBOL( _ZNK3tbb8internal34allocate_additional_child_of_proxy8allocateEm )
+__TBB_SYMBOL( _ZTIN3tbb4taskE )
+__TBB_SYMBOL( _ZTSN3tbb4taskE )
+__TBB_SYMBOL( _ZTVN3tbb4taskE )
+__TBB_SYMBOL( _ZN3tbb19task_scheduler_init19default_num_threadsEv )
+__TBB_SYMBOL( _ZN3tbb19task_scheduler_init10initializeEim )
+__TBB_SYMBOL( _ZN3tbb19task_scheduler_init10initializeEi )
+__TBB_SYMBOL( _ZN3tbb19task_scheduler_init9terminateEv )
+__TBB_SYMBOL( _ZN3tbb8internal26task_scheduler_observer_v37observeEb )
+__TBB_SYMBOL( _ZN3tbb10empty_task7executeEv )
+__TBB_SYMBOL( _ZN3tbb10empty_taskD0Ev )
+__TBB_SYMBOL( _ZN3tbb10empty_taskD1Ev )
+__TBB_SYMBOL( _ZTIN3tbb10empty_taskE )
+__TBB_SYMBOL( _ZTSN3tbb10empty_taskE )
+__TBB_SYMBOL( _ZTVN3tbb10empty_taskE )
+
+#if !TBB_NO_LEGACY
+/* task_v2.cpp */
+__TBB_SYMBOL( _ZN3tbb4task7destroyERS0_ )
+#endif /* !TBB_NO_LEGACY */
+
+/* Exception handling in task scheduler */
+#if __TBB_TASK_GROUP_CONTEXT
+__TBB_SYMBOL( _ZNK3tbb8internal32allocate_root_with_context_proxy8allocateEm )
+__TBB_SYMBOL( _ZNK3tbb8internal32allocate_root_with_context_proxy4freeERNS_4taskE )
+__TBB_SYMBOL( _ZN3tbb4task12change_groupERNS_18task_group_contextE )
+__TBB_SYMBOL( _ZNK3tbb18task_group_context28is_group_execution_cancelledEv )
+__TBB_SYMBOL( _ZN3tbb18task_group_context22cancel_group_executionEv )
+__TBB_SYMBOL( _ZN3tbb18task_group_context26register_pending_exceptionEv )
+__TBB_SYMBOL( _ZN3tbb18task_group_context5resetEv )
+__TBB_SYMBOL( _ZN3tbb18task_group_context4initEv )
+__TBB_SYMBOL( _ZN3tbb18task_group_contextD1Ev )
+__TBB_SYMBOL( _ZN3tbb18task_group_contextD2Ev )
+#if __TBB_TASK_PRIORITY
+__TBB_SYMBOL( _ZN3tbb18task_group_context12set_priorityENS_10priority_tE )
+__TBB_SYMBOL( _ZNK3tbb18task_group_context8priorityEv )
+#endif /* __TBB_TASK_PRIORITY */
+__TBB_SYMBOL( _ZNK3tbb18captured_exception4nameEv )
+__TBB_SYMBOL( _ZNK3tbb18captured_exception4whatEv )
+__TBB_SYMBOL( _ZN3tbb18captured_exception10throw_selfEv )
+__TBB_SYMBOL( _ZN3tbb18captured_exception3setEPKcS2_ )
+__TBB_SYMBOL( _ZN3tbb18captured_exception4moveEv )
+__TBB_SYMBOL( _ZN3tbb18captured_exception5clearEv )
+__TBB_SYMBOL( _ZN3tbb18captured_exception7destroyEv )
+__TBB_SYMBOL( _ZN3tbb18captured_exception8allocateEPKcS2_ )
+__TBB_SYMBOL( _ZN3tbb18captured_exceptionD0Ev )
+__TBB_SYMBOL( _ZN3tbb18captured_exceptionD1Ev )
+__TBB_SYMBOL( _ZN3tbb18captured_exceptionD2Ev )
+__TBB_SYMBOL( _ZTIN3tbb18captured_exceptionE )
+__TBB_SYMBOL( _ZTSN3tbb18captured_exceptionE )
+__TBB_SYMBOL( _ZTVN3tbb18captured_exceptionE )
+__TBB_SYMBOL( _ZN3tbb13tbb_exceptionD2Ev )
+__TBB_SYMBOL( _ZTIN3tbb13tbb_exceptionE )
+__TBB_SYMBOL( _ZTSN3tbb13tbb_exceptionE )
+__TBB_SYMBOL( _ZTVN3tbb13tbb_exceptionE )
+#endif /* __TBB_TASK_GROUP_CONTEXT */
+
+/* Symbols for exceptions thrown from TBB */
+__TBB_SYMBOL( _ZN3tbb8internal33throw_bad_last_alloc_exception_v4Ev )
+__TBB_SYMBOL( _ZN3tbb8internal18throw_exception_v4ENS0_12exception_idE )
+__TBB_SYMBOL( _ZN3tbb14bad_last_allocD0Ev )
+__TBB_SYMBOL( _ZN3tbb14bad_last_allocD1Ev )
+__TBB_SYMBOL( _ZNK3tbb14bad_last_alloc4whatEv )
+__TBB_SYMBOL( _ZTIN3tbb14bad_last_allocE )
+__TBB_SYMBOL( _ZTSN3tbb14bad_last_allocE )
+__TBB_SYMBOL( _ZTVN3tbb14bad_last_allocE )
+__TBB_SYMBOL( _ZN3tbb12missing_waitD0Ev )
+__TBB_SYMBOL( _ZN3tbb12missing_waitD1Ev )
+__TBB_SYMBOL( _ZNK3tbb12missing_wait4whatEv )
+__TBB_SYMBOL( _ZTIN3tbb12missing_waitE )
+__TBB_SYMBOL( _ZTSN3tbb12missing_waitE )
+__TBB_SYMBOL( _ZTVN3tbb12missing_waitE )
+__TBB_SYMBOL( _ZN3tbb27invalid_multiple_schedulingD0Ev )
+__TBB_SYMBOL( _ZN3tbb27invalid_multiple_schedulingD1Ev )
+__TBB_SYMBOL( _ZNK3tbb27invalid_multiple_scheduling4whatEv )
+__TBB_SYMBOL( _ZTIN3tbb27invalid_multiple_schedulingE )
+__TBB_SYMBOL( _ZTSN3tbb27invalid_multiple_schedulingE )
+__TBB_SYMBOL( _ZTVN3tbb27invalid_multiple_schedulingE )
+__TBB_SYMBOL( _ZN3tbb13improper_lockD0Ev )
+__TBB_SYMBOL( _ZN3tbb13improper_lockD1Ev )
+__TBB_SYMBOL( _ZNK3tbb13improper_lock4whatEv )
+__TBB_SYMBOL( _ZTIN3tbb13improper_lockE )
+__TBB_SYMBOL( _ZTSN3tbb13improper_lockE )
+__TBB_SYMBOL( _ZTVN3tbb13improper_lockE )
+
+/* tbb_misc.cpp */
+__TBB_SYMBOL( _ZN3tbb17assertion_failureEPKciS1_S1_ )
+__TBB_SYMBOL( _ZN3tbb21set_assertion_handlerEPFvPKciS1_S1_E )
+__TBB_SYMBOL( _ZN3tbb8internal36get_initial_auto_partitioner_divisorEv )
+__TBB_SYMBOL( _ZN3tbb8internal13handle_perrorEiPKc )
+__TBB_SYMBOL( _ZN3tbb8internal15runtime_warningEPKcz )
+__TBB_SYMBOL( TBB_runtime_interface_version )
+
+/* tbb_main.cpp */
+__TBB_SYMBOL( _ZN3tbb8internal32itt_load_pointer_with_acquire_v3EPKv )
+__TBB_SYMBOL( _ZN3tbb8internal33itt_store_pointer_with_release_v3EPvS1_ )
+__TBB_SYMBOL( _ZN3tbb8internal18call_itt_notify_v5EiPv )
+__TBB_SYMBOL( _ZN3tbb8internal20itt_set_sync_name_v3EPvPKc )
+__TBB_SYMBOL( _ZN3tbb8internal19itt_load_pointer_v3EPKv )
+
+/* pipeline.cpp */
+__TBB_SYMBOL( _ZTIN3tbb6filterE )
+__TBB_SYMBOL( _ZTSN3tbb6filterE )
+__TBB_SYMBOL( _ZTVN3tbb6filterE )
+__TBB_SYMBOL( _ZN3tbb6filterD2Ev )
+__TBB_SYMBOL( _ZN3tbb8pipeline10add_filterERNS_6filterE )
+__TBB_SYMBOL( _ZN3tbb8pipeline12inject_tokenERNS_4taskE )
+__TBB_SYMBOL( _ZN3tbb8pipeline13remove_filterERNS_6filterE )
+__TBB_SYMBOL( _ZN3tbb8pipeline3runEm )
+#if __TBB_TASK_GROUP_CONTEXT
+__TBB_SYMBOL( _ZN3tbb8pipeline3runEmRNS_18task_group_contextE )
+#endif
+__TBB_SYMBOL( _ZN3tbb8pipeline5clearEv )
+__TBB_SYMBOL( _ZN3tbb19thread_bound_filter12process_itemEv )
+__TBB_SYMBOL( _ZN3tbb19thread_bound_filter16try_process_itemEv )
+__TBB_SYMBOL( _ZTIN3tbb8pipelineE )
+__TBB_SYMBOL( _ZTSN3tbb8pipelineE )
+__TBB_SYMBOL( _ZTVN3tbb8pipelineE )
+__TBB_SYMBOL( _ZN3tbb8pipelineC1Ev )
+__TBB_SYMBOL( _ZN3tbb8pipelineC2Ev )
+__TBB_SYMBOL( _ZN3tbb8pipelineD0Ev )
+__TBB_SYMBOL( _ZN3tbb8pipelineD1Ev )
+__TBB_SYMBOL( _ZN3tbb8pipelineD2Ev )
+__TBB_SYMBOL( _ZN3tbb6filter16set_end_of_inputEv )
+
+/* queuing_rw_mutex.cpp */
+__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex18internal_constructEv )
+__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock17upgrade_to_writerEv )
+__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock19downgrade_to_readerEv )
+__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock7acquireERS0_b )
+__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock7releaseEv )
+__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock11try_acquireERS0_b )
+
+/* reader_writer_lock.cpp */
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock11scoped_lock16internal_destroyEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock11scoped_lock18internal_constructERS1_ )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock13try_lock_readEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock16scoped_lock_read16internal_destroyEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock16scoped_lock_read18internal_constructERS1_ )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock16internal_destroyEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock18internal_constructEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock4lockEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock6unlockEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock8try_lockEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock9lock_readEv )
+
+#if !TBB_NO_LEGACY
+/* spin_rw_mutex.cpp v2 */
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex16internal_upgradeEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex22internal_itt_releasingEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_acquire_readerEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_acquire_writerEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex18internal_downgradeEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_release_readerEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_release_writerEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex27internal_try_acquire_readerEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex27internal_try_acquire_writerEPS0_ )
+#endif
+
+/* spin_rw_mutex v3 */
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v318internal_constructEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v316internal_upgradeEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v318internal_downgradeEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_acquire_readerEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_acquire_writerEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_release_readerEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_release_writerEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v327internal_try_acquire_readerEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v327internal_try_acquire_writerEv )
+
+/* spin_mutex.cpp */
+__TBB_SYMBOL( _ZN3tbb10spin_mutex11scoped_lock16internal_acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb10spin_mutex11scoped_lock16internal_releaseEv )
+__TBB_SYMBOL( _ZN3tbb10spin_mutex11scoped_lock20internal_try_acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb10spin_mutex18internal_constructEv )
+
+/* mutex.cpp */
+__TBB_SYMBOL( _ZN3tbb5mutex11scoped_lock16internal_acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb5mutex11scoped_lock16internal_releaseEv )
+__TBB_SYMBOL( _ZN3tbb5mutex11scoped_lock20internal_try_acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb5mutex16internal_destroyEv )
+__TBB_SYMBOL( _ZN3tbb5mutex18internal_constructEv )
+
+/* recursive_mutex.cpp */
+__TBB_SYMBOL( _ZN3tbb15recursive_mutex11scoped_lock16internal_acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb15recursive_mutex11scoped_lock16internal_releaseEv )
+__TBB_SYMBOL( _ZN3tbb15recursive_mutex11scoped_lock20internal_try_acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb15recursive_mutex16internal_destroyEv )
+__TBB_SYMBOL( _ZN3tbb15recursive_mutex18internal_constructEv )
+
+/* QueuingMutex.cpp */
+__TBB_SYMBOL( _ZN3tbb13queuing_mutex18internal_constructEv )
+__TBB_SYMBOL( _ZN3tbb13queuing_mutex11scoped_lock7acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb13queuing_mutex11scoped_lock7releaseEv )
+__TBB_SYMBOL( _ZN3tbb13queuing_mutex11scoped_lock11try_acquireERS0_ )
+
+/* critical_section.cpp */
+__TBB_SYMBOL( _ZN3tbb8internal19critical_section_v418internal_constructEv )
+
+#if !TBB_NO_LEGACY
+/* concurrent_hash_map */
+__TBB_SYMBOL( _ZNK3tbb8internal21hash_map_segment_base23internal_grow_predicateEv )
+
+/* concurrent_queue.cpp v2 */
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base12internal_popEPv )
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base13internal_pushEPKv )
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base21internal_set_capacityElm )
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base23internal_pop_if_presentEPv )
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base25internal_push_if_not_fullEPKv )
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_baseC2Em )
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_baseD2Ev )
+__TBB_SYMBOL( _ZTIN3tbb8internal21concurrent_queue_baseE )
+__TBB_SYMBOL( _ZTSN3tbb8internal21concurrent_queue_baseE )
+__TBB_SYMBOL( _ZTVN3tbb8internal21concurrent_queue_baseE )
+__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_base6assignERKS1_ )
+__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_base7advanceEv )
+__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_baseC2ERKNS0_21concurrent_queue_baseE )
+__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_baseD2Ev )
+__TBB_SYMBOL( _ZNK3tbb8internal21concurrent_queue_base13internal_sizeEv )
+#endif
+
+/* concurrent_queue v3 */
+/* constructors */
+__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v3C2Em )
+__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3E )
+__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3Em )
+/* destructors */
+__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v3D2Ev )
+__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v3D2Ev )
+/* typeinfo */
+__TBB_SYMBOL( _ZTIN3tbb8internal24concurrent_queue_base_v3E )
+__TBB_SYMBOL( _ZTSN3tbb8internal24concurrent_queue_base_v3E )
+/* vtable */
+__TBB_SYMBOL( _ZTVN3tbb8internal24concurrent_queue_base_v3E )
+/* methods */
+__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v36assignERKS1_ )
+__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v37advanceEv )
+__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_v321internal_finish_clearEv )
+__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v321internal_set_capacityElm )
+__TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v313internal_sizeEv )
+__TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v314internal_emptyEv )
+__TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v324internal_throw_exceptionEv )
+__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v36assignERKS1_ )
+
+#if !TBB_NO_LEGACY
+/* concurrent_vector.cpp v2 */
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base13internal_copyERKS1_mPFvPvPKvmE )
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base14internal_clearEPFvPvmEb )
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base15internal_assignERKS1_mPFvPvmEPFvS4_PKvmESA_ )
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base16internal_grow_byEmmPFvPvmE )
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base16internal_reserveEmmm )
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base18internal_push_backEmRm )
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base25internal_grow_to_at_leastEmmPFvPvmE )
+__TBB_SYMBOL( _ZNK3tbb8internal22concurrent_vector_base17internal_capacityEv )
+#endif
+
+/* concurrent_vector v3 */
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v313internal_copyERKS1_mPFvPvPKvmE )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v314internal_clearEPFvPvmE )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v315internal_assignERKS1_mPFvPvmEPFvS4_PKvmESA_ )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v316internal_grow_byEmmPFvPvPKvmES4_ )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v316internal_reserveEmmm )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v318internal_push_backEmRm )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v325internal_grow_to_at_leastEmmPFvPvPKvmES4_ )
+__TBB_SYMBOL( _ZNK3tbb8internal25concurrent_vector_base_v317internal_capacityEv )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v316internal_compactEmPvPFvS2_mEPFvS2_PKvmE )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v313internal_swapERS1_ )
+__TBB_SYMBOL( _ZNK3tbb8internal25concurrent_vector_base_v324internal_throw_exceptionEm )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v3D2Ev )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v315internal_resizeEmmmPKvPFvPvmEPFvS4_S3_mE )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v337internal_grow_to_at_least_with_resultEmmPFvPvPKvmES4_ )
+
+/* tbb_thread */
+__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v320hardware_concurrencyEv )
+__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v36detachEv )
+__TBB_SYMBOL( _ZN3tbb8internal16thread_get_id_v3Ev )
+__TBB_SYMBOL( _ZN3tbb8internal15free_closure_v3EPv )
+__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v34joinEv )
+__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v314internal_startEPFPvS2_ES2_ )
+__TBB_SYMBOL( _ZN3tbb8internal19allocate_closure_v3Em )
+__TBB_SYMBOL( _ZN3tbb8internal7move_v3ERNS0_13tbb_thread_v3ES2_ )
+__TBB_SYMBOL( _ZN3tbb8internal15thread_yield_v3Ev )
+__TBB_SYMBOL( _ZN3tbb8internal15thread_sleep_v3ERKNS_10tick_count10interval_tE )
+
+#undef __TBB_SYMBOL
diff --git a/src/tbb/lin64ipf-tbb-export.def b/src/tbb/lin64ipf-tbb-export.def
index b502e19..76fc8ef 100644
--- a/src/tbb/lin64ipf-tbb-export.def
+++ b/src/tbb/lin64ipf-tbb-export.def
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -26,356 +26,11 @@
     the GNU General Public License.
 */
 
-#include "tbb/tbb_config.h"
-
 {
 global:
 
-/* cache_aligned_allocator.cpp */
-_ZN3tbb8internal12NFS_AllocateEmmPv;
-_ZN3tbb8internal15NFS_GetLineSizeEv;
-_ZN3tbb8internal8NFS_FreeEPv;
-_ZN3tbb8internal23allocate_via_handler_v3Em;
-_ZN3tbb8internal25deallocate_via_handler_v3EPv;
-_ZN3tbb8internal17is_malloc_used_v3Ev;
-
-/* task.cpp v3 */
-_ZN3tbb4task13note_affinityEt;
-_ZN3tbb4task22internal_set_ref_countEi;
-_ZN3tbb4task28internal_decrement_ref_countEv;
-_ZN3tbb4task22spawn_and_wait_for_allERNS_9task_listE;
-_ZN3tbb4task4selfEv;
-_ZN3tbb10interface58internal9task_base7destroyERNS_4taskE;
-_ZNK3tbb4task26is_owned_by_current_threadEv;
-_ZN3tbb8internal19allocate_root_proxy4freeERNS_4taskE;
-_ZN3tbb8internal19allocate_root_proxy8allocateEm;
-_ZN3tbb8internal28affinity_partitioner_base_v36resizeEj;
-_ZNK3tbb8internal20allocate_child_proxy4freeERNS_4taskE;
-_ZNK3tbb8internal20allocate_child_proxy8allocateEm;
-_ZNK3tbb8internal27allocate_continuation_proxy4freeERNS_4taskE;
-_ZNK3tbb8internal27allocate_continuation_proxy8allocateEm;
-_ZNK3tbb8internal34allocate_additional_child_of_proxy4freeERNS_4taskE;
-_ZNK3tbb8internal34allocate_additional_child_of_proxy8allocateEm;
-_ZTIN3tbb4taskE;
-_ZTSN3tbb4taskE;
-_ZTVN3tbb4taskE;
-_ZN3tbb19task_scheduler_init19default_num_threadsEv;
-_ZN3tbb19task_scheduler_init10initializeEim;
-_ZN3tbb19task_scheduler_init10initializeEi;
-_ZN3tbb19task_scheduler_init9terminateEv;
-_ZN3tbb8internal26task_scheduler_observer_v37observeEb;
-_ZN3tbb10empty_task7executeEv;
-_ZN3tbb10empty_taskD0Ev;
-_ZN3tbb10empty_taskD1Ev;
-_ZTIN3tbb10empty_taskE;
-_ZTSN3tbb10empty_taskE;
-_ZTVN3tbb10empty_taskE;
-
-#if !TBB_NO_LEGACY
-/* task_v2.cpp */
-_ZN3tbb4task7destroyERS0_;
-#endif /* !TBB_NO_LEGACY */
-
-/* Exception handling in task scheduler */
-#if __TBB_TASK_GROUP_CONTEXT
-_ZNK3tbb8internal32allocate_root_with_context_proxy8allocateEm;
-_ZNK3tbb8internal32allocate_root_with_context_proxy4freeERNS_4taskE;
-_ZNK3tbb18task_group_context28is_group_execution_cancelledEv;
-_ZN3tbb18task_group_context22cancel_group_executionEv;
-_ZN3tbb18task_group_context26register_pending_exceptionEv;
-_ZN3tbb18task_group_context5resetEv;
-_ZN3tbb18task_group_context4initEv;
-_ZN3tbb18task_group_contextD1Ev;
-_ZN3tbb18task_group_contextD2Ev;
-_ZNK3tbb18captured_exception4nameEv;
-_ZNK3tbb18captured_exception4whatEv;
-_ZN3tbb18captured_exception10throw_selfEv;
-_ZN3tbb18captured_exception3setEPKcS2_;
-_ZN3tbb18captured_exception4moveEv;
-_ZN3tbb18captured_exception5clearEv;
-_ZN3tbb18captured_exception7destroyEv;
-_ZN3tbb18captured_exception8allocateEPKcS2_;
-_ZN3tbb18captured_exceptionD0Ev;
-_ZN3tbb18captured_exceptionD1Ev;
-_ZTIN3tbb18captured_exceptionE;
-_ZTSN3tbb18captured_exceptionE;
-_ZTVN3tbb18captured_exceptionE;
-_ZN3tbb13tbb_exceptionD2Ev;
-_ZTIN3tbb13tbb_exceptionE;
-_ZTSN3tbb13tbb_exceptionE;
-_ZTVN3tbb13tbb_exceptionE;
-#endif /* __TBB_TASK_GROUP_CONTEXT */
-
-/* Symbols for exceptions thrown from TBB */
-_ZN3tbb8internal33throw_bad_last_alloc_exception_v4Ev;
-_ZN3tbb8internal18throw_exception_v4ENS0_12exception_idE;
-_ZN3tbb14bad_last_allocD0Ev;
-_ZN3tbb14bad_last_allocD1Ev;
-_ZNK3tbb14bad_last_alloc4whatEv;
-_ZTIN3tbb14bad_last_allocE;
-_ZTSN3tbb14bad_last_allocE;
-_ZTVN3tbb14bad_last_allocE;
-_ZN3tbb12missing_waitD0Ev;
-_ZN3tbb12missing_waitD1Ev;
-_ZNK3tbb12missing_wait4whatEv;
-_ZTIN3tbb12missing_waitE;
-_ZTSN3tbb12missing_waitE;
-_ZTVN3tbb12missing_waitE;
-_ZN3tbb27invalid_multiple_schedulingD0Ev;
-_ZN3tbb27invalid_multiple_schedulingD1Ev;
-_ZNK3tbb27invalid_multiple_scheduling4whatEv;
-_ZTIN3tbb27invalid_multiple_schedulingE;
-_ZTSN3tbb27invalid_multiple_schedulingE;
-_ZTVN3tbb27invalid_multiple_schedulingE;
-_ZN3tbb13improper_lockD0Ev;
-_ZN3tbb13improper_lockD1Ev;
-_ZNK3tbb13improper_lock4whatEv;
-_ZTIN3tbb13improper_lockE;
-_ZTSN3tbb13improper_lockE;
-_ZTVN3tbb13improper_lockE;
-
-/* tbb_misc.cpp */
-_ZN3tbb17assertion_failureEPKciS1_S1_;
-_ZN3tbb21set_assertion_handlerEPFvPKciS1_S1_E;
-_ZN3tbb8internal36get_initial_auto_partitioner_divisorEv;
-_ZN3tbb8internal13handle_perrorEiPKc;
-_ZN3tbb8internal15runtime_warningEPKcz;
-TBB_runtime_interface_version;
-
-/* itt_notify.cpp */
-_ZN3tbb8internal32itt_load_pointer_with_acquire_v3EPKv;
-_ZN3tbb8internal33itt_store_pointer_with_release_v3EPvS1_;
-_ZN3tbb8internal20itt_set_sync_name_v3EPvPKc;
-_ZN3tbb8internal19itt_load_pointer_v3EPKv;
-
-/* pipeline.cpp */
-_ZTIN3tbb6filterE;
-_ZTSN3tbb6filterE;
-_ZTVN3tbb6filterE;
-_ZN3tbb6filterD2Ev;
-_ZN3tbb8pipeline10add_filterERNS_6filterE;
-_ZN3tbb8pipeline12inject_tokenERNS_4taskE;
-_ZN3tbb8pipeline13remove_filterERNS_6filterE;
-_ZN3tbb8pipeline3runEm;
-#if __TBB_TASK_GROUP_CONTEXT
-_ZN3tbb8pipeline3runEmRNS_18task_group_contextE;
-#endif
-_ZN3tbb8pipeline5clearEv;
-_ZN3tbb19thread_bound_filter12process_itemEv;
-_ZN3tbb19thread_bound_filter16try_process_itemEv;
-_ZTIN3tbb8pipelineE;
-_ZTSN3tbb8pipelineE;
-_ZTVN3tbb8pipelineE;
-_ZN3tbb8pipelineC1Ev;
-_ZN3tbb8pipelineC2Ev;
-_ZN3tbb8pipelineD0Ev;
-_ZN3tbb8pipelineD1Ev;
-_ZN3tbb8pipelineD2Ev;
-
-/* queuing_rw_mutex.cpp */
-_ZN3tbb16queuing_rw_mutex18internal_constructEv;
-_ZN3tbb16queuing_rw_mutex11scoped_lock17upgrade_to_writerEv;
-_ZN3tbb16queuing_rw_mutex11scoped_lock19downgrade_to_readerEv;
-_ZN3tbb16queuing_rw_mutex11scoped_lock7acquireERS0_b;
-_ZN3tbb16queuing_rw_mutex11scoped_lock7releaseEv;
-_ZN3tbb16queuing_rw_mutex11scoped_lock11try_acquireERS0_b;
-
-/* reader_writer_lock.cpp */
-_ZN3tbb10interface518reader_writer_lock11scoped_lock16internal_destroyEv;
-_ZN3tbb10interface518reader_writer_lock11scoped_lock18internal_constructERS1_;
-_ZN3tbb10interface518reader_writer_lock13try_lock_readEv;
-_ZN3tbb10interface518reader_writer_lock16scoped_lock_read16internal_destroyEv;
-_ZN3tbb10interface518reader_writer_lock16scoped_lock_read18internal_constructERS1_;
-_ZN3tbb10interface518reader_writer_lock16internal_destroyEv;
-_ZN3tbb10interface518reader_writer_lock18internal_constructEv;
-_ZN3tbb10interface518reader_writer_lock4lockEv;
-_ZN3tbb10interface518reader_writer_lock6unlockEv;
-_ZN3tbb10interface518reader_writer_lock8try_lockEv;
-_ZN3tbb10interface518reader_writer_lock9lock_readEv;
-
-#if !TBB_NO_LEGACY
-/* spin_rw_mutex.cpp v2 */
-_ZN3tbb13spin_rw_mutex16internal_upgradeEPS0_;
-_ZN3tbb13spin_rw_mutex22internal_itt_releasingEPS0_;
-_ZN3tbb13spin_rw_mutex23internal_acquire_readerEPS0_;
-_ZN3tbb13spin_rw_mutex23internal_acquire_writerEPS0_;
-_ZN3tbb13spin_rw_mutex18internal_downgradeEPS0_;
-_ZN3tbb13spin_rw_mutex23internal_release_readerEPS0_;
-_ZN3tbb13spin_rw_mutex23internal_release_writerEPS0_;
-_ZN3tbb13spin_rw_mutex27internal_try_acquire_readerEPS0_;
-_ZN3tbb13spin_rw_mutex27internal_try_acquire_writerEPS0_;
-#endif
-
-/* spin_rw_mutex v3 */
-_ZN3tbb16spin_rw_mutex_v318internal_constructEv;
-_ZN3tbb16spin_rw_mutex_v316internal_upgradeEv;
-_ZN3tbb16spin_rw_mutex_v318internal_downgradeEv;
-_ZN3tbb16spin_rw_mutex_v323internal_acquire_readerEv;
-_ZN3tbb16spin_rw_mutex_v323internal_acquire_writerEv;
-_ZN3tbb16spin_rw_mutex_v323internal_release_readerEv;
-_ZN3tbb16spin_rw_mutex_v323internal_release_writerEv;
-_ZN3tbb16spin_rw_mutex_v327internal_try_acquire_readerEv;
-_ZN3tbb16spin_rw_mutex_v327internal_try_acquire_writerEv;
-
-/* spin_mutex.cpp */
-_ZN3tbb10spin_mutex18internal_constructEv;
-_ZN3tbb10spin_mutex11scoped_lock16internal_acquireERS0_;
-_ZN3tbb10spin_mutex11scoped_lock16internal_releaseEv;
-_ZN3tbb10spin_mutex11scoped_lock20internal_try_acquireERS0_;
-
-/* mutex.cpp */
-_ZN3tbb5mutex11scoped_lock16internal_acquireERS0_;
-_ZN3tbb5mutex11scoped_lock16internal_releaseEv;
-_ZN3tbb5mutex11scoped_lock20internal_try_acquireERS0_;
-_ZN3tbb5mutex16internal_destroyEv;
-_ZN3tbb5mutex18internal_constructEv;
-
-/* recursive_mutex.cpp */
-_ZN3tbb15recursive_mutex11scoped_lock16internal_acquireERS0_;
-_ZN3tbb15recursive_mutex11scoped_lock16internal_releaseEv;
-_ZN3tbb15recursive_mutex11scoped_lock20internal_try_acquireERS0_;
-_ZN3tbb15recursive_mutex16internal_destroyEv;
-_ZN3tbb15recursive_mutex18internal_constructEv;
-
-/* QueuingMutex.cpp */
-_ZN3tbb13queuing_mutex18internal_constructEv;
-_ZN3tbb13queuing_mutex11scoped_lock7acquireERS0_;
-_ZN3tbb13queuing_mutex11scoped_lock7releaseEv;
-_ZN3tbb13queuing_mutex11scoped_lock11try_acquireERS0_;
-
-/* critical_section.cpp */
-_ZN3tbb8internal19critical_section_v418internal_constructEv;
-
-#if !TBB_NO_LEGACY
-/* concurrent_hash_map */
-_ZNK3tbb8internal21hash_map_segment_base23internal_grow_predicateEv;
-
-/* concurrent_queue.cpp v2 */
-_ZN3tbb8internal21concurrent_queue_base12internal_popEPv;
-_ZN3tbb8internal21concurrent_queue_base13internal_pushEPKv;
-_ZN3tbb8internal21concurrent_queue_base21internal_set_capacityElm;
-_ZN3tbb8internal21concurrent_queue_base23internal_pop_if_presentEPv;
-_ZN3tbb8internal21concurrent_queue_base25internal_push_if_not_fullEPKv;
-_ZN3tbb8internal21concurrent_queue_baseC2Em;
-_ZN3tbb8internal21concurrent_queue_baseD2Ev;
-_ZTIN3tbb8internal21concurrent_queue_baseE;
-_ZTSN3tbb8internal21concurrent_queue_baseE;
-_ZTVN3tbb8internal21concurrent_queue_baseE;
-_ZN3tbb8internal30concurrent_queue_iterator_base6assignERKS1_;
-_ZN3tbb8internal30concurrent_queue_iterator_base7advanceEv;
-_ZN3tbb8internal30concurrent_queue_iterator_baseC2ERKNS0_21concurrent_queue_baseE;
-_ZN3tbb8internal30concurrent_queue_iterator_baseD2Ev;
-_ZNK3tbb8internal21concurrent_queue_base13internal_sizeEv;
-#endif
-
-/* concurrent_queue v3 */
-/* constructors */
-_ZN3tbb8internal24concurrent_queue_base_v3C2Em;
-_ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3E;
-_ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3Em;
-/* destructors */
-_ZN3tbb8internal24concurrent_queue_base_v3D2Ev;
-_ZN3tbb8internal33concurrent_queue_iterator_base_v3D2Ev;
-/* typeinfo */
-_ZTIN3tbb8internal24concurrent_queue_base_v3E;
-_ZTSN3tbb8internal24concurrent_queue_base_v3E;
-/* vtable */
-_ZTVN3tbb8internal24concurrent_queue_base_v3E;
-/* methods */
-_ZN3tbb8internal33concurrent_queue_iterator_base_v36assignERKS1_;
-_ZN3tbb8internal33concurrent_queue_iterator_base_v37advanceEv;
-_ZN3tbb8internal24concurrent_queue_base_v313internal_pushEPKv;
-_ZN3tbb8internal24concurrent_queue_base_v325internal_push_if_not_fullEPKv;
-_ZN3tbb8internal24concurrent_queue_base_v312internal_popEPv;
-_ZN3tbb8internal24concurrent_queue_base_v323internal_pop_if_presentEPv;
-_ZN3tbb8internal24concurrent_queue_base_v321internal_finish_clearEv;
-_ZN3tbb8internal24concurrent_queue_base_v321internal_set_capacityElm;
-_ZNK3tbb8internal24concurrent_queue_base_v313internal_sizeEv;
-_ZNK3tbb8internal24concurrent_queue_base_v314internal_emptyEv;
-_ZNK3tbb8internal24concurrent_queue_base_v324internal_throw_exceptionEv;
-_ZN3tbb8internal24concurrent_queue_base_v36assignERKS1_;
-
-#if !TBB_NO_LEGACY
-/* concurrent_vector.cpp v2 */
-_ZN3tbb8internal22concurrent_vector_base13internal_copyERKS1_mPFvPvPKvmE;
-_ZN3tbb8internal22concurrent_vector_base14internal_clearEPFvPvmEb;
-_ZN3tbb8internal22concurrent_vector_base15internal_assignERKS1_mPFvPvmEPFvS4_PKvmESA_;
-_ZN3tbb8internal22concurrent_vector_base16internal_grow_byEmmPFvPvmE;
-_ZN3tbb8internal22concurrent_vector_base16internal_reserveEmmm;
-_ZN3tbb8internal22concurrent_vector_base18internal_push_backEmRm;
-_ZN3tbb8internal22concurrent_vector_base25internal_grow_to_at_leastEmmPFvPvmE;
-_ZNK3tbb8internal22concurrent_vector_base17internal_capacityEv;
-#endif
-
-/* concurrent_vector v3 */
-_ZN3tbb8internal25concurrent_vector_base_v313internal_copyERKS1_mPFvPvPKvmE;
-_ZN3tbb8internal25concurrent_vector_base_v314internal_clearEPFvPvmE;
-_ZN3tbb8internal25concurrent_vector_base_v315internal_assignERKS1_mPFvPvmEPFvS4_PKvmESA_;
-_ZN3tbb8internal25concurrent_vector_base_v316internal_grow_byEmmPFvPvPKvmES4_;
-_ZN3tbb8internal25concurrent_vector_base_v316internal_reserveEmmm;
-_ZN3tbb8internal25concurrent_vector_base_v318internal_push_backEmRm;
-_ZN3tbb8internal25concurrent_vector_base_v325internal_grow_to_at_leastEmmPFvPvPKvmES4_;
-_ZNK3tbb8internal25concurrent_vector_base_v317internal_capacityEv;
-_ZN3tbb8internal25concurrent_vector_base_v316internal_compactEmPvPFvS2_mEPFvS2_PKvmE;
-_ZN3tbb8internal25concurrent_vector_base_v313internal_swapERS1_;
-_ZNK3tbb8internal25concurrent_vector_base_v324internal_throw_exceptionEm;
-_ZN3tbb8internal25concurrent_vector_base_v3D2Ev;
-_ZN3tbb8internal25concurrent_vector_base_v315internal_resizeEmmmPKvPFvPvmEPFvS4_S3_mE;
-_ZN3tbb8internal25concurrent_vector_base_v337internal_grow_to_at_least_with_resultEmmPFvPvPKvmES4_;
-
-/* tbb_thread */
-_ZN3tbb8internal13tbb_thread_v320hardware_concurrencyEv;
-_ZN3tbb8internal13tbb_thread_v36detachEv;
-_ZN3tbb8internal16thread_get_id_v3Ev;
-_ZN3tbb8internal15free_closure_v3EPv;
-_ZN3tbb8internal13tbb_thread_v34joinEv;
-_ZN3tbb8internal13tbb_thread_v314internal_startEPFPvS2_ES2_;
-_ZN3tbb8internal19allocate_closure_v3Em;
-_ZN3tbb8internal7move_v3ERNS0_13tbb_thread_v3ES2_;
-_ZN3tbb8internal15thread_yield_v3Ev;
-_ZN3tbb8internal15thread_sleep_v3ERKNS_10tick_count10interval_tE;
-
-/* asm functions */
-__TBB_machine_fetchadd1__TBB_full_fence;
-__TBB_machine_fetchadd2__TBB_full_fence;
-__TBB_machine_fetchadd4__TBB_full_fence;
-__TBB_machine_fetchadd8__TBB_full_fence;
-__TBB_machine_fetchstore1__TBB_full_fence;
-__TBB_machine_fetchstore2__TBB_full_fence;
-__TBB_machine_fetchstore4__TBB_full_fence;
-__TBB_machine_fetchstore8__TBB_full_fence;
-__TBB_machine_fetchadd1acquire;
-__TBB_machine_fetchadd1release;
-__TBB_machine_fetchadd2acquire;
-__TBB_machine_fetchadd2release;
-__TBB_machine_fetchadd4acquire;
-__TBB_machine_fetchadd4release;
-__TBB_machine_fetchadd8acquire;
-__TBB_machine_fetchadd8release;
-__TBB_machine_fetchstore1acquire;
-__TBB_machine_fetchstore1release;
-__TBB_machine_fetchstore2acquire;
-__TBB_machine_fetchstore2release;
-__TBB_machine_fetchstore4acquire;
-__TBB_machine_fetchstore4release;
-__TBB_machine_fetchstore8acquire;
-__TBB_machine_fetchstore8release;
-__TBB_machine_cmpswp1acquire;
-__TBB_machine_cmpswp1release;
-__TBB_machine_cmpswp1__TBB_full_fence;
-__TBB_machine_cmpswp2acquire;
-__TBB_machine_cmpswp2release;
-__TBB_machine_cmpswp2__TBB_full_fence;
-__TBB_machine_cmpswp4acquire;
-__TBB_machine_cmpswp4release;
-__TBB_machine_cmpswp4__TBB_full_fence;
-__TBB_machine_cmpswp8acquire;
-__TBB_machine_cmpswp8release;
-__TBB_machine_cmpswp8__TBB_full_fence;
-__TBB_machine_lg;
-__TBB_machine_lockbyte;
-__TBB_machine_pause;
-__TBB_machine_trylockbyte;
+#define __TBB_SYMBOL( sym ) sym;
+#include "lin64ipf-tbb-export.lst"
 
 local:
 
@@ -383,6 +38,9 @@ local:
 *3tbb*;
 *__TBB*;
 
+/* ITT symbols */
+__itt_*;
+
 /* Intel Compiler (libirc) symbols */
 __intel_*;
 _intel_*;
diff --git a/src/tbb/lin64ipf-tbb-export.lst b/src/tbb/lin64ipf-tbb-export.lst
new file mode 100644
index 0000000..ef25e8f
--- /dev/null
+++ b/src/tbb/lin64ipf-tbb-export.lst
@@ -0,0 +1,385 @@
+/*
+    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.
+*/
+
+#include "tbb/tbb_config.h"
+
+/* cache_aligned_allocator.cpp */
+__TBB_SYMBOL( _ZN3tbb8internal12NFS_AllocateEmmPv )
+__TBB_SYMBOL( _ZN3tbb8internal15NFS_GetLineSizeEv )
+__TBB_SYMBOL( _ZN3tbb8internal8NFS_FreeEPv )
+__TBB_SYMBOL( _ZN3tbb8internal23allocate_via_handler_v3Em )
+__TBB_SYMBOL( _ZN3tbb8internal25deallocate_via_handler_v3EPv )
+__TBB_SYMBOL( _ZN3tbb8internal17is_malloc_used_v3Ev )
+
+/* task.cpp v3 */
+__TBB_SYMBOL( _ZN3tbb4task13note_affinityEt )
+__TBB_SYMBOL( _ZN3tbb4task22internal_set_ref_countEi )
+__TBB_SYMBOL( _ZN3tbb4task28internal_decrement_ref_countEv )
+__TBB_SYMBOL( _ZN3tbb4task22spawn_and_wait_for_allERNS_9task_listE )
+__TBB_SYMBOL( _ZN3tbb4task4selfEv )
+__TBB_SYMBOL( _ZN3tbb10interface58internal9task_base7destroyERNS_4taskE )
+__TBB_SYMBOL( _ZNK3tbb4task26is_owned_by_current_threadEv )
+__TBB_SYMBOL( _ZN3tbb8internal19allocate_root_proxy4freeERNS_4taskE )
+__TBB_SYMBOL( _ZN3tbb8internal19allocate_root_proxy8allocateEm )
+__TBB_SYMBOL( _ZN3tbb8internal28affinity_partitioner_base_v36resizeEj )
+__TBB_SYMBOL( _ZNK3tbb8internal20allocate_child_proxy4freeERNS_4taskE )
+__TBB_SYMBOL( _ZNK3tbb8internal20allocate_child_proxy8allocateEm )
+__TBB_SYMBOL( _ZNK3tbb8internal27allocate_continuation_proxy4freeERNS_4taskE )
+__TBB_SYMBOL( _ZNK3tbb8internal27allocate_continuation_proxy8allocateEm )
+__TBB_SYMBOL( _ZNK3tbb8internal34allocate_additional_child_of_proxy4freeERNS_4taskE )
+__TBB_SYMBOL( _ZNK3tbb8internal34allocate_additional_child_of_proxy8allocateEm )
+__TBB_SYMBOL( _ZTIN3tbb4taskE )
+__TBB_SYMBOL( _ZTSN3tbb4taskE )
+__TBB_SYMBOL( _ZTVN3tbb4taskE )
+__TBB_SYMBOL( _ZN3tbb19task_scheduler_init19default_num_threadsEv )
+__TBB_SYMBOL( _ZN3tbb19task_scheduler_init10initializeEim )
+__TBB_SYMBOL( _ZN3tbb19task_scheduler_init10initializeEi )
+__TBB_SYMBOL( _ZN3tbb19task_scheduler_init9terminateEv )
+__TBB_SYMBOL( _ZN3tbb8internal26task_scheduler_observer_v37observeEb )
+__TBB_SYMBOL( _ZN3tbb10empty_task7executeEv )
+__TBB_SYMBOL( _ZN3tbb10empty_taskD0Ev )
+__TBB_SYMBOL( _ZN3tbb10empty_taskD1Ev )
+__TBB_SYMBOL( _ZTIN3tbb10empty_taskE )
+__TBB_SYMBOL( _ZTSN3tbb10empty_taskE )
+__TBB_SYMBOL( _ZTVN3tbb10empty_taskE )
+
+#if !TBB_NO_LEGACY
+/* task_v2.cpp */
+__TBB_SYMBOL( _ZN3tbb4task7destroyERS0_ )
+#endif /* !TBB_NO_LEGACY */
+
+/* Exception handling in task scheduler */
+#if __TBB_TASK_GROUP_CONTEXT
+__TBB_SYMBOL( _ZNK3tbb8internal32allocate_root_with_context_proxy8allocateEm )
+__TBB_SYMBOL( _ZNK3tbb8internal32allocate_root_with_context_proxy4freeERNS_4taskE )
+__TBB_SYMBOL( _ZN3tbb4task12change_groupERNS_18task_group_contextE )
+__TBB_SYMBOL( _ZNK3tbb18task_group_context28is_group_execution_cancelledEv )
+__TBB_SYMBOL( _ZN3tbb18task_group_context22cancel_group_executionEv )
+__TBB_SYMBOL( _ZN3tbb18task_group_context26register_pending_exceptionEv )
+__TBB_SYMBOL( _ZN3tbb18task_group_context5resetEv )
+__TBB_SYMBOL( _ZN3tbb18task_group_context4initEv )
+__TBB_SYMBOL( _ZN3tbb18task_group_contextD1Ev )
+__TBB_SYMBOL( _ZN3tbb18task_group_contextD2Ev )
+#if __TBB_TASK_PRIORITY
+__TBB_SYMBOL( _ZN3tbb18task_group_context12set_priorityENS_10priority_tE )
+__TBB_SYMBOL( _ZNK3tbb18task_group_context8priorityEv )
+#endif /* __TBB_TASK_PRIORITY */
+__TBB_SYMBOL( _ZNK3tbb18captured_exception4nameEv )
+__TBB_SYMBOL( _ZNK3tbb18captured_exception4whatEv )
+__TBB_SYMBOL( _ZN3tbb18captured_exception10throw_selfEv )
+__TBB_SYMBOL( _ZN3tbb18captured_exception3setEPKcS2_ )
+__TBB_SYMBOL( _ZN3tbb18captured_exception4moveEv )
+__TBB_SYMBOL( _ZN3tbb18captured_exception5clearEv )
+__TBB_SYMBOL( _ZN3tbb18captured_exception7destroyEv )
+__TBB_SYMBOL( _ZN3tbb18captured_exception8allocateEPKcS2_ )
+__TBB_SYMBOL( _ZN3tbb18captured_exceptionD0Ev )
+__TBB_SYMBOL( _ZN3tbb18captured_exceptionD1Ev )
+__TBB_SYMBOL( _ZN3tbb18captured_exceptionD2Ev )
+__TBB_SYMBOL( _ZTIN3tbb18captured_exceptionE )
+__TBB_SYMBOL( _ZTSN3tbb18captured_exceptionE )
+__TBB_SYMBOL( _ZTVN3tbb18captured_exceptionE )
+__TBB_SYMBOL( _ZN3tbb13tbb_exceptionD2Ev )
+__TBB_SYMBOL( _ZTIN3tbb13tbb_exceptionE )
+__TBB_SYMBOL( _ZTSN3tbb13tbb_exceptionE )
+__TBB_SYMBOL( _ZTVN3tbb13tbb_exceptionE )
+#endif /* __TBB_TASK_GROUP_CONTEXT */
+
+/* Symbols for exceptions thrown from TBB */
+__TBB_SYMBOL( _ZN3tbb8internal33throw_bad_last_alloc_exception_v4Ev )
+__TBB_SYMBOL( _ZN3tbb8internal18throw_exception_v4ENS0_12exception_idE )
+__TBB_SYMBOL( _ZN3tbb14bad_last_allocD0Ev )
+__TBB_SYMBOL( _ZN3tbb14bad_last_allocD1Ev )
+__TBB_SYMBOL( _ZNK3tbb14bad_last_alloc4whatEv )
+__TBB_SYMBOL( _ZTIN3tbb14bad_last_allocE )
+__TBB_SYMBOL( _ZTSN3tbb14bad_last_allocE )
+__TBB_SYMBOL( _ZTVN3tbb14bad_last_allocE )
+__TBB_SYMBOL( _ZN3tbb12missing_waitD0Ev )
+__TBB_SYMBOL( _ZN3tbb12missing_waitD1Ev )
+__TBB_SYMBOL( _ZNK3tbb12missing_wait4whatEv )
+__TBB_SYMBOL( _ZTIN3tbb12missing_waitE )
+__TBB_SYMBOL( _ZTSN3tbb12missing_waitE )
+__TBB_SYMBOL( _ZTVN3tbb12missing_waitE )
+__TBB_SYMBOL( _ZN3tbb27invalid_multiple_schedulingD0Ev )
+__TBB_SYMBOL( _ZN3tbb27invalid_multiple_schedulingD1Ev )
+__TBB_SYMBOL( _ZNK3tbb27invalid_multiple_scheduling4whatEv )
+__TBB_SYMBOL( _ZTIN3tbb27invalid_multiple_schedulingE )
+__TBB_SYMBOL( _ZTSN3tbb27invalid_multiple_schedulingE )
+__TBB_SYMBOL( _ZTVN3tbb27invalid_multiple_schedulingE )
+__TBB_SYMBOL( _ZN3tbb13improper_lockD0Ev )
+__TBB_SYMBOL( _ZN3tbb13improper_lockD1Ev )
+__TBB_SYMBOL( _ZNK3tbb13improper_lock4whatEv )
+__TBB_SYMBOL( _ZTIN3tbb13improper_lockE )
+__TBB_SYMBOL( _ZTSN3tbb13improper_lockE )
+__TBB_SYMBOL( _ZTVN3tbb13improper_lockE )
+
+/* tbb_misc.cpp */
+__TBB_SYMBOL( _ZN3tbb17assertion_failureEPKciS1_S1_ )
+__TBB_SYMBOL( _ZN3tbb21set_assertion_handlerEPFvPKciS1_S1_E )
+__TBB_SYMBOL( _ZN3tbb8internal36get_initial_auto_partitioner_divisorEv )
+__TBB_SYMBOL( _ZN3tbb8internal13handle_perrorEiPKc )
+__TBB_SYMBOL( _ZN3tbb8internal15runtime_warningEPKcz )
+__TBB_SYMBOL( TBB_runtime_interface_version )
+
+/* tbb_main.cpp */
+__TBB_SYMBOL( _ZN3tbb8internal32itt_load_pointer_with_acquire_v3EPKv )
+__TBB_SYMBOL( _ZN3tbb8internal33itt_store_pointer_with_release_v3EPvS1_ )
+__TBB_SYMBOL( _ZN3tbb8internal18call_itt_notify_v5EiPv )
+__TBB_SYMBOL( _ZN3tbb8internal20itt_set_sync_name_v3EPvPKc )
+__TBB_SYMBOL( _ZN3tbb8internal19itt_load_pointer_v3EPKv )
+
+/* pipeline.cpp */
+__TBB_SYMBOL( _ZTIN3tbb6filterE )
+__TBB_SYMBOL( _ZTSN3tbb6filterE )
+__TBB_SYMBOL( _ZTVN3tbb6filterE )
+__TBB_SYMBOL( _ZN3tbb6filterD2Ev )
+__TBB_SYMBOL( _ZN3tbb8pipeline10add_filterERNS_6filterE )
+__TBB_SYMBOL( _ZN3tbb8pipeline12inject_tokenERNS_4taskE )
+__TBB_SYMBOL( _ZN3tbb8pipeline13remove_filterERNS_6filterE )
+__TBB_SYMBOL( _ZN3tbb8pipeline3runEm )
+#if __TBB_TASK_GROUP_CONTEXT
+__TBB_SYMBOL( _ZN3tbb8pipeline3runEmRNS_18task_group_contextE )
+#endif
+__TBB_SYMBOL( _ZN3tbb8pipeline5clearEv )
+__TBB_SYMBOL( _ZN3tbb19thread_bound_filter12process_itemEv )
+__TBB_SYMBOL( _ZN3tbb19thread_bound_filter16try_process_itemEv )
+__TBB_SYMBOL( _ZTIN3tbb8pipelineE )
+__TBB_SYMBOL( _ZTSN3tbb8pipelineE )
+__TBB_SYMBOL( _ZTVN3tbb8pipelineE )
+__TBB_SYMBOL( _ZN3tbb8pipelineC1Ev )
+__TBB_SYMBOL( _ZN3tbb8pipelineC2Ev )
+__TBB_SYMBOL( _ZN3tbb8pipelineD0Ev )
+__TBB_SYMBOL( _ZN3tbb8pipelineD1Ev )
+__TBB_SYMBOL( _ZN3tbb8pipelineD2Ev )
+__TBB_SYMBOL( _ZN3tbb6filter16set_end_of_inputEv )
+
+/* queuing_rw_mutex.cpp */
+__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex18internal_constructEv )
+__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock17upgrade_to_writerEv )
+__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock19downgrade_to_readerEv )
+__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock7acquireERS0_b )
+__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock7releaseEv )
+__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock11try_acquireERS0_b )
+
+/* reader_writer_lock.cpp */
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock11scoped_lock16internal_destroyEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock11scoped_lock18internal_constructERS1_ )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock13try_lock_readEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock16scoped_lock_read16internal_destroyEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock16scoped_lock_read18internal_constructERS1_ )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock16internal_destroyEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock18internal_constructEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock4lockEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock6unlockEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock8try_lockEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock9lock_readEv )
+
+#if !TBB_NO_LEGACY
+/* spin_rw_mutex.cpp v2 */
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex16internal_upgradeEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex22internal_itt_releasingEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_acquire_readerEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_acquire_writerEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex18internal_downgradeEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_release_readerEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_release_writerEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex27internal_try_acquire_readerEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex27internal_try_acquire_writerEPS0_ )
+#endif
+
+/* spin_rw_mutex v3 */
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v318internal_constructEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v316internal_upgradeEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v318internal_downgradeEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_acquire_readerEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_acquire_writerEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_release_readerEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_release_writerEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v327internal_try_acquire_readerEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v327internal_try_acquire_writerEv )
+
+/* spin_mutex.cpp */
+__TBB_SYMBOL( _ZN3tbb10spin_mutex18internal_constructEv )
+__TBB_SYMBOL( _ZN3tbb10spin_mutex11scoped_lock16internal_acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb10spin_mutex11scoped_lock16internal_releaseEv )
+__TBB_SYMBOL( _ZN3tbb10spin_mutex11scoped_lock20internal_try_acquireERS0_ )
+
+/* mutex.cpp */
+__TBB_SYMBOL( _ZN3tbb5mutex11scoped_lock16internal_acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb5mutex11scoped_lock16internal_releaseEv )
+__TBB_SYMBOL( _ZN3tbb5mutex11scoped_lock20internal_try_acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb5mutex16internal_destroyEv )
+__TBB_SYMBOL( _ZN3tbb5mutex18internal_constructEv )
+
+/* recursive_mutex.cpp */
+__TBB_SYMBOL( _ZN3tbb15recursive_mutex11scoped_lock16internal_acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb15recursive_mutex11scoped_lock16internal_releaseEv )
+__TBB_SYMBOL( _ZN3tbb15recursive_mutex11scoped_lock20internal_try_acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb15recursive_mutex16internal_destroyEv )
+__TBB_SYMBOL( _ZN3tbb15recursive_mutex18internal_constructEv )
+
+/* QueuingMutex.cpp */
+__TBB_SYMBOL( _ZN3tbb13queuing_mutex18internal_constructEv )
+__TBB_SYMBOL( _ZN3tbb13queuing_mutex11scoped_lock7acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb13queuing_mutex11scoped_lock7releaseEv )
+__TBB_SYMBOL( _ZN3tbb13queuing_mutex11scoped_lock11try_acquireERS0_ )
+
+/* critical_section.cpp */
+__TBB_SYMBOL( _ZN3tbb8internal19critical_section_v418internal_constructEv )
+
+#if !TBB_NO_LEGACY
+/* concurrent_hash_map */
+__TBB_SYMBOL( _ZNK3tbb8internal21hash_map_segment_base23internal_grow_predicateEv )
+
+/* concurrent_queue.cpp v2 */
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base12internal_popEPv )
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base13internal_pushEPKv )
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base21internal_set_capacityElm )
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base23internal_pop_if_presentEPv )
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base25internal_push_if_not_fullEPKv )
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_baseC2Em )
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_baseD2Ev )
+__TBB_SYMBOL( _ZTIN3tbb8internal21concurrent_queue_baseE )
+__TBB_SYMBOL( _ZTSN3tbb8internal21concurrent_queue_baseE )
+__TBB_SYMBOL( _ZTVN3tbb8internal21concurrent_queue_baseE )
+__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_base6assignERKS1_ )
+__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_base7advanceEv )
+__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_baseC2ERKNS0_21concurrent_queue_baseE )
+__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_baseD2Ev )
+__TBB_SYMBOL( _ZNK3tbb8internal21concurrent_queue_base13internal_sizeEv )
+#endif
+
+/* concurrent_queue v3 */
+/* constructors */
+__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v3C2Em )
+__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3E )
+__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3Em )
+/* destructors */
+__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v3D2Ev )
+__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v3D2Ev )
+/* typeinfo */
+__TBB_SYMBOL( _ZTIN3tbb8internal24concurrent_queue_base_v3E )
+__TBB_SYMBOL( _ZTSN3tbb8internal24concurrent_queue_base_v3E )
+/* vtable */
+__TBB_SYMBOL( _ZTVN3tbb8internal24concurrent_queue_base_v3E )
+/* methods */
+__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v36assignERKS1_ )
+__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v37advanceEv )
+__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_v321internal_finish_clearEv )
+__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v321internal_set_capacityElm )
+__TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v313internal_sizeEv )
+__TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v314internal_emptyEv )
+__TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v324internal_throw_exceptionEv )
+__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v36assignERKS1_ )
+
+#if !TBB_NO_LEGACY
+/* concurrent_vector.cpp v2 */
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base13internal_copyERKS1_mPFvPvPKvmE )
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base14internal_clearEPFvPvmEb )
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base15internal_assignERKS1_mPFvPvmEPFvS4_PKvmESA_ )
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base16internal_grow_byEmmPFvPvmE )
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base16internal_reserveEmmm )
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base18internal_push_backEmRm )
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base25internal_grow_to_at_leastEmmPFvPvmE )
+__TBB_SYMBOL( _ZNK3tbb8internal22concurrent_vector_base17internal_capacityEv )
+#endif
+
+/* concurrent_vector v3 */
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v313internal_copyERKS1_mPFvPvPKvmE )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v314internal_clearEPFvPvmE )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v315internal_assignERKS1_mPFvPvmEPFvS4_PKvmESA_ )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v316internal_grow_byEmmPFvPvPKvmES4_ )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v316internal_reserveEmmm )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v318internal_push_backEmRm )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v325internal_grow_to_at_leastEmmPFvPvPKvmES4_ )
+__TBB_SYMBOL( _ZNK3tbb8internal25concurrent_vector_base_v317internal_capacityEv )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v316internal_compactEmPvPFvS2_mEPFvS2_PKvmE )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v313internal_swapERS1_ )
+__TBB_SYMBOL( _ZNK3tbb8internal25concurrent_vector_base_v324internal_throw_exceptionEm )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v3D2Ev )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v315internal_resizeEmmmPKvPFvPvmEPFvS4_S3_mE )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v337internal_grow_to_at_least_with_resultEmmPFvPvPKvmES4_ )
+
+/* tbb_thread */
+__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v320hardware_concurrencyEv )
+__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v36detachEv )
+__TBB_SYMBOL( _ZN3tbb8internal16thread_get_id_v3Ev )
+__TBB_SYMBOL( _ZN3tbb8internal15free_closure_v3EPv )
+__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v34joinEv )
+__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v314internal_startEPFPvS2_ES2_ )
+__TBB_SYMBOL( _ZN3tbb8internal19allocate_closure_v3Em )
+__TBB_SYMBOL( _ZN3tbb8internal7move_v3ERNS0_13tbb_thread_v3ES2_ )
+__TBB_SYMBOL( _ZN3tbb8internal15thread_yield_v3Ev )
+__TBB_SYMBOL( _ZN3tbb8internal15thread_sleep_v3ERKNS_10tick_count10interval_tE )
+
+/* asm functions */
+__TBB_SYMBOL( __TBB_machine_fetchadd1__TBB_full_fence )
+__TBB_SYMBOL( __TBB_machine_fetchadd2__TBB_full_fence )
+__TBB_SYMBOL( __TBB_machine_fetchadd4__TBB_full_fence )
+__TBB_SYMBOL( __TBB_machine_fetchadd8__TBB_full_fence )
+__TBB_SYMBOL( __TBB_machine_fetchstore1__TBB_full_fence )
+__TBB_SYMBOL( __TBB_machine_fetchstore2__TBB_full_fence )
+__TBB_SYMBOL( __TBB_machine_fetchstore4__TBB_full_fence )
+__TBB_SYMBOL( __TBB_machine_fetchstore8__TBB_full_fence )
+__TBB_SYMBOL( __TBB_machine_fetchadd1acquire )
+__TBB_SYMBOL( __TBB_machine_fetchadd1release )
+__TBB_SYMBOL( __TBB_machine_fetchadd2acquire )
+__TBB_SYMBOL( __TBB_machine_fetchadd2release )
+__TBB_SYMBOL( __TBB_machine_fetchadd4acquire )
+__TBB_SYMBOL( __TBB_machine_fetchadd4release )
+__TBB_SYMBOL( __TBB_machine_fetchadd8acquire )
+__TBB_SYMBOL( __TBB_machine_fetchadd8release )
+__TBB_SYMBOL( __TBB_machine_fetchstore1acquire )
+__TBB_SYMBOL( __TBB_machine_fetchstore1release )
+__TBB_SYMBOL( __TBB_machine_fetchstore2acquire )
+__TBB_SYMBOL( __TBB_machine_fetchstore2release )
+__TBB_SYMBOL( __TBB_machine_fetchstore4acquire )
+__TBB_SYMBOL( __TBB_machine_fetchstore4release )
+__TBB_SYMBOL( __TBB_machine_fetchstore8acquire )
+__TBB_SYMBOL( __TBB_machine_fetchstore8release )
+__TBB_SYMBOL( __TBB_machine_cmpswp1acquire )
+__TBB_SYMBOL( __TBB_machine_cmpswp1release )
+__TBB_SYMBOL( __TBB_machine_cmpswp1__TBB_full_fence )
+__TBB_SYMBOL( __TBB_machine_cmpswp2acquire )
+__TBB_SYMBOL( __TBB_machine_cmpswp2release )
+__TBB_SYMBOL( __TBB_machine_cmpswp2__TBB_full_fence )
+__TBB_SYMBOL( __TBB_machine_cmpswp4acquire )
+__TBB_SYMBOL( __TBB_machine_cmpswp4release )
+__TBB_SYMBOL( __TBB_machine_cmpswp4__TBB_full_fence )
+__TBB_SYMBOL( __TBB_machine_cmpswp8acquire )
+__TBB_SYMBOL( __TBB_machine_cmpswp8release )
+__TBB_SYMBOL( __TBB_machine_cmpswp8__TBB_full_fence )
+__TBB_SYMBOL( __TBB_machine_lg )
+__TBB_SYMBOL( __TBB_machine_lockbyte )
+__TBB_SYMBOL( __TBB_machine_pause )
+__TBB_SYMBOL( __TBB_machine_trylockbyte )
+
+#undef __TBB_SYMBOL
diff --git a/src/tbb/mac32-tbb-export.def b/src/tbb/mac32-tbb-export.def
index 8725d9d..6c12ee3 100644
--- a/src/tbb/mac32-tbb-export.def
+++ b/src/tbb/mac32-tbb-export.def
@@ -1,343 +1,23 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
-#
-# This file is part of Threading Building Blocks.
-#
-# Threading Building Blocks is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public License
-# version 2 as published by the Free Software Foundation.
-#
-# Threading Building Blocks is distributed in the hope that it will be
-# useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Threading Building Blocks; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-#
-# As a special exception, you may use this file as part of a free software
-# library without restriction.  Specifically, if other files instantiate
-# templates or use macros or inline functions from this file, or you compile
-# this file and link it with other files to produce an executable, this
-# file does not by itself cause the resulting executable to be covered by
-# the GNU General Public License.  This exception does not however
-# invalidate any other reasons why the executable file might be covered by
-# the GNU General Public License.
+/*
+    Copyright 2005-2011 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.
+*/
+
+#define __TBB_SYMBOL( sym ) _##sym
+#include "mac32-tbb-export.lst"
 
-# cache_aligned_allocator.cpp
-__ZN3tbb8internal12NFS_AllocateEmmPv
-__ZN3tbb8internal15NFS_GetLineSizeEv
-__ZN3tbb8internal8NFS_FreeEPv
-__ZN3tbb8internal23allocate_via_handler_v3Em
-__ZN3tbb8internal25deallocate_via_handler_v3EPv
-__ZN3tbb8internal17is_malloc_used_v3Ev
-
-# task.cpp v3
-__ZN3tbb4task13note_affinityEt
-__ZN3tbb4task22internal_set_ref_countEi
-__ZN3tbb4task28internal_decrement_ref_countEv
-__ZN3tbb4task22spawn_and_wait_for_allERNS_9task_listE
-__ZN3tbb4task4selfEv
-__ZN3tbb10interface58internal9task_base7destroyERNS_4taskE
-__ZNK3tbb4task26is_owned_by_current_threadEv
-__ZN3tbb8internal19allocate_root_proxy4freeERNS_4taskE
-__ZN3tbb8internal19allocate_root_proxy8allocateEm
-__ZN3tbb8internal28affinity_partitioner_base_v36resizeEj
-__ZN3tbb8internal36get_initial_auto_partitioner_divisorEv
-__ZNK3tbb8internal20allocate_child_proxy4freeERNS_4taskE
-__ZNK3tbb8internal20allocate_child_proxy8allocateEm
-__ZNK3tbb8internal27allocate_continuation_proxy4freeERNS_4taskE
-__ZNK3tbb8internal27allocate_continuation_proxy8allocateEm
-__ZNK3tbb8internal34allocate_additional_child_of_proxy4freeERNS_4taskE
-__ZNK3tbb8internal34allocate_additional_child_of_proxy8allocateEm
-__ZTIN3tbb4taskE
-__ZTSN3tbb4taskE
-__ZTVN3tbb4taskE
-__ZN3tbb19task_scheduler_init19default_num_threadsEv
-__ZN3tbb19task_scheduler_init10initializeEim
-__ZN3tbb19task_scheduler_init10initializeEi
-__ZN3tbb19task_scheduler_init9terminateEv
-__ZN3tbb8internal26task_scheduler_observer_v37observeEb
-__ZN3tbb10empty_task7executeEv
-__ZN3tbb10empty_taskD0Ev
-__ZN3tbb10empty_taskD1Ev
-__ZTIN3tbb10empty_taskE
-__ZTSN3tbb10empty_taskE
-__ZTVN3tbb10empty_taskE
-
-#if !TBB_NO_LEGACY
-# task_v2.cpp
-__ZN3tbb4task7destroyERS0_
-#endif
-
-# Exception handling in task scheduler
-__ZNK3tbb8internal32allocate_root_with_context_proxy8allocateEm
-__ZNK3tbb8internal32allocate_root_with_context_proxy4freeERNS_4taskE
-__ZNK3tbb18task_group_context28is_group_execution_cancelledEv
-__ZN3tbb18task_group_context22cancel_group_executionEv
-__ZN3tbb18task_group_context26register_pending_exceptionEv
-__ZN3tbb18task_group_context5resetEv
-__ZN3tbb18task_group_context4initEv
-__ZN3tbb18task_group_contextD1Ev
-__ZN3tbb18task_group_contextD2Ev
-__ZNK3tbb18captured_exception4nameEv
-__ZNK3tbb18captured_exception4whatEv
-__ZN3tbb18captured_exception10throw_selfEv
-__ZN3tbb18captured_exception3setEPKcS2_
-__ZN3tbb18captured_exception4moveEv
-__ZN3tbb18captured_exception5clearEv
-__ZN3tbb18captured_exception7destroyEv
-__ZN3tbb18captured_exception8allocateEPKcS2_
-__ZN3tbb18captured_exceptionD0Ev
-__ZN3tbb18captured_exceptionD1Ev
-__ZTIN3tbb18captured_exceptionE
-__ZTSN3tbb18captured_exceptionE
-__ZTVN3tbb18captured_exceptionE
-__ZTIN3tbb13tbb_exceptionE
-__ZTSN3tbb13tbb_exceptionE
-__ZTVN3tbb13tbb_exceptionE
-
-# Symbols for exceptions thrown from TBB
-__ZN3tbb8internal33throw_bad_last_alloc_exception_v4Ev
-__ZN3tbb8internal18throw_exception_v4ENS0_12exception_idE
-__ZNSt13runtime_errorD1Ev
-__ZTISt13runtime_error
-__ZTSSt13runtime_error
-__ZNSt16invalid_argumentD1Ev
-__ZTISt16invalid_argument
-__ZTSSt16invalid_argument
-__ZNSt11range_errorD1Ev
-__ZTISt11range_error
-__ZTSSt11range_error
-__ZNSt12length_errorD1Ev
-__ZTISt12length_error
-__ZTSSt12length_error
-__ZNSt12out_of_rangeD1Ev
-__ZTISt12out_of_range
-__ZTSSt12out_of_range
-__ZN3tbb14bad_last_allocD0Ev
-__ZN3tbb14bad_last_allocD1Ev
-__ZNK3tbb14bad_last_alloc4whatEv
-__ZTIN3tbb14bad_last_allocE
-__ZTSN3tbb14bad_last_allocE
-__ZTVN3tbb14bad_last_allocE
-__ZN3tbb12missing_waitD0Ev
-__ZN3tbb12missing_waitD1Ev
-__ZNK3tbb12missing_wait4whatEv
-__ZTIN3tbb12missing_waitE
-__ZTSN3tbb12missing_waitE
-__ZTVN3tbb12missing_waitE
-__ZN3tbb27invalid_multiple_schedulingD0Ev
-__ZN3tbb27invalid_multiple_schedulingD1Ev
-__ZNK3tbb27invalid_multiple_scheduling4whatEv
-__ZTIN3tbb27invalid_multiple_schedulingE
-__ZTSN3tbb27invalid_multiple_schedulingE
-__ZTVN3tbb27invalid_multiple_schedulingE
-__ZN3tbb13improper_lockD0Ev
-__ZN3tbb13improper_lockD1Ev
-__ZNK3tbb13improper_lock4whatEv
-__ZTIN3tbb13improper_lockE
-__ZTSN3tbb13improper_lockE
-__ZTVN3tbb13improper_lockE
-
-# tbb_misc.cpp
-__ZN3tbb17assertion_failureEPKciS1_S1_
-__ZN3tbb21set_assertion_handlerEPFvPKciS1_S1_E
-__ZN3tbb8internal13handle_perrorEiPKc
-__ZN3tbb8internal15runtime_warningEPKcz
-#ifndef __POWERPC__
-___TBB_machine_store8_slow_perf_warning
-___TBB_machine_store8_slow
-#endif
-_TBB_runtime_interface_version
-
-# itt_notify.cpp
-__ZN3tbb8internal32itt_load_pointer_with_acquire_v3EPKv
-__ZN3tbb8internal33itt_store_pointer_with_release_v3EPvS1_
-__ZN3tbb8internal19itt_load_pointer_v3EPKv
-__ZN3tbb8internal20itt_set_sync_name_v3EPvPKc
-
-# pipeline.cpp
-__ZTIN3tbb6filterE
-__ZTSN3tbb6filterE
-__ZTVN3tbb6filterE
-__ZN3tbb6filterD2Ev
-__ZN3tbb8pipeline10add_filterERNS_6filterE
-__ZN3tbb8pipeline12inject_tokenERNS_4taskE
-__ZN3tbb8pipeline13remove_filterERNS_6filterE
-__ZN3tbb8pipeline3runEm
-__ZN3tbb8pipeline3runEmRNS_18task_group_contextE
-__ZN3tbb8pipeline5clearEv
-__ZN3tbb19thread_bound_filter12process_itemEv
-__ZN3tbb19thread_bound_filter16try_process_itemEv
-__ZN3tbb8pipelineC1Ev
-__ZN3tbb8pipelineC2Ev
-__ZN3tbb8pipelineD0Ev
-__ZN3tbb8pipelineD1Ev
-__ZN3tbb8pipelineD2Ev
-__ZTIN3tbb8pipelineE
-__ZTSN3tbb8pipelineE
-__ZTVN3tbb8pipelineE
-
-# queuing_rw_mutex.cpp
-__ZN3tbb16queuing_rw_mutex11scoped_lock17upgrade_to_writerEv
-__ZN3tbb16queuing_rw_mutex11scoped_lock19downgrade_to_readerEv
-__ZN3tbb16queuing_rw_mutex11scoped_lock7acquireERS0_b
-__ZN3tbb16queuing_rw_mutex11scoped_lock7releaseEv
-__ZN3tbb16queuing_rw_mutex11scoped_lock11try_acquireERS0_b
-__ZN3tbb16queuing_rw_mutex18internal_constructEv
-
-# reader_writer_lock.cpp
-__ZN3tbb10interface518reader_writer_lock11scoped_lock16internal_destroyEv
-__ZN3tbb10interface518reader_writer_lock11scoped_lock18internal_constructERS1_
-__ZN3tbb10interface518reader_writer_lock13try_lock_readEv
-__ZN3tbb10interface518reader_writer_lock16scoped_lock_read16internal_destroyEv
-__ZN3tbb10interface518reader_writer_lock16scoped_lock_read18internal_constructERS1_
-__ZN3tbb10interface518reader_writer_lock16internal_destroyEv
-__ZN3tbb10interface518reader_writer_lock18internal_constructEv
-__ZN3tbb10interface518reader_writer_lock4lockEv
-__ZN3tbb10interface518reader_writer_lock6unlockEv
-__ZN3tbb10interface518reader_writer_lock8try_lockEv
-__ZN3tbb10interface518reader_writer_lock9lock_readEv
-
-#if !TBB_NO_LEGACY
-# spin_rw_mutex.cpp v2
-__ZN3tbb13spin_rw_mutex16internal_upgradeEPS0_
-__ZN3tbb13spin_rw_mutex22internal_itt_releasingEPS0_
-__ZN3tbb13spin_rw_mutex23internal_acquire_readerEPS0_
-__ZN3tbb13spin_rw_mutex23internal_acquire_writerEPS0_
-__ZN3tbb13spin_rw_mutex18internal_downgradeEPS0_
-__ZN3tbb13spin_rw_mutex23internal_release_readerEPS0_
-__ZN3tbb13spin_rw_mutex23internal_release_writerEPS0_
-__ZN3tbb13spin_rw_mutex27internal_try_acquire_readerEPS0_
-__ZN3tbb13spin_rw_mutex27internal_try_acquire_writerEPS0_
-#endif
-
-# spin_rw_mutex v3
-__ZN3tbb16spin_rw_mutex_v316internal_upgradeEv
-__ZN3tbb16spin_rw_mutex_v318internal_downgradeEv
-__ZN3tbb16spin_rw_mutex_v323internal_acquire_readerEv
-__ZN3tbb16spin_rw_mutex_v323internal_acquire_writerEv
-__ZN3tbb16spin_rw_mutex_v323internal_release_readerEv
-__ZN3tbb16spin_rw_mutex_v323internal_release_writerEv
-__ZN3tbb16spin_rw_mutex_v327internal_try_acquire_readerEv
-__ZN3tbb16spin_rw_mutex_v327internal_try_acquire_writerEv
-__ZN3tbb16spin_rw_mutex_v318internal_constructEv
-
-# spin_mutex.cpp
-__ZN3tbb10spin_mutex11scoped_lock16internal_acquireERS0_
-__ZN3tbb10spin_mutex11scoped_lock16internal_releaseEv
-__ZN3tbb10spin_mutex11scoped_lock20internal_try_acquireERS0_
-__ZN3tbb10spin_mutex18internal_constructEv
-
-# mutex.cpp
-__ZN3tbb5mutex11scoped_lock16internal_acquireERS0_
-__ZN3tbb5mutex11scoped_lock16internal_releaseEv
-__ZN3tbb5mutex11scoped_lock20internal_try_acquireERS0_
-__ZN3tbb5mutex16internal_destroyEv
-__ZN3tbb5mutex18internal_constructEv
-
-# recursive_mutex.cpp
-__ZN3tbb15recursive_mutex11scoped_lock16internal_acquireERS0_
-__ZN3tbb15recursive_mutex11scoped_lock16internal_releaseEv
-__ZN3tbb15recursive_mutex11scoped_lock20internal_try_acquireERS0_
-__ZN3tbb15recursive_mutex16internal_destroyEv
-__ZN3tbb15recursive_mutex18internal_constructEv
-
-# queuing_mutex.cpp
-__ZN3tbb13queuing_mutex11scoped_lock7acquireERS0_
-__ZN3tbb13queuing_mutex11scoped_lock7releaseEv
-__ZN3tbb13queuing_mutex11scoped_lock11try_acquireERS0_
-__ZN3tbb13queuing_mutex18internal_constructEv
-
-# critical_section.cpp
-__ZN3tbb8internal19critical_section_v418internal_constructEv
-
-#if !TBB_NO_LEGACY
-# concurrent_hash_map
-__ZNK3tbb8internal21hash_map_segment_base23internal_grow_predicateEv
-
-# concurrent_queue.cpp v2
-__ZN3tbb8internal21concurrent_queue_base12internal_popEPv
-__ZN3tbb8internal21concurrent_queue_base13internal_pushEPKv
-__ZN3tbb8internal21concurrent_queue_base21internal_set_capacityEim
-__ZN3tbb8internal21concurrent_queue_base23internal_pop_if_presentEPv
-__ZN3tbb8internal21concurrent_queue_base25internal_push_if_not_fullEPKv
-__ZN3tbb8internal21concurrent_queue_baseC2Em
-__ZN3tbb8internal21concurrent_queue_baseD2Ev
-__ZTIN3tbb8internal21concurrent_queue_baseE
-__ZTSN3tbb8internal21concurrent_queue_baseE
-__ZTVN3tbb8internal21concurrent_queue_baseE
-__ZN3tbb8internal30concurrent_queue_iterator_base6assignERKS1_
-__ZN3tbb8internal30concurrent_queue_iterator_base7advanceEv
-__ZN3tbb8internal30concurrent_queue_iterator_baseC2ERKNS0_21concurrent_queue_baseE
-__ZN3tbb8internal30concurrent_queue_iterator_baseD2Ev
-__ZNK3tbb8internal21concurrent_queue_base13internal_sizeEv
-#endif
-
-# concurrent_queue v3
-# constructors
-__ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3E
-__ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3Em
-__ZN3tbb8internal24concurrent_queue_base_v3C2Em
-# destructors
-__ZN3tbb8internal33concurrent_queue_iterator_base_v3D2Ev
-__ZN3tbb8internal24concurrent_queue_base_v3D2Ev
-# typeinfo
-__ZTIN3tbb8internal24concurrent_queue_base_v3E
-__ZTSN3tbb8internal24concurrent_queue_base_v3E
-#vtable
-__ZTVN3tbb8internal24concurrent_queue_base_v3E
-# methods
-__ZN3tbb8internal33concurrent_queue_iterator_base_v37advanceEv
-__ZN3tbb8internal33concurrent_queue_iterator_base_v36assignERKS1_
-__ZN3tbb8internal24concurrent_queue_base_v313internal_pushEPKv
-__ZN3tbb8internal24concurrent_queue_base_v325internal_push_if_not_fullEPKv
-__ZN3tbb8internal24concurrent_queue_base_v312internal_popEPv
-__ZN3tbb8internal24concurrent_queue_base_v323internal_pop_if_presentEPv
-__ZN3tbb8internal24concurrent_queue_base_v321internal_set_capacityEim
-__ZNK3tbb8internal24concurrent_queue_base_v313internal_sizeEv
-__ZNK3tbb8internal24concurrent_queue_base_v314internal_emptyEv
-__ZN3tbb8internal24concurrent_queue_base_v321internal_finish_clearEv
-__ZNK3tbb8internal24concurrent_queue_base_v324internal_throw_exceptionEv
-__ZN3tbb8internal24concurrent_queue_base_v36assignERKS1_
-
-#if !TBB_NO_LEGACY
-# concurrent_vector.cpp v2
-__ZN3tbb8internal22concurrent_vector_base13internal_copyERKS1_mPFvPvPKvmE
-__ZN3tbb8internal22concurrent_vector_base14internal_clearEPFvPvmEb
-__ZN3tbb8internal22concurrent_vector_base15internal_assignERKS1_mPFvPvmEPFvS4_PKvmESA_
-__ZN3tbb8internal22concurrent_vector_base16internal_grow_byEmmPFvPvmE
-__ZN3tbb8internal22concurrent_vector_base16internal_reserveEmmm
-__ZN3tbb8internal22concurrent_vector_base18internal_push_backEmRm
-__ZN3tbb8internal22concurrent_vector_base25internal_grow_to_at_leastEmmPFvPvmE
-__ZNK3tbb8internal22concurrent_vector_base17internal_capacityEv
-#endif
-
-# concurrent_vector v3
-__ZN3tbb8internal25concurrent_vector_base_v313internal_copyERKS1_mPFvPvPKvmE
-__ZN3tbb8internal25concurrent_vector_base_v314internal_clearEPFvPvmE
-__ZN3tbb8internal25concurrent_vector_base_v315internal_assignERKS1_mPFvPvmEPFvS4_PKvmESA_
-__ZN3tbb8internal25concurrent_vector_base_v316internal_grow_byEmmPFvPvPKvmES4_
-__ZN3tbb8internal25concurrent_vector_base_v316internal_reserveEmmm
-__ZN3tbb8internal25concurrent_vector_base_v318internal_push_backEmRm
-__ZN3tbb8internal25concurrent_vector_base_v325internal_grow_to_at_leastEmmPFvPvPKvmES4_
-__ZNK3tbb8internal25concurrent_vector_base_v317internal_capacityEv
-__ZN3tbb8internal25concurrent_vector_base_v316internal_compactEmPvPFvS2_mEPFvS2_PKvmE
-__ZN3tbb8internal25concurrent_vector_base_v313internal_swapERS1_
-__ZNK3tbb8internal25concurrent_vector_base_v324internal_throw_exceptionEm
-__ZN3tbb8internal25concurrent_vector_base_v3D2Ev
-__ZN3tbb8internal25concurrent_vector_base_v315internal_resizeEmmmPKvPFvPvmEPFvS4_S3_mE
-__ZN3tbb8internal25concurrent_vector_base_v337internal_grow_to_at_least_with_resultEmmPFvPvPKvmES4_
-
-# tbb_thread
-__ZN3tbb8internal13tbb_thread_v314internal_startEPFPvS2_ES2_
-__ZN3tbb8internal13tbb_thread_v320hardware_concurrencyEv
-__ZN3tbb8internal13tbb_thread_v34joinEv
-__ZN3tbb8internal13tbb_thread_v36detachEv
-__ZN3tbb8internal15free_closure_v3EPv
-__ZN3tbb8internal15thread_sleep_v3ERKNS_10tick_count10interval_tE
-__ZN3tbb8internal15thread_yield_v3Ev
-__ZN3tbb8internal16thread_get_id_v3Ev
-__ZN3tbb8internal19allocate_closure_v3Em
-__ZN3tbb8internal7move_v3ERNS0_13tbb_thread_v3ES2_
diff --git a/src/tbb/mac32-tbb-export.lst b/src/tbb/mac32-tbb-export.lst
new file mode 100644
index 0000000..6294c0a
--- /dev/null
+++ b/src/tbb/mac32-tbb-export.lst
@@ -0,0 +1,356 @@
+/*
+    Copyright 2005-2011 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.
+*/
+
+#include "tbb/tbb_config.h"
+
+/*
+    Sometimes Mac OS X requires leading underscore (e. g. in export list file), but sometimes not
+    (e. g. when searching symbol in a dynamic library via dlsym()). Symbols in this file SHOULD
+    be listed WITHOUT one leading underscore. __TBB_SYMBOL macro should add underscore when
+    necessary, depending on the indended usage.
+*/
+
+// cache_aligned_allocator.cpp
+__TBB_SYMBOL( _ZN3tbb8internal12NFS_AllocateEmmPv )
+__TBB_SYMBOL( _ZN3tbb8internal15NFS_GetLineSizeEv )
+__TBB_SYMBOL( _ZN3tbb8internal8NFS_FreeEPv )
+__TBB_SYMBOL( _ZN3tbb8internal23allocate_via_handler_v3Em )
+__TBB_SYMBOL( _ZN3tbb8internal25deallocate_via_handler_v3EPv )
+__TBB_SYMBOL( _ZN3tbb8internal17is_malloc_used_v3Ev )
+
+// task.cpp v3
+__TBB_SYMBOL( _ZN3tbb4task13note_affinityEt )
+__TBB_SYMBOL( _ZN3tbb4task22internal_set_ref_countEi )
+__TBB_SYMBOL( _ZN3tbb4task28internal_decrement_ref_countEv )
+__TBB_SYMBOL( _ZN3tbb4task22spawn_and_wait_for_allERNS_9task_listE )
+__TBB_SYMBOL( _ZN3tbb4task4selfEv )
+__TBB_SYMBOL( _ZN3tbb10interface58internal9task_base7destroyERNS_4taskE )
+__TBB_SYMBOL( _ZNK3tbb4task26is_owned_by_current_threadEv )
+__TBB_SYMBOL( _ZN3tbb8internal19allocate_root_proxy4freeERNS_4taskE )
+__TBB_SYMBOL( _ZN3tbb8internal19allocate_root_proxy8allocateEm )
+__TBB_SYMBOL( _ZN3tbb8internal28affinity_partitioner_base_v36resizeEj )
+__TBB_SYMBOL( _ZN3tbb8internal36get_initial_auto_partitioner_divisorEv )
+__TBB_SYMBOL( _ZNK3tbb8internal20allocate_child_proxy4freeERNS_4taskE )
+__TBB_SYMBOL( _ZNK3tbb8internal20allocate_child_proxy8allocateEm )
+__TBB_SYMBOL( _ZNK3tbb8internal27allocate_continuation_proxy4freeERNS_4taskE )
+__TBB_SYMBOL( _ZNK3tbb8internal27allocate_continuation_proxy8allocateEm )
+__TBB_SYMBOL( _ZNK3tbb8internal34allocate_additional_child_of_proxy4freeERNS_4taskE )
+__TBB_SYMBOL( _ZNK3tbb8internal34allocate_additional_child_of_proxy8allocateEm )
+__TBB_SYMBOL( _ZTIN3tbb4taskE )
+__TBB_SYMBOL( _ZTSN3tbb4taskE )
+__TBB_SYMBOL( _ZTVN3tbb4taskE )
+__TBB_SYMBOL( _ZN3tbb19task_scheduler_init19default_num_threadsEv )
+__TBB_SYMBOL( _ZN3tbb19task_scheduler_init10initializeEim )
+__TBB_SYMBOL( _ZN3tbb19task_scheduler_init10initializeEi )
+__TBB_SYMBOL( _ZN3tbb19task_scheduler_init9terminateEv )
+__TBB_SYMBOL( _ZN3tbb8internal26task_scheduler_observer_v37observeEb )
+__TBB_SYMBOL( _ZN3tbb10empty_task7executeEv )
+__TBB_SYMBOL( _ZN3tbb10empty_taskD0Ev )
+__TBB_SYMBOL( _ZN3tbb10empty_taskD1Ev )
+__TBB_SYMBOL( _ZTIN3tbb10empty_taskE )
+__TBB_SYMBOL( _ZTSN3tbb10empty_taskE )
+__TBB_SYMBOL( _ZTVN3tbb10empty_taskE )
+
+#if !TBB_NO_LEGACY
+// task_v2.cpp
+__TBB_SYMBOL( _ZN3tbb4task7destroyERS0_ )
+#endif
+
+// Exception handling in task scheduler
+__TBB_SYMBOL( _ZNK3tbb8internal32allocate_root_with_context_proxy8allocateEm )
+__TBB_SYMBOL( _ZNK3tbb8internal32allocate_root_with_context_proxy4freeERNS_4taskE )
+__TBB_SYMBOL( _ZN3tbb4task12change_groupERNS_18task_group_contextE )
+__TBB_SYMBOL( _ZNK3tbb18task_group_context28is_group_execution_cancelledEv )
+__TBB_SYMBOL( _ZN3tbb18task_group_context22cancel_group_executionEv )
+__TBB_SYMBOL( _ZN3tbb18task_group_context26register_pending_exceptionEv )
+__TBB_SYMBOL( _ZN3tbb18task_group_context5resetEv )
+__TBB_SYMBOL( _ZN3tbb18task_group_context4initEv )
+__TBB_SYMBOL( _ZN3tbb18task_group_contextD1Ev )
+__TBB_SYMBOL( _ZN3tbb18task_group_contextD2Ev )
+#if __TBB_TASK_PRIORITY
+__TBB_SYMBOL( _ZN3tbb18task_group_context12set_priorityENS_10priority_tE )
+__TBB_SYMBOL( _ZNK3tbb18task_group_context8priorityEv )
+#endif /* __TBB_TASK_PRIORITY */
+__TBB_SYMBOL( _ZNK3tbb18captured_exception4nameEv )
+__TBB_SYMBOL( _ZNK3tbb18captured_exception4whatEv )
+__TBB_SYMBOL( _ZN3tbb18captured_exception10throw_selfEv )
+__TBB_SYMBOL( _ZN3tbb18captured_exception3setEPKcS2_ )
+__TBB_SYMBOL( _ZN3tbb18captured_exception4moveEv )
+__TBB_SYMBOL( _ZN3tbb18captured_exception5clearEv )
+__TBB_SYMBOL( _ZN3tbb18captured_exception7destroyEv )
+__TBB_SYMBOL( _ZN3tbb18captured_exception8allocateEPKcS2_ )
+__TBB_SYMBOL( _ZN3tbb18captured_exceptionD0Ev )
+__TBB_SYMBOL( _ZN3tbb18captured_exceptionD1Ev )
+__TBB_SYMBOL( _ZN3tbb18captured_exceptionD2Ev )
+__TBB_SYMBOL( _ZTIN3tbb18captured_exceptionE )
+__TBB_SYMBOL( _ZTSN3tbb18captured_exceptionE )
+__TBB_SYMBOL( _ZTVN3tbb18captured_exceptionE )
+__TBB_SYMBOL( _ZTIN3tbb13tbb_exceptionE )
+__TBB_SYMBOL( _ZTSN3tbb13tbb_exceptionE )
+__TBB_SYMBOL( _ZTVN3tbb13tbb_exceptionE )
+
+// Symbols for exceptions thrown from TBB
+__TBB_SYMBOL( _ZN3tbb8internal33throw_bad_last_alloc_exception_v4Ev )
+__TBB_SYMBOL( _ZN3tbb8internal18throw_exception_v4ENS0_12exception_idE )
+__TBB_SYMBOL( _ZNSt13runtime_errorD1Ev )
+__TBB_SYMBOL( _ZTISt13runtime_error )
+__TBB_SYMBOL( _ZTSSt13runtime_error )
+__TBB_SYMBOL( _ZNSt16invalid_argumentD1Ev )
+__TBB_SYMBOL( _ZTISt16invalid_argument )
+__TBB_SYMBOL( _ZTSSt16invalid_argument )
+__TBB_SYMBOL( _ZNSt11range_errorD1Ev )
+__TBB_SYMBOL( _ZTISt11range_error )
+__TBB_SYMBOL( _ZTSSt11range_error )
+__TBB_SYMBOL( _ZNSt12length_errorD1Ev )
+__TBB_SYMBOL( _ZTISt12length_error )
+__TBB_SYMBOL( _ZTSSt12length_error )
+__TBB_SYMBOL( _ZNSt12out_of_rangeD1Ev )
+__TBB_SYMBOL( _ZTISt12out_of_range )
+__TBB_SYMBOL( _ZTSSt12out_of_range )
+__TBB_SYMBOL( _ZN3tbb14bad_last_allocD0Ev )
+__TBB_SYMBOL( _ZN3tbb14bad_last_allocD1Ev )
+__TBB_SYMBOL( _ZNK3tbb14bad_last_alloc4whatEv )
+__TBB_SYMBOL( _ZTIN3tbb14bad_last_allocE )
+__TBB_SYMBOL( _ZTSN3tbb14bad_last_allocE )
+__TBB_SYMBOL( _ZTVN3tbb14bad_last_allocE )
+__TBB_SYMBOL( _ZN3tbb12missing_waitD0Ev )
+__TBB_SYMBOL( _ZN3tbb12missing_waitD1Ev )
+__TBB_SYMBOL( _ZNK3tbb12missing_wait4whatEv )
+__TBB_SYMBOL( _ZTIN3tbb12missing_waitE )
+__TBB_SYMBOL( _ZTSN3tbb12missing_waitE )
+__TBB_SYMBOL( _ZTVN3tbb12missing_waitE )
+__TBB_SYMBOL( _ZN3tbb27invalid_multiple_schedulingD0Ev )
+__TBB_SYMBOL( _ZN3tbb27invalid_multiple_schedulingD1Ev )
+__TBB_SYMBOL( _ZNK3tbb27invalid_multiple_scheduling4whatEv )
+__TBB_SYMBOL( _ZTIN3tbb27invalid_multiple_schedulingE )
+__TBB_SYMBOL( _ZTSN3tbb27invalid_multiple_schedulingE )
+__TBB_SYMBOL( _ZTVN3tbb27invalid_multiple_schedulingE )
+__TBB_SYMBOL( _ZN3tbb13improper_lockD0Ev )
+__TBB_SYMBOL( _ZN3tbb13improper_lockD1Ev )
+__TBB_SYMBOL( _ZNK3tbb13improper_lock4whatEv )
+__TBB_SYMBOL( _ZTIN3tbb13improper_lockE )
+__TBB_SYMBOL( _ZTSN3tbb13improper_lockE )
+__TBB_SYMBOL( _ZTVN3tbb13improper_lockE )
+
+// tbb_misc.cpp
+__TBB_SYMBOL( _ZN3tbb17assertion_failureEPKciS1_S1_ )
+__TBB_SYMBOL( _ZN3tbb21set_assertion_handlerEPFvPKciS1_S1_E )
+__TBB_SYMBOL( _ZN3tbb8internal13handle_perrorEiPKc )
+__TBB_SYMBOL( _ZN3tbb8internal15runtime_warningEPKcz )
+#ifndef __POWERPC__
+__TBB_SYMBOL( __TBB_machine_store8_slow_perf_warning )
+__TBB_SYMBOL( __TBB_machine_store8_slow )
+#endif
+__TBB_SYMBOL( TBB_runtime_interface_version )
+
+// tbb_main.cpp
+__TBB_SYMBOL( _ZN3tbb8internal32itt_load_pointer_with_acquire_v3EPKv )
+__TBB_SYMBOL( _ZN3tbb8internal33itt_store_pointer_with_release_v3EPvS1_ )
+__TBB_SYMBOL( _ZN3tbb8internal18call_itt_notify_v5EiPv )
+__TBB_SYMBOL( _ZN3tbb8internal19itt_load_pointer_v3EPKv )
+__TBB_SYMBOL( _ZN3tbb8internal20itt_set_sync_name_v3EPvPKc )
+
+// pipeline.cpp
+__TBB_SYMBOL( _ZTIN3tbb6filterE )
+__TBB_SYMBOL( _ZTSN3tbb6filterE )
+__TBB_SYMBOL( _ZTVN3tbb6filterE )
+__TBB_SYMBOL( _ZN3tbb6filterD2Ev )
+__TBB_SYMBOL( _ZN3tbb8pipeline10add_filterERNS_6filterE )
+__TBB_SYMBOL( _ZN3tbb8pipeline12inject_tokenERNS_4taskE )
+__TBB_SYMBOL( _ZN3tbb8pipeline13remove_filterERNS_6filterE )
+__TBB_SYMBOL( _ZN3tbb8pipeline3runEm )
+__TBB_SYMBOL( _ZN3tbb8pipeline3runEmRNS_18task_group_contextE )
+__TBB_SYMBOL( _ZN3tbb8pipeline5clearEv )
+__TBB_SYMBOL( _ZN3tbb19thread_bound_filter12process_itemEv )
+__TBB_SYMBOL( _ZN3tbb19thread_bound_filter16try_process_itemEv )
+__TBB_SYMBOL( _ZN3tbb8pipelineC1Ev )
+__TBB_SYMBOL( _ZN3tbb8pipelineC2Ev )
+__TBB_SYMBOL( _ZN3tbb8pipelineD0Ev )
+__TBB_SYMBOL( _ZN3tbb8pipelineD1Ev )
+__TBB_SYMBOL( _ZN3tbb8pipelineD2Ev )
+__TBB_SYMBOL( _ZTIN3tbb8pipelineE )
+__TBB_SYMBOL( _ZTSN3tbb8pipelineE )
+__TBB_SYMBOL( _ZTVN3tbb8pipelineE )
+__TBB_SYMBOL( _ZN3tbb6filter16set_end_of_inputEv )
+
+// queuing_rw_mutex.cpp
+__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock17upgrade_to_writerEv )
+__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock19downgrade_to_readerEv )
+__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock7acquireERS0_b )
+__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock7releaseEv )
+__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock11try_acquireERS0_b )
+__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex18internal_constructEv )
+
+// reader_writer_lock.cpp
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock11scoped_lock16internal_destroyEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock11scoped_lock18internal_constructERS1_ )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock13try_lock_readEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock16scoped_lock_read16internal_destroyEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock16scoped_lock_read18internal_constructERS1_ )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock16internal_destroyEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock18internal_constructEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock4lockEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock6unlockEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock8try_lockEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock9lock_readEv )
+
+#if !TBB_NO_LEGACY
+// spin_rw_mutex.cpp v2
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex16internal_upgradeEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex22internal_itt_releasingEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_acquire_readerEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_acquire_writerEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex18internal_downgradeEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_release_readerEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_release_writerEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex27internal_try_acquire_readerEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex27internal_try_acquire_writerEPS0_ )
+#endif
+
+// spin_rw_mutex v3
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v316internal_upgradeEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v318internal_downgradeEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_acquire_readerEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_acquire_writerEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_release_readerEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_release_writerEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v327internal_try_acquire_readerEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v327internal_try_acquire_writerEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v318internal_constructEv )
+
+// spin_mutex.cpp
+__TBB_SYMBOL( _ZN3tbb10spin_mutex11scoped_lock16internal_acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb10spin_mutex11scoped_lock16internal_releaseEv )
+__TBB_SYMBOL( _ZN3tbb10spin_mutex11scoped_lock20internal_try_acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb10spin_mutex18internal_constructEv )
+
+// mutex.cpp
+__TBB_SYMBOL( _ZN3tbb5mutex11scoped_lock16internal_acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb5mutex11scoped_lock16internal_releaseEv )
+__TBB_SYMBOL( _ZN3tbb5mutex11scoped_lock20internal_try_acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb5mutex16internal_destroyEv )
+__TBB_SYMBOL( _ZN3tbb5mutex18internal_constructEv )
+
+// recursive_mutex.cpp
+__TBB_SYMBOL( _ZN3tbb15recursive_mutex11scoped_lock16internal_acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb15recursive_mutex11scoped_lock16internal_releaseEv )
+__TBB_SYMBOL( _ZN3tbb15recursive_mutex11scoped_lock20internal_try_acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb15recursive_mutex16internal_destroyEv )
+__TBB_SYMBOL( _ZN3tbb15recursive_mutex18internal_constructEv )
+
+// queuing_mutex.cpp
+__TBB_SYMBOL( _ZN3tbb13queuing_mutex11scoped_lock7acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb13queuing_mutex11scoped_lock7releaseEv )
+__TBB_SYMBOL( _ZN3tbb13queuing_mutex11scoped_lock11try_acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb13queuing_mutex18internal_constructEv )
+
+// critical_section.cpp
+__TBB_SYMBOL( _ZN3tbb8internal19critical_section_v418internal_constructEv )
+
+#if !TBB_NO_LEGACY
+// concurrent_hash_map
+__TBB_SYMBOL( _ZNK3tbb8internal21hash_map_segment_base23internal_grow_predicateEv )
+
+// concurrent_queue.cpp v2
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base12internal_popEPv )
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base13internal_pushEPKv )
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base21internal_set_capacityEim )
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base23internal_pop_if_presentEPv )
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base25internal_push_if_not_fullEPKv )
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_baseC2Em )
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_baseD2Ev )
+__TBB_SYMBOL( _ZTIN3tbb8internal21concurrent_queue_baseE )
+__TBB_SYMBOL( _ZTSN3tbb8internal21concurrent_queue_baseE )
+__TBB_SYMBOL( _ZTVN3tbb8internal21concurrent_queue_baseE )
+__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_base6assignERKS1_ )
+__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_base7advanceEv )
+__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_baseC2ERKNS0_21concurrent_queue_baseE )
+__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_baseD2Ev )
+__TBB_SYMBOL( _ZNK3tbb8internal21concurrent_queue_base13internal_sizeEv )
+#endif
+
+// concurrent_queue v3
+// constructors
+__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3E )
+__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3Em )
+__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v3C2Em )
+// destructors
+__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v3D2Ev )
+__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v3D2Ev )
+// typeinfo
+__TBB_SYMBOL( _ZTIN3tbb8internal24concurrent_queue_base_v3E )
+__TBB_SYMBOL( _ZTSN3tbb8internal24concurrent_queue_base_v3E )
+// vtable
+__TBB_SYMBOL( _ZTVN3tbb8internal24concurrent_queue_base_v3E )
+// methods
+__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v37advanceEv )
+__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v36assignERKS1_ )
+__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_v321internal_set_capacityEim )
+__TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v313internal_sizeEv )
+__TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v314internal_emptyEv )
+__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v321internal_finish_clearEv )
+__TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v324internal_throw_exceptionEv )
+__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v36assignERKS1_ )
+
+#if !TBB_NO_LEGACY
+// concurrent_vector.cpp v2
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base13internal_copyERKS1_mPFvPvPKvmE )
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base14internal_clearEPFvPvmEb )
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base15internal_assignERKS1_mPFvPvmEPFvS4_PKvmESA_ )
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base16internal_grow_byEmmPFvPvmE )
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base16internal_reserveEmmm )
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base18internal_push_backEmRm )
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base25internal_grow_to_at_leastEmmPFvPvmE )
+__TBB_SYMBOL( _ZNK3tbb8internal22concurrent_vector_base17internal_capacityEv )
+#endif
+
+// concurrent_vector v3
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v313internal_copyERKS1_mPFvPvPKvmE )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v314internal_clearEPFvPvmE )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v315internal_assignERKS1_mPFvPvmEPFvS4_PKvmESA_ )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v316internal_grow_byEmmPFvPvPKvmES4_ )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v316internal_reserveEmmm )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v318internal_push_backEmRm )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v325internal_grow_to_at_leastEmmPFvPvPKvmES4_ )
+__TBB_SYMBOL( _ZNK3tbb8internal25concurrent_vector_base_v317internal_capacityEv )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v316internal_compactEmPvPFvS2_mEPFvS2_PKvmE )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v313internal_swapERS1_ )
+__TBB_SYMBOL( _ZNK3tbb8internal25concurrent_vector_base_v324internal_throw_exceptionEm )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v3D2Ev )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v315internal_resizeEmmmPKvPFvPvmEPFvS4_S3_mE )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v337internal_grow_to_at_least_with_resultEmmPFvPvPKvmES4_ )
+
+// tbb_thread
+__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v314internal_startEPFPvS2_ES2_ )
+__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v320hardware_concurrencyEv )
+__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v34joinEv )
+__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v36detachEv )
+__TBB_SYMBOL( _ZN3tbb8internal15free_closure_v3EPv )
+__TBB_SYMBOL( _ZN3tbb8internal15thread_sleep_v3ERKNS_10tick_count10interval_tE )
+__TBB_SYMBOL( _ZN3tbb8internal15thread_yield_v3Ev )
+__TBB_SYMBOL( _ZN3tbb8internal16thread_get_id_v3Ev )
+__TBB_SYMBOL( _ZN3tbb8internal19allocate_closure_v3Em )
+__TBB_SYMBOL( _ZN3tbb8internal7move_v3ERNS0_13tbb_thread_v3ES2_ )
+
+#undef __TBB_SYMBOL
diff --git a/src/tbb/mac64-tbb-export.def b/src/tbb/mac64-tbb-export.def
index 9d8615c..4af04ba 100644
--- a/src/tbb/mac64-tbb-export.def
+++ b/src/tbb/mac64-tbb-export.def
@@ -1,339 +1,23 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
-#
-# This file is part of Threading Building Blocks.
-#
-# Threading Building Blocks is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public License
-# version 2 as published by the Free Software Foundation.
-#
-# Threading Building Blocks is distributed in the hope that it will be
-# useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Threading Building Blocks; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-#
-# As a special exception, you may use this file as part of a free software
-# library without restriction.  Specifically, if other files instantiate
-# templates or use macros or inline functions from this file, or you compile
-# this file and link it with other files to produce an executable, this
-# file does not by itself cause the resulting executable to be covered by
-# the GNU General Public License.  This exception does not however
-# invalidate any other reasons why the executable file might be covered by
-# the GNU General Public License.
+/*
+    Copyright 2005-2011 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.
+*/
+
+#define __TBB_SYMBOL( sym ) _##sym
+#include "mac64-tbb-export.lst"
 
-# cache_aligned_allocator.cpp
-__ZN3tbb8internal12NFS_AllocateEmmPv
-__ZN3tbb8internal15NFS_GetLineSizeEv
-__ZN3tbb8internal8NFS_FreeEPv
-__ZN3tbb8internal23allocate_via_handler_v3Em
-__ZN3tbb8internal25deallocate_via_handler_v3EPv
-__ZN3tbb8internal17is_malloc_used_v3Ev
-
-# task.cpp v3
-__ZN3tbb4task13note_affinityEt
-__ZN3tbb4task22internal_set_ref_countEi
-__ZN3tbb4task28internal_decrement_ref_countEv
-__ZN3tbb4task22spawn_and_wait_for_allERNS_9task_listE
-__ZN3tbb4task4selfEv
-__ZN3tbb10interface58internal9task_base7destroyERNS_4taskE
-__ZNK3tbb4task26is_owned_by_current_threadEv
-__ZN3tbb8internal19allocate_root_proxy4freeERNS_4taskE
-__ZN3tbb8internal19allocate_root_proxy8allocateEm
-__ZN3tbb8internal28affinity_partitioner_base_v36resizeEj
-__ZN3tbb8internal36get_initial_auto_partitioner_divisorEv
-__ZNK3tbb8internal20allocate_child_proxy4freeERNS_4taskE
-__ZNK3tbb8internal20allocate_child_proxy8allocateEm
-__ZNK3tbb8internal27allocate_continuation_proxy4freeERNS_4taskE
-__ZNK3tbb8internal27allocate_continuation_proxy8allocateEm
-__ZNK3tbb8internal34allocate_additional_child_of_proxy4freeERNS_4taskE
-__ZNK3tbb8internal34allocate_additional_child_of_proxy8allocateEm
-__ZTIN3tbb4taskE
-__ZTSN3tbb4taskE
-__ZTVN3tbb4taskE
-__ZN3tbb19task_scheduler_init19default_num_threadsEv
-__ZN3tbb19task_scheduler_init10initializeEim
-__ZN3tbb19task_scheduler_init10initializeEi
-__ZN3tbb19task_scheduler_init9terminateEv
-__ZN3tbb8internal26task_scheduler_observer_v37observeEb
-__ZN3tbb10empty_task7executeEv
-__ZN3tbb10empty_taskD0Ev
-__ZN3tbb10empty_taskD1Ev
-__ZTIN3tbb10empty_taskE
-__ZTSN3tbb10empty_taskE
-__ZTVN3tbb10empty_taskE
-
-#if !TBB_NO_LEGACY
-# task_v2.cpp
-__ZN3tbb4task7destroyERS0_
-#endif
-
-# Exception handling in task scheduler
-__ZNK3tbb8internal32allocate_root_with_context_proxy8allocateEm
-__ZNK3tbb8internal32allocate_root_with_context_proxy4freeERNS_4taskE
-__ZNK3tbb18task_group_context28is_group_execution_cancelledEv
-__ZN3tbb18task_group_context22cancel_group_executionEv
-__ZN3tbb18task_group_context26register_pending_exceptionEv
-__ZN3tbb18task_group_context5resetEv
-__ZN3tbb18task_group_context4initEv
-__ZN3tbb18task_group_contextD1Ev
-__ZN3tbb18task_group_contextD2Ev
-__ZNK3tbb18captured_exception4nameEv
-__ZNK3tbb18captured_exception4whatEv
-__ZN3tbb18captured_exception10throw_selfEv
-__ZN3tbb18captured_exception3setEPKcS2_
-__ZN3tbb18captured_exception4moveEv
-__ZN3tbb18captured_exception5clearEv
-__ZN3tbb18captured_exception7destroyEv
-__ZN3tbb18captured_exception8allocateEPKcS2_
-__ZN3tbb18captured_exceptionD0Ev
-__ZN3tbb18captured_exceptionD1Ev
-__ZTIN3tbb18captured_exceptionE
-__ZTSN3tbb18captured_exceptionE
-__ZTVN3tbb18captured_exceptionE
-__ZTIN3tbb13tbb_exceptionE
-__ZTSN3tbb13tbb_exceptionE
-__ZTVN3tbb13tbb_exceptionE
-
-# Symbols for exceptions thrown from TBB
-__ZN3tbb8internal33throw_bad_last_alloc_exception_v4Ev
-__ZN3tbb8internal18throw_exception_v4ENS0_12exception_idE
-__ZNSt13runtime_errorD1Ev
-__ZTISt13runtime_error
-__ZTSSt13runtime_error
-__ZNSt16invalid_argumentD1Ev
-__ZTISt16invalid_argument
-__ZTSSt16invalid_argument
-__ZNSt11range_errorD1Ev
-__ZTISt11range_error
-__ZTSSt11range_error
-__ZNSt12length_errorD1Ev
-__ZTISt12length_error
-__ZTSSt12length_error
-__ZNSt12out_of_rangeD1Ev
-__ZTISt12out_of_range
-__ZTSSt12out_of_range
-__ZN3tbb14bad_last_allocD0Ev
-__ZN3tbb14bad_last_allocD1Ev
-__ZNK3tbb14bad_last_alloc4whatEv
-__ZTIN3tbb14bad_last_allocE
-__ZTSN3tbb14bad_last_allocE
-__ZTVN3tbb14bad_last_allocE
-__ZN3tbb12missing_waitD0Ev
-__ZN3tbb12missing_waitD1Ev
-__ZNK3tbb12missing_wait4whatEv
-__ZTIN3tbb12missing_waitE
-__ZTSN3tbb12missing_waitE
-__ZTVN3tbb12missing_waitE
-__ZN3tbb27invalid_multiple_schedulingD0Ev
-__ZN3tbb27invalid_multiple_schedulingD1Ev
-__ZNK3tbb27invalid_multiple_scheduling4whatEv
-__ZTIN3tbb27invalid_multiple_schedulingE
-__ZTSN3tbb27invalid_multiple_schedulingE
-__ZTVN3tbb27invalid_multiple_schedulingE
-__ZN3tbb13improper_lockD0Ev
-__ZN3tbb13improper_lockD1Ev
-__ZNK3tbb13improper_lock4whatEv
-__ZTIN3tbb13improper_lockE
-__ZTSN3tbb13improper_lockE
-__ZTVN3tbb13improper_lockE
-
-# tbb_misc.cpp
-__ZN3tbb17assertion_failureEPKciS1_S1_
-__ZN3tbb21set_assertion_handlerEPFvPKciS1_S1_E
-__ZN3tbb8internal13handle_perrorEiPKc
-__ZN3tbb8internal15runtime_warningEPKcz
-_TBB_runtime_interface_version
-
-# itt_notify.cpp
-__ZN3tbb8internal32itt_load_pointer_with_acquire_v3EPKv
-__ZN3tbb8internal33itt_store_pointer_with_release_v3EPvS1_
-__ZN3tbb8internal19itt_load_pointer_v3EPKv
-__ZN3tbb8internal20itt_set_sync_name_v3EPvPKc
-
-# pipeline.cpp
-__ZTIN3tbb6filterE
-__ZTSN3tbb6filterE
-__ZTVN3tbb6filterE
-__ZN3tbb6filterD2Ev
-__ZN3tbb8pipeline10add_filterERNS_6filterE
-__ZN3tbb8pipeline12inject_tokenERNS_4taskE
-__ZN3tbb8pipeline13remove_filterERNS_6filterE
-__ZN3tbb8pipeline3runEm
-__ZN3tbb8pipeline3runEmRNS_18task_group_contextE
-__ZN3tbb8pipeline5clearEv
-__ZN3tbb19thread_bound_filter12process_itemEv
-__ZN3tbb19thread_bound_filter16try_process_itemEv
-__ZN3tbb8pipelineC1Ev
-__ZN3tbb8pipelineC2Ev
-__ZN3tbb8pipelineD0Ev
-__ZN3tbb8pipelineD1Ev
-__ZN3tbb8pipelineD2Ev
-__ZTIN3tbb8pipelineE
-__ZTSN3tbb8pipelineE
-__ZTVN3tbb8pipelineE
-
-# queuing_rw_mutex.cpp
-__ZN3tbb16queuing_rw_mutex11scoped_lock17upgrade_to_writerEv
-__ZN3tbb16queuing_rw_mutex11scoped_lock19downgrade_to_readerEv
-__ZN3tbb16queuing_rw_mutex11scoped_lock7acquireERS0_b
-__ZN3tbb16queuing_rw_mutex11scoped_lock7releaseEv
-__ZN3tbb16queuing_rw_mutex11scoped_lock11try_acquireERS0_b
-__ZN3tbb16queuing_rw_mutex18internal_constructEv
-
-# reader_writer_lock.cpp
-__ZN3tbb10interface518reader_writer_lock11scoped_lock16internal_destroyEv
-__ZN3tbb10interface518reader_writer_lock11scoped_lock18internal_constructERS1_
-__ZN3tbb10interface518reader_writer_lock13try_lock_readEv
-__ZN3tbb10interface518reader_writer_lock16scoped_lock_read16internal_destroyEv
-__ZN3tbb10interface518reader_writer_lock16scoped_lock_read18internal_constructERS1_
-__ZN3tbb10interface518reader_writer_lock16internal_destroyEv
-__ZN3tbb10interface518reader_writer_lock18internal_constructEv
-__ZN3tbb10interface518reader_writer_lock4lockEv
-__ZN3tbb10interface518reader_writer_lock6unlockEv
-__ZN3tbb10interface518reader_writer_lock8try_lockEv
-__ZN3tbb10interface518reader_writer_lock9lock_readEv
-
-#if !TBB_NO_LEGACY
-# spin_rw_mutex.cpp v2
-__ZN3tbb13spin_rw_mutex16internal_upgradeEPS0_
-__ZN3tbb13spin_rw_mutex22internal_itt_releasingEPS0_
-__ZN3tbb13spin_rw_mutex23internal_acquire_readerEPS0_
-__ZN3tbb13spin_rw_mutex23internal_acquire_writerEPS0_
-__ZN3tbb13spin_rw_mutex18internal_downgradeEPS0_
-__ZN3tbb13spin_rw_mutex23internal_release_readerEPS0_
-__ZN3tbb13spin_rw_mutex23internal_release_writerEPS0_
-__ZN3tbb13spin_rw_mutex27internal_try_acquire_readerEPS0_
-__ZN3tbb13spin_rw_mutex27internal_try_acquire_writerEPS0_
-#endif
-
-# spin_rw_mutex v3
-__ZN3tbb16spin_rw_mutex_v316internal_upgradeEv
-__ZN3tbb16spin_rw_mutex_v318internal_downgradeEv
-__ZN3tbb16spin_rw_mutex_v323internal_acquire_readerEv
-__ZN3tbb16spin_rw_mutex_v323internal_acquire_writerEv
-__ZN3tbb16spin_rw_mutex_v323internal_release_readerEv
-__ZN3tbb16spin_rw_mutex_v323internal_release_writerEv
-__ZN3tbb16spin_rw_mutex_v327internal_try_acquire_readerEv
-__ZN3tbb16spin_rw_mutex_v327internal_try_acquire_writerEv
-__ZN3tbb16spin_rw_mutex_v318internal_constructEv
-
-# spin_mutex.cpp
-__ZN3tbb10spin_mutex11scoped_lock16internal_acquireERS0_
-__ZN3tbb10spin_mutex11scoped_lock16internal_releaseEv
-__ZN3tbb10spin_mutex11scoped_lock20internal_try_acquireERS0_
-__ZN3tbb10spin_mutex18internal_constructEv
-
-# mutex.cpp
-__ZN3tbb5mutex11scoped_lock16internal_acquireERS0_
-__ZN3tbb5mutex11scoped_lock16internal_releaseEv
-__ZN3tbb5mutex11scoped_lock20internal_try_acquireERS0_
-__ZN3tbb5mutex16internal_destroyEv
-__ZN3tbb5mutex18internal_constructEv
-
-# recursive_mutex.cpp
-__ZN3tbb15recursive_mutex11scoped_lock16internal_acquireERS0_
-__ZN3tbb15recursive_mutex11scoped_lock16internal_releaseEv
-__ZN3tbb15recursive_mutex11scoped_lock20internal_try_acquireERS0_
-__ZN3tbb15recursive_mutex16internal_destroyEv
-__ZN3tbb15recursive_mutex18internal_constructEv
-
-# queuing_mutex.cpp
-__ZN3tbb13queuing_mutex11scoped_lock7acquireERS0_
-__ZN3tbb13queuing_mutex11scoped_lock7releaseEv
-__ZN3tbb13queuing_mutex11scoped_lock11try_acquireERS0_
-__ZN3tbb13queuing_mutex18internal_constructEv
-
-# critical_section.cpp
-__ZN3tbb8internal19critical_section_v418internal_constructEv
-
-#if !TBB_NO_LEGACY
-# concurrent_hash_map
-__ZNK3tbb8internal21hash_map_segment_base23internal_grow_predicateEv
-
-# concurrent_queue.cpp v2
-__ZN3tbb8internal21concurrent_queue_base12internal_popEPv
-__ZN3tbb8internal21concurrent_queue_base13internal_pushEPKv
-__ZN3tbb8internal21concurrent_queue_base21internal_set_capacityElm
-__ZN3tbb8internal21concurrent_queue_base23internal_pop_if_presentEPv
-__ZN3tbb8internal21concurrent_queue_base25internal_push_if_not_fullEPKv
-__ZN3tbb8internal21concurrent_queue_baseC2Em
-__ZN3tbb8internal21concurrent_queue_baseD2Ev
-__ZTIN3tbb8internal21concurrent_queue_baseE
-__ZTSN3tbb8internal21concurrent_queue_baseE
-__ZTVN3tbb8internal21concurrent_queue_baseE
-__ZN3tbb8internal30concurrent_queue_iterator_base6assignERKS1_
-__ZN3tbb8internal30concurrent_queue_iterator_base7advanceEv
-__ZN3tbb8internal30concurrent_queue_iterator_baseC2ERKNS0_21concurrent_queue_baseE
-__ZN3tbb8internal30concurrent_queue_iterator_baseD2Ev
-__ZNK3tbb8internal21concurrent_queue_base13internal_sizeEv
-#endif
-
-# concurrent_queue v3
-# constructors
-__ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3E
-__ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3Em
-__ZN3tbb8internal24concurrent_queue_base_v3C2Em
-# destructors
-__ZN3tbb8internal33concurrent_queue_iterator_base_v3D2Ev
-__ZN3tbb8internal24concurrent_queue_base_v3D2Ev
-# typeinfo
-__ZTIN3tbb8internal24concurrent_queue_base_v3E
-__ZTSN3tbb8internal24concurrent_queue_base_v3E
-#vtable
-__ZTVN3tbb8internal24concurrent_queue_base_v3E
-# methods
-__ZN3tbb8internal33concurrent_queue_iterator_base_v36assignERKS1_
-__ZN3tbb8internal33concurrent_queue_iterator_base_v37advanceEv
-__ZN3tbb8internal24concurrent_queue_base_v313internal_pushEPKv
-__ZN3tbb8internal24concurrent_queue_base_v325internal_push_if_not_fullEPKv
-__ZN3tbb8internal24concurrent_queue_base_v312internal_popEPv
-__ZN3tbb8internal24concurrent_queue_base_v323internal_pop_if_presentEPv
-__ZN3tbb8internal24concurrent_queue_base_v321internal_finish_clearEv
-__ZN3tbb8internal24concurrent_queue_base_v321internal_set_capacityElm
-__ZNK3tbb8internal24concurrent_queue_base_v313internal_sizeEv
-__ZNK3tbb8internal24concurrent_queue_base_v314internal_emptyEv
-__ZNK3tbb8internal24concurrent_queue_base_v324internal_throw_exceptionEv
-__ZN3tbb8internal24concurrent_queue_base_v36assignERKS1_
-
-#if !TBB_NO_LEGACY
-# concurrent_vector.cpp v2
-__ZN3tbb8internal22concurrent_vector_base13internal_copyERKS1_mPFvPvPKvmE
-__ZN3tbb8internal22concurrent_vector_base14internal_clearEPFvPvmEb
-__ZN3tbb8internal22concurrent_vector_base15internal_assignERKS1_mPFvPvmEPFvS4_PKvmESA_
-__ZN3tbb8internal22concurrent_vector_base16internal_grow_byEmmPFvPvmE
-__ZN3tbb8internal22concurrent_vector_base16internal_reserveEmmm
-__ZN3tbb8internal22concurrent_vector_base18internal_push_backEmRm
-__ZN3tbb8internal22concurrent_vector_base25internal_grow_to_at_leastEmmPFvPvmE
-__ZNK3tbb8internal22concurrent_vector_base17internal_capacityEv
-#endif
-
-# concurrent_vector v3
-__ZN3tbb8internal25concurrent_vector_base_v313internal_copyERKS1_mPFvPvPKvmE
-__ZN3tbb8internal25concurrent_vector_base_v314internal_clearEPFvPvmE
-__ZN3tbb8internal25concurrent_vector_base_v315internal_assignERKS1_mPFvPvmEPFvS4_PKvmESA_
-__ZN3tbb8internal25concurrent_vector_base_v316internal_grow_byEmmPFvPvPKvmES4_
-__ZN3tbb8internal25concurrent_vector_base_v316internal_reserveEmmm
-__ZN3tbb8internal25concurrent_vector_base_v318internal_push_backEmRm
-__ZN3tbb8internal25concurrent_vector_base_v325internal_grow_to_at_leastEmmPFvPvPKvmES4_
-__ZNK3tbb8internal25concurrent_vector_base_v317internal_capacityEv
-__ZN3tbb8internal25concurrent_vector_base_v316internal_compactEmPvPFvS2_mEPFvS2_PKvmE
-__ZN3tbb8internal25concurrent_vector_base_v313internal_swapERS1_
-__ZNK3tbb8internal25concurrent_vector_base_v324internal_throw_exceptionEm
-__ZN3tbb8internal25concurrent_vector_base_v3D2Ev
-__ZN3tbb8internal25concurrent_vector_base_v315internal_resizeEmmmPKvPFvPvmEPFvS4_S3_mE
-__ZN3tbb8internal25concurrent_vector_base_v337internal_grow_to_at_least_with_resultEmmPFvPvPKvmES4_
-
-# tbb_thread
-__ZN3tbb8internal13tbb_thread_v320hardware_concurrencyEv
-__ZN3tbb8internal13tbb_thread_v36detachEv
-__ZN3tbb8internal16thread_get_id_v3Ev
-__ZN3tbb8internal15free_closure_v3EPv
-__ZN3tbb8internal13tbb_thread_v34joinEv
-__ZN3tbb8internal13tbb_thread_v314internal_startEPFPvS2_ES2_
-__ZN3tbb8internal19allocate_closure_v3Em
-__ZN3tbb8internal7move_v3ERNS0_13tbb_thread_v3ES2_
-__ZN3tbb8internal15thread_yield_v3Ev
-__ZN3tbb8internal15thread_sleep_v3ERKNS_10tick_count10interval_tE
diff --git a/src/tbb/mac64-tbb-export.lst b/src/tbb/mac64-tbb-export.lst
new file mode 100644
index 0000000..7232c84
--- /dev/null
+++ b/src/tbb/mac64-tbb-export.lst
@@ -0,0 +1,352 @@
+/*
+    Copyright 2005-2011 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.
+*/
+
+#include "tbb/tbb_config.h"
+
+/*
+    Sometimes Mac OS X requires leading underscore (e. g. in export list file), but sometimes not
+    (e. g. when searching symbol in a dynamic library via dlsym()). Symbols in this file SHOULD
+    be listed WITHOUT one leading underscore. __TBB_SYMBOL macro should add underscore when
+    necessary, depending on the indended usage.
+*/
+
+// cache_aligned_allocator.cpp
+__TBB_SYMBOL( _ZN3tbb8internal12NFS_AllocateEmmPv )
+__TBB_SYMBOL( _ZN3tbb8internal15NFS_GetLineSizeEv )
+__TBB_SYMBOL( _ZN3tbb8internal8NFS_FreeEPv )
+__TBB_SYMBOL( _ZN3tbb8internal23allocate_via_handler_v3Em )
+__TBB_SYMBOL( _ZN3tbb8internal25deallocate_via_handler_v3EPv )
+__TBB_SYMBOL( _ZN3tbb8internal17is_malloc_used_v3Ev )
+
+// task.cpp v3
+__TBB_SYMBOL( _ZN3tbb4task13note_affinityEt )
+__TBB_SYMBOL( _ZN3tbb4task22internal_set_ref_countEi )
+__TBB_SYMBOL( _ZN3tbb4task28internal_decrement_ref_countEv )
+__TBB_SYMBOL( _ZN3tbb4task22spawn_and_wait_for_allERNS_9task_listE )
+__TBB_SYMBOL( _ZN3tbb4task4selfEv )
+__TBB_SYMBOL( _ZN3tbb10interface58internal9task_base7destroyERNS_4taskE )
+__TBB_SYMBOL( _ZNK3tbb4task26is_owned_by_current_threadEv )
+__TBB_SYMBOL( _ZN3tbb8internal19allocate_root_proxy4freeERNS_4taskE )
+__TBB_SYMBOL( _ZN3tbb8internal19allocate_root_proxy8allocateEm )
+__TBB_SYMBOL( _ZN3tbb8internal28affinity_partitioner_base_v36resizeEj )
+__TBB_SYMBOL( _ZN3tbb8internal36get_initial_auto_partitioner_divisorEv )
+__TBB_SYMBOL( _ZNK3tbb8internal20allocate_child_proxy4freeERNS_4taskE )
+__TBB_SYMBOL( _ZNK3tbb8internal20allocate_child_proxy8allocateEm )
+__TBB_SYMBOL( _ZNK3tbb8internal27allocate_continuation_proxy4freeERNS_4taskE )
+__TBB_SYMBOL( _ZNK3tbb8internal27allocate_continuation_proxy8allocateEm )
+__TBB_SYMBOL( _ZNK3tbb8internal34allocate_additional_child_of_proxy4freeERNS_4taskE )
+__TBB_SYMBOL( _ZNK3tbb8internal34allocate_additional_child_of_proxy8allocateEm )
+__TBB_SYMBOL( _ZTIN3tbb4taskE )
+__TBB_SYMBOL( _ZTSN3tbb4taskE )
+__TBB_SYMBOL( _ZTVN3tbb4taskE )
+__TBB_SYMBOL( _ZN3tbb19task_scheduler_init19default_num_threadsEv )
+__TBB_SYMBOL( _ZN3tbb19task_scheduler_init10initializeEim )
+__TBB_SYMBOL( _ZN3tbb19task_scheduler_init10initializeEi )
+__TBB_SYMBOL( _ZN3tbb19task_scheduler_init9terminateEv )
+__TBB_SYMBOL( _ZN3tbb8internal26task_scheduler_observer_v37observeEb )
+__TBB_SYMBOL( _ZN3tbb10empty_task7executeEv )
+__TBB_SYMBOL( _ZN3tbb10empty_taskD0Ev )
+__TBB_SYMBOL( _ZN3tbb10empty_taskD1Ev )
+__TBB_SYMBOL( _ZTIN3tbb10empty_taskE )
+__TBB_SYMBOL( _ZTSN3tbb10empty_taskE )
+__TBB_SYMBOL( _ZTVN3tbb10empty_taskE )
+
+#if !TBB_NO_LEGACY
+// task_v2.cpp
+__TBB_SYMBOL( _ZN3tbb4task7destroyERS0_ )
+#endif
+
+// Exception handling in task scheduler
+__TBB_SYMBOL( _ZNK3tbb8internal32allocate_root_with_context_proxy8allocateEm )
+__TBB_SYMBOL( _ZNK3tbb8internal32allocate_root_with_context_proxy4freeERNS_4taskE )
+__TBB_SYMBOL( _ZN3tbb4task12change_groupERNS_18task_group_contextE )
+__TBB_SYMBOL( _ZNK3tbb18task_group_context28is_group_execution_cancelledEv )
+__TBB_SYMBOL( _ZN3tbb18task_group_context22cancel_group_executionEv )
+__TBB_SYMBOL( _ZN3tbb18task_group_context26register_pending_exceptionEv )
+__TBB_SYMBOL( _ZN3tbb18task_group_context5resetEv )
+__TBB_SYMBOL( _ZN3tbb18task_group_context4initEv )
+__TBB_SYMBOL( _ZN3tbb18task_group_contextD1Ev )
+__TBB_SYMBOL( _ZN3tbb18task_group_contextD2Ev )
+#if __TBB_TASK_PRIORITY
+__TBB_SYMBOL( _ZN3tbb18task_group_context12set_priorityENS_10priority_tE )
+__TBB_SYMBOL( _ZNK3tbb18task_group_context8priorityEv )
+#endif /* __TBB_TASK_PRIORITY */
+__TBB_SYMBOL( _ZNK3tbb18captured_exception4nameEv )
+__TBB_SYMBOL( _ZNK3tbb18captured_exception4whatEv )
+__TBB_SYMBOL( _ZN3tbb18captured_exception10throw_selfEv )
+__TBB_SYMBOL( _ZN3tbb18captured_exception3setEPKcS2_ )
+__TBB_SYMBOL( _ZN3tbb18captured_exception4moveEv )
+__TBB_SYMBOL( _ZN3tbb18captured_exception5clearEv )
+__TBB_SYMBOL( _ZN3tbb18captured_exception7destroyEv )
+__TBB_SYMBOL( _ZN3tbb18captured_exception8allocateEPKcS2_ )
+__TBB_SYMBOL( _ZN3tbb18captured_exceptionD0Ev )
+__TBB_SYMBOL( _ZN3tbb18captured_exceptionD1Ev )
+__TBB_SYMBOL( _ZN3tbb18captured_exceptionD2Ev )
+__TBB_SYMBOL( _ZTIN3tbb18captured_exceptionE )
+__TBB_SYMBOL( _ZTSN3tbb18captured_exceptionE )
+__TBB_SYMBOL( _ZTVN3tbb18captured_exceptionE )
+__TBB_SYMBOL( _ZTIN3tbb13tbb_exceptionE )
+__TBB_SYMBOL( _ZTSN3tbb13tbb_exceptionE )
+__TBB_SYMBOL( _ZTVN3tbb13tbb_exceptionE )
+
+// Symbols for exceptions thrown from TBB
+__TBB_SYMBOL( _ZN3tbb8internal33throw_bad_last_alloc_exception_v4Ev )
+__TBB_SYMBOL( _ZN3tbb8internal18throw_exception_v4ENS0_12exception_idE )
+__TBB_SYMBOL( _ZNSt13runtime_errorD1Ev )
+__TBB_SYMBOL( _ZTISt13runtime_error )
+__TBB_SYMBOL( _ZTSSt13runtime_error )
+__TBB_SYMBOL( _ZNSt16invalid_argumentD1Ev )
+__TBB_SYMBOL( _ZTISt16invalid_argument )
+__TBB_SYMBOL( _ZTSSt16invalid_argument )
+__TBB_SYMBOL( _ZNSt11range_errorD1Ev )
+__TBB_SYMBOL( _ZTISt11range_error )
+__TBB_SYMBOL( _ZTSSt11range_error )
+__TBB_SYMBOL( _ZNSt12length_errorD1Ev )
+__TBB_SYMBOL( _ZTISt12length_error )
+__TBB_SYMBOL( _ZTSSt12length_error )
+__TBB_SYMBOL( _ZNSt12out_of_rangeD1Ev )
+__TBB_SYMBOL( _ZTISt12out_of_range )
+__TBB_SYMBOL( _ZTSSt12out_of_range )
+__TBB_SYMBOL( _ZN3tbb14bad_last_allocD0Ev )
+__TBB_SYMBOL( _ZN3tbb14bad_last_allocD1Ev )
+__TBB_SYMBOL( _ZNK3tbb14bad_last_alloc4whatEv )
+__TBB_SYMBOL( _ZTIN3tbb14bad_last_allocE )
+__TBB_SYMBOL( _ZTSN3tbb14bad_last_allocE )
+__TBB_SYMBOL( _ZTVN3tbb14bad_last_allocE )
+__TBB_SYMBOL( _ZN3tbb12missing_waitD0Ev )
+__TBB_SYMBOL( _ZN3tbb12missing_waitD1Ev )
+__TBB_SYMBOL( _ZNK3tbb12missing_wait4whatEv )
+__TBB_SYMBOL( _ZTIN3tbb12missing_waitE )
+__TBB_SYMBOL( _ZTSN3tbb12missing_waitE )
+__TBB_SYMBOL( _ZTVN3tbb12missing_waitE )
+__TBB_SYMBOL( _ZN3tbb27invalid_multiple_schedulingD0Ev )
+__TBB_SYMBOL( _ZN3tbb27invalid_multiple_schedulingD1Ev )
+__TBB_SYMBOL( _ZNK3tbb27invalid_multiple_scheduling4whatEv )
+__TBB_SYMBOL( _ZTIN3tbb27invalid_multiple_schedulingE )
+__TBB_SYMBOL( _ZTSN3tbb27invalid_multiple_schedulingE )
+__TBB_SYMBOL( _ZTVN3tbb27invalid_multiple_schedulingE )
+__TBB_SYMBOL( _ZN3tbb13improper_lockD0Ev )
+__TBB_SYMBOL( _ZN3tbb13improper_lockD1Ev )
+__TBB_SYMBOL( _ZNK3tbb13improper_lock4whatEv )
+__TBB_SYMBOL( _ZTIN3tbb13improper_lockE )
+__TBB_SYMBOL( _ZTSN3tbb13improper_lockE )
+__TBB_SYMBOL( _ZTVN3tbb13improper_lockE )
+
+// tbb_misc.cpp
+__TBB_SYMBOL( _ZN3tbb17assertion_failureEPKciS1_S1_ )
+__TBB_SYMBOL( _ZN3tbb21set_assertion_handlerEPFvPKciS1_S1_E )
+__TBB_SYMBOL( _ZN3tbb8internal13handle_perrorEiPKc )
+__TBB_SYMBOL( _ZN3tbb8internal15runtime_warningEPKcz )
+__TBB_SYMBOL( TBB_runtime_interface_version )
+
+// tbb_main.cpp
+__TBB_SYMBOL( _ZN3tbb8internal32itt_load_pointer_with_acquire_v3EPKv )
+__TBB_SYMBOL( _ZN3tbb8internal33itt_store_pointer_with_release_v3EPvS1_ )
+__TBB_SYMBOL( _ZN3tbb8internal18call_itt_notify_v5EiPv )
+__TBB_SYMBOL( _ZN3tbb8internal19itt_load_pointer_v3EPKv )
+__TBB_SYMBOL( _ZN3tbb8internal20itt_set_sync_name_v3EPvPKc )
+
+// pipeline.cpp
+__TBB_SYMBOL( _ZTIN3tbb6filterE )
+__TBB_SYMBOL( _ZTSN3tbb6filterE )
+__TBB_SYMBOL( _ZTVN3tbb6filterE )
+__TBB_SYMBOL( _ZN3tbb6filterD2Ev )
+__TBB_SYMBOL( _ZN3tbb8pipeline10add_filterERNS_6filterE )
+__TBB_SYMBOL( _ZN3tbb8pipeline12inject_tokenERNS_4taskE )
+__TBB_SYMBOL( _ZN3tbb8pipeline13remove_filterERNS_6filterE )
+__TBB_SYMBOL( _ZN3tbb8pipeline3runEm )
+__TBB_SYMBOL( _ZN3tbb8pipeline3runEmRNS_18task_group_contextE )
+__TBB_SYMBOL( _ZN3tbb8pipeline5clearEv )
+__TBB_SYMBOL( _ZN3tbb19thread_bound_filter12process_itemEv )
+__TBB_SYMBOL( _ZN3tbb19thread_bound_filter16try_process_itemEv )
+__TBB_SYMBOL( _ZN3tbb8pipelineC1Ev )
+__TBB_SYMBOL( _ZN3tbb8pipelineC2Ev )
+__TBB_SYMBOL( _ZN3tbb8pipelineD0Ev )
+__TBB_SYMBOL( _ZN3tbb8pipelineD1Ev )
+__TBB_SYMBOL( _ZN3tbb8pipelineD2Ev )
+__TBB_SYMBOL( _ZTIN3tbb8pipelineE )
+__TBB_SYMBOL( _ZTSN3tbb8pipelineE )
+__TBB_SYMBOL( _ZTVN3tbb8pipelineE )
+__TBB_SYMBOL( _ZN3tbb6filter16set_end_of_inputEv )
+
+// queuing_rw_mutex.cpp
+__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock17upgrade_to_writerEv )
+__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock19downgrade_to_readerEv )
+__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock7acquireERS0_b )
+__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock7releaseEv )
+__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock11try_acquireERS0_b )
+__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex18internal_constructEv )
+
+// reader_writer_lock.cpp
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock11scoped_lock16internal_destroyEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock11scoped_lock18internal_constructERS1_ )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock13try_lock_readEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock16scoped_lock_read16internal_destroyEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock16scoped_lock_read18internal_constructERS1_ )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock16internal_destroyEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock18internal_constructEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock4lockEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock6unlockEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock8try_lockEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock9lock_readEv )
+
+#if !TBB_NO_LEGACY
+// spin_rw_mutex.cpp v2
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex16internal_upgradeEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex22internal_itt_releasingEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_acquire_readerEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_acquire_writerEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex18internal_downgradeEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_release_readerEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_release_writerEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex27internal_try_acquire_readerEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex27internal_try_acquire_writerEPS0_ )
+#endif
+
+// spin_rw_mutex v3
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v316internal_upgradeEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v318internal_downgradeEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_acquire_readerEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_acquire_writerEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_release_readerEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_release_writerEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v327internal_try_acquire_readerEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v327internal_try_acquire_writerEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v318internal_constructEv )
+
+// spin_mutex.cpp
+__TBB_SYMBOL( _ZN3tbb10spin_mutex11scoped_lock16internal_acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb10spin_mutex11scoped_lock16internal_releaseEv )
+__TBB_SYMBOL( _ZN3tbb10spin_mutex11scoped_lock20internal_try_acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb10spin_mutex18internal_constructEv )
+
+// mutex.cpp
+__TBB_SYMBOL( _ZN3tbb5mutex11scoped_lock16internal_acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb5mutex11scoped_lock16internal_releaseEv )
+__TBB_SYMBOL( _ZN3tbb5mutex11scoped_lock20internal_try_acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb5mutex16internal_destroyEv )
+__TBB_SYMBOL( _ZN3tbb5mutex18internal_constructEv )
+
+// recursive_mutex.cpp
+__TBB_SYMBOL( _ZN3tbb15recursive_mutex11scoped_lock16internal_acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb15recursive_mutex11scoped_lock16internal_releaseEv )
+__TBB_SYMBOL( _ZN3tbb15recursive_mutex11scoped_lock20internal_try_acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb15recursive_mutex16internal_destroyEv )
+__TBB_SYMBOL( _ZN3tbb15recursive_mutex18internal_constructEv )
+
+// queuing_mutex.cpp
+__TBB_SYMBOL( _ZN3tbb13queuing_mutex11scoped_lock7acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb13queuing_mutex11scoped_lock7releaseEv )
+__TBB_SYMBOL( _ZN3tbb13queuing_mutex11scoped_lock11try_acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb13queuing_mutex18internal_constructEv )
+
+// critical_section.cpp
+__TBB_SYMBOL( _ZN3tbb8internal19critical_section_v418internal_constructEv )
+
+#if !TBB_NO_LEGACY
+// concurrent_hash_map
+__TBB_SYMBOL( _ZNK3tbb8internal21hash_map_segment_base23internal_grow_predicateEv )
+
+// concurrent_queue.cpp v2
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base12internal_popEPv )
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base13internal_pushEPKv )
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base21internal_set_capacityElm )
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base23internal_pop_if_presentEPv )
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base25internal_push_if_not_fullEPKv )
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_baseC2Em )
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_baseD2Ev )
+__TBB_SYMBOL( _ZTIN3tbb8internal21concurrent_queue_baseE )
+__TBB_SYMBOL( _ZTSN3tbb8internal21concurrent_queue_baseE )
+__TBB_SYMBOL( _ZTVN3tbb8internal21concurrent_queue_baseE )
+__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_base6assignERKS1_ )
+__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_base7advanceEv )
+__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_baseC2ERKNS0_21concurrent_queue_baseE )
+__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_baseD2Ev )
+__TBB_SYMBOL( _ZNK3tbb8internal21concurrent_queue_base13internal_sizeEv )
+#endif
+
+// concurrent_queue v3
+// constructors
+__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3E )
+__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3Em )
+__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v3C2Em )
+// destructors
+__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v3D2Ev )
+__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v3D2Ev )
+// typeinfo
+__TBB_SYMBOL( _ZTIN3tbb8internal24concurrent_queue_base_v3E )
+__TBB_SYMBOL( _ZTSN3tbb8internal24concurrent_queue_base_v3E )
+// vtable
+__TBB_SYMBOL( _ZTVN3tbb8internal24concurrent_queue_base_v3E )
+// methods
+__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v36assignERKS1_ )
+__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v37advanceEv )
+__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_v321internal_finish_clearEv )
+__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v321internal_set_capacityElm )
+__TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v313internal_sizeEv )
+__TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v314internal_emptyEv )
+__TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v324internal_throw_exceptionEv )
+__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v36assignERKS1_ )
+
+#if !TBB_NO_LEGACY
+// concurrent_vector.cpp v2
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base13internal_copyERKS1_mPFvPvPKvmE )
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base14internal_clearEPFvPvmEb )
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base15internal_assignERKS1_mPFvPvmEPFvS4_PKvmESA_ )
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base16internal_grow_byEmmPFvPvmE )
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base16internal_reserveEmmm )
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base18internal_push_backEmRm )
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base25internal_grow_to_at_leastEmmPFvPvmE )
+__TBB_SYMBOL( _ZNK3tbb8internal22concurrent_vector_base17internal_capacityEv )
+#endif
+
+// concurrent_vector v3
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v313internal_copyERKS1_mPFvPvPKvmE )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v314internal_clearEPFvPvmE )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v315internal_assignERKS1_mPFvPvmEPFvS4_PKvmESA_ )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v316internal_grow_byEmmPFvPvPKvmES4_ )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v316internal_reserveEmmm )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v318internal_push_backEmRm )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v325internal_grow_to_at_leastEmmPFvPvPKvmES4_ )
+__TBB_SYMBOL( _ZNK3tbb8internal25concurrent_vector_base_v317internal_capacityEv )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v316internal_compactEmPvPFvS2_mEPFvS2_PKvmE )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v313internal_swapERS1_ )
+__TBB_SYMBOL( _ZNK3tbb8internal25concurrent_vector_base_v324internal_throw_exceptionEm )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v3D2Ev )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v315internal_resizeEmmmPKvPFvPvmEPFvS4_S3_mE )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v337internal_grow_to_at_least_with_resultEmmPFvPvPKvmES4_ )
+
+// tbb_thread
+__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v320hardware_concurrencyEv )
+__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v36detachEv )
+__TBB_SYMBOL( _ZN3tbb8internal16thread_get_id_v3Ev )
+__TBB_SYMBOL( _ZN3tbb8internal15free_closure_v3EPv )
+__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v34joinEv )
+__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v314internal_startEPFPvS2_ES2_ )
+__TBB_SYMBOL( _ZN3tbb8internal19allocate_closure_v3Em )
+__TBB_SYMBOL( _ZN3tbb8internal7move_v3ERNS0_13tbb_thread_v3ES2_ )
+__TBB_SYMBOL( _ZN3tbb8internal15thread_yield_v3Ev )
+__TBB_SYMBOL( _ZN3tbb8internal15thread_sleep_v3ERKNS_10tick_count10interval_tE )
+
+#undef __TBB_SYMBOL
diff --git a/src/tbb/mailbox.h b/src/tbb/mailbox.h
index 0bab2dc..18e3a0c 100644
--- a/src/tbb/mailbox.h
+++ b/src/tbb/mailbox.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -174,13 +174,11 @@ public:
             my_putter->my_is_idle = value;
         }
     }
-#if TBB_USE_ASSERT
     //! Indicate whether thread that reads this mailbox is idle.
-    bool assert_is_idle( bool value ) const {
-        __TBB_ASSERT( !my_putter || my_putter->my_is_idle==value, NULL );
-        return true;
+    bool is_idle_state ( bool value ) const {
+        return !my_putter || my_putter->my_is_idle == value;
     }
-#endif /* TBB_USE_ASSERT */
+
 #if DO_ITT_NOTIFY
     //! Get pointer to corresponding outbox used for ITT_NOTIFY calls.
     void* outbox() const {return my_putter;}
diff --git a/src/tbb/market.cpp b/src/tbb/market.cpp
index f4b033e..9514f61 100644
--- a/src/tbb/market.cpp
+++ b/src/tbb/market.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -28,8 +28,6 @@
 
 #include "tbb/tbb_stddef.h"
 
-#if __TBB_ARENA_PER_MASTER
-
 #include "market.h"
 #include "tbb_main.h"
 #include "governor.h"
@@ -39,6 +37,34 @@
 namespace tbb {
 namespace internal {
 
+void market::insert_arena_into_list ( arena& a ) {
+#if __TBB_TASK_PRIORITY
+    arena_list_type &arenas = my_priority_levels[a.my_top_priority].arenas;
+    arena_list_type::iterator &next = my_priority_levels[a.my_top_priority].next_arena;
+#else /* !__TBB_TASK_PRIORITY */
+    arena_list_type &arenas = my_arenas;
+    arena_list_type::iterator &next = my_next_arena;
+#endif /* !__TBB_TASK_PRIORITY */
+    arenas.push_front( a );
+    if ( arenas.size() == 1 )
+        next = arenas.begin();
+}
+
+void market::remove_arena_from_list ( arena& a ) {
+#if __TBB_TASK_PRIORITY
+    arena_list_type &arenas = my_priority_levels[a.my_top_priority].arenas;
+    arena_list_type::iterator &next = my_priority_levels[a.my_top_priority].next_arena;
+#else /* !__TBB_TASK_PRIORITY */
+    arena_list_type &arenas = my_arenas;
+    arena_list_type::iterator &next = my_next_arena;
+#endif /* !__TBB_TASK_PRIORITY */
+    __TBB_ASSERT( next != arenas.end(), NULL );
+    if ( &*next == &a )
+        if ( ++next == arenas.end() && arenas.size() > 1 )
+            next = arenas.begin();
+    arenas.remove( a );
+}
+
 //------------------------------------------------------------------------
 // market
 //------------------------------------------------------------------------
@@ -47,8 +73,18 @@ market::market ( unsigned max_num_workers, size_t stack_size )
     : my_ref_count(1)
     , my_stack_size(stack_size)
     , my_max_num_workers(max_num_workers)
+#if __TBB_TASK_PRIORITY
+    , my_global_top_priority(normalized_normal_priority)
+    , my_global_bottom_priority(normalized_normal_priority)
+#if __TBB_TRACK_PRIORITY_LEVEL_SATURATION
+    , my_lowest_populated_level(normalized_normal_priority)
+#endif /* __TBB_TRACK_PRIORITY_LEVEL_SATURATION */
+#endif /* __TBB_TASK_PRIORITY */
 {
-    my_next_arena = my_arenas.begin();
+#if __TBB_TASK_PRIORITY
+    __TBB_ASSERT( my_global_reload_epoch == 0, NULL );
+    my_priority_levels[normalized_normal_priority].workers_available = max_num_workers;
+#endif /* __TBB_TASK_PRIORITY */
 
     // Once created RML server will start initializing workers that will need 
     // global market instance to get worker stack size
@@ -89,7 +125,7 @@ market& market::global_market ( unsigned max_num_workers, size_t stack_size ) {
 void market::destroy () {
 #if __TBB_COUNT_TASK_NODES
     if ( my_task_node_count )
-        runtime_warning( "Leaked %ld task objects\n", (intptr_t)my_task_node_count );
+        runtime_warning( "Leaked %ld task objects\n", (long)my_task_node_count );
 #endif /* __TBB_COUNT_TASK_NODES */
     this->~market();
     NFS_Free( this );
@@ -115,86 +151,249 @@ arena& market::create_arena ( unsigned max_num_workers, size_t stack_size ) {
     arena& a = arena::allocate_arena( m, min(max_num_workers, m.my_max_num_workers) );
     // Add newly created arena into the existing market's list.
     spin_mutex::scoped_lock lock(m.my_arenas_list_mutex);
-    m.my_arenas.push_front( a );
-    if ( m.my_arenas.size() == 1 )
-        m.my_next_arena = m.my_arenas.begin();
+    m.insert_arena_into_list(a);
     return a;
 }
 
 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);
-    __TBB_ASSERT( my_next_arena != my_arenas.end(), NULL );
-    if ( &*my_next_arena == &a )
-        if ( ++my_next_arena == my_arenas.end() && my_arenas.size() > 1 )
-            my_next_arena = my_arenas.begin();
-    my_arenas.remove( a );
+#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);
 }
 
-arena* market::arena_in_need () {
-    spin_mutex::scoped_lock lock(my_arenas_list_mutex);
-    if ( my_arenas.empty() )
+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( my_next_arena != my_arenas.end(), NULL );
-    arena_list_type::iterator it = my_next_arena;
+    __TBB_ASSERT( next != arenas.end(), NULL );
+    arena_list_type::iterator it = next;
     do {
         arena& a = *it;
-        if ( ++it == my_arenas.end() )
-            it = my_arenas.begin();
+        if ( ++it == arenas.end() )
+            it = arenas.begin();
         if ( a.num_workers_active() < a.my_num_workers_allotted ) {
             ++a.my_num_threads_active;
-            my_next_arena = it;
+#if __TBB_TRACK_PRIORITY_LEVEL_SATURATION
+            ++a.my_num_workers_present;
+            ++my_priority_levels[a.my_top_priority].workers_present;
+#endif /* __TBB_TRACK_PRIORITY_LEVEL_SATURATION */
+            next = it;
             return &a;
         }
-    } while ( it != my_next_arena );
+    } while ( it != next );
     return NULL;
 }
 
-void market::update_allotment ( int max_workers ) {
-    unsigned carry = 0;
+void market::update_allotment ( arena_list_type& arenas, int workers_demand, int max_workers ) {
+    if ( !workers_demand )
+        return;
+    int carry = 0;
+#if TBB_USE_ASSERT
+    int assigned = 0;
+#endif /* TBB_USE_ASSERT */
+    max_workers = min( max_workers, workers_demand );
+    arena_list_type::iterator it = arenas.begin();
+    for ( ; it != arenas.end(); ++it ) {
+        arena& a = *it;
+        int tmp = a.my_num_workers_requested * max_workers + carry;
+        int allotted = tmp / workers_demand;
+        carry = tmp % workers_demand;
+        // a.my_num_workers_requested may temporarily exceed a.my_max_num_workers
+        a.my_num_workers_allotted = min( allotted, (int)a.my_max_num_workers );
+#if TBB_USE_ASSERT
+        assigned += a.my_num_workers_allotted;
+#endif /* TBB_USE_ASSERT */
+    }
+    __TBB_ASSERT( assigned <= workers_demand, NULL );
+}
+
+#if __TBB_TASK_PRIORITY
+inline void market::update_global_top_priority ( intptr_t newPriority ) {
+    GATHER_STATISTIC( ++governor::local_scheduler_if_initialized()->my_counters.market_prio_switches );
+    my_global_top_priority = newPriority;
+    my_priority_levels[newPriority].workers_available = my_max_num_workers;
+    __TBB_store_with_release( my_global_reload_epoch, my_global_reload_epoch + 1 );
+}
+
+arena* market::arena_in_need (
+#if __TBB_TRACK_PRIORITY_LEVEL_SATURATION
+                              arena* prev_arena
+#endif /* __TBB_TRACK_PRIORITY_LEVEL_SATURATION */
+                             )
+{
     spin_mutex::scoped_lock lock(my_arenas_list_mutex);
-    arena_list_type::iterator it = my_arenas.begin();
-    int total_demand = my_total_demand;
-    max_workers = min(max_workers, total_demand);
-    if ( total_demand > 0 ) {
-        for ( ; it != my_arenas.end(); ++it ) {
-            arena& a = *it;
-            int tmp = a.my_num_workers_requested * max_workers + carry;
-            int allotted = tmp / total_demand;
-            carry = tmp % total_demand;
-            a.my_num_workers_allotted = min( allotted, (int)a.my_max_num_workers );
+    assert_market_valid();
+#if __TBB_TRACK_PRIORITY_LEVEL_SATURATION
+    if ( prev_arena ) {
+        priority_level_info &pl = my_priority_levels[prev_arena->my_top_priority];
+        --prev_arena->my_num_workers_present;
+        --pl.workers_present;
+        if ( !--prev_arena->my_num_threads_active && !prev_arena->my_num_workers_requested ) {
+            lock.release();
+            prev_arena->close_arena();
+            lock.acquire();
         }
     }
-    else {
-        for ( ; it != my_arenas.end(); ++it ) {
-            it->my_num_workers_allotted = 0;
-        }
+#endif /* __TBB_TRACK_PRIORITY_LEVEL_SATURATION */
+    int p = my_global_top_priority;
+    arena *a = NULL;
+    do {
+        priority_level_info &pl = my_priority_levels[p];
+#if __TBB_TRACK_PRIORITY_LEVEL_SATURATION
+        __TBB_ASSERT( p >= my_lowest_populated_level, NULL );
+        if ( pl.workers_present >= pl.workers_requested )
+            continue;
+#endif /* __TBB_TRACK_PRIORITY_LEVEL_SATURATION */
+        a = arena_in_need( pl.arenas, pl.next_arena );
+    } while ( !a && --p >= my_global_bottom_priority );
+    return a;
+}
+
+void market::update_allotment ( intptr_t highest_affected_priority ) {
+    intptr_t i = highest_affected_priority; 
+    while ( i >= my_global_bottom_priority ) {
+        priority_level_info &pl = my_priority_levels[i];
+        update_allotment( pl.arenas, pl.workers_requested, pl.workers_available );
+        int available = pl.workers_available - pl.workers_requested;
+#if __TBB_TRACK_PRIORITY_LEVEL_SATURATION
+        if ( available <= 0 && pl.workers_available )
+            my_lowest_populated_level = i;
+#endif /* __TBB_TRACK_PRIORITY_LEVEL_SATURATION */
+        if ( --i >= 0 )
+            my_priority_levels[i].workers_available = available;
     }
 }
+#endif /* __TBB_TASK_PRIORITY */
 
 /** The balancing algorithm may be liable to data races. However the aberrations 
     caused by the races are not fatal and generally only temporarily affect fairness 
     of the workers distribution among arenas. **/
 void market::adjust_demand ( arena& a, int delta ) {
     __TBB_ASSERT( theMarket, "market instance was destroyed prematurely?" );
+    if ( !delta )
+        return;
+    my_arenas_list_mutex.lock();
     a.my_num_workers_requested += delta;
+    if ( a.my_num_workers_requested == 0 )
+        a.my_num_workers_allotted = 0;
+#if __TBB_TASK_PRIORITY
+    intptr_t p = a.my_top_priority;
+    priority_level_info &pl = my_priority_levels[p];
+    pl.workers_requested += delta;
+    if ( a.my_num_workers_requested == 0 ) {
+        if ( a.my_top_priority != normalized_normal_priority ) {
+            GATHER_STATISTIC( ++governor::local_scheduler_if_initialized()->my_counters.arena_prio_resets );
+            update_arena_top_priority( a, normalized_normal_priority );
+        }
+        a.my_bottom_priority = normalized_normal_priority;
+    }
+    if ( p > my_global_top_priority ) {
+        __TBB_ASSERT( a.my_num_workers_requested > 0, NULL );
+        update_global_top_priority(p);
+        a.my_num_workers_allotted = min( (int)my_max_num_workers, a.my_num_workers_requested );
+        my_priority_levels[p - 1].workers_available = my_max_num_workers - a.my_num_workers_allotted;
+        update_allotment( p - 1 );
+    }
+    else if ( p == my_global_top_priority ) {
+        // Requested number of workers may transitory drop below zero
+        if ( pl.workers_requested <= 0 ) {
+            while ( --p >= my_global_bottom_priority && !my_priority_levels[p].workers_requested )
+                continue;
+            if ( p < my_global_bottom_priority ) {
+                my_global_bottom_priority = normalized_normal_priority;
+                update_global_top_priority(normalized_normal_priority);
+#if __TBB_TRACK_PRIORITY_LEVEL_SATURATION
+                my_lowest_populated_level = normalized_normal_priority;
+#endif /* __TBB_TRACK_PRIORITY_LEVEL_SATURATION */
+            }
+            else
+                update_global_top_priority(p);
+        }
+        update_allotment( my_global_top_priority );
+    }
+    else if ( p == my_global_bottom_priority ) {
+        // Requested number of workers may transitory drop below zero
+        if ( pl.workers_requested <= 0 ) {
+            while ( ++p <= my_global_top_priority && !my_priority_levels[p].workers_requested )
+                continue;
+            if ( p < num_priority_levels ) {
+                TBB_TRACE(( "adjust_demand(%p, %d): change global bottom prio %ld -> %ld\n", &a, delta, (long)my_global_bottom_priority, (long)p ));
+                my_global_bottom_priority = p;
+#if __TBB_TRACK_PRIORITY_LEVEL_SATURATION
+                my_lowest_populated_level = max( my_lowest_populated_level, p );
+#endif /* __TBB_TRACK_PRIORITY_LEVEL_SATURATION */
+            }
+            else {
+                my_global_bottom_priority = normalized_normal_priority;
+                update_global_top_priority(normalized_normal_priority);
+#if __TBB_TRACK_PRIORITY_LEVEL_SATURATION
+                my_lowest_populated_level = normalized_normal_priority;
+#endif /* __TBB_TRACK_PRIORITY_LEVEL_SATURATION */
+            }
+        }
+        else
+            update_allotment( p );
+    }
+    else if ( p < my_global_bottom_priority ) {
+        __TBB_ASSERT( a.my_num_workers_requested > 0, NULL );
+        int available = my_priority_levels[my_global_bottom_priority].workers_available
+                        - my_priority_levels[my_global_bottom_priority].workers_requested;
+        if ( available > 0 ) {
+            do {
+                __TBB_ASSERT( (my_global_bottom_priority - 1 == p) || !my_priority_levels[my_global_bottom_priority - 1].workers_requested, NULL );
+                my_priority_levels[my_global_bottom_priority - 1].workers_available = available;
+            } while ( --my_global_bottom_priority > p );
+            __TBB_ASSERT( pl.workers_requested == a.my_num_workers_requested, NULL );
+            a.my_num_workers_allotted = min(available, pl.workers_requested);
+#if __TBB_TRACK_PRIORITY_LEVEL_SATURATION
+            my_lowest_populated_level = p;
+#endif
+        }
+        else {
+            __TBB_ASSERT( !a.my_num_workers_allotted, NULL );
+            do {
+                __TBB_ASSERT( !my_priority_levels[my_global_bottom_priority].workers_requested, NULL );
+                my_priority_levels[my_global_bottom_priority].workers_available = 0;
+            } while ( --my_global_bottom_priority > p );
+        }
+        __TBB_ASSERT( p == my_global_bottom_priority, NULL );
+    }
+    else {
+        __TBB_ASSERT( my_global_bottom_priority < p && p < my_global_top_priority, NULL );
+        update_allotment( p );
+    }
+    assert_market_valid();
+#else /* !__TBB_TASK_PRIORITY */
     my_total_demand += delta;
-    update_allotment( my_max_num_workers );
+    update_allotment();
+#endif /* !__TBB_TASK_PRIORITY */
+    my_arenas_list_mutex.unlock();
     // Must be called outside of any locks
     my_server->adjust_job_count_estimate( delta );
+    GATHER_STATISTIC( governor::local_scheduler_if_initialized() ? ++governor::local_scheduler_if_initialized()->my_counters.gate_switches : 0 );
 }
 
 void market::process( job& j ) {
     generic_scheduler& s = static_cast<generic_scheduler&>(j);
+#if __TBB_TRACK_PRIORITY_LEVEL_SATURATION
+    arena *a = NULL;
+    while ( (a = arena_in_need(a)) )
+#else
     while ( arena *a = arena_in_need() )
+#endif
         a->process(s);
+    GATHER_STATISTIC( ++s.my_counters.market_roundtrips );
 }
 
 void market::cleanup( job& j ) {
     __TBB_ASSERT( theMarket != this, NULL );
     generic_scheduler& s = static_cast<generic_scheduler&>(j);
     generic_scheduler* mine = governor::local_scheduler_if_initialized();
-    __TBB_ASSERT( !mine || mine->arena_index!=0, NULL );
+    __TBB_ASSERT( !mine || mine->my_arena_index!=0, NULL );
     if( mine!=&s ) {
         governor::assume_scheduler( &s );
         generic_scheduler::cleanup_worker( &s, mine!=NULL );
@@ -222,81 +421,104 @@ void market::acknowledge_close_connection() {
     return s;
 }
 
-#if __TBB_TASK_GROUP_CONTEXT
-/** Propagates cancellation down the tree of dependent contexts by walking each 
-    thread's local list of contexts **/
-void market::propagate_cancellation ( task_group_context& ctx ) {
-    __TBB_ASSERT ( ctx.my_cancellation_requested, "No cancellation request in the context" );
-    // The whole propagation algorithm is under the lock in order to ensure correctness 
-    // in case of parallel cancellations at the different levels of the context tree.
-    // See the note 1 at the bottom of this file.
-    global_market_mutex_type::scoped_lock lock(theMarketMutex);
-    // Advance global cancellation epoch
-    __TBB_FetchAndAddWrelease(&global_cancel_count, 1);
-    // Propagate to all workers and masters and sync up their local epochs with the global one
-    unsigned num_workers = my_num_workers;
-    for ( unsigned i = 0; i < num_workers; ++i ) {
-        generic_scheduler *s = my_workers[i];
-        // If the worker is only about to be registered, skip it.
-        if ( s )
-            s->propagate_cancellation();
+#if __TBB_TASK_PRIORITY
+void market::update_arena_top_priority ( arena& a, intptr_t new_priority ) {
+    GATHER_STATISTIC( ++governor::local_scheduler_if_initialized()->my_counters.arena_prio_switches );
+    __TBB_ASSERT( a.my_top_priority != new_priority, NULL );
+    priority_level_info &prev_level = my_priority_levels[a.my_top_priority],
+                        &new_level = my_priority_levels[new_priority];
+    remove_arena_from_list(a);
+    a.my_top_priority = new_priority;
+    insert_arena_into_list(a);
+    ++a.my_reload_epoch;
+#if __TBB_TRACK_PRIORITY_LEVEL_SATURATION
+    // Arena's my_num_workers_present may remain positive for some time after its
+    // my_num_workers_requested becomes zero. Thus the following two lines are
+    // executed unconditionally.
+    prev_level.workers_present -= a.my_num_workers_present;
+    new_level.workers_present += a.my_num_workers_present;
+#endif /* __TBB_TRACK_PRIORITY_LEVEL_SATURATION */
+    prev_level.workers_requested -= a.my_num_workers_requested;
+    new_level.workers_requested += a.my_num_workers_requested;
+}
+
+bool market::lower_arena_priority ( arena& a, intptr_t new_priority, intptr_t old_priority ) {
+    spin_mutex::scoped_lock lock(my_arenas_list_mutex);
+    if ( a.my_top_priority != old_priority ) {
+        assert_market_valid();
+        return false;
     }
-    arena_list_type::iterator it = my_arenas.begin();
-    for ( ; it != my_arenas.end(); ++it ) {
-        generic_scheduler *s = it->slot[0].my_scheduler;
-        // If the master is under construction, skip it.
-        if ( s )
-            s->propagate_cancellation();
+    __TBB_ASSERT( a.my_top_priority > new_priority, NULL );
+    intptr_t p = a.my_top_priority;
+    update_arena_top_priority( a, new_priority );
+    if ( a.my_num_workers_requested ) {
+        if ( my_global_bottom_priority > new_priority ) {
+            TBB_TRACE(( "    -> global bottom prio %ld -> %ld\n", (long)my_global_bottom_priority, (long)new_priority ));
+            my_global_bottom_priority = new_priority;
+        }
+        if ( p == my_global_top_priority && my_priority_levels[p].workers_requested <= 0 ) {
+            while ( --p >= my_global_bottom_priority && my_priority_levels[p].workers_requested <= 0 )
+                continue;
+            __TBB_ASSERT( p >= my_global_bottom_priority, NULL );
+            update_global_top_priority(p);
+        }
+#if __TBB_TRACK_PRIORITY_LEVEL_SATURATION
+        if ( p >= my_lowest_populated_level )
+#endif /* __TBB_TRACK_PRIORITY_LEVEL_SATURATION */
+            update_allotment( p );
     }
+    assert_market_valid();
+    return true;
 }
-#endif /* __TBB_TASK_GROUP_CONTEXT */
+
+bool market::update_arena_priority ( arena& a, intptr_t new_priority ) {
+    spin_mutex::scoped_lock lock(my_arenas_list_mutex);
+    if ( a.my_top_priority == new_priority ) {
+        assert_market_valid();
+        return false;
+    }
+    else if ( a.my_top_priority > new_priority ) {
+        if ( a.my_bottom_priority > new_priority ) {
+            TBB_TRACE(( "    -> bottom prio %ld -> %ld)\n", (long)a.my_bottom_priority, (long)new_priority ));
+            a.my_bottom_priority = new_priority;
+        }
+        assert_market_valid();
+        return false;
+    }
+    update_arena_top_priority( a, new_priority );
+    if ( a.my_num_workers_requested ) {
+        if ( my_global_top_priority < new_priority ) {
+            update_global_top_priority(new_priority);
+        }
+        else {
+            if ( my_global_top_priority == new_priority )
+                ++my_global_reload_epoch;
+            // Previous arena priority may have been at my_global_bottom_priority level,
+            // thus check if my_global_bottom_priority needs to be updated.
+            while ( !my_priority_levels[my_global_bottom_priority].workers_requested ) {
+                TBB_TRACE(( "    -> global bottom prio %ld -> %ld)\n", (long)my_global_bottom_priority, (long)my_global_bottom_priority + 1 ));
+                ++my_global_bottom_priority;
+            }
+        }
+#if __TBB_TRACK_PRIORITY_LEVEL_SATURATION
+        if ( new_priority >= my_lowest_populated_level )
+#endif /* __TBB_TRACK_PRIORITY_LEVEL_SATURATION */
+            update_allotment( new_priority );
+    }
+    assert_market_valid();
+    return true;
+}
+#endif /* __TBB_TASK_PRIORITY */
 
 #if __TBB_COUNT_TASK_NODES 
 intptr_t market::workers_task_node_count() {
     intptr_t result = 0;
-    spin_mutex::scoped_lock lock(my_arenas_list_mutex);
-    for ( arena_list_type::iterator it = my_arenas.begin(); it != my_arenas.end(); ++it )
-        result += it->workers_task_node_count();
+    ForEachArena(a) {
+        result += a.workers_task_node_count();
+    } EndForEach();
     return result;
 }
 #endif /* __TBB_COUNT_TASK_NODES */
 
 } // namespace internal
 } // namespace tbb
-
-#endif /* __TBB_ARENA_PER_MASTER */
-
-/*
-    Notes:
-
-1.  Consider parallel cancellations at the different levels of the context tree:
-
-        Ctx1 <- Cancelled by Thread1            |- Thread2 started processing
-         |                                      |
-        Ctx2                                    |- Thread1 started processing
-         |                                   T1 |- Thread2 finishes and syncs up local counters
-        Ctx3 <- Cancelled by Thread2            |
-         |                                      |- Ctx5 is bound to Ctx2
-        Ctx4                                    |
-                                             T2 |- Thread1 reaches Ctx2
-                                             
-    Thread-propagator of each cancellation increments global counter. However the thread 
-    propagating the cancellation from the outermost context (Thread1) may be the last 
-    to finish. Which means that the local counters may be synchronized earlier (by Thread2, 
-    at Time1) than it propagated cancellation into Ctx2 (at time Time2). If a new context 
-    (Ctx5) is created and bound to Ctx2 between Time1 and Time2, checking its parent only 
-    (Ctx2) may result in cancellation request being lost.
-
-    This issue is solved by doing the whole propagation under the lock (the_scheduler_list_mutex).
-
-    If we need more concurrency while processing parallel cancellations, we could try 
-    the following modification of the propagation algorithm:
-
-    advance global counter and remember it
-    for each thread:
-        scan thread's list of contexts
-    for each thread:
-        sync up its local counter only if the global counter has not been changed
-
-    However this version of the algorithm requires more analysis and verification.
-*/
diff --git a/src/tbb/market.h b/src/tbb/market.h
index 0d70573..e3f229f 100644
--- a/src/tbb/market.h
+++ b/src/tbb/market.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -31,8 +31,7 @@
 
 #include "tbb/tbb_stddef.h"
 
-#if __TBB_ARENA_PER_MASTER
-
+#include "scheduler_common.h"
 #include "tbb/atomic.h"
 #include "tbb/spin_mutex.h"
 #include "../rml/include/rml_tbb.h"
@@ -53,12 +52,18 @@ namespace internal {
 
 class arena;
 class generic_scheduler;
+template<typename SchedulerTraits> class custom_scheduler;
 
 //------------------------------------------------------------------------
 // Class market
 //------------------------------------------------------------------------
 
 class market : no_copy, rml::tbb_client {
+    friend class generic_scheduler;
+    friend class arena;
+    template<typename SchedulerTraits> friend class custom_scheduler;
+    friend class tbb::task_group_context;
+private:
     friend void ITT_DoUnsafeOneTimeInitialization ();
 
     typedef intrusive_list<arena> arena_list_type;
@@ -74,19 +79,9 @@ class market : no_copy, rml::tbb_client {
     //! Reference count controlling market object lifetime
     intptr_t my_ref_count;
 
-    //! List of active arenas
-    arena_list_type my_arenas;
-
-    //! The first arena to be checked when idle worker seeks for an arena to enter
-    /** The check happens in round-robin fashion. **/
-    arena_list_type::iterator my_next_arena;
-
     //! Lightweight mutex guarding accounting operations with arenas list
     spin_mutex  my_arenas_list_mutex;
 
-    //! Number of workers that were requested by all arenas
-    atomic<int> my_total_demand;
-
     //! Pointer to the RML server object that services this TBB instance.
     rml::tbb_server* my_server;
 
@@ -96,15 +91,76 @@ class market : no_copy, rml::tbb_client {
     //! Number of workers requested from the underlying resource manager
     unsigned my_max_num_workers;
 
+    //! Number of workers that have been delivered by RML
+    /** Used to assign indices to the new workers coming from RML, and busy part
+        of my_workers array. **/
+    atomic<unsigned> my_num_workers;
+
+#if __TBB_TASK_PRIORITY
+    //! Highest priority among active arenas in the market.
+    /** Arena priority level is its tasks highest priority (specified by arena's
+        my_top_priority member).
+        Arena is active when it has outstanding request for workers. Note that 
+        inactive arena may have workers lingering there for some time. **/
+    intptr_t my_global_top_priority;
+
+    //! Lowest priority among active arenas in the market.
+    /** See also my_global_top_priority **/
+    intptr_t my_global_bottom_priority;
+
+    //! Tracks events that may bring tasks in offload areas to the top priority level.
+    /** Incremented when global top priority is decremented or a task group priority
+        is elevated to the current top level. **/
+    uintptr_t my_global_reload_epoch;
+
+    //! Information about arenas at a particular priority level
+    struct priority_level_info {
+        //! List of arenas at this priority level
+        arena_list_type arenas;
+
+        //! The first arena to be checked when idle worker seeks for an arena to enter
+        /** The check happens in round-robin fashion. **/
+        arena_list_type::iterator next_arena;
+
+        //! Total amount of workers requested by arenas at this priority level.
+        int workers_requested;
+
+        //! Maximal amount of workers the market can tell off to this priority level.
+        int workers_available;
+
+#if __TBB_TRACK_PRIORITY_LEVEL_SATURATION
+        //! Total amount of workers that are in arenas at this priority level.
+        int workers_present;
+#endif /* __TBB_TRACK_PRIORITY_LEVEL_SATURATION */
+    }; // struct priority_level_info
+
+    //! Information about arenas at different priority levels
+    priority_level_info my_priority_levels[num_priority_levels];
+
+#if __TBB_TRACK_PRIORITY_LEVEL_SATURATION
+    //! Lowest priority level having workers available.
+    intptr_t my_lowest_populated_level;
+#endif /* __TBB_TRACK_PRIORITY_LEVEL_SATURATION */
+
+#else /* !__TBB_TASK_PRIORITY */
+
+    //! List of registered arenas
+    arena_list_type my_arenas;
+
+    //! The first arena to be checked when idle worker seeks for an arena to enter
+    /** The check happens in round-robin fashion. **/
+    arena_list_type::iterator my_next_arena;
+
+    //! Number of workers that were requested by all arenas
+    int my_total_demand;
+#endif /* !__TBB_TASK_PRIORITY */
+
 #if __TBB_COUNT_TASK_NODES
     //! Net number of nodes that have been allocated from heap.
     /** Updated each time a scheduler or arena is destroyed. */
     atomic<intptr_t> my_task_node_count;
 #endif /* __TBB_COUNT_TASK_NODES */
 
-    //! Number of workers that have been delivered by RML
-    atomic<unsigned> my_num_workers;
-
     //! Constructor
     market ( unsigned max_num_workers, size_t stack_size );
 
@@ -114,18 +170,63 @@ class market : no_copy, rml::tbb_client {
     //! Destroys and deallocates market object created by market::create()
     void destroy ();
 
+#if __TBB_TASK_PRIORITY
     //! Returns next arena that needs more workers, or NULL.
-    arena* arena_in_need ();
+    arena* arena_in_need (
+#if __TBB_TRACK_PRIORITY_LEVEL_SATURATION
+                           arena* prev_arena
+#endif /* __TBB_TRACK_PRIORITY_LEVEL_SATURATION */
+                         );
 
-    //! Recalculates the number of workers assigned to each arena.
+    //! Recalculates the number of workers assigned to each arena at and below the specified priority.
     /** The actual number of workers servicing a particular arena may temporarily 
         deviate from the calculated value. **/
-    void update_allotment ( int max_workers );
+    void update_allotment ( intptr_t highest_affected_priority );
+
+    //! Changes arena's top and bottom priority boundaries if necessary
+    void update_arena_top_priority ( arena& a, intptr_t newPriority );
+
+    inline void update_global_top_priority ( intptr_t newPriority );
+
+    void assert_market_valid () const {
+        __TBB_ASSERT( (my_priority_levels[my_global_top_priority].workers_requested > 0
+                           && !my_priority_levels[my_global_top_priority].arenas.empty())
+                       || (my_global_top_priority == my_global_bottom_priority &&
+                           my_global_top_priority == normalized_normal_priority), NULL );
+    }
+
+#else /* !__TBB_TASK_PRIORITY */
+
+    //! Recalculates the number of workers assigned to each arena in the list.
+    /** The actual number of workers servicing a particular arena may temporarily 
+        deviate from the calculated value. **/
+    void update_allotment () { update_allotment( my_arenas, my_total_demand, (int)my_max_num_workers ); }
+
+    //! Returns next arena that needs more workers, or NULL.
+    arena* arena_in_need () {
+        spin_mutex::scoped_lock lock(my_arenas_list_mutex);
+        return arena_in_need(my_arenas, my_next_arena);
+    }
+    void assert_market_valid () const {}
+#endif /* !__TBB_TASK_PRIORITY */
 
     //! Returns number of masters doing computational (CPU-intensive) work
     int num_active_masters () { return 1; }  // APM TODO: replace with a real mechanism
 
-    // // //
+
+    ////////////////////////////////////////////////////////////////////////////////
+    // Helpers to unify code branches dependent on priority feature presence
+
+    void insert_arena_into_list ( arena& a );
+
+    void remove_arena_from_list ( arena& a );
+
+    arena* arena_in_need ( arena_list_type &arenas, arena_list_type::iterator& next );
+
+    static void update_allotment ( arena_list_type& arenas, int total_demand, int max_workers );
+
+
+    ////////////////////////////////////////////////////////////////////////////////
     // Implementation of rml::tbb_client interface methods
 
     /*override*/ version_type version () const { return 0; }
@@ -163,6 +264,41 @@ public:
     //! Returns the requested stack size of worker threads.
     size_t worker_stack_size () const { return my_stack_size; }
 
+#if _WIN32||_WIN64
+    //! register master with the resource manager
+    void register_master( ::rml::server::execution_resource_t& rsc_handle ) {
+        __TBB_ASSERT( my_server, "RML server not defined?" );
+        // the server may ignore registration and set master_exec_resource to NULL.
+        my_server->register_master( rsc_handle );
+    }
+
+    //! unregister master with the resource manager
+    void unregister_master( ::rml::server::execution_resource_t& rsc_handle ) const {
+        my_server->unregister_master( rsc_handle );
+    }
+#endif /* WIN */
+
+#if __TBB_TASK_GROUP_CONTEXT
+    //! Finds all contexts affected by the state change and propagates the new state to them.
+    template <typename T>
+    bool propagate_task_group_state ( T task_group_context::*mptr_state, task_group_context& src, T new_state );
+#endif /* __TBB_TASK_GROUP_CONTEXT */
+
+#if __TBB_TASK_PRIORITY
+    //! Lowers arena's priority is not higher than newPriority 
+    /** Returns true if arena priority was actually elevated. **/ 
+    bool lower_arena_priority ( arena& a, intptr_t new_priority, intptr_t old_priority );
+
+    //! Makes sure arena's priority is not lower than newPriority 
+    /** Returns true if arena priority was elevated. Also updates arena's bottom
+        priority boundary if necessary.
+
+        This method is called whenever a user changes priority, because whether
+        it was hiked or sunk can be determined for sure only under the lock used
+        by this function. **/
+    bool update_arena_priority ( arena& a, intptr_t new_priority );
+#endif /* __TBB_TASK_PRIORITY */
+
 #if __TBB_COUNT_TASK_NODES
     //! Returns the number of task objects "living" in worker threads
     intptr_t workers_task_node_count();
@@ -173,30 +309,34 @@ public:
 #endif /* __TBB_COUNT_TASK_NODES */
 
 #if __TBB_TASK_GROUP_CONTEXT
-    //! Propagates cancellation request to all descendants of the context.
-    void propagate_cancellation ( task_group_context& ctx );
-
     //! Array of pointers to the registered workers
     /** Used by cancellation propagation mechanism.
         Must be the last data member of the class market. **/
     generic_scheduler* my_workers[1];
 #endif /* __TBB_TASK_GROUP_CONTEXT */
-#if __TBB_ARENA_PER_MASTER && ( _WIN32||_WIN64 )
-    //! register master with the resource manager
-    void register_master( ::rml::server::execution_resource_t& rsc_handle ) {
-        __TBB_ASSERT( my_server, "RML server not defined?" );
-        // the server may ignore registration and set master_exec_resource to NULL.
-        my_server->register_master( rsc_handle );
-    }
-
-    //! unregister master with the resource manager
-    void unregister_master( ::rml::server::execution_resource_t& rsc_handle ) const {
-        my_server->unregister_master( rsc_handle );
-    }
-#endif /* !__TBB_ARENA_PER_MASTER && ( _WIN32||_WIN64 ) */
 
 }; // class market
 
+#if __TBB_TASK_PRIORITY
+    #define BeginForEachArena(a)    \
+        spin_mutex::scoped_lock arena_list_lock(my_arenas_list_mutex);  \
+        for ( intptr_t i = my_global_top_priority; i >= my_global_bottom_priority; --i ) {  \
+            /*spin_mutex::scoped_lock arena_list_lock(my_priority_levels[i].my_arenas_list_mutex);*/ \
+            arena_list_type &arenas = my_priority_levels[i].arenas;
+#else /* !__TBB_TASK_PRIORITY */
+    #define BeginForEachArena(a)    \
+        arena_list_type &arenas = my_arenas; {
+#endif /* !__TBB_TASK_PRIORITY */
+
+#define ForEachArena(a)     \
+    BeginForEachArena(a)    \
+        arena_list_type::iterator it = arenas.begin();  \
+        for ( ; it != arenas.end(); ++it ) {            \
+            arena &a = *it;
+
+#define EndForEach() }}
+
+
 } // namespace internal
 } // namespace tbb
 
@@ -205,6 +345,4 @@ public:
     #pragma warning (pop)
 #endif // warning 4244 is back
 
-#endif /* __TBB_ARENA_PER_MASTER */
-
 #endif /* _TBB_market_H */
diff --git a/src/tbb/mutex.cpp b/src/tbb/mutex.cpp
index 7ade57e..f86586f 100644
--- a/src/tbb/mutex.cpp
+++ b/src/tbb/mutex.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 ddb8321..f57585b 100644
--- a/src/tbb/observer_proxy.cpp
+++ b/src/tbb/observer_proxy.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -188,7 +188,7 @@ observer_proxy* observer_proxy::process_list( observer_proxy* local_last, bool i
             // behavior of a master or worker thread.
 #if TBB_USE_ASSERT
             runtime_warning( "%s threw exception\n", is_entry ? "on_scheduler_entry" : "on_scheduler_exit"); 
-#endif /* __TBB_USE_ASSERT */        
+#endif /* TBB_USE_ASSERT */        
         }
         intptr_t bc = --tso->my_busy_count;
         __TBB_ASSERT_EX( bc>=0, "my_busy_count underflowed" );
diff --git a/src/tbb/observer_proxy.h b/src/tbb/observer_proxy.h
index 04e36b5..6715b86 100644
--- a/src/tbb/observer_proxy.h
+++ b/src/tbb/observer_proxy.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -40,7 +40,7 @@ class observer_proxy {
     friend class task_scheduler_observer_v3;
     //! Reference count used for garbage collection.
     /** 1 for reference from my task_scheduler_observer.
-        1 for each local_last_observer_proxy that points to me. 
+        1 for each my_local_last_observer_proxy that points to me. 
         No accounting for predecessor in the global list. 
         No accounting for global_last_observer_proxy that points to me. */
     atomic<int> gc_ref_count;
diff --git a/src/tbb/pipeline.cpp b/src/tbb/pipeline.cpp
index 751b9d8..e09102d 100644
--- a/src/tbb/pipeline.cpp
+++ b/src/tbb/pipeline.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -30,6 +30,8 @@
 #include "tbb/spin_mutex.h"
 #include "tbb/cache_aligned_allocator.h"
 #include "itt_notify.h"
+#include "semaphore.h"
+#include "tls.h"  // for parallel filters that do not use NULL as end_of_input
 
 
 namespace tbb {
@@ -57,13 +59,19 @@ struct task_info {
 /** Each item is a task_info, inserted into a position in the buffer corresponding to a Token. */
 class input_buffer {
     friend class tbb::internal::pipeline_root_task;
+    friend class tbb::filter;
     friend class tbb::thread_bound_filter;
+    friend class tbb::internal::stage_task;
+    friend class tbb::pipeline;
 
     typedef  Token  size_type;
 
     //! Array of deferred tasks that cannot yet start executing. 
     task_info* array;
 
+    //! for thread-bound filter, semaphore for waiting, NULL otherwise.
+    semaphore* my_sem;
+
     //! Size of array
     /** Always 0 or a power of 2 */
     size_type array_size;
@@ -83,7 +91,7 @@ class input_buffer {
     /** Must be a power of 2 */
     static const size_type initial_buffer_size = 4;
 
-    //! Used only for out of order 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. 
@@ -91,14 +99,27 @@ class input_buffer {
 
     //! True for thread-bound filter, false otherwise. 
     bool is_bound;
+
+    //! for parallel filters that accepts NULLs, thread-local flag for reaching end_of_input
+    typedef basic_tls<intptr_t> end_of_input_tls_t;
+    end_of_input_tls_t end_of_input_tls;
+    bool end_of_input_tls_allocated; // no way to test pthread creation of TLS
+
+    void create_sema(size_t initial_tokens) { __TBB_ASSERT(!my_sem,NULL); my_sem = new internal::semaphore(initial_tokens); }
+    void free_sema() { __TBB_ASSERT(my_sem,NULL); delete my_sem; }
+    void sema_P() { __TBB_ASSERT(my_sem,NULL); my_sem->P(); }
+    void sema_V() { __TBB_ASSERT(my_sem,NULL); my_sem->V(); }
+
 public:
     //! Construct empty buffer.
     input_buffer( bool is_ordered_, bool is_bound_ ) : 
-            array(NULL), array_size(0),
+            array(NULL), my_sem(NULL), array_size(0),
             low_token(0), high_token(0), 
-            is_ordered(is_ordered_), is_bound(is_bound_) {
+            is_ordered(is_ordered_), is_bound(is_bound_),
+            end_of_input_tls_allocated(false) {
         grow(initial_buffer_size);
         __TBB_ASSERT( array, NULL );
+        if(is_bound) create_sema(0);
     }
 
     //! Destroy the buffer.
@@ -106,34 +127,48 @@ public:
         __TBB_ASSERT( array, NULL );
         cache_aligned_allocator<task_info>().deallocate(array,array_size);
         poison_pointer( array );
+        if(my_sem) {
+            free_sema();
+        }
+        if(end_of_input_tls_allocated) {
+            destroy_my_tls();
+        }
     }
 
     //! Put a token into the buffer.
     /** If task information was placed into buffer, returns true;
         otherwise returns false, informing the caller to create and spawn a task.
+        If input buffer owned by thread-bound filter and the item at
+        low_token was not valid, issue a V()
+        If the input_buffer is owned by a successor to a thread-bound filter,
+        the force_put parameter should be true to ensure the token is inserted
+        in the buffer.
     */
-    // Using template to avoid explicit dependency on stage_task
-    template<typename StageTask>
-    bool put_token( StageTask& putter ) {
+    bool put_token( task_info& info_, bool force_put = false ) {
         {
+            info_.is_valid = true;
             spin_mutex::scoped_lock lock( array_mutex );
             Token token;
+            bool was_empty = !array[low_token&(array_size-1)].is_valid;
             if( is_ordered ) {
-                if( !putter.my_token_ready ) {
-                    putter.my_token = high_token++;
-                    putter.my_token_ready = true;
+                if( !info_.my_token_ready ) {
+                    info_.my_token = high_token++;
+                    info_.my_token_ready = true;
                 }
-                token = putter.my_token;
+                token = info_.my_token;
             } else
                 token = high_token++;
             __TBB_ASSERT( (tokendiff_t)(token-low_token)>=0, NULL );
-            if( token!=low_token || is_bound ) {
+            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 ) 
                     grow( token-low_token+1 );
                 ITT_NOTIFY( sync_releasing, this );
-                putter.put_task_info(array[token&(array_size-1)]);
+                array[token&(array_size-1)] = info_;
+                if(was_empty && is_bound) {
+                    sema_V();
+                }
                 return true;
             }
         }
@@ -143,6 +178,10 @@ public:
     //! Note that processing of a token is finished.
     /** Fires up processing of the next token, if processing was deferred. */
     // Using template to avoid explicit dependency on stage_task
+    // this is only called for serial filters, and is the reason for the
+    // advance parameter in return_item (we're incrementing low_token here.)
+    // Non-TBF serial stages don't advance the token at the start because the presence
+    // of the current token in the buffer keeps another stage from being spawned.
     template<typename StageTask>
     void note_done( Token token, StageTask& spawner ) {
         task_info wakee;
@@ -175,6 +214,9 @@ public:
     }
 #endif
 
+    //! return an item, invalidate the queued item, but only advance if advance
+    //  advance == true for parallel filters.  If the filter is serial, leave the
+    // item in the buffer to keep another stage from being spawned.
     bool return_item(task_info& info, bool advance) {
         spin_mutex::scoped_lock lock( array_mutex );
         task_info& item = array[low_token&(array_size-1)];
@@ -188,24 +230,14 @@ public:
         return false;
     }
 
-    void put_item( task_info& info ) {
-        info.is_valid = true;
-        spin_mutex::scoped_lock lock( array_mutex );
-        Token token;
-        if( is_ordered ) {
-            if( !info.my_token_ready ) {
-                info.my_token = high_token++;
-                info.my_token_ready = true;
-            }
-            token = info.my_token;
-        } else
-            token = high_token++;
-        __TBB_ASSERT( (tokendiff_t)(token-low_token)>=0, NULL );
-        if( token-low_token>=array_size ) 
-            grow( token-low_token+1 );
-        ITT_NOTIFY( sync_releasing, this );
-        array[token&(array_size-1)] = info;
-    }
+    //! true if the current low_token is valid.
+    bool has_item() { spin_mutex::scoped_lock lock(array_mutex); return array[low_token&(array_size -1)].is_valid; }
+
+    // end_of_input signal for parallel_pipeline, parallel input filters with 0 tokens allowed.
+    void create_my_tls() { int status = end_of_input_tls.create(); if(status) handle_perror(status, "TLS not allocated for filter"); end_of_input_tls_allocated = true; }
+    void destroy_my_tls() { int status = end_of_input_tls.destroy(); if(status) handle_perror(status, "Failed to destroy filter TLS"); }
+    bool my_tls_end_of_input() { return end_of_input_tls.get() != 0; }
+    void set_my_tls_end_of_input() { end_of_input_tls.set(1); }
 };
 
 void input_buffer::grow( size_type minimum_size ) {
@@ -233,6 +265,7 @@ private:
     filter* my_filter;  
     //! True if this task has not yet read the input.
     bool my_at_start;
+
 public:
     //! Construct stage_task for first stage in a pipeline.
     /** Such a stage has not read any input yet. */
@@ -275,13 +308,6 @@ public:
                                 stage_task( my_pipeline, my_filter, info );
         spawn(*clone);
     }
-    //! Puts current task information
-    void put_task_info(task_info &where_to_put ) {
-        where_to_put.my_object = my_object;
-        where_to_put.my_token = my_token;
-        where_to_put.my_token_ready = my_token_ready;
-        where_to_put.is_valid = true;
-    }
 };
 
 task* stage_task::execute() {
@@ -290,7 +316,8 @@ task* stage_task::execute() {
     if( my_at_start ) {
         if( my_filter->is_serial() ) {
             my_object = (*my_filter)(my_object);
-            if( my_object ) {
+            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
                     my_token_ready = true;
@@ -298,7 +325,7 @@ task* stage_task::execute() {
                     if( my_pipeline.has_thread_bound_filters )
                         my_pipeline.token_counter++; // ideally, with relaxed semantics
                 }
-                if( !my_filter->next_filter_in_pipeline ) {
+                if( !my_filter->next_filter_in_pipeline ) { // we're only filter in pipeline
                     reset();
                     goto process_another_stage;
                 } else {
@@ -321,11 +348,12 @@ task* stage_task::execute() {
             if( --my_pipeline.input_tokens>0 )
                 spawn( *new( allocate_additional_child_of(*parent()) ) stage_task( my_pipeline ) );
             my_object = (*my_filter)(my_object);
-            if( !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; 
                 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--;
+                        my_pipeline.token_counter--;  // fix token_counter
                 }
                 return NULL;
             }
@@ -351,7 +379,7 @@ task* stage_task::execute() {
                         my_filter = my_filter->next_filter_in_pipeline;
                     } while( my_filter && my_filter->is_bound() );
                     // Check if there is an item ready to process
-                    if( my_filter && my_filter->my_input_buffer->return_item(*this, !my_filter->is_serial()) ) 
+                    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
@@ -360,8 +388,17 @@ task* stage_task::execute() {
         }
     } else {
         // Reached end of the pipe.
-        if( ++my_pipeline.input_tokens>1 || my_pipeline.end_of_input || my_pipeline.filter_list->is_bound() )
+        size_t ntokens_avail = ++my_pipeline.input_tokens;
+        if(my_pipeline.filter_list->is_bound() ) {
+            if(ntokens_avail == 1) {
+                my_pipeline.filter_list->my_input_buffer->sema_V();
+            }
+            return NULL;
+        }
+        if( ntokens_avail>1  // Only recycle if there is one available token
+                || my_pipeline.end_of_input ) {
             return NULL; // No need to recycle for new input
+        }
         ITT_NOTIFY( sync_acquired, &my_pipeline.input_tokens );
         // Recycle as an input stage task.
         reset();
@@ -394,8 +431,7 @@ class pipeline_root_task: public task {
             while( current_filter ) {
                 __TBB_ASSERT( !current_filter->is_bound(), "filter is thread-bound?" );
                 __TBB_ASSERT( current_filter->prev_filter_in_pipeline->is_bound(), "previous filter is not thread-bound?" );
-                if( !my_pipeline.end_of_input
-                    || (tokendiff_t)(my_pipeline.token_counter - current_filter->my_input_buffer->low_token) > 0 )
+                if( !my_pipeline.end_of_input || current_filter->has_more_work())
                 {
                     task_info info;
                     info.reset();
@@ -419,7 +455,7 @@ class pipeline_root_task: public task {
                     first_suitable_filter = first_suitable_filter->next_segment;
                     current_filter = first_suitable_filter; 
                 }
-            } /* end of while */
+            } /* while( current_filter ) */
             return NULL;
         } else { 
             if( !my_pipeline.end_of_input ) {
@@ -555,9 +591,20 @@ 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 {
-            if( filter_.prev_filter_in_pipeline && filter_.prev_filter_in_pipeline->is_bound() )
-                filter_.my_input_buffer = new internal::input_buffer( false, false );
+        else { 
+            if(filter_.prev_filter_in_pipeline) {
+                if(filter_.prev_filter_in_pipeline->is_bound()) {
+                    // successors to bound filters must have an input_buffer
+                    filter_.my_input_buffer = new internal::input_buffer( /*is_ordered*/false, false );
+                }
+            }
+            else {  // input filter
+                if(filter_.object_may_be_null() ) {
+                    //TODO: buffer only needed to hold TLS; could improve
+                    filter_.my_input_buffer = new internal::input_buffer( /*is_ordered*/false, false );
+                    filter_.my_input_buffer->create_my_tls();
+                }
+            }
         }
     } else {
         if( filter_.is_serial() ) {
@@ -568,6 +615,9 @@ void pipeline::add_filter( filter& filter_ ) {
 }
 
 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) 
         filter_list = filter_.next_filter_in_pipeline;
     else {
@@ -600,15 +650,29 @@ void pipeline::run( size_t max_number_of_live_tokens
     if( filter_list ) {
         internal::pipeline_cleaner my_pipeline_cleaner(*this);
         end_of_input = false;
+        input_tokens = internal::Token(max_number_of_live_tokens);
+        if(has_thread_bound_filters) {
+            // release input filter if thread-bound
+            if(filter_list->is_bound()) {
+                filter_list->my_input_buffer->sema_V();
+            }
+        }
 #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 );
 #endif
-        input_tokens = internal::Token(max_number_of_live_tokens);
         // Start execution of tasks
         task::spawn_root_and_wait( *end_counter );
-    } 
+
+        if(has_thread_bound_filters) {
+            for(filter* f = filter_list->next_filter_in_pipeline; f; f=f->next_filter_in_pipeline) {
+                if(f->is_bound()) {
+                    f->my_input_buffer->sema_V(); // wake to end
+                }
+            }
+        }
+    }
 }
 
 #if __TBB_TASK_GROUP_CONTEXT
@@ -625,18 +689,36 @@ void pipeline::run( size_t max_number_of_live_tokens ) {
 }
 #endif // __TBB_TASK_GROUP_CONTEXT
 
+bool filter::has_more_work() {
+    __TBB_ASSERT(my_pipeline, NULL);
+    __TBB_ASSERT(my_input_buffer, "has_more_work() called for filter with no input buffer");
+    return (internal::tokendiff_t)(my_pipeline->token_counter - my_input_buffer->low_token) != 0;
+}
+
 filter::~filter() {
     if ( (my_filter_mode & version_mask) >= __TBB_PIPELINE_VERSION(3) ) {
-        if ( next_filter_in_pipeline != filter::not_in_pipeline() ) { 
-            __TBB_ASSERT( prev_filter_in_pipeline != filter::not_in_pipeline(), "probably filter list is broken" );
+        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" );
     }
 }
 
+void
+filter::set_end_of_input() {
+    __TBB_ASSERT(my_input_buffer, NULL);
+    __TBB_ASSERT(object_may_be_null(), NULL);
+    if(is_serial()) {
+        my_pipeline->end_of_input = true;
+    }
+    else {
+        __TBB_ASSERT(my_input_buffer->end_of_input_tls_allocated, NULL);
+        my_input_buffer->set_my_tls_end_of_input();
+    }
+}
+
 thread_bound_filter::result_type thread_bound_filter::process_item() {
     return internal_process_item(true);
 }
@@ -648,18 +730,21 @@ thread_bound_filter::result_type thread_bound_filter::try_process_item() {
 thread_bound_filter::result_type thread_bound_filter::internal_process_item(bool is_blocking) {
     internal::task_info info;
     info.reset();
-    
+
+    if(my_pipeline && my_pipeline->end_of_input && !has_more_work())
+        return end_of_stream;
+
     if( !prev_filter_in_pipeline ) {
         if( my_pipeline->end_of_input )
             return end_of_stream;
-        while( my_pipeline->input_tokens == 0 ) {
-            if( is_blocking )
-                __TBB_Yield();
-            else
+        while(my_pipeline->input_tokens == 0) {
+            if( !is_blocking ) 
                 return item_not_available;
+            my_input_buffer->sema_P();
         }
         info.my_object = (*this)(info.my_object);
         if( info.my_object ) {
+            __TBB_ASSERT(my_pipeline->input_tokens > 0, "Token failed in thread-bound filter");
             my_pipeline->input_tokens--;
             if( is_ordered() ) {
                 info.my_token = my_pipeline->token_counter;
@@ -671,20 +756,31 @@ thread_bound_filter::result_type thread_bound_filter::internal_process_item(bool
             return end_of_stream; 
         }
     } else { /* this is not an input filter */
-        while( !my_input_buffer->return_item(info, /*advance=*/true) ) {
-            if( my_pipeline->end_of_input && my_input_buffer->low_token == my_pipeline->token_counter )
-                return end_of_stream;
-            if( is_blocking )
-                __TBB_Yield();
-            else
+        while(!my_input_buffer->has_item()) {
+            if(!is_blocking) {
                 return item_not_available;
+            }
+            my_input_buffer->sema_P();
+            if( my_pipeline->end_of_input && !has_more_work()) {
+                return end_of_stream;
+            }
+        }
+        if(!my_input_buffer->return_item(info, /*advance*/true)) {
+            __TBB_ASSERT(0,"return_item failed");
         }
         info.my_object = (*this)(info.my_object);
     }
     if( next_filter_in_pipeline ) {
-        next_filter_in_pipeline->my_input_buffer->put_item(info);
+        if (!next_filter_in_pipeline->my_input_buffer->put_token(info,/*force_put=*/true) ) {
+            __TBB_ASSERT(0, "Couldn't put token after thread-bound buffer");
+        }
     } else {
-        my_pipeline->input_tokens++;
+        size_t ntokens_avail = ++(my_pipeline->input_tokens);
+        if(my_pipeline->filter_list->is_bound()) {
+            if(ntokens_avail == 1) {
+                my_pipeline->filter_list->my_input_buffer->sema_V();
+            }
+        }
     }
 
     return success;
diff --git a/src/tbb/private_server.cpp b/src/tbb/private_server.cpp
index f6fda67..f795101 100644
--- a/src/tbb/private_server.cpp
+++ b/src/tbb/private_server.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -26,19 +26,13 @@
     the GNU General Public License.
 */
 
-
 #include "rml_tbb.h"
 #include "../server/thread_monitor.h"
 #include "tbb/atomic.h"
 #include "tbb/cache_aligned_allocator.h"
 #include "tbb/spin_mutex.h"
-#include "tbb/tbb_thread.h"
-
-#if _XBOX
-    #define NONET
-    #define NOD3D
-    #include <xtl.h>
-#endif
+#include "governor.h"
+#include "tbb_misc.h"
 
 using rml::internal::thread_monitor;
 
@@ -133,7 +127,7 @@ public:
 
 class private_server: public tbb_server, no_copy {
     tbb_client& my_client;
-    //! Maximum number of threads to be creatd.
+    //! Maximum number of threads to be created.
     /** Threads are created lazily, so maximum might not actually be reached. */
     const tbb_client::size_type my_n_thread;
 
@@ -205,7 +199,7 @@ public:
 
     /*override*/ void independent_thread_number_changed( int ) {__TBB_ASSERT(false,NULL);}
 
-    /*override*/ unsigned default_concurrency() const {return tbb::tbb_thread::hardware_concurrency()-1;}
+    /*override*/ unsigned default_concurrency() const { return governor::default_num_threads() - 1; }
 
     /*override*/ void adjust_job_count_estimate( int delta );
 
@@ -223,7 +217,7 @@ public:
     #pragma warning(push)
     #pragma warning(disable:4189)
 #endif
-#if __MINGW32__ && __GNUC__==4 &&__GNUC_MINOR__>=2
+#if __MINGW32__ && __GNUC__==4 &&__GNUC_MINOR__>=2 && !__MINGW64__
 // ensure that stack is properly aligned for TBB threads
 __attribute__((force_align_arg_pointer))
 #endif
@@ -231,7 +225,7 @@ __RML_DECL_THREAD_ROUTINE private_worker::thread_routine( void* arg ) {
     private_worker* self = static_cast<private_worker*>(arg);
     AVOID_64K_ALIASING( self->my_index );
 #if _XBOX
-    int HWThreadIndex = GetHardwareThreadIndex(i);
+    int HWThreadIndex = __TBB_XBOX360_GetHardwareThreadIndex(i);
     XSetThreadProcessor(GetCurrentThread(), HWThreadIndex);
 #endif
     self->run();
@@ -291,8 +285,18 @@ void private_worker::run() {
 }
 
 inline void private_worker::wake_or_launch() {
-    if( my_state==st_init && my_state.compare_and_swap( st_starting, st_init )==st_init )
+    if( my_state==st_init && my_state.compare_and_swap( st_starting, st_init )==st_init ) {
+#if USE_WINTHREAD
+        thread_monitor::launch( thread_routine, this, my_server.my_stack_size, &this->my_index );
+#elif USE_PTHREAD
+        {
+        affinity_helper fpa;
+        fpa.protect_affinity_mask();
         thread_monitor::launch( thread_routine, this, my_server.my_stack_size );
+        // Implicit destruction of fpa resets original affinity mask.
+        }
+#endif /* USE_PTHREAD */
+    }
     else
         my_thread_monitor.notify();
 }
diff --git a/src/tbb/queuing_mutex.cpp b/src/tbb/queuing_mutex.cpp
index 4edf371..7c00337 100644
--- a/src/tbb/queuing_mutex.cpp
+++ b/src/tbb/queuing_mutex.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/queuing_rw_mutex.cpp b/src/tbb/queuing_rw_mutex.cpp
index d02f358..882bc6e 100644
--- a/src/tbb/queuing_rw_mutex.cpp
+++ b/src/tbb/queuing_rw_mutex.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/reader_writer_lock.cpp b/src/tbb/reader_writer_lock.cpp
index 2f4e3f6..bd9e6a5 100644
--- a/src/tbb/reader_writer_lock.cpp
+++ b/src/tbb/reader_writer_lock.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/recursive_mutex.cpp b/src/tbb/recursive_mutex.cpp
index 7083020..6b5775b 100644
--- a/src/tbb/recursive_mutex.cpp
+++ b/src/tbb/recursive_mutex.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 d57bcc7..c6a0205 100644
--- a/src/tbb/scheduler.cpp
+++ b/src/tbb/scheduler.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -35,7 +35,6 @@
 #include "arena.h"
 #include "mailbox.h"
 #include "observer_proxy.h"
-#include "itt_notify.h"
 
 namespace tbb {
 namespace internal {
@@ -48,24 +47,9 @@ inline generic_scheduler* allocate_scheduler ( arena* a, size_t index ) {
 }
 
 #if __TBB_TASK_GROUP_CONTEXT
-#if !__TBB_ARENA_PER_MASTER
-//! Head of the list of master thread schedulers.
-static scheduler_list_node_t the_scheduler_list_head;
+spin_mutex the_context_state_propagation_mutex;
 
-//! Mutex protecting access to the list of schedulers.
-static mutex the_scheduler_list_mutex;
-#endif /* !__TBB_ARENA_PER_MASTER */
-
-//! Counter that is incremented whenever new cancellation signal is sent to a task group.
-/** Together with generic_scheduler::local_cancel_count forms cross-thread signaling
-    mechanism that allows to avoid locking at the hot path of normal execution flow.
-
-    When a descendant task group context is being registered or unregistered,
-    the global and local counters are compared. If they differ, it means that 
-    a cancellation signal is being propagated, and registration/deregistration
-    routines take slower branch that may block (at most one thread of the pool
-    can be blocked at any moment). Otherwise the control path is lock-free and fast. **/
-uintptr_t global_cancel_count = 0;
+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 
@@ -73,18 +57,14 @@ uintptr_t global_cancel_count = 0;
 static task_group_context dummy_context(task_group_context::isolated);
 #endif /* __TBB_TASK_GROUP_CONTEXT */
 
-#if STATISTICS
-    static statistics the_statistics;
-#endif /* STATISTICS */
-
 void Scheduler_OneTimeInitialization ( bool itt_present ) {
     AllocateSchedulerPtr = itt_present ? &custom_scheduler<DefaultSchedulerTraits>::allocate_scheduler :
                                       &custom_scheduler<IntelSchedulerTraits>::allocate_scheduler;
-#if __TBB_TASK_GROUP_CONTEXT && !__TBB_ARENA_PER_MASTER
-    ITT_SYNC_CREATE(&the_scheduler_list_mutex, SyncType_GlobalLock, SyncObj_SchedulersList);
-    the_scheduler_list_head.my_next = &the_scheduler_list_head;
-    the_scheduler_list_head.my_prev = &the_scheduler_list_head;
-#endif /* __TBB_TASK_GROUP_CONTEXT && !__TBB_ARENA_PER_MASTER */
+#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;
+#endif /* __TBB_TASK_GROUP_CONTEXT && __TBB_TASK_PRIORITY */
 }
 
 //------------------------------------------------------------------------
@@ -105,148 +85,99 @@ scheduler::~scheduler( ) {}
     #pragma warning(disable:4355)
 #endif
 
-generic_scheduler::generic_scheduler( arena* a, size_t index ) :
-    my_stealing_threshold(0),
-    arena_index(index),
-    task_pool_size(0),
-    my_arena_slot(&dummy_slot),
-#if __TBB_ARENA_PER_MASTER
-    my_market(NULL),
-#endif /* __TBB_ARENA_PER_MASTER */
-    my_arena(a),
-    random( unsigned(this-(generic_scheduler*)NULL) ),
-    free_list(NULL),
-    innermost_running_task(NULL),
-    dummy_task(NULL),
-    ref_count(1),
-    my_affinity_id(0),
-    is_registered(false),
-    is_auto_initialized(false),
+generic_scheduler::generic_scheduler( arena* a, size_t index )
+    : my_stealing_threshold(0)
+    , my_arena_index(index)
+    , my_task_pool_size(0)
+    , my_arena_slot(&my_dummy_slot)
+    , my_market(NULL)
+    , my_arena(a)
+    , my_random( unsigned(this-(generic_scheduler*)NULL) )
+    , my_free_list(NULL)
+    , my_innermost_running_task(NULL)
+    , my_dummy_task(NULL)
+    , my_ref_count(1)
+    , my_affinity_id(0)
+    , my_registered(false)
+    , my_auto_initialized(false)
 #if __TBB_SCHEDULER_OBSERVER
-    local_last_observer_proxy(NULL),
+    , my_local_last_observer_proxy(NULL)
 #endif /* __TBB_SCHEDULER_OBSERVER */
 #if __TBB_COUNT_TASK_NODES
-    task_node_count(0),
+    , my_task_node_count(0)
 #endif /* __TBB_COUNT_TASK_NODES */
-#if STATISTICS
-    current_active(0),
-    current_length(0),
-    current_big_malloc(0),
-    execute_count(0),
-    steal_count(0),
-    mail_received_count(0),
-    proxy_execute_count(0),
-    proxy_steal_count(0),
-    proxy_bypass_count(0),
-#endif /* STATISTICS */
-    small_task_count(1),   // Extra 1 is a guard reference
-    return_list(NULL),
+    , 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)
+#endif /* __TBB_TASK_GROUP_CONTEXT */
+#if __TBB_TASK_PRIORITY
+    , my_dispatching_task(NULL)
+    , my_ref_top_priority(NULL)
+    , my_offloaded_tasks(NULL)
+    , my_offloaded_task_list_tail_link(NULL)
+    , my_ref_reload_epoch(NULL)
+    , my_local_reload_epoch(0)
+    , my_pool_reshuffling_pending(false)
+#endif /* __TBB_TASK_PRIORITY */
 #if __TBB_TASK_GROUP_CONTEXT
-    local_ctx_list_update(0),
-    nonlocal_ctx_list_update(0)
+    , my_nonlocal_ctx_list_update(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 */
 {
-    dummy_slot.task_pool = allocate_task_pool( min_task_pool_size );
-    dummy_slot.head = dummy_slot.tail = 0;
-    dummy_task = &allocate_task( sizeof(task), __TBB_CONTEXT_ARG(NULL, NULL) );
+    my_dummy_slot.task_pool = allocate_task_pool(min_task_pool_size);
+    __TBB_ASSERT( my_task_pool_size == min_task_pool_size, NULL );
+    my_dummy_slot.head = my_dummy_slot.tail = 0;
+    my_dummy_task = &allocate_task( sizeof(task), __TBB_CONTEXT_ARG(NULL, NULL) );
 #if __TBB_TASK_GROUP_CONTEXT
-    context_list_head.my_prev = &context_list_head;
-    context_list_head.my_next = &context_list_head;
-    ITT_SYNC_CREATE(&context_list_mutex, SyncType_Scheduler, SyncObj_ContextsList);
+    my_context_list_head.my_prev = &my_context_list_head;
+    my_context_list_head.my_next = &my_context_list_head;
+    ITT_SYNC_CREATE(&my_context_list_mutex, SyncType_Scheduler, SyncObj_ContextsList);
 #endif /* __TBB_TASK_GROUP_CONTEXT */
-    dummy_task->prefix().ref_count = 2;
-    ITT_SYNC_CREATE(&dummy_task->prefix().ref_count, SyncType_Scheduler, SyncObj_WorkerLifeCycleMgmt);
-    ITT_SYNC_CREATE(&return_list, SyncType_Scheduler, SyncObj_TaskReturnList);
-    __TBB_ASSERT( assert_okay(), "constructor error" );
+    my_dummy_task->prefix().ref_count = 2;
+    ITT_SYNC_CREATE(&my_dummy_task->prefix().ref_count, SyncType_Scheduler, SyncObj_WorkerLifeCycleMgmt);
+    ITT_SYNC_CREATE(&my_return_list, SyncType_Scheduler, SyncObj_TaskReturnList);
+    assert_task_pool_valid();
+#if __TBB_SURVIVE_THREAD_SWITCH
+    my_cilk_unwatch_thunk.routine = NULL;
+#endif /* __TBB_SURVIVE_THREAD_SWITCH */
 }
 
 #if _MSC_VER && !defined(__INTEL_COMPILER)
     #pragma warning(pop)
 #endif // warning 4355 is back
 
-#if TBB_USE_ASSERT
-bool generic_scheduler::assert_okay() const {
-#if TBB_USE_ASSERT >= 2
+#if TBB_USE_ASSERT > 1
+void generic_scheduler::assert_task_pool_valid() const {
     acquire_task_pool();
-    task** tp = dummy_slot.task_pool;
-    __TBB_ASSERT( task_pool_size >= min_task_pool_size, NULL );
+    task** tp = my_dummy_slot.task_pool;
+    __TBB_ASSERT( my_task_pool_size >= min_task_pool_size, NULL );
     __TBB_ASSERT( my_arena_slot->head <= my_arena_slot->tail, NULL );
+    for ( size_t i = 0; i < my_arena_slot->head; ++i )
+        __TBB_ASSERT( tp[i] == poisoned_ptr, "Task pool corrupted" );
     for ( size_t i = my_arena_slot->head; i < my_arena_slot->tail; ++i ) {
         __TBB_ASSERT( (uintptr_t)tp[i] + 1 > 1u, "nil or invalid task pointer in the deque" );
         __TBB_ASSERT( tp[i]->prefix().state == task::ready ||
                       tp[i]->prefix().extra_state == es_task_proxy, "task in the deque has invalid state" );
     }
+    for ( size_t i = my_arena_slot->tail; i < my_task_pool_size; ++i )
+        __TBB_ASSERT( tp[i] == poisoned_ptr, "Task pool corrupted" );
     release_task_pool();
-#endif /* TBB_USE_ASSERT >=2 */
-    return true;
-}
-#endif /* TBB_USE_ASSERT */
-
-#if __TBB_TASK_GROUP_CONTEXT
-void generic_scheduler::propagate_cancellation () {
-    spin_mutex::scoped_lock lock(context_list_mutex);
-    // Acquire fence is necessary to ensure that the subsequent node->my_next load 
-    // returned the correct value in case it was just inserted in another thread.
-    // The fence also ensures visibility of the correct my_parent value.
-    context_list_node_t *node = __TBB_load_with_acquire(context_list_head.my_next);
-    while ( node != &context_list_head ) {
-        task_group_context &ctx = __TBB_get_object_ref(task_group_context, my_node, node);
-            // The absence of acquire fence while reading my_cancellation_requested may result 
-            // in repeated traversals of the same parents chain if another group (precedent or 
-            // descendant) belonging to the tree being canceled sends cancellation request of 
-            // its own around the same time.
-        if ( !ctx.my_cancellation_requested )
-            ctx.propagate_cancellation_from_ancestors();
-        node = node->my_next;
-        __TBB_ASSERT( ctx.is_alive(), "Walked into a destroyed context while propagating cancellation" );
-    }
-    // Sync up local cancelation epoch with the global one. Release fence prevents 
-    // reordering of possible store to my_cancellation_requested after the sync point.
-    __TBB_store_with_release(local_cancel_count, global_cancel_count);
 }
 
-#if !__TBB_ARENA_PER_MASTER
-/** Propagates cancellation down the tree of dependent contexts by walking each 
-    thread's local list of contexts **/
-void generic_scheduler::propagate_cancellation ( task_group_context& ctx ) {
-    __TBB_ASSERT ( ctx.my_cancellation_requested, "No cancellation request in the context" );
-    // The whole propagation algorithm is under the lock in order to ensure correctness 
-    // in case of parallel cancellations at the different levels of the context tree.
-    // See the note 2 at the bottom of the file.
-    mutex::scoped_lock lock(the_scheduler_list_mutex);
-    // Advance global cancellation state
-    __TBB_FetchAndAddWrelease(&global_cancel_count, 1);
-    // First propagate to workers using arena to access their context lists
-    size_t num_workers = my_arena->prefix().number_of_workers;
-    for ( size_t i = 0; i < num_workers; ++i ) {
-        // No fence is necessary here since the context list of worker's scheduler 
-        // can contain anything of interest only after the first stealing was done
-        // by that worker. And doing it applies the necessary fence
-        generic_scheduler *s = my_arena->prefix().worker_list[i].scheduler;
-        // If the worker is in the middle of its startup sequence, skip it.
-        if ( s )
-            s->propagate_cancellation();
-    }
-    // Then propagate to masters using the global list of master's schedulers
-    scheduler_list_node_t *node = the_scheduler_list_head.my_next;
-    while ( node != &the_scheduler_list_head ) {
-        __TBB_get_object_ref(generic_scheduler, my_node, node).propagate_cancellation();
-        node = node->my_next;
-    }
+void generic_scheduler::fill_with_canary_pattern ( task** task_pool, size_t first, size_t last ) {
+    for ( size_t i = first; i < last; ++i )
+        poison_pointer(task_pool[i]);
 }
-#endif /* !__TBB_ARENA_PER_MASTER */
-#endif /* __TBB_TASK_GROUP_CONTEXT */
-
+#endif /* TBB_USE_ASSERT > 1 */
 
 void generic_scheduler::init_stack_info () {
     // Stacks are growing top-down. Highest address is called "stack base", 
     // and the lowest is "stack limit".
-#if __TBB_ARENA_PER_MASTER
     __TBB_ASSERT( !my_stealing_threshold, "Stealing threshold has already been calculated" );
     size_t  stack_size = my_market->worker_stack_size();
-#else /* !__TBB_ARENA_PER_MASTER */
-    size_t  stack_size = my_arena->prefix().stack_size;
-#endif /* !__TBB_ARENA_PER_MASTER */
 #if USE_WINTHREAD
 #if defined(_MSC_VER)&&_MSC_VER<1400 && !_WIN64
     NT_TIB  *pteb = (NT_TIB*)__TBB_machine_get_current_teb();
@@ -279,6 +210,11 @@ void generic_scheduler::init_stack_info () {
     size_t  np_stack_size = 0;
     void    *stack_limit = NULL;
     pthread_attr_t  attr_stack, 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
     if( 0 == pthread_getattr_np(pthread_self(), &np_attr_stack) ) {
         if ( 0 == pthread_attr_getstack(&np_attr_stack, &stack_limit, &np_stack_size) ) {
             if ( 0 == pthread_attr_init(&attr_stack) ) {
@@ -321,35 +257,35 @@ void generic_scheduler::init_stack_info () {
 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 = local_cancel_count;
-    local_ctx_list_update = 1;
+    uintptr_t local_count_snapshot = my_context_state_propagation_epoch;
+    my_local_ctx_list_update = 1;
     {
         // This is just a definition. Actual lock is acquired only in case of conflict.
         spin_mutex::scoped_lock lock;
-        // Full fence prevents reordering of store to local_ctx_list_update with 
-        // load from nonlocal_ctx_list_update.
-        __TBB_full_memory_fence();
+        // Full fence prevents reordering of store to my_local_ctx_list_update with 
+        // load from my_nonlocal_ctx_list_update.
+        atomic_fence();
         // Check for the conflict with concurrent destroyer or cancelation propagator
-        if ( nonlocal_ctx_list_update || local_count_snapshot != global_cancel_count )
-            lock.acquire(context_list_mutex);
-        // No acquire fence is necessary for loading context_list_head.my_next,
+        if ( my_nonlocal_ctx_list_update || 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.
-        context_list_node_t *node = context_list_head.my_next;
-        while ( node != &context_list_head ) {
+        context_list_node_t *node = my_context_list_head.my_next;
+        while ( node != &my_context_list_head ) {
             task_group_context &ctx = __TBB_get_object_ref(task_group_context, my_node, node);
             __TBB_ASSERT( ctx.my_kind != task_group_context::binding_required, "Only a context bound to a root task can be detached" );
             node = node->my_next;
-            __TBB_ASSERT( ctx.is_alive(), "Walked into a destroyed context while detaching contexts from the local list" );
+            __TBB_ASSERT( is_alive(ctx.my_version_and_traits), "Walked into a destroyed context while detaching contexts from the local list" );
             // On 64-bit systems my_kind can be a 32-bit value padded with 32 uninitialized bits.
             // So the cast below is necessary to throw off the higher bytes containing garbage
             if ( (task_group_context::kind_type)(uintptr_t)__TBB_FetchAndStoreW(&ctx.my_kind, task_group_context::detached) == task_group_context::dying )
                 wait_for_concurrent_destroyers_to_leave = true;
         }
     }
-    __TBB_store_with_release( local_ctx_list_update, 0 );
+    __TBB_store_with_release( my_local_ctx_list_update, 0 );
     // Wait until other threads referencing this scheduler object finish with it
     if ( wait_for_concurrent_destroyers_to_leave )
-        spin_wait_until_eq( nonlocal_ctx_list_update, 0u );
+        spin_wait_until_eq( my_nonlocal_ctx_list_update, 0u );
 }
 
 void generic_scheduler::free_scheduler() {
@@ -359,83 +295,62 @@ void generic_scheduler::free_scheduler() {
     }
 #if __TBB_TASK_GROUP_CONTEXT
     cleanup_local_context_list();
-#if !__TBB_ARENA_PER_MASTER
-    task_group_context* default_context = dummy_task->prefix().context;
-    if ( default_context != &dummy_context) {
-        // Only master thread's dummy task has a dynamically allocated context
-        default_context->task_group_context::~task_group_context();
-        NFS_Free(default_context);
-        {
-            mutex::scoped_lock lock(the_scheduler_list_mutex);
-            my_node.my_next->my_prev = my_node.my_prev;
-            my_node.my_prev->my_next = my_node.my_next;
-        }
-    }
-#endif /* !__TBB_ARENA_PER_MASTER */
 #endif /* __TBB_TASK_GROUP_CONTEXT */
-    free_task<small_local_task>( *dummy_task );
+    free_task<small_local_task>( *my_dummy_task );
 
     // k accounts for a guard reference and each task that we deallocate.
     intptr_t k = 1;
     for(;;) {
-        while( task* t = free_list ) {
-            free_list = t->prefix().next;
+        while( task* t = my_free_list ) {
+            my_free_list = t->prefix().next;
             deallocate_task(*t);
             ++k;
         }
-        if( return_list==plugged_return_list() ) 
+        if( my_return_list==plugged_return_list() ) 
             break;
-        free_list = (task*)__TBB_FetchAndStoreW( &return_list, (intptr_t)plugged_return_list() );
+        my_free_list = (task*)__TBB_FetchAndStoreW( &my_return_list, (intptr_t)plugged_return_list() );
     }
 #if __TBB_COUNT_TASK_NODES
-#if __TBB_ARENA_PER_MASTER
-    my_market->update_task_node_count( task_node_count );
-#else /* !__TBB_ARENA_PER_MASTER */
-    my_arena->prefix().task_node_count += task_node_count;
-#endif /* !__TBB_ARENA_PER_MASTER */
+    my_market->update_task_node_count( my_task_node_count );
 #endif /* __TBB_COUNT_TASK_NODES */
-#if STATISTICS
-    the_statistics.record( execute_count, steal_count, mail_received_count,
-                           proxy_execute_count, proxy_steal_count, proxy_bypass_count );
-#endif /* STATISTICS */
-    free_task_pool( dummy_slot.task_pool );
-    dummy_slot.task_pool = NULL;
-    // Update small_task_count last.  Doing so sooner might cause another thread to free *this.
-    __TBB_ASSERT( small_task_count>=k, "small_task_count corrupted" );
+    free_task_pool( my_dummy_slot.task_pool );
+    my_dummy_slot.task_pool = NULL;
+    // Update my_small_task_count last.  Doing so sooner might cause another thread to free *this.
+    __TBB_ASSERT( my_small_task_count>=k, "my_small_task_count corrupted" );
     governor::sign_off(this);
-    if( __TBB_FetchAndAddW( &small_task_count, -k )==k )
+    if( __TBB_FetchAndAddW( &my_small_task_count, -k )==k )
         NFS_Free( this );
 }
 
 task& generic_scheduler::allocate_task( size_t number_of_bytes, 
                                             __TBB_CONTEXT_ARG(task* parent, task_group_context* context) ) {
-    GATHER_STATISTIC(current_active+=1);
-    task* t = free_list;
+    GATHER_STATISTIC(++my_counters.active_tasks);
+    task* t = my_free_list;
     if( number_of_bytes<=quick_task_size ) {
         if( t ) {
-            GATHER_STATISTIC(current_length-=1);
+            GATHER_STATISTIC(--my_counters.free_list_length);
             __TBB_ASSERT( t->state()==task::freed, "free list of tasks is corrupted" );
-            free_list = t->prefix().next;
-        } else if( return_list ) {
-            // No fence required for read of return_list above, because __TBB_FetchAndStoreW has a fence.
-            t = (task*)__TBB_FetchAndStoreW( &return_list, 0 );
-            __TBB_ASSERT( t, "another thread emptied the return_list" );
-            __TBB_ASSERT( t->prefix().origin==this, "task returned to wrong return_list" );
-            ITT_NOTIFY( sync_acquired, &return_list );
-            free_list = t->prefix().next;
+            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 );
+            __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 );
+            my_free_list = t->prefix().next;
         } else {
             t = (task*)((char*)NFS_Allocate( task_prefix_reservation_size+quick_task_size, 1, NULL ) + task_prefix_reservation_size );
 #if __TBB_COUNT_TASK_NODES
-            ++task_node_count;
+            ++my_task_node_count;
 #endif /* __TBB_COUNT_TASK_NODES */
             t->prefix().origin = this;
-            ++small_task_count;
+            ++my_small_task_count;
         }
     } else {
-        GATHER_STATISTIC(current_big_malloc+=1);
+        GATHER_STATISTIC(++my_counters.big_tasks);
         t = (task*)((char*)NFS_Allocate( task_prefix_reservation_size+number_of_bytes, 1, NULL ) + task_prefix_reservation_size );
 #if __TBB_COUNT_TASK_NODES
-        ++task_node_count;
+        ++my_task_node_count;
 #endif /* __TBB_COUNT_TASK_NODES */
         t->prefix().origin = NULL;
     }
@@ -443,9 +358,10 @@ task& generic_scheduler::allocate_task( size_t number_of_bytes,
 #if __TBB_TASK_GROUP_CONTEXT
     p.context = context;
 #endif /* __TBB_TASK_GROUP_CONTEXT */
+    // Obsolete. But still in use, so has to be assigned correct value here.
     p.owner = this;
     p.ref_count = 0;
-    // Assign some not outrageously out-of-place value for a while
+    // Obsolete. Assign some not outrageously out-of-place value for a while.
     p.depth = 0;
     p.parent = parent;
     // In TBB 2.1 and later, the constructor for task sets extra_state to indicate the version of the tbb/task.h header.
@@ -461,54 +377,42 @@ void generic_scheduler::free_nonlocal_small_task( task& t ) {
     generic_scheduler& s = *static_cast<generic_scheduler*>(t.prefix().origin);
     __TBB_ASSERT( &s!=this, NULL );
     for(;;) {
-        task* old = s.return_list;
+        task* old = s.my_return_list;
         if( old==plugged_return_list() ) 
             break;
-        // Atomically insert t at head of s.return_list
+        // Atomically insert t at head of s.my_return_list
         t.prefix().next = old; 
-        ITT_NOTIFY( sync_releasing, &s.return_list );
-        if( __TBB_CompareAndSwapW( &s.return_list, (intptr_t)&t, (intptr_t)old )==(intptr_t)old ) 
+        ITT_NOTIFY( sync_releasing, &s.my_return_list );
+        if( __TBB_CompareAndSwapW( &s.my_return_list, (intptr_t)&t, (intptr_t)old )==(intptr_t)old ) {
+            GATHER_STATISTIC(++my_counters.free_list_length);
             return;
+        }
     }
     deallocate_task(t);
-    if( __TBB_FetchAndDecrementWrelease( &s.small_task_count )==1 ) {
+    if( __TBB_FetchAndDecrementWrelease( &s.my_small_task_count )==1 ) {
         // We freed the last task allocated by scheduler s, so it's our responsibility
         // to free the scheduler.
         NFS_Free( &s );
     }
 }
 
-task** generic_scheduler::allocate_task_pool( size_t n ) {
-    __TBB_ASSERT( n > task_pool_size, "Cannot shrink the task pool" );
-    size_t byte_size = ((n * sizeof(task*) + NFS_MaxLineSize - 1) / NFS_MaxLineSize) * NFS_MaxLineSize;
-    task_pool_size = byte_size / sizeof(task*);
-    task** new_pool = (task**)NFS_Allocate( byte_size, 1, NULL );
-    // No need to clear the fresh deque since valid items are designated by the head and tail members.
-#if TBB_USE_ASSERT>=2
-    // But clear it in the high vigilance debug mode
-    memset( new_pool, -1, n );
-#endif /* TBB_USE_ASSERT>=2 */
-    return new_pool;
-}
-
 void generic_scheduler::grow_task_pool( size_t new_size ) {
-    __TBB_ASSERT( assert_okay(), NULL );
-    if ( new_size < 2 * task_pool_size )
-        new_size = 2 * task_pool_size;
-    task** new_pool = allocate_task_pool( new_size ); // updates task_pool_size
-    task** old_pool = dummy_slot.task_pool;
-    acquire_task_pool();    // requires the old dummy_slot.task_pool value
-    // my_arena_slot->tail should not be updated before my_arena_slot->head because their
-    // values are used by other threads to check if this task pool is empty.
+    if ( new_size < 2 * my_task_pool_size )
+        new_size = 2 * my_task_pool_size;
+    task** new_pool = allocate_task_pool( new_size ); // updates my_task_pool_size
+    task** old_pool = my_dummy_slot.task_pool;
+    acquire_task_pool();    // requires the old my_dummy_slot.task_pool value
     size_t new_tail = my_arena_slot->tail - my_arena_slot->head;
-    __TBB_ASSERT( new_tail <= task_pool_size, "new task pool is too short" );
+    __TBB_ASSERT( my_arena_slot->tail <= my_task_pool_size, "new task pool is too short" );
     memcpy( new_pool, old_pool + my_arena_slot->head, new_tail * sizeof(task*) );
     my_arena_slot->head = 0;
+    my_dummy_slot.task_pool = new_pool;
+    // Tail is updated last to minimize probability of a thread making arena 
+    // snapshot being misguided into thinking that this task pool is empty.
     my_arena_slot->tail = new_tail;
-    dummy_slot.task_pool = new_pool;
     release_task_pool();    // updates the task pool pointer in our arena slot
     free_task_pool( old_pool );
-    __TBB_ASSERT( assert_okay(), NULL );
+    assert_task_pool_valid();
 }
 
 /** ATTENTION: 
@@ -523,15 +427,15 @@ inline void generic_scheduler::acquire_task_pool() const {
     bool sync_prepare_done = false;
     for(;;) {
 #if TBB_USE_ASSERT
-        __TBB_ASSERT( my_arena_slot == my_arena->slot + arena_index, "invalid arena slot index" );
+        __TBB_ASSERT( my_arena_slot == my_arena->my_slots + my_arena_index, "invalid arena slot index" );
         // Local copy of the arena slot task pool pointer is necessary for the next 
         // assertion to work correctly to exclude asynchronous state transition effect.
         task** tp = my_arena_slot->task_pool;
-        __TBB_ASSERT( tp == LockedTaskPool || tp == dummy_slot.task_pool, "slot ownership corrupt?" );
+        __TBB_ASSERT( tp == LockedTaskPool || tp == my_dummy_slot.task_pool, "slot ownership corrupt?" );
 #endif
         if( my_arena_slot->task_pool != LockedTaskPool && 
             __TBB_CompareAndSwapW( &my_arena_slot->task_pool, (intptr_t)LockedTaskPool, 
-                                   (intptr_t)dummy_slot.task_pool ) == (intptr_t)dummy_slot.task_pool )
+                                   (intptr_t)my_dummy_slot.task_pool ) == (intptr_t)my_dummy_slot.task_pool )
         {
             // We acquired our own slot
             ITT_NOTIFY(sync_acquired, my_arena_slot);
@@ -554,7 +458,7 @@ inline void generic_scheduler::release_task_pool() const {
     __TBB_ASSERT( my_arena_slot, "we are not in arena" );
     __TBB_ASSERT( my_arena_slot->task_pool == LockedTaskPool, "arena slot is not locked" );
     ITT_NOTIFY(sync_releasing, my_arena_slot);
-    __TBB_store_with_release( my_arena_slot->task_pool, dummy_slot.task_pool );
+    __TBB_store_with_release( my_arena_slot->task_pool, my_dummy_slot.task_pool );
 }
 
 /** ATTENTION: 
@@ -569,8 +473,9 @@ inline task** generic_scheduler::lock_task_pool( arena_slot* victim_arena_slot )
     bool sync_prepare_done = false;
     for(;;) {
         victim_task_pool = victim_arena_slot->task_pool;
-        // TODO: Investigate the effect of bailing out on the locked pool without trying to lock it.
-        //       When doing this update assertion in the end of the method.
+        // NOTE: Do not use comparison of head and tail indices to check for
+        // the presence of work in the victim's task pool, as they may give
+        // incorrect indication because of task pool relocations and resizes.
         if ( victim_task_pool == EmptyTaskPool ) {
             // The victim thread emptied its task pool - nothing to lock
             if( sync_prepare_done )
@@ -590,6 +495,7 @@ inline task** generic_scheduler::lock_task_pool( arena_slot* victim_arena_slot )
             ITT_NOTIFY(sync_prepare, victim_arena_slot);
             sync_prepare_done = true;
         }
+        GATHER_STATISTIC( ++my_counters.thieves_conflicts );
         // Someone else acquired a lock, so pause and do exponential backoff.
         backoff.pause();
     }
@@ -610,7 +516,6 @@ inline void generic_scheduler::unlock_task_pool( arena_slot* victim_arena_slot,
 
 inline task* generic_scheduler::prepare_for_spawning( task* t ) {
     __TBB_ASSERT( t->state()==task::allocated, "attempt to spawn task that is not in 'allocated' state" );
-    t->prefix().owner = this;
     t->prefix().state = task::ready;
 #if TBB_USE_ASSERT
     if( task* parent = t->parent() ) {
@@ -629,6 +534,9 @@ inline task* generic_scheduler::prepare_for_spawning( task* t ) {
         proxy.prefix().extra_state = es_task_proxy;
         proxy.outbox = &my_arena->mailbox(dst_thread);
         proxy.task_and_tag = intptr_t(t)|3;
+#if __TBB_TASK_PRIORITY
+        proxy.prefix().context = t->prefix().context;
+#endif /* __TBB_TASK_PRIORITY */
         ITT_NOTIFY( sync_releasing, proxy.outbox );
         // Mail the proxy - after this point t may be destroyed by another thread at any moment.
         proxy.outbox->push(proxy);
@@ -641,38 +549,21 @@ inline task* generic_scheduler::prepare_for_spawning( task* t ) {
     But doing so would force us to publish class scheduler in the headers. */
 void generic_scheduler::local_spawn( task& first, task*& next ) {
     __TBB_ASSERT( governor::is_set(this), NULL );
-    __TBB_ASSERT( assert_okay(), NULL );
+    assert_task_pool_valid();
     if ( &first.prefix().next == &next ) {
         // Single task is being spawned
-        if ( my_arena_slot->tail == task_pool_size ) {
-            // 1 compensates for head possibly temporarily incremented by a thief
-            if ( my_arena_slot->head > 1 ) {
-                // Move the busy part of the deque to the beginning of the allocated space
-                acquire_task_pool();
-                my_arena_slot->tail -= my_arena_slot->head;
-                memmove( dummy_slot.task_pool, dummy_slot.task_pool + my_arena_slot->head, my_arena_slot->tail * sizeof(task*) );
-                my_arena_slot->head = 0;
-                release_task_pool();
-            }
-            else {
-                grow_task_pool( task_pool_size + 1 );
-            }
-        }
-        dummy_slot.task_pool[my_arena_slot->tail] = prepare_for_spawning( &first );
-        ITT_NOTIFY(sync_releasing, my_arena_slot);
-        // The following store with release is required on ia64 only
-        size_t new_tail = my_arena_slot->tail + 1;
-        __TBB_store_with_release( my_arena_slot->tail, new_tail );
-        __TBB_ASSERT ( my_arena_slot->tail <= task_pool_size, "task deque end was overwritten" );
+        prepare_task_pool( 1 );
+        my_dummy_slot.task_pool[my_arena_slot->tail] = prepare_for_spawning( &first );
+        commit_spawned_tasks( my_arena_slot->tail + 1 );
     }
     else {
         // Task list is being spawned
-        const size_t initial_capacity = 64;
-        task *arr[initial_capacity];
-        fast_reverse_vector<task*> tasks(arr, initial_capacity);
+        task *arr[min_task_pool_size];
+        fast_reverse_vector<task*> tasks(arr, min_task_pool_size);
         task *t_next = NULL;
         for( task* t = &first; ; t = t_next ) {
-            // After prepare_for_spawning returns t may already have been destroyed. 
+            // If t is affinitized to another thread, it may already be executed
+            // and destroyed by the time prepare_for_spawning returns.
             // So milk it while it is alive.
             bool end = &t->prefix().next == &next;
             t_next = t->prefix().next;
@@ -681,48 +572,15 @@ void generic_scheduler::local_spawn( task& first, task*& next ) {
                 break;
         }
         size_t num_tasks = tasks.size();
-        __TBB_ASSERT ( arena_index != null_arena_index, "invalid arena slot index" );
-        if ( my_arena_slot->tail + num_tasks > task_pool_size ) {
-            // 1 compensates for head possibly temporarily incremented by a thief
-            size_t new_size = my_arena_slot->tail - my_arena_slot->head + num_tasks + 1;
-            if ( new_size <= task_pool_size ) {
-                // Move the busy part of the deque to the beginning of the allocated space
-                acquire_task_pool();
-                my_arena_slot->tail -= my_arena_slot->head;
-                memmove( dummy_slot.task_pool, dummy_slot.task_pool + my_arena_slot->head, my_arena_slot->tail * sizeof(task*) );
-                my_arena_slot->head = 0;
-                release_task_pool();
-            }
-            else {
-                grow_task_pool( new_size );
-            }
-        }
-#if DO_ITT_NOTIFY
-        else {
-            // The preceding if-branch issues the same ittnotify inside release_task_pool() or grow_task_pool() methods
-            ITT_NOTIFY(sync_releasing, my_arena_slot);
-        }
-#endif /* DO_ITT_NOTIFY */
-        tasks.copy_memory( dummy_slot.task_pool + my_arena_slot->tail );
-        // The following store with release is required on ia64 only
-        size_t new_tail = my_arena_slot->tail + num_tasks;
-        __TBB_store_with_release( my_arena_slot->tail, new_tail );
-        __TBB_ASSERT ( my_arena_slot->tail <= task_pool_size, "task deque end was overwritten" );
+        prepare_task_pool( num_tasks );
+        assert_task_pool_valid();
+        tasks.copy_memory( my_dummy_slot.task_pool + my_arena_slot->tail );
+        commit_spawned_tasks( my_arena_slot->tail + num_tasks );
     }
-#if __TBB_ARENA_PER_MASTER
     if ( !in_arena() )
         enter_arena();
     my_arena->advertise_new_work</*Spawned=*/true>();
-#else /* !__TBB_ARENA_PER_MASTER */
-    if ( !in_arena() ) {
-        if ( is_worker() )
-            enter_arena();
-        else
-            try_enter_arena();
-    }
-    my_arena->mark_pool_full();
-#endif /* !__TBB_ARENA_PER_MASTER */
-    __TBB_ASSERT( assert_okay(), NULL );
+    assert_task_pool_valid();
 }
 
 void generic_scheduler::local_spawn_root_and_wait( task& first, task*& next ) {
@@ -749,14 +607,14 @@ void generic_scheduler::local_spawn_root_and_wait( task& first, task*& next ) {
 inline task* generic_scheduler::get_mailbox_task() {
     __TBB_ASSERT( my_affinity_id>0, "not in arena" );
     task* result = NULL;
-    while( task_proxy* t = inbox.pop() ) {
+    while( task_proxy* t = my_inbox.pop() ) {
         intptr_t tat = __TBB_load_with_acquire(t->task_and_tag);
         __TBB_ASSERT( tat==task_proxy::mailbox_bit || (tat==(tat|3)&&tat!=3), NULL );
         if( tat!=task_proxy::mailbox_bit && __TBB_CompareAndSwapW( &t->task_and_tag, task_proxy::pool_bit, tat )==tat ) {
             // Successfully grabbed the task, and left pool seeker with job of freeing the proxy.
-            ITT_NOTIFY( sync_acquired, inbox.outbox() );
+            ITT_NOTIFY( sync_acquired, my_inbox.outbox() );
             result = (task*)(tat & ~3);
-            result->prefix().owner = this;
+            result->prefix().extra_state |= es_task_is_stolen; // mark task as stolen
             break;
         }
         free_task_proxy( *t );
@@ -788,11 +646,14 @@ inline task* generic_scheduler::strip_proxy( task_proxy* tp ) {
     return NULL;
 }
 
-#if __TBB_ARENA_PER_MASTER
-void generic_scheduler::local_enqueue( task& t ) {
+void generic_scheduler::local_enqueue( task& t
+#if __TBB_TASK_PRIORITY
+                                       , priority_t prio
+#endif /* __TBB_TASK_PRIORITY */
+                                     )
+{
     __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().owner = this;
     t.prefix().state = task::ready;
 
 #if TBB_USE_ASSERT
@@ -806,63 +667,258 @@ void generic_scheduler::local_enqueue( task& t ) {
 #endif /* TBB_USE_ASSERT */
 
     __TBB_ASSERT( my_arena, "thread is not in any arena" );
-    ITT_NOTIFY(sync_releasing, &my_arena->my_task_stream);
-    my_arena->my_task_stream.push( &t, my_arena_slot->hint_for_push );
+#if __TBB_TASK_PRIORITY
+    intptr_t p = prio ? normalize_priority(prio) : normalized_normal_priority;
+    assert_priority_valid(p);
+    task_stream &ts = my_arena->my_task_stream[p];
+#else /* !__TBB_TASK_PRIORITY */
+    task_stream &ts = my_arena->my_task_stream;
+#endif /* !__TBB_TASK_PRIORITY */
+    ITT_NOTIFY(sync_releasing, &ts);
+    ts.push( &t, my_arena_slot->hint_for_push );
+#if __TBB_TASK_PRIORITY
+    if ( p != my_arena->my_top_priority )
+        my_market->update_arena_priority( *my_arena, p );
+#endif /* __TBB_TASK_PRIORITY */
     my_arena->advertise_new_work< /*Spawned=*/ false >();
-    __TBB_ASSERT( assert_okay(), NULL );
+#if __TBB_TASK_PRIORITY
+    if ( p != my_arena->my_top_priority )
+        my_market->update_arena_priority( *my_arena, p );
+#endif /* __TBB_TASK_PRIORITY */
+    assert_task_pool_valid();
 }
 
 inline task* generic_scheduler::dequeue_task() {
     task* result = NULL;
-    my_arena->my_task_stream.pop(result, my_arena_slot->hint_for_pop);
-    if (result) ITT_NOTIFY(sync_acquired, &my_arena->my_task_stream);
+#if __TBB_TASK_PRIORITY
+    task_stream &ts = my_arena->my_task_stream[my_arena->my_top_priority];
+#else /* !__TBB_TASK_PRIORITY */
+    task_stream &ts = my_arena->my_task_stream;
+#endif /* !__TBB_TASK_PRIORITY */
+    ts.pop(result, my_arena_slot->hint_for_pop);
+    if (result)
+        ITT_NOTIFY(sync_acquired, &ts);
     return result;
 }
-#endif /* __TBB_ARENA_PER_MASTER */
+
+#if __TBB_TASK_PRIORITY
+class auto_indicator : no_copy {
+    volatile bool& my_indicator;
+public:
+    auto_indicator ( volatile bool& indicator ) : my_indicator(indicator) { my_indicator = true ;}
+    ~auto_indicator () { my_indicator = false; }
+};
+
+task* generic_scheduler::winnow_task_pool () {
+    GATHER_STATISTIC( ++my_counters.prio_winnowings );
+    __TBB_ASSERT( in_arena(), NULL );
+    __TBB_ASSERT( my_offloaded_tasks, "At least one task is expected to be already offloaded" );
+    // To eliminate possible sinking of the store to the indicator below the subsequent 
+    // store to my_arena_slot->tail, the stores should've either been separated 
+    // by full fence or both use release fences. And resetting indicator should've 
+    // been done with release fence. But since this is just an optimization, and 
+    // the corresponding checking sequence in arena::is_out_of_work() is not atomic 
+    // anyway, fences aren't used, so that not to penalize warmer path.
+    auto_indicator indicator(my_pool_reshuffling_pending);
+    // The purpose of the synchronization algorithm here is for the owner thread
+    // to avoid locking task pool most of the time.
+    size_t orig_tail = my_arena_slot->tail;
+    my_arena_slot->tail = my_arena_slot->head - 1;
+    atomic_fence();
+    size_t h = my_arena_slot->head;
+    __TBB_ASSERT( (intptr_t)my_arena_slot->tail <= (intptr_t)orig_tail, NULL);
+    __TBB_ASSERT( (intptr_t)h >= (intptr_t)my_arena_slot->tail
+                  || (h == orig_tail && my_arena_slot->tail == orig_tail), NULL );
+    bool acquired = false;
+    if ( h == my_arena_slot->tail ) {
+        // Either no contention with thieves during arbitration protocol execution or ...
+        if ( h >= orig_tail ) {
+            // ... the task pool got empty
+            reset_deque_and_leave_arena( /*locked=*/false );
+            return NULL;
+        }
+    }
+    else {
+        // Contention with thieves detected. Now without taking lock it is impossible 
+        // to define the current head value because of its jitter caused by continuing 
+        // stealing attempts (the pool is not locked so far).
+        acquired = true;
+        acquire_task_pool();
+        h = my_arena_slot->head;
+        if ( h >= orig_tail ) {
+            reset_deque_and_leave_arena( /*locked=*/true );
+            return NULL;
+        }
+    }
+    size_t src,
+           dst = orig_tail;
+    // Find the first task to offload. 
+    for ( src = h; src < orig_tail; ++src ) {
+        task &t = *my_dummy_slot.task_pool[src];
+        intptr_t p = priority(t);
+        if ( p < *my_ref_top_priority ) {
+            // Position of the first offloaded task will be the starting point 
+            // for relocation of subsequent tasks that survive winnowing.
+            dst = src;
+            offload_task( t, p );
+            break;
+        }
+    }
+    for ( ++src; src < orig_tail; ++src ) {
+        task &t = *my_dummy_slot.task_pool[src];
+        intptr_t p = priority(t);
+        if ( p < *my_ref_top_priority )
+            offload_task( t, p );
+        else
+            my_dummy_slot.task_pool[dst++] = &t;
+    }
+    __TBB_ASSERT( orig_tail >= dst, NULL );
+    task *t = h < dst ? my_dummy_slot.task_pool[--dst] : NULL;
+    if ( h == dst ) {
+        // No tasks remain the primary pool
+        reset_deque_and_leave_arena( acquired );
+    }
+    else if ( acquired ) {
+        __TBB_ASSERT( !is_poisoned(my_dummy_slot.task_pool[h]), NULL );
+        my_arena_slot->tail = dst;
+        release_task_pool();
+    }
+    else {
+        __TBB_ASSERT( !is_poisoned(my_dummy_slot.task_pool[h]), NULL );
+        // Release fence is necessary to make sure possibly relocated task pointers
+        // become visible to potential thieves
+        __TBB_store_with_release( my_arena_slot->tail, dst );
+    }
+    fill_with_canary_pattern( my_dummy_slot.task_pool, dst, orig_tail );
+    assert_task_pool_valid();
+    return t;
+}
+
+task* generic_scheduler::reload_tasks ( task*& offloaded_tasks, task**& offloaded_task_list_link, intptr_t top_priority ) {
+    GATHER_STATISTIC( ++my_counters.prio_reloads );
+    __TBB_ASSERT( !in_arena(), NULL );
+    task *arr[min_task_pool_size];
+    fast_reverse_vector<task*> tasks(arr, min_task_pool_size);
+    task **link = &offloaded_tasks;
+    task *t;
+    while ( (t = *link) ) {
+        task** next_ptr = &t->prefix().next_offloaded;
+        if ( priority(*t) >= top_priority ) {
+            tasks.push_back( t );
+            // Note that owner is an alias of next_offloaded. Thus the following
+            // assignment overwrites *next_ptr
+            task* next = *next_ptr;
+            t->prefix().owner = this;
+            __TBB_ASSERT( t->prefix().state == task::ready || t->prefix().extra_state == es_task_proxy, NULL );
+            *link = next;
+        }
+        else {
+            link = next_ptr;
+        }
+    }
+    if ( link == &offloaded_tasks ) {
+        offloaded_tasks = NULL;
+#if TBB_USE_ASSERT
+        offloaded_task_list_link = NULL;
+#endif /* TBB_USE_ASSERT */
+    }
+    else {
+        __TBB_ASSERT( link, NULL );
+        // Mark end of list
+        *link = NULL;
+        offloaded_task_list_link = link;
+    }
+    __TBB_ASSERT( link, NULL );
+    size_t num_tasks = tasks.size();
+    if ( num_tasks ) {
+        GATHER_STATISTIC( ++my_counters.prio_tasks_reloaded );
+        prepare_task_pool( num_tasks );
+        tasks.copy_memory( my_dummy_slot.task_pool + my_arena_slot->tail );
+        if ( --num_tasks ) {
+            commit_spawned_tasks( my_arena_slot->tail + num_tasks );
+            enter_arena();
+            my_arena->advertise_new_work</*Spawned=*/true>();
+        }
+        __TBB_ASSERT( my_arena_slot->tail < my_task_pool_size, NULL );
+        t = my_dummy_slot.task_pool[my_arena_slot->tail];
+        poison_pointer(my_dummy_slot.task_pool[my_arena_slot->tail]);
+        assert_task_pool_valid();
+    }
+    return t;
+}
+
+task* generic_scheduler::reload_tasks () {
+    uintptr_t reload_epoch = *my_ref_reload_epoch;
+    __TBB_ASSERT( my_offloaded_tasks, NULL );
+    if ( my_local_reload_epoch == reload_epoch )
+        return NULL;
+    __TBB_ASSERT( my_offloaded_tasks, NULL );
+    intptr_t top_priority = *my_ref_top_priority;
+    __TBB_ASSERT( (uintptr_t)top_priority < (uintptr_t)num_priority_levels, NULL );
+    task *t = reload_tasks( my_offloaded_tasks, my_offloaded_task_list_tail_link, top_priority );
+    if ( my_offloaded_tasks && (my_arena->my_bottom_priority >= top_priority || !my_arena->my_num_workers_requested) ) {
+        // Safeguard against deliberately relaxed synchronization while checking 
+        // for the presence of work in arena (so that not to impact hot paths).
+        // Arena may be reset to empty state when offloaded low priority tasks
+        // are still present. This results in both bottom and top priority bounds
+        // becoming 'normal', which makes offloaded low priority tasks unreachable.
+        // Update arena's bottom priority to accommodate them.
+
+        // First indicate the presence of lower-priority tasks
+        my_market->update_arena_priority( *my_arena, priority(*my_offloaded_tasks) );
+        // Then mark arena as full to unlock arena priority level adjustment
+        // by arena::is_out_of_work(), and ensure worker's presence
+        my_arena->advertise_new_work</*Spawned=*/false>();
+    }
+    my_local_reload_epoch = reload_epoch;
+    return t;
+}
+#endif /* __TBB_TASK_PRIORITY */
 
 inline task* generic_scheduler::get_task() {
+    __TBB_ASSERT( in_arena(), NULL );
     task* result = NULL;
 retry:
     --my_arena_slot->tail;
-    __TBB_full_memory_fence();
+    atomic_fence();
     if ( (intptr_t)my_arena_slot->head > (intptr_t)my_arena_slot->tail ) {
         acquire_task_pool();
         if ( (intptr_t)my_arena_slot->head <= (intptr_t)my_arena_slot->tail ) {
             // The thief backed off - grab the task
-            __TBB_ASSERT_VALID_TASK_PTR( dummy_slot.task_pool[my_arena_slot->tail] );
-            result = dummy_slot.task_pool[my_arena_slot->tail];
-            __TBB_POISON_TASK_PTR( dummy_slot.task_pool[my_arena_slot->tail] );
+
+            // Task pool pointer from our arena slot is garbled by just acquired lock.
+            result = my_dummy_slot.task_pool[my_arena_slot->tail];
+            __TBB_ASSERT( !is_poisoned(result), NULL );
+            poison_pointer( my_dummy_slot.task_pool[my_arena_slot->tail] );
         }
-        else {
+        else
             __TBB_ASSERT ( my_arena_slot->head == my_arena_slot->tail + 1, "victim/thief arbitration algorithm failure" );
-        }
-        if ( (intptr_t)my_arena_slot->head < (intptr_t)my_arena_slot->tail ) {
+        if ( (intptr_t)my_arena_slot->head < (intptr_t)my_arena_slot->tail )
             release_task_pool();
-        }
-        else {
-            // In any case the deque is empty now, so compact it
-            my_arena_slot->head = my_arena_slot->tail = 0;
-            if ( in_arena() )
-                leave_arena();
-        }
+        else
+            reset_deque_and_leave_arena( /*locked=*/true );
     }
     else {
-        __TBB_ASSERT_VALID_TASK_PTR( dummy_slot.task_pool[my_arena_slot->tail] );
-        result = dummy_slot.task_pool[my_arena_slot->tail];
-        __TBB_POISON_TASK_PTR( dummy_slot.task_pool[my_arena_slot->tail] );
+        result = my_dummy_slot.task_pool[my_arena_slot->tail];
+        __TBB_ASSERT( !is_poisoned(result), NULL );
+        poison_pointer( my_dummy_slot.task_pool[my_arena_slot->tail] );
     }
     if( result && is_proxy(*result) ) {
         result = strip_proxy((task_proxy*)result);
         if( !result ) {
-            goto retry;
+            if ( in_arena() )
+                goto retry;
+            __TBB_ASSERT( my_arena_slot->head == 0 && my_arena_slot->tail == 0, NULL );
+            return NULL;
         }
-        GATHER_STATISTIC( ++proxy_execute_count );
+        GATHER_STATISTIC( ++my_counters.proxies_executed );
         // Following assertion should be true because TBB 2.0 tasks never specify affinity, and hence are not proxied.
         __TBB_ASSERT( is_version_3_task(*result), "backwards compatibility with TBB 2.0 broken" );
         // Task affinity has changed.
-        innermost_running_task = result;
+        my_innermost_running_task = result;
         result->note_affinity(my_affinity_id);
     }
+    __TBB_ASSERT( result || my_arena_slot->head == 0 && my_arena_slot->tail == 0, NULL );
     return result;
 } // generic_scheduler::get_task
 
@@ -875,29 +931,34 @@ task* generic_scheduler::steal_task( arena_slot& victim_slot ) {
     task* result = NULL;
 retry:
     ++victim_slot.head;
-    __TBB_full_memory_fence();
+    atomic_fence();
     if ( (intptr_t)victim_slot.head > (intptr_t)victim_slot.tail ) {
+        GATHER_STATISTIC( ++my_counters.thief_backoffs );
         --victim_slot.head;
     }
     else {
-        __TBB_ASSERT_VALID_TASK_PTR( victim_pool[victim_slot.head - 1]);
-        result = victim_pool[victim_slot.head - 1];
+        // If one of the supported architectures allows speculative execution
+        // of fences (as part of branch prediction mechanics), acquire fence
+        // should go up to the victim_slot.tail load.
+        result = victim_pool[__TBB_load_with_acquire(victim_slot.head) - 1];
+        __TBB_ASSERT( !is_poisoned(result), NULL );
         if( is_proxy(*result) ) {
             task_proxy& tp = *static_cast<task_proxy*>(result);
             // If task will likely be grabbed by whom it was mailed to, skip it.
             if( (tp.task_and_tag & 3) == 3 && tp.outbox->recipient_is_idle() ) {
+                GATHER_STATISTIC( ++my_counters.proxies_bypassed );
                 if ( first_skipped_proxy == none )
                     first_skipped_proxy = victim_slot.head - 1;
                 result = NULL;
                 goto retry;
             }
         }
-        __TBB_POISON_TASK_PTR(victim_pool[victim_slot.head - 1]);
+        poison_pointer(victim_pool[victim_slot.head - 1]);
     }
     if ( first_skipped_proxy != none ) {
         if ( result ) {
             victim_pool[victim_slot.head - 1] = victim_pool[first_skipped_proxy];
-            __TBB_POISON_TASK_PTR( victim_pool[first_skipped_proxy] );
+            poison_pointer( victim_pool[first_skipped_proxy] );
             __TBB_store_with_release( victim_slot.head, first_skipped_proxy + 1 );
         }
         else
@@ -908,201 +969,95 @@ retry:
 }
 
 inline void generic_scheduler::do_enter_arena() {
-    my_arena_slot = &my_arena->slot[arena_index];
+    my_arena_slot = &my_arena->my_slots[my_arena_index];
     __TBB_ASSERT ( my_arena_slot->head == my_arena_slot->tail, "task deque of a free slot must be empty" );
-    __TBB_ASSERT ( dummy_slot.head < dummy_slot.tail, "entering arena without tasks to share" );
-    my_arena_slot->head = dummy_slot.head;
-    my_arena_slot->tail = dummy_slot.tail;
+    __TBB_ASSERT ( my_dummy_slot.head < my_dummy_slot.tail, "entering arena without tasks to share" );
+    my_arena_slot->head = my_dummy_slot.head;
+    my_arena_slot->tail = my_dummy_slot.tail;
     // Release signal on behalf of previously spawned tasks (when this thread was not in arena yet)
     ITT_NOTIFY(sync_releasing, my_arena_slot);
-    __TBB_store_with_release( my_arena_slot->task_pool, dummy_slot.task_pool );
+    __TBB_store_with_release( my_arena_slot->task_pool, my_dummy_slot.task_pool );
     // We'll leave arena only when it's empty, so clean up local instances of indices.
-    dummy_slot.head = dummy_slot.tail = 0;
+    my_dummy_slot.head = my_dummy_slot.tail = 0;
 }
 
 void generic_scheduler::enter_arena() {
     __TBB_ASSERT ( my_arena, "no arena: initialization not completed?" );
-#if __TBB_ARENA_PER_MASTER
     __TBB_ASSERT ( !in_arena(), "thread is already in arena?" );
-    __TBB_ASSERT ( arena_index < my_arena->my_num_slots, "arena slot index is out-of-bound" );
-#else /* !__TBB_ARENA_PER_MASTER */
-    __TBB_ASSERT ( is_worker(), "only workers should use enter_arena()" );
-    __TBB_ASSERT ( !in_arena(), "worker already in arena?" );
-    __TBB_ASSERT ( arena_index < my_arena->prefix().number_of_workers, "invalid worker arena slot index" );
-#endif /* !__TBB_ARENA_PER_MASTER */
-    __TBB_ASSERT ( my_arena->slot[arena_index].task_pool == EmptyTaskPool, "someone else grabbed my arena slot?" );
+    __TBB_ASSERT ( my_arena_index < my_arena->my_num_slots, "arena slot index is out-of-bound" );
+    __TBB_ASSERT ( my_arena->my_slots[my_arena_index].task_pool == EmptyTaskPool, "someone else grabbed my arena slot?" );
     do_enter_arena();
 }
 
-#if !__TBB_ARENA_PER_MASTER
-void generic_scheduler::try_enter_arena() {
-    __TBB_ASSERT ( !is_worker(), "only masters should use try_enter_arena()" );
-    __TBB_ASSERT ( my_arena, "no arena: initialization not completed?" );
-    __TBB_ASSERT ( !in_arena(), "master already in arena?" );
-    __TBB_ASSERT ( arena_index >= my_arena->prefix().number_of_workers && 
-                   arena_index < my_arena->prefix().number_of_slots, "invalid arena slot hint value" );
-
-    size_t h = arena_index;
-    // We do not lock task pool upon successful entering arena
-    if( my_arena->slot[h].task_pool != EmptyTaskPool || 
-        __TBB_CompareAndSwapW( &my_arena->slot[h].task_pool, (intptr_t)LockedTaskPool, 
-                                                          (intptr_t)EmptyTaskPool ) != (intptr_t)EmptyTaskPool )
-    {
-        // Hinted arena slot is already busy, try some of the others at random
-        unsigned first = my_arena->prefix().number_of_workers,
-                 last = my_arena->prefix().number_of_slots;
-        unsigned n = last - first - 1;
-        /// \todo Is this limit reasonable?
-        size_t max_attempts = last - first;
-        for (;;) {
-            size_t k = first + random.get() % n;
-            if( k >= h )
-                ++k;    // Adjusts random distribution to exclude previously tried slot
-            h = k;
-            if( my_arena->slot[h].task_pool == EmptyTaskPool && 
-                __TBB_CompareAndSwapW( &my_arena->slot[h].task_pool, (intptr_t)LockedTaskPool, 
-                                                                  (intptr_t)EmptyTaskPool ) == (intptr_t)EmptyTaskPool )
-            {
-                break;
-            }
-            if ( --max_attempts == 0 ) {
-                // After so many attempts we are still unable to find a vacant arena slot.
-                // Cease the vain effort and work outside of arena for a while.
-                return;
-            }
-        }
-    }
-    // Successfully claimed a slot in the arena.
-    ITT_NOTIFY(sync_acquired, &my_arena->slot[h]);
-    __TBB_ASSERT ( my_arena->slot[h].task_pool == LockedTaskPool, "arena slot is not actually acquired" );
-    arena_index = h;
-    do_enter_arena();
-    attach_mailbox( affinity_id(h+1) );
-}
-#endif /* !__TBB_ARENA_PER_MASTER */
-
 void generic_scheduler::leave_arena() {
     __TBB_ASSERT( in_arena(), "Not in arena" );
-    // Do not reset arena_index. It will be used to (attempt to) re-acquire the slot next time
-    __TBB_ASSERT( &my_arena->slot[arena_index] == my_arena_slot, "arena slot and slot index mismatch" );
+    // Do not reset my_arena_index. It will be used to (attempt to) re-acquire the slot next time
+    __TBB_ASSERT( &my_arena->my_slots[my_arena_index] == my_arena_slot, "arena slot and slot index mismatch" );
     __TBB_ASSERT ( my_arena_slot->task_pool == LockedTaskPool, "Task pool must be locked when leaving arena" );
-    __TBB_ASSERT ( my_arena_slot->head == my_arena_slot->tail, "Cannot leave arena when the task pool is not empty" );
-#if !__TBB_ARENA_PER_MASTER
-    if ( !is_worker() ) {
-        my_affinity_id = 0;
-        inbox.detach();
-    }
-#endif /* !__TBB_ARENA_PER_MASTER */
-    ITT_NOTIFY(sync_releasing, &my_arena->slot[arena_index]);
-    __TBB_store_with_release( my_arena_slot->task_pool, EmptyTaskPool );
-    my_arena_slot = &dummy_slot;
+    __TBB_ASSERT ( my_arena_slot->tail == my_arena_slot->head, "Cannot leave arena when the task pool is not empty" );
+    ITT_NOTIFY(sync_releasing, &my_arena->my_slots[my_arena_index]);
+    // No release fence is necessary here as this assignment precludes external 
+    // accesses to the local task pool when becomes visible. Thus it is harmless
+    // if it gets hoisted above preceding local bookkeeping manipulations.
+    my_arena_slot->task_pool = EmptyTaskPool;
+    my_arena_slot = &my_dummy_slot;
 }
 
-#if __TBB_ARENA_PER_MASTER
 generic_scheduler* generic_scheduler::create_worker( market& m, size_t index ) {
     generic_scheduler* s = allocate_scheduler( NULL, index );
 #if __TBB_TASK_GROUP_CONTEXT
-    s->dummy_task->prefix().context = &dummy_context;
+    s->my_dummy_task->prefix().context = &dummy_context;
     // Sync up the local cancellation state with the global one. No need for fence here.
-    s->local_cancel_count = global_cancel_count;
+    s->my_context_state_propagation_epoch = the_context_state_propagation_epoch;
 #endif /* __TBB_TASK_GROUP_CONTEXT */
     s->my_market = &m;
     s->init_stack_info();
+#if __TBB_TASK_PRIORITY
+    s->my_ref_top_priority = &s->my_market->my_global_top_priority;
+    s->my_ref_reload_epoch = &s->my_market->my_global_reload_epoch;
+#endif /* __TBB_TASK_PRIORITY */
     return s;
 }
 
-#else /* !__TBB_ARENA_PER_MASTER */
-
-generic_scheduler* generic_scheduler::create_worker( arena& a, size_t index ) {
-    generic_scheduler* s = allocate_scheduler( &a, index );
-
-    // Put myself into the arena
-#if __TBB_TASK_GROUP_CONTEXT
-    s->dummy_task->prefix().context = &dummy_context;
-    // Sync up the local cancellation state with the global one. No need for fence here.
-    s->local_cancel_count = global_cancel_count;
-#endif /* __TBB_TASK_GROUP_CONTEXT */
-    s->attach_mailbox( index+1 );
-    s->init_stack_info();
-
-    __TBB_store_with_release( a.prefix().worker_list[index].scheduler, s );
-    return s;
-}
-#endif /* !__TBB_ARENA_PER_MASTER */
-
 generic_scheduler* generic_scheduler::create_master( arena& a ) {
-    generic_scheduler* s = allocate_scheduler( &a,
-#if __TBB_ARENA_PER_MASTER
-        0                   // Master thread always occupies the first slot
-#else /* !__TBB_ARENA_PER_MASTER */
-        null_arena_index    // Master thread will have to search for a vacant slot
-#endif /* !__TBB_ARENA_PER_MASTER */
-        );
-    task& t = *s->dummy_task;
-    s->innermost_running_task = &t;
+    generic_scheduler* s = allocate_scheduler( &a, 0 /*Master thread always occupies the first slot*/ );
+    task& t = *s->my_dummy_task;
+    s->my_innermost_running_task = &t;
+#if __TBB_TASK_PRIORITY
+    s->my_dispatching_task = &t;
+#endif /* __TBB_TASK_PRIORITY */
     t.prefix().ref_count = 1;
     governor::sign_on(s);
     __TBB_ASSERT( &task::self()==&t, "governor::sign_on failed?" );
-#if __TBB_ARENA_PER_MASTER
 #if __TBB_TASK_GROUP_CONTEXT
     // Context to be used by root tasks by default (if the user has not specified one).
     // Allocation is done by NFS allocator because we cannot reuse memory allocated 
     // for task objects since the free list is empty at the moment.
     t.prefix().context = a.my_master_default_ctx = 
         new ( NFS_Allocate(sizeof(task_group_context), 1, NULL) ) task_group_context(task_group_context::isolated);
-#endif
+#endif /* __TBB_TASK_GROUP_CONTEXT */
     s->my_market = a.my_market;
-    __TBB_ASSERT( s->arena_index == 0, "Master thread must occupy the first slot in its arena" );
+    __TBB_ASSERT( s->my_arena_index == 0, "Master thread must occupy the first slot in its arena" );
     s->attach_mailbox(1);
-    a.slot[0].my_scheduler = s;
+    a.my_slots[0].my_scheduler = s;
 #if _WIN32|_WIN64
     __TBB_ASSERT( s->my_market, NULL );
     s->my_market->register_master( s->master_exec_resource );
 #endif /* _WIN32|_WIN64 */
-#else /* !__TBB_ARENA_PER_MASTER */
-#if _WIN32|_WIN64
-    s->register_master();
-#endif 
-#if __TBB_TASK_GROUP_CONTEXT
-    // Context to be used by root tasks by default (if the user has not specified one).
-    // Allocation is done by NFS allocator because we cannot reuse memory allocated 
-    // for task objects since the free list is empty at the moment.
-    t.prefix().context = new ( NFS_Allocate(sizeof(task_group_context), 1, NULL) ) task_group_context(task_group_context::isolated);
-    scheduler_list_node_t &node = s->my_node;
-    {
-        mutex::scoped_lock lock(the_scheduler_list_mutex);
-        node.my_next = the_scheduler_list_head.my_next;
-        node.my_prev = &the_scheduler_list_head;
-        the_scheduler_list_head.my_next->my_prev = &node;
-        the_scheduler_list_head.my_next = &node;
-#endif /* __TBB_TASK_GROUP_CONTEXT */
-        unsigned last = a.prefix().number_of_slots,
-                 cur_limit = a.prefix().limit;
-        // This slot index assignment is just a hint to ...
-        if ( cur_limit < last ) {
-            // ... to prevent competition between the first few masters.
-            s->arena_index = cur_limit++;
-            // In the absence of exception handling this code is a subject to data 
-            // race in case of multiple masters concurrently entering empty arena.
-            // But it does not affect correctness, and can only result in a few 
-            // masters competing for the same arena slot during the first acquisition.
-            // The cost of competition is low in comparison to that of oversubscription.
-            a.prefix().limit = cur_limit;
-        }
-        else {
-            // ... to minimize the probability of competition between multiple masters.
-            unsigned first = a.prefix().number_of_workers;
-            s->arena_index = first + s->random.get() % (last - first);
-        }
-#if __TBB_TASK_GROUP_CONTEXT
-    }
-#endif
-#endif /* !__TBB_ARENA_PER_MASTER */
     s->init_stack_info();
 #if __TBB_TASK_GROUP_CONTEXT
     // Sync up the local cancellation state with the global one. No need for fence here.
-    s->local_cancel_count = global_cancel_count;
+    s->my_context_state_propagation_epoch = the_context_state_propagation_epoch;
 #endif
+#if __TBB_TASK_PRIORITY
+    // In the current implementation master threads continue processing even when
+    // there are other masters with higher priority. Only TBB worker threads are
+    // redistributed between arenas based on the latters' priority. Thus master 
+    // threads use arena's top priority as a reference point (in contrast to workers 
+    // that use my_market->my_global_top_priority).
+    s->my_ref_top_priority = &s->my_arena->my_top_priority;
+    s->my_ref_reload_epoch = &s->my_arena->my_reload_epoch;
+#endif /* __TBB_TASK_PRIORITY */
 #if __TBB_SCHEDULER_OBSERVER
     // Process any existing observers.
     s->notify_entry_observers();
@@ -1112,7 +1067,7 @@ generic_scheduler* generic_scheduler::create_master( arena& a ) {
 
 void generic_scheduler::cleanup_worker( void* arg, bool is_worker ) {
     generic_scheduler& s = *(generic_scheduler*)arg;
-    __TBB_ASSERT( s.dummy_slot.task_pool, "cleaning up worker with missing task pool" );
+    __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 );
@@ -1127,46 +1082,53 @@ void generic_scheduler::cleanup_worker( void* arg, bool is_worker ) {
 
 void generic_scheduler::cleanup_master() {
     generic_scheduler& s = *this; // for similarity with cleanup_worker
-    __TBB_ASSERT( s.dummy_slot.task_pool, "cleaning up master with missing task pool" );
+    __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);
 #endif /* __TBB_SCHEDULER_OBSERVER */
     if ( !local_task_pool_empty() ) {
         __TBB_ASSERT ( governor::is_set(this), "TLS slot is cleared before the task pool cleanup" );
-        s.local_wait_for_all( *s.dummy_task, NULL );
+        s.local_wait_for_all( *s.my_dummy_task, NULL );
         __TBB_ASSERT ( governor::is_set(this), "Other thread reused our TLS key during the task pool cleanup" );
     }
-#if __TBB_ARENA_PER_MASTER
 #if _WIN32|_WIN64
     __TBB_ASSERT( s.my_market, NULL );
     s.my_market->unregister_master( s.master_exec_resource );
 #endif /* _WIN32|_WIN64 */
     arena* a = s.my_arena;
-#else /* !__TBB_ARENA_PER_MASTER */
-#if _WIN32|_WIN64
-    s.unregister_master();
-#endif /* _WIN32|_WIN64 */
-#endif /* __TBB_ARENA_PER_MASTER */
+#if __TBB_STATISTICS
+    *a->my_slots[0].my_counters += s.my_counters;
+#endif /* __TBB_STATISTICS */
+#if __TBB_TASK_PRIORITY
+    __TBB_ASSERT( a->my_slots[0].my_scheduler, NULL );
+    // Master's scheduler may be locked by a worker taking arena snapshot or by 
+    // a thread propagating task group state change across the context tree.
+    while ( __TBB_CompareAndSwapW(&a->my_slots[0].my_scheduler, 0, (intptr_t)this) != (intptr_t)this )
+        __TBB_Yield();
+    __TBB_ASSERT( !a->my_slots[0].my_scheduler, NULL );
+#else /* !__TBB_TASK_PRIORITY */
+    a->my_slots[0].my_scheduler = NULL;
+#endif /* __TBB_TASK_PRIORITY */
     s.free_scheduler();
-#if __TBB_ARENA_PER_MASTER
-    a->slot[0].my_scheduler = NULL;
-    // Do not close arena if some fire-and-forget tasks remain; workers should care of it.
-    if( a->my_task_stream.empty() && a->pool_state.fetch_and_store(arena::SNAPSHOT_EMPTY)!=arena::SNAPSHOT_EMPTY )
-        a->my_market->adjust_demand( *a, -(int)a->my_max_num_workers );
-    if ( --a->my_num_threads_active==0 && a->pool_state==arena::SNAPSHOT_EMPTY )
-        a->close_arena();
-#else /* !__TBB_ARENA_PER_MASTER */
-    governor::finish_with_arena();
-#endif /* !__TBB_ARENA_PER_MASTER */
+    // Resetting arena to EMPTY state (as earlier TBB versions did) should not be
+    // done here (or anywhere else in the master thread to that matter) because
+    // after introducing arena-per-master logic and fire-and-forget tasks doing 
+    // so can result either in arena's premature destruction (at least without
+    // additional costly checks in workers) or in unnecessary arena state changes
+    // (and ensuing workers migration).
+#if __TBB_STATISTICS_EARLY_DUMP
+    GATHER_STATISTIC( a->dump_arena_statistics() );
+#endif
+    a->on_thread_leaving();
 }
 
 #if __TBB_SCHEDULER_OBSERVER
     void generic_scheduler::notify_entry_observers() {
-        local_last_observer_proxy = observer_proxy::process_list(local_last_observer_proxy,is_worker(),/*is_entry=*/true);
+        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(local_last_observer_proxy,is_worker,/*is_entry=*/false);
+        observer_proxy::process_list(my_local_last_observer_proxy,is_worker,/*is_entry=*/false);
     }
 #endif /* __TBB_SCHEDULER_OBSERVER */
 
diff --git a/src/tbb/scheduler.h b/src/tbb/scheduler.h
index db84ed4..a85003d 100644
--- a/src/tbb/scheduler.h
+++ b/src/tbb/scheduler.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -30,23 +30,14 @@
 #define _TBB_scheduler_H
 
 #include "scheduler_common.h"
-#include "arena.h"
 #include "mailbox.h"
 #include "tbb_misc.h" // for FastRandom
+#include "itt_notify.h"
+#include "../rml/include/rml_tbb.h"
 
-#if __TBB_TASK_GROUP_CONTEXT
-#include "tbb/spin_mutex.h"
-#endif /* __TBB_TASK_GROUP_CONTEXT */
-
-#ifndef STATISTICS
-#define STATISTICS 0
-#endif /* STATISTICS */
-
-#if STATISTICS
-#define GATHER_STATISTIC(x) (x)
-#else
-#define GATHER_STATISTIC(x) ((void)0)
-#endif /* STATISTICS */
+#if __TBB_SURVIVE_THREAD_SWITCH
+#include "cilk-tbb-interop.h"
+#endif /* __TBB_SURVIVE_THREAD_SWITCH */
 
 namespace tbb {
 namespace internal {
@@ -67,17 +58,17 @@ struct scheduler_list_node_t {
 #define EmptyTaskPool ((task**)0)
 #define LockedTaskPool ((task**)~(intptr_t)0)
 
+#define LockedMaster ((generic_scheduler*)~(intptr_t)0)
+
 class governor;
+class market;
+class arena;
 
 #if __TBB_SCHEDULER_OBSERVER
 class task_scheduler_observer_v3;
 class observer_proxy;
 #endif /* __TBB_SCHEDULER_OBSERVER */
 
-#if __TBB_ARENA_PER_MASTER
-class market;
-#endif
-
 //! Cilk-style task scheduler.
 /** None of the fields here are every read or written by threads other than
     the thread that creates the instance.
@@ -87,11 +78,7 @@ class market;
     The derived template class custom_scheduler<SchedulerTraits> fills in the tweaks. */
 class generic_scheduler: public scheduler, public ::rml::job {
     friend class tbb::task;
-#if __TBB_ARENA_PER_MASTER
     friend class market;
-#else
-    friend class UnpaddedArenaPrefix;
-#endif /* !__TBB_ARENA_PER_MASTER */
     friend class arena;
     friend class allocate_root_proxy;
     friend class governor;
@@ -122,56 +109,45 @@ class generic_scheduler: public scheduler, public ::rml::job {
     static const size_t null_arena_index = ~size_t(0);
 
     //! Index of the arena slot the scheduler occupies now, or occupied last time.
-    size_t arena_index;
+    size_t my_arena_index;
 
-    //! Capacity of ready tasks deque (number of elements - pointers to task).
-    size_t task_pool_size;
+    //! Capacity of the primary task pool (number of elements - pointers to task).
+    size_t my_task_pool_size;
 
     //! Pointer to the slot in the arena we own at the moment.
-    /** When out of arena it points to this scheduler's dummy_slot. **/
+    /** When out of arena it points to this scheduler's my_dummy_slot. **/
     mutable arena_slot* my_arena_slot;
 
-    bool in_arena () const { return my_arena_slot != &dummy_slot; }
+    inline bool in_arena () const;
 
-    bool local_task_pool_empty () {
-        return my_arena_slot->task_pool == EmptyTaskPool || my_arena_slot->head >= my_arena_slot->tail;
-    }
+    inline bool local_task_pool_empty () const;
 
-#if __TBB_ARENA_PER_MASTER
     //! The market I am in
     market* my_market;
 
     //! The arena that I own (if master) or am servicing at the moment (if worker)
     arena* my_arena;
-#else /* !__TBB_ARENA_PER_MASTER */
-    //! The arena that I own (if master) or am servicing at the moment (if worker)
-    arena* const my_arena;
-#endif /* !__TBB_ARENA_PER_MASTER */
 
     //! Random number generator used for picking a random victim from which to steal.
-    FastRandom random;
+    FastRandom my_random;
 
     //! Free list of small tasks that can be reused.
-    task* free_list;
+    task* my_free_list;
 
     //! Innermost task whose task::execute() is running.
-    task* innermost_running_task;
+    task* my_innermost_running_task;
 
     //! Fake root task created by slave threads.
     /** The task is used as the "parent" argument to method wait_for_all. */
-    task* dummy_task;
+    task* my_dummy_task;
 
     //! Reference count for scheduler
     /** Number of task_scheduler_init objects that point to this scheduler */
-    long ref_count;
+    long my_ref_count;
 
-    mail_inbox inbox;
+    mail_inbox my_inbox;
 
-    void attach_mailbox( affinity_id id ) {
-        __TBB_ASSERT(id>0,NULL);
-        inbox.attach( my_arena->mailbox(id) );
-        my_affinity_id = id;
-    }
+    inline void attach_mailbox( affinity_id id );
 
     //! The mailbox id assigned to this scheduler.
     /** The id is assigned upon first entry into the arena.
@@ -184,14 +160,14 @@ class generic_scheduler: public scheduler, public ::rml::job {
     /* A couple of bools can be located here because space is otherwise just padding after my_affinity_id. */
 
     //! True if this is assigned to thread local storage by registering with governor.
-    bool is_registered;
+    bool my_registered;
 
     //! True if *this was created by automatic TBB initialization
-    bool is_auto_initialized;
+    bool my_auto_initialized;
 
 #if __TBB_SCHEDULER_OBSERVER
     //! Last observer_proxy processed by this scheduler
-    observer_proxy* local_last_observer_proxy;
+    observer_proxy* my_local_last_observer_proxy;
 
     //! Notify any entry observers that have been created since the last call by this thread.
     void notify_entry_observers();
@@ -202,25 +178,9 @@ class generic_scheduler: public scheduler, public ::rml::job {
 
 #if __TBB_COUNT_TASK_NODES
     //! Net number of big task objects that have been allocated but not yet freed.
-    intptr_t task_node_count;
+    intptr_t my_task_node_count;
 #endif /* __TBB_COUNT_TASK_NODES */
 
-#if STATISTICS
-    long current_active;
-    long current_length;
-    //! Number of big tasks that have been malloc'd.
-    /** To find total number of tasks malloc'd, compute (current_big_malloc+small_task_count) */
-    long current_big_malloc;
-    long execute_count;
-    //! Number of tasks stolen
-    long steal_count;
-    //! Number of tasks received from mailbox
-    long mail_received_count;
-    long proxy_execute_count;
-    long proxy_steal_count;
-    long proxy_bypass_count;
-#endif /* STATISTICS */
-
     //! Sets up the data necessary for the stealing limiting heuristics
     void init_stack_info ();
 
@@ -241,22 +201,21 @@ class generic_scheduler: public scheduler, public ::rml::job {
     /** Does not lock the task pool in case if arena slot has been successfully grabbed. **/
     void enter_arena();
 
-#if !__TBB_ARENA_PER_MASTER
-    //! Used by masters to try to enter the arena
-    /** Does not lock the task pool in case if arena slot has been successfully grabbed. **/
-    void try_enter_arena();
-#endif /* !__TBB_ARENA_PER_MASTER */
-
     //! Leave the arena
+    /** Leaving arena automatically releases the task pool if it is locked. **/
     void leave_arena();
 
+    //! Resets head and tail indices to 0, and leaves arena
+    /** Argument specifies whether the task pool is currently locked by the owner
+        (via acquire_task_pool).**/
+    inline void reset_deque_and_leave_arena ( bool locked );
+
     //! Locks victim's task pool, and returns pointer to it. The pointer can be NULL.
     task** lock_task_pool( arena_slot* victim_arena_slot ) const;
 
     //! Unlocks victim's task pool
     void unlock_task_pool( arena_slot* victim_arena_slot, task** victim_task_pool ) const;
 
-
     //! Locks the local task pool
     void acquire_task_pool() const;
 
@@ -267,6 +226,9 @@ class generic_scheduler: public scheduler, public ::rml::job {
     /** Returns either t or proxy containing t. **/
     task* prepare_for_spawning( task* t );
 
+    //! Makes newly spawned tasks visible to thieves
+    inline void commit_spawned_tasks( size_t new_tail );
+
     //! Get a task from the local pool.
     /** Called only by the pool owner.
         Returns the pointer to the task or NULL if the pool is empty. 
@@ -289,13 +251,11 @@ class generic_scheduler: public scheduler, public ::rml::job {
     /** Return NULL if underlying task was claimed by mailbox. */
     task* strip_proxy( task_proxy* result );
 
-#if __TBB_ARENA_PER_MASTER
     //! Get a task from the starvation-resistant task stream of the current arena.
     /** Returns the pointer to the task, or NULL if the attempt was unsuccessful. 
         The latter case does not mean that the stream is drained, however. **/
     task* dequeue_task();
 
-#endif /* __TBB_ARENA_PER_MASTER */
     //! Steal task from another scheduler's ready pool.
     task* steal_task( arena_slot& victim_arena_slot );
 
@@ -304,7 +264,7 @@ class generic_scheduler: public scheduler, public ::rml::job {
     static const size_t min_task_pool_size = 64;
 
     //! Allocate task pool containing at least n elements.
-    task** allocate_task_pool( size_t n );
+    inline task** allocate_task_pool( size_t n );
 
     //! Deallocate task pool that was allocated by means of allocate_task_pool.
     static void free_task_pool( task** pool ) {
@@ -312,6 +272,10 @@ class generic_scheduler: public scheduler, public ::rml::job {
         NFS_Free( pool );
     }
 
+    //! Makes sure that the task pool can accommodate at least n more elements
+    /** If necessary relocates existing task pointers or grows the ready task deque. **/
+    inline void prepare_task_pool( size_t n );
+
     //! Grow ready task deque to at least n elements.
     void grow_task_pool( size_t n );
 
@@ -322,11 +286,7 @@ class generic_scheduler: public scheduler, public ::rml::job {
     void cleanup_master();
 
     //! Initialize a scheduler for a worker thread.
-#if __TBB_ARENA_PER_MASTER
     static generic_scheduler* create_worker( market& m, size_t index );
-#else /* !__TBB_ARENA_PER_MASTER */
-    static generic_scheduler* create_worker( arena& a, size_t index );
-#endif /* !__TBB_ARENA_PER_MASTER */
 
     //! Perform necessary cleanup when a worker thread finishes.
     static void cleanup_worker( void* arg, bool is_worker );
@@ -334,25 +294,31 @@ class generic_scheduler: public scheduler, public ::rml::job {
 protected:
     generic_scheduler( arena*, size_t index );
 
-#if TBB_USE_ASSERT
+#if TBB_USE_ASSERT > 1
     //! Check that internal data structures are in consistent state.
     /** Raises __TBB_ASSERT failure if inconsistency is found. */
-    bool assert_okay() const;
-#endif /* TBB_USE_ASSERT */
+    void assert_task_pool_valid () const;
+    static void fill_with_canary_pattern ( task** task_pool, size_t first, size_t last );
+#else
+    void assert_task_pool_valid() const {}
+    static void fill_with_canary_pattern ( task**, size_t, size_t ) {}
+#endif /* TBB_USE_ASSERT <= 1 */
 
 public:
     /*override*/ 
-    void spawn( task& first, task*& next );
+    inline void spawn( task& first, task*& next );
 
     /*override*/ 
-    void spawn_root_and_wait( task& first, task*& next );
+    inline void spawn_root_and_wait( task& first, task*& next );
 
-#if __TBB_ARENA_PER_MASTER
     /*override*/ 
-    void enqueue( task& task_, void* reserved );
+    inline void enqueue( task&, void* reserved );
 
-    void local_enqueue( task& task_ );
-#endif /* __TBB_ARENA_PER_MASTER */
+#if __TBB_TASK_PRIORITY
+    void local_enqueue( task&, priority_t prio );
+#else /* !__TBB_TASK_PRIORITY */
+    void local_enqueue( task& );
+#endif /* !__TBB_TASK_PRIORITY */
 
     void local_spawn( task& first, task*& next );
     void local_spawn_root_and_wait( task& first, task*& next );
@@ -371,59 +337,43 @@ public:
     template<free_task_hint h>
     void free_task( task& t );
 
-    void free_task_proxy( task_proxy& tp ) {
-#if TBB_USE_ASSERT
-        poison_pointer( tp.outbox );
-        poison_pointer( tp.next_in_mailbox );
-        tp.task_and_tag = 0xDEADBEEF;
-#endif /* TBB_USE_ASSERT */
-        free_task<small_task>(tp);
-    }
+    inline void free_task_proxy( task_proxy& tp );
 
     //! Return task object to the memory allocator.
-    void deallocate_task( task& t ) {
-#if TBB_USE_ASSERT
-        task_prefix& p = t.prefix();
-        p.state = 0xFF;
-        p.extra_state = 0xFF; 
-        poison_pointer(p.next);
-#endif /* TBB_USE_ASSERT */
-        NFS_Free((char*)&t-task_prefix_reservation_size);
-#if __TBB_COUNT_TASK_NODES
-        --task_node_count;
-#endif /* __TBB_COUNT_TASK_NODES */
-    }
+    inline void deallocate_task( task& t );
 
     //! True if running on a worker thread, false otherwise.
-    bool is_worker() {
-#if __TBB_ARENA_PER_MASTER
-        return arena_index != 0;
-#else /* !__TBB_ARENA_PER_MASTER */
-        return arena_index < my_arena->prefix().number_of_workers;
-#endif /* !__TBB_ARENA_PER_MASTER */
-    }
+    inline bool is_worker();
+
+    //! True if the scheduler is on the outermost dispatch level in a master thread.
+    /** Returns true when this scheduler instance is associated with an application
+        thread, and is not executing any TBB task. This includes being in a TBB 
+        dispatch loop (one of wait_for_all methods) invoked directly from that thread. **/
+    inline bool master_outermost_level () const;
+
+    //! Returns task group context used by this scheduler instance.
+    /** This context is associated with root tasks created by a master thread 
+        without explicitly specified context object outside of any running task.
+        
+        Note that the default context of a worker thread is never accessed by
+        user code (directly or indirectly). **/
+    inline task_group_context* default_context ();
 
-#if __TBB_ARENA_PER_MASTER
     //! Returns number of worker threads in the arena this thread belongs to.
-    unsigned number_of_workers_in_my_arena() {
-        return my_arena->my_max_num_workers;
-    }
-#endif /* __TBB_ARENA_PER_MASTER */
+    unsigned number_of_workers_in_my_arena();
 
 #if __TBB_COUNT_TASK_NODES
-    intptr_t get_task_node_count( bool count_arena_workers = false ) {
-        return task_node_count + (count_arena_workers? my_arena->workers_task_node_count(): 0);
-    }
+    intptr_t get_task_node_count( bool count_arena_workers = false );
 #endif /* __TBB_COUNT_TASK_NODES */
 
-    //! Special value used to mark return_list as not taking any more entries.
+    //! Special value used to mark my_return_list as not taking any more entries.
     static task* plugged_return_list() {return (task*)(intptr_t)(-1);}
 
     //! Number of small tasks that have been allocated by this scheduler. 
-    intptr_t small_task_count;
+    intptr_t my_small_task_count;
 
     //! List of small tasks that have been returned to this scheduler by other schedulers.
-    task* return_list;
+    task* my_return_list;
 
     //! Try getting a task from the mailbox or stealing from another scheduler.
     /** Redirects to a customization. */
@@ -437,77 +387,258 @@ public:
     char _padding1[NFS_MaxLineSize - sizeof(context_list_node_t)];
 
     //! Head of the thread specific list of task group contexts.
-    context_list_node_t context_list_head;
+    context_list_node_t my_context_list_head;
 
     //! Mutex protecting access to the list of task group contexts.
-    spin_mutex context_list_mutex;
-
-#if !__TBB_ARENA_PER_MASTER
-    //! Used to form the list of master thread schedulers.
-    scheduler_list_node_t my_node;
-#endif /* !__TBB_ARENA_PER_MASTER */
+    spin_mutex my_context_list_mutex;
 
-    //! Thread local cancellation epoch.
-    /** When local epoch equals the global one, the cancellation state known
-        to this thread is synchronized with the global cancellation state. **/
-    uintptr_t local_cancel_count;
+    //! Last state propagation epoch known to this thread 
+    /** Together with the_context_state_propagation_epoch constitute synchronization protocol
+        that keeps hot path of task group context construction destruction mostly 
+        lock-free.
+        When local epoch equals the global one, the state of task group contexts
+        registered with this thread is consistent with that of the task group trees
+        they belong to. **/
+    uintptr_t my_context_state_propagation_epoch;
 
     //! Flag indicating that a context is being destructed by its owner thread 
-    /** Together with nonlocal_ctx_list_update constitue a synchronization protocol
+    /** 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 local_ctx_list_update;
+    uintptr_t my_local_ctx_list_update;
+
+#if __TBB_TASK_PRIORITY
+    //! True if the scheduler is on the outermost dispatch level in a worker thread.
+    inline bool worker_outermost_level () const;
+
+    // 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
+        wait_for_all) it is my_dummy_task for master threads, and NULL for workers. **/
+    task* my_dispatching_task;
+
+    //! Latest known highest priority of tasks in the market or arena.
+    /** Master threads currently tracks only tasks in their arenas, while workers
+        take into account global top priority (among all arenas in the market). **/
+    volatile intptr_t *my_ref_top_priority;
+    
+    //! Task pool for offloading tasks with priorities lower than the current top priority.
+    task* my_offloaded_tasks;
+
+    //! Points to the last offloaded task in the my_offloaded_tasks list.
+    task** my_offloaded_task_list_tail_link;
+
+    //! Pointer to market's (for workers) or current arena's (for the master) reload epoch counter.
+    volatile uintptr_t *my_ref_reload_epoch;
+
+    //! Indicator of how recently the offload area was checked for the presence of top priority tasks.
+    uintptr_t my_local_reload_epoch;
+
+    //! Indicates that the pool is likely non-empty even if appears so from outside
+    volatile bool my_pool_reshuffling_pending;
+
+    //! Searches offload area for top priority tasks and reloads found ones into primary task pool.
+    /** Returns one of the found tasks or NULL. **/
+    task* reload_tasks ();
+
+    task* reload_tasks ( task*& offloaded_tasks, task**& offloaded_task_list_link, intptr_t top_priority );
+
+    //! Moves tasks with priority below the top one from primary task pool into offload area.
+    /** Returns the next execution candidate task or NULL. **/
+    task* winnow_task_pool ();
+
+    //! Unconditionally moves the task into offload area.
+    inline void offload_task ( task& t, intptr_t task_priority );
+#endif /* __TBB_TASK_PRIORITY */
 
     //! Detaches abandoned contexts
     /** These contexts must be destroyed by other threads. **/
     void cleanup_local_context_list ();
 
-#if !__TBB_ARENA_PER_MASTER
-    //! Propagates cancellation request to all descendants of the context.
-    void propagate_cancellation ( task_group_context& ctx );
-#endif /* !__TBB_ARENA_PER_MASTER */
-
-    //! Propagates cancellation request to contexts registered by this scheduler.
-    void propagate_cancellation ();
+    //! Finds all contexts registered by this scheduler affected by the state change
+    //! and propagates the new state to them.
+    template <typename T>
+    void propagate_task_group_state ( T task_group_context::*mptr_state, T new_state );
 #endif /* __TBB_TASK_GROUP_CONTEXT */
 
 #if _WIN32||_WIN64
 private:
     //! Handle returned by RML when registering a master with RML
     ::rml::server::execution_resource_t master_exec_resource;
-
-#if !__TBB_ARENA_PER_MASTER
-    //! register master with the resource manager
-    void register_master() {
-        __TBB_ASSERT( my_arena->prefix().server, "RML server not defined?" );
-        // the server may ignore registration and set master_exec_resource to NULL.
-        my_arena->prefix().server->register_master( master_exec_resource );
-    }
-
-    //! unregister master with the resource manager
-    void unregister_master() const {
-        my_arena->prefix().server->unregister_master( master_exec_resource );
-    }
-#endif /* !__TBB_ARENA_PER_MASTER && ( _WIN32||_WIN64 ) */
 #endif /* _WIN32||_WIN64 */
 
     //! Dummy slot used when scheduler is not in arena
     /** The data structure is heavily padded, therefore it should be placed after 
         other data fields used by the owner thread only to allow compiler using 
         instructions with short offsets when accessing the majority of data members. **/
-    arena_slot dummy_slot;
+    arena_slot my_dummy_slot;
 
 #if __TBB_TASK_GROUP_CONTEXT
     //! Flag indicating that a context is being destructed by non-owner thread.
-    /** See also local_ctx_list_update. **/
-    uintptr_t nonlocal_ctx_list_update;
+    /** See also my_local_ctx_list_update. **/
+    uintptr_t my_nonlocal_ctx_list_update;
 #endif /* __TBB_TASK_GROUP_CONTEXT */
+
+#if __TBB_SURVIVE_THREAD_SWITCH
+    __cilk_tbb_unwatch_thunk my_cilk_unwatch_thunk;
+#if TBB_USE_ASSERT
+    //! State values used to check interface contract with Cilk runtime.
+    /** Names of cs_running...cs_freed derived from state machine diagram in cilk-tbb-interop.h */
+    enum cilk_state_t {
+        cs_none=0xF000, // Start at nonzero value so that we can detect use of zeroed memory.
+        cs_running,
+        cs_limbo,
+        cs_freed
+    };
+    cilk_state_t my_cilk_state;
+#endif /* TBB_USE_ASSERT */
+#endif /* __TBB_SURVIVE_THREAD_SWITCH */
+
+#if __TBB_STATISTICS
+    //! Set of counters to track internal statistics on per thread basis
+    /** Placed at the end of the class definition to minimize the disturbance of
+        the core logic memory operations. **/
+    mutable statistics_counters my_counters;
+#endif /* __TBB_STATISTICS */
+
 }; // class generic_scheduler
 
 
+} // namespace internal
+} // namespace tbb
+
+#include "arena.h"
+#include "governor.h"
+
+namespace tbb {
+namespace internal {
+
+inline void tbb::internal::generic_scheduler::spawn( task& first, task*& next ) {
+    governor::local_scheduler()->local_spawn( first, next );
+}
+
+inline void tbb::internal::generic_scheduler::spawn_root_and_wait( task& first, task*& next ) {
+    governor::local_scheduler()->local_spawn_root_and_wait( first, next );
+}
+
+inline void tbb::internal::generic_scheduler::enqueue( task& t, void* prio ) {
+    governor::local_scheduler()->local_enqueue( t
+#if __TBB_TASK_PRIORITY
+                                                , (priority_t)(intptr_t)prio
+#endif /* __TBB_TASK_PRIORITY */
+                                              );
+}
+
+inline bool generic_scheduler::in_arena () const {
+    return my_arena_slot != &my_dummy_slot;
+}
+
+inline bool generic_scheduler::local_task_pool_empty () const {
+    return my_arena_slot->task_pool == EmptyTaskPool || my_arena_slot->head >= my_arena_slot->tail;
+}
+
+inline bool generic_scheduler::master_outermost_level () const {
+    return my_innermost_running_task == my_dummy_task;
+}
+
+inline task_group_context* generic_scheduler::default_context () {
+    return my_dummy_task->prefix().context;
+}
+
+inline void generic_scheduler::attach_mailbox( affinity_id id ) {
+    __TBB_ASSERT(id>0,NULL);
+    my_inbox.attach( my_arena->mailbox(id) );
+    my_affinity_id = id;
+}
+
+inline bool generic_scheduler::is_worker() {
+    return my_arena_index != 0;
+}
+
+inline unsigned generic_scheduler::number_of_workers_in_my_arena() {
+    return my_arena->my_max_num_workers;
+}
+
+inline void generic_scheduler::free_task_proxy( task_proxy& tp ) {
+#if TBB_USE_ASSERT
+    poison_pointer( tp.outbox );
+    poison_pointer( tp.next_in_mailbox );
+    tp.task_and_tag = 0xDEADBEEF;
+#endif /* TBB_USE_ASSERT */
+    free_task<small_task>(tp);
+}
+
+    //! Return task object to the memory allocator.
+inline void generic_scheduler::deallocate_task( task& t ) {
+#if TBB_USE_ASSERT
+    task_prefix& p = t.prefix();
+    p.state = 0xFF;
+    p.extra_state = 0xFF; 
+    poison_pointer(p.next);
+#endif /* TBB_USE_ASSERT */
+    NFS_Free((char*)&t-task_prefix_reservation_size);
+#if __TBB_COUNT_TASK_NODES
+    --my_task_node_count;
+#endif /* __TBB_COUNT_TASK_NODES */
+}
+
+#if __TBB_COUNT_TASK_NODES
+inline intptr_t generic_scheduler::get_task_node_count( bool count_arena_workers ) {
+    return my_task_node_count + (count_arena_workers? my_arena->workers_task_node_count(): 0);
+}
+#endif /* __TBB_COUNT_TASK_NODES */
+
+inline void generic_scheduler::reset_deque_and_leave_arena ( bool locked ) {
+    if ( !locked )
+        acquire_task_pool();
+    my_arena_slot->tail = my_arena_slot->head = 0;
+    leave_arena();
+}
+
+inline task** generic_scheduler::allocate_task_pool( size_t n ) {
+    size_t byte_size = ((n * sizeof(task*) + NFS_MaxLineSize - 1) / NFS_MaxLineSize) * NFS_MaxLineSize;
+    my_task_pool_size = byte_size / sizeof(task*);
+    task** new_pool = (task**)NFS_Allocate( byte_size, 1, NULL );
+    // No need to clear the fresh deque since valid items are designated by the head and tail members.
+    // But fill it with a canary pattern in the high vigilance debug mode.
+    fill_with_canary_pattern( new_pool, 0, my_task_pool_size );
+    return new_pool;
+}
+
+inline void generic_scheduler::prepare_task_pool( size_t num_tasks ) {
+    if ( my_arena_slot->tail + num_tasks <= my_task_pool_size )
+        return;
+    // 1 compensates for head possibly temporarily incremented by a thief
+    size_t new_size = my_arena_slot->tail - my_arena_slot->head + num_tasks + 1;
+    // If the free space at the beginning of the task pool is too short, we
+    // are likely facing a pathological single-producer-multiple-consumers
+    // scenario, and thus it's better to expand the task pool
+    if ( new_size <= my_task_pool_size - min_task_pool_size/4 ) {
+        // Relocate the busy part to the deque beginning
+        acquire_task_pool();
+        size_t new_tail = my_arena_slot->tail - my_arena_slot->head;
+        memmove( my_dummy_slot.task_pool, my_dummy_slot.task_pool + my_arena_slot->head, new_tail * sizeof(task*) );
+        fill_with_canary_pattern( my_dummy_slot.task_pool, new_tail, my_arena_slot->tail );
+        my_arena_slot->head = 0;
+        // Tail is updated last to minimize probability of a thread making arena 
+        // snapshot being misguided into thinking that this task pool is empty.
+        my_arena_slot->tail = new_tail;
+        release_task_pool();
+    }
+    else
+        grow_task_pool( my_task_pool_size + num_tasks );
+}
+
+inline void generic_scheduler::commit_spawned_tasks( size_t new_tail ) {
+    __TBB_ASSERT ( new_tail <= my_task_pool_size, "task deque end was overwritten" );
+    ITT_NOTIFY(sync_releasing, my_arena_slot);
+    // Release fence is necessary to make sure that previously stored task pointers
+    // are visible to thieves.
+    __TBB_store_with_release( my_arena_slot->tail, new_tail );
+}
+
 template<free_task_hint h>
 void generic_scheduler::free_task( task& t ) {
-    GATHER_STATISTIC(current_active-=1);
+    GATHER_STATISTIC(--my_counters.active_tasks);
     task_prefix& p = t.prefix();
     // Verify that optimization hints are correct.
     __TBB_ASSERT( h!=small_local_task || p.origin==this, NULL );
@@ -520,33 +651,34 @@ void generic_scheduler::free_task( task& t ) {
     __TBB_ASSERT( 1L<<t.state() & (1L<<task::executing|1L<<task::allocated), NULL );
     p.state = task::freed;
     if( h==small_local_task || p.origin==this ) {
-        GATHER_STATISTIC(current_length+=1);
-        p.next = free_list;
-        free_list = &t;
+        GATHER_STATISTIC(++my_counters.free_list_length);
+        p.next = my_free_list;
+        my_free_list = &t;
     } else if( !(h&local_task) && p.origin ) {
         free_nonlocal_small_task(t);
     } else {
+        GATHER_STATISTIC(--my_counters.big_tasks);
         deallocate_task(t);
     }
 }
 
-} // namespace internal
-} // namespace tbb
-
-#include "governor.h"
-
-inline void tbb::internal::generic_scheduler::spawn( task& first, task*& next ) {
-    governor::local_scheduler()->local_spawn( first, next );
+#if __TBB_TASK_PRIORITY
+inline bool generic_scheduler::worker_outermost_level () const {
+    return !my_dispatching_task;
 }
 
-inline void tbb::internal::generic_scheduler::spawn_root_and_wait( task& first, task*& next ) {
-    governor::local_scheduler()->local_spawn_root_and_wait( first, next );
+inline void generic_scheduler::offload_task ( task& t, intptr_t p ) {
+    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
+    t.prefix().state = task::ready;
+#endif /* TBB_USE_ASSERT */
+    t.prefix().next_offloaded = my_offloaded_tasks;
+    my_offloaded_tasks = &t;
 }
+#endif /* __TBB_TASK_PRIORITY */
 
-#if __TBB_ARENA_PER_MASTER
-inline void tbb::internal::generic_scheduler::enqueue( task& task_, void* /*reserved*/ ) {
-    governor::local_scheduler()->local_enqueue( task_ );
-}
+} // namespace internal
+} // namespace tbb
 
-#endif /* __TBB_ARENA_PER_MASTER */
 #endif /* _TBB_scheduler_H */
diff --git a/src/tbb/scheduler_common.h b/src/tbb/scheduler_common.h
index 6d08ddc..d9d0e06 100644
--- a/src/tbb/scheduler_common.h
+++ b/src/tbb/scheduler_common.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -31,17 +31,32 @@
 
 #include "tbb/tbb_stddef.h"
 
-#if __SUNPRO_CC
 #include <string.h>  // for memset, memcpy, memmove
-#endif
+
+#include "tbb_statistics.h"
+
+#if TBB_USE_ASSERT > 1
+#include <stdio.h>
+#endif /* TBB_USE_ASSERT > 1 */
 
 /* Temporarily change "private" to "public" while including "tbb/task.h".
    This hack allows us to avoid publishing internal types and methods
    in the public header files just for sake of friend declarations. */
-#define private public
+#ifndef private
+    #define private public
+    #define undef_private
+#endif
+
 #include "tbb/task.h"
 #include "tbb/tbb_exception.h"
-#undef private
+
+#ifdef undef_private
+    #undef private
+#endif
+
+#if __TBB_TASK_GROUP_CONTEXT
+#include "tbb/spin_mutex.h"
+#endif /* __TBB_TASK_GROUP_CONTEXT */
 
 // This macro is an attempt to get rid of ugly ifdefs in the shared parts of the code. 
 // It drops the second argument depending on whether the controlling macro is defined. 
@@ -69,8 +84,42 @@
 namespace tbb {
 namespace internal {
 
-/** Defined in scheduler.cpp **/
-extern uintptr_t global_cancel_count;
+#if __TBB_TASK_PRIORITY
+static const intptr_t num_priority_levels = 3;
+static const intptr_t normalized_normal_priority = (num_priority_levels - 1) / 2;
+
+inline intptr_t normalize_priority ( priority_t p ) {
+    return intptr_t(p - priority_low) / priority_stride_v4;
+}
+
+static const priority_t priority_from_normalized_rep[num_priority_levels] = {
+    priority_low, priority_normal, priority_high
+};
+
+inline void assert_priority_valid ( intptr_t& p ) {
+    __TBB_ASSERT( p >= 0 && p < num_priority_levels, NULL );
+}
+
+inline intptr_t& priority ( task& t ) {
+    return t.prefix().context->my_priority;
+}
+#endif /* __TBB_TASK_PRIORITY */
+
+//! Task group state change propagation global epoch
+/** Together with generic_scheduler::my_context_state_propagation_epoch forms 
+    cross-thread signaling mechanism that allows to avoid locking at the hot path
+    of normal execution flow.
+
+    When a descendant task group context is registered or unregistered, the global 
+    and local epochs are compared. If they differ, a state change is being propagated,
+    and thus registration/deregistration routines take slower branch that may block
+    (at most one thread of the pool can be blocked at any moment). Otherwise the 
+    control path is lock-free and fast. **/
+extern uintptr_t the_context_state_propagation_epoch;
+
+//! Mutex guarding state change propagation across task groups forest.
+/** Also protects modification of related data structures. **/
+extern spin_mutex the_context_state_propagation_mutex;
 
 //! Alignment for a task object
 const size_t task_alignment = 16;
@@ -108,19 +157,46 @@ enum free_task_hint {
 };
 
 //------------------------------------------------------------------------
-// Helpers
+// Debugging support
 //------------------------------------------------------------------------
 
 #if TBB_USE_ASSERT
+
+static const uintptr_t venom = 
+#if __TBB_WORDSIZE == 8
+        0xDDEEAADDDEADBEEF;
+#else
+        0xDEADBEEF;
+#endif
+
+
+/** In contrast to poison_pointer() and assert_task_valid() poison_value() is a macro 
+    because the variable used as its argument may be undefined in release builds. **/
+#define poison_value(g) (g = venom)
+
+/** Expected to be used in assertions only, thus no empty form is defined. **/
+inline bool is_alive( uintptr_t v ) { return v != venom; }
+
 /** Logically, this method should be a member of class task.
     But we do not want to publish it, so it is here instead. */
-inline bool AssertOkay( const task& task ) {
+inline void assert_task_valid( const task& task ) {
     __TBB_ASSERT( &task!=NULL, NULL );
+    __TBB_ASSERT( !is_poisoned(&task), NULL );
     __TBB_ASSERT( (uintptr_t)&task % task_alignment == 0, "misaligned task" );
     __TBB_ASSERT( (unsigned)task.state()<=(unsigned)task::recycle, "corrupt task (invalid state)" );
-    return true;
 }
-#endif /* TBB_USE_ASSERT */
+
+#else /* !TBB_USE_ASSERT */
+
+#define poison_value(g) ((void)0)
+
+inline void assert_task_valid( const task& ) {}
+
+#endif /* !TBB_USE_ASSERT */
+
+//------------------------------------------------------------------------
+// Helpers
+//------------------------------------------------------------------------
 
 inline bool ConcurrentWaitsEnabled ( task& t ) {
     return (t.prefix().context->my_version_and_traits & task_group_context::concurrent_wait) != 0;
@@ -159,6 +235,48 @@ inline bool CancellationInfoPresent ( task& t ) {
     }
 #endif /* __TBB_TASK_GROUP_CONTEXT */
 
+//------------------------------------------------------------------------
+// arena_slot
+//------------------------------------------------------------------------
+
+struct arena_slot {
+    //! Scheduler of the thread attached to the slot
+    /** Marks the slot as busy, and is used to iterate through the schedulers belonging to this arena **/
+    generic_scheduler* my_scheduler;
+
+    // Task pool (the deque of task pointers) of the scheduler that owns this slot
+    /** Also is used to specify if the slot is empty or locked:
+         0 - empty
+        -1 - locked **/
+    task** task_pool;
+
+    //! Index of the first ready task in the deque.
+    /** Modified by thieves, and by the owner during compaction/reallocation **/
+    size_t head;
+
+    //! Padding to avoid false sharing caused by the thieves accessing this slot
+    char pad1[NFS_MaxLineSize - sizeof(size_t) - sizeof(task**) - sizeof(generic_scheduler*)];
+
+    //! Index of the element following the last ready task in the deque.
+    /** Modified by the owner thread. **/
+    size_t tail;
+
+    //! Hints provided for operations with the container of starvation-resistant tasks.
+    /** Modified by the owner thread (during these operations). **/
+    unsigned hint_for_push, hint_for_pop;
+
+#if __TBB_STATISTICS
+    //! Set of counters to accumulate internal statistics related to this arena
+    statistics_counters *my_counters;
+#endif /* __TBB_STATISTICS */
+    //! Padding to avoid false sharing caused by the thieves accessing the next slot
+    char pad2[NFS_MaxLineSize - sizeof(size_t) - 2*sizeof(unsigned)
+#if __TBB_STATISTICS
+              - sizeof(statistics_counters*)
+#endif /* __TBB_STATISTICS */
+             ];
+}; // class arena_slot
+
 } // namespace internal
 } // namespace tbb
 
diff --git a/src/tbb/scheduler_utility.h b/src/tbb/scheduler_utility.h
index 3a8b409..ff7d616 100644
--- a/src/tbb/scheduler_utility.h
+++ b/src/tbb/scheduler_utility.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -55,27 +55,6 @@ public:
     task_prefix& prefix () { return my_task->prefix(); }
 }; // class auto_empty_task
 
-
-//------------------------------------------------------------------------
-// Debugging support
-//------------------------------------------------------------------------
-
-#define __TBB_POISON_DEQUE TBB_USE_ASSERT
-
-#if __TBB_POISON_DEQUE
-    #if __TBB_x86_64 || __TBB_ipf
-        static task* const poisoned_taskptr = (task*)0xDDEEAADDDEADBEEF;
-    #else
-        static task* const poisoned_taskptr = (task*)0xDEADBEEF;
-    #endif
-
-    #define __TBB_POISON_TASK_PTR(ptr) ptr = poisoned_taskptr
-    #define __TBB_ASSERT_VALID_TASK_PTR(ptr) __TBB_ASSERT( ptr != poisoned_taskptr, "task pointer in the deque is poisoned" )
-#else /* !__TBB_POISON_DEQUE */
-    #define __TBB_POISON_TASK_PTR(ptr) ((void)0)
-    #define __TBB_ASSERT_VALID_TASK_PTR(ptr) ((void)0)
-#endif /* !__TBB_POISON_DEQUE */
-
 //------------------------------------------------------------------------
 // fast_reverse_vector
 //------------------------------------------------------------------------
@@ -110,12 +89,12 @@ public:
     void push_back ( const T& val )
     {
         if ( !m_pos ) {
-            m_segments[m_num_segments++] = m_cur_segment;
-            __TBB_ASSERT ( m_num_segments < max_segments, "Maximal capacity exceeded" );
+            if ( !m_num_segments ) m_segments[m_num_segments++] = m_cur_segment;
             m_size += m_cur_segment_size;
             m_cur_segment_size *= 2;
             m_pos = m_cur_segment_size;
-            m_cur_segment = (T*)NFS_Allocate( m_cur_segment_size * sizeof(T), 1, NULL );
+            m_segments[m_num_segments++] = m_cur_segment = (T*)NFS_Allocate( m_cur_segment_size * sizeof(T), 1, NULL );
+            __TBB_ASSERT ( m_num_segments < max_segments, "Maximal capacity exceeded" );
         }
         m_cur_segment[--m_pos] = val;
     }
@@ -128,7 +107,7 @@ public:
         memcpy( dst, m_cur_segment + m_pos, size * sizeof(T) );
         dst += size;
         size = m_cur_segment_size / 2;
-        for ( long i = (long)m_num_segments - 1; i >= 0; --i ) {
+        for ( long i = (long)m_num_segments - 2; i >= 0; --i ) {
             memcpy( dst, m_segments[i], size * sizeof(T) );
             dst += size;
             size /= 2;
@@ -145,10 +124,10 @@ protected:
     //! Insertion position in m_cur_segment
     size_t  m_pos;
 
-    //! Array of filled segments (has fixed size specified by the second template parameter)
+    //! Array of segments (has fixed size specified by the second template parameter)
     T       *m_segments[max_segments];
     
-    //! Number of filled segments (the size of m_segments)
+    //! Number of segments (the size of m_segments)
     size_t  m_num_segments;
 
     //! Number of items in the segments in m_segments
@@ -156,42 +135,6 @@ protected:
 
 }; // class fast_reverse_vector
 
-
-//------------------------------------------------------------------------
-// Statistics log
-//------------------------------------------------------------------------
-
-#if STATISTICS
-//! Class for collecting statistics
-/** There should be only one instance of this class. 
-    Results are written to a file "statistics.txt" in tab-separated format. */
-class statistics {
-public:
-    statistics() {
-        my_file = fopen("statistics.txt","w");
-        if( !my_file ) {
-            perror("fopen(\"statistics.txt\"\")");
-            exit(1);
-        }
-        fprintf(my_file,"%13s\t%13s\t%13s\t%13s\t%13s\t%13s\n", "execute", "steal", "mail", "proxy_execute", "proxy_steal", "proxy_bypass" );
-    }
-    ~statistics() {
-        fclose(my_file);
-    }
-    void record( long execute_count, long steal_count, long mail_received_count, 
-                 long proxy_execute_count, long proxy_steal_count, long proxy_bypass_count ) {
-        mutex::scoped_lock lock(my_mutex);
-        fprintf (my_file,"%13ld\t%13ld\t%13ld\t%13ld\t%13ld\t%13ld\n", execute_count, steal_count, mail_received_count, 
-                                                           proxy_execute_count, proxy_steal_count, proxy_bypass_count );
-    }
-private:
-    //! File into which statistics are written.
-    FILE* my_file;
-    //! Mutex that serializes accesses to my_file
-    mutex my_mutex;
-}; // class statistics
-#endif /* STATISTICS */
-
 } // namespace internal
 } // namespace tbb
 
diff --git a/src/tbb/semaphore.h b/src/tbb/semaphore.h
new file mode 100644
index 0000000..dc1d3e7
--- /dev/null
+++ b/src/tbb/semaphore.h
@@ -0,0 +1,132 @@
+/*
+    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.
+*/
+
+#ifndef __TBB_tbb_semaphore_H
+#define __TBB_tbb_semaphore_H
+
+#include "tbb/tbb_stddef.h"
+
+#if _WIN32||_WIN64
+#include "tbb/machine/windows_api.h"
+
+#elif __APPLE__
+#include <mach/semaphore.h>
+#include <mach/task.h>
+#include <mach/mach_init.h>
+#include <mach/error.h>
+
+#else
+#include <semaphore.h>
+#ifdef TBB_USE_DEBUG
+#include <errno.h>
+#endif
+#endif /*_WIN32||_WIN64*/
+
+namespace tbb {
+namespace internal {
+
+
+#if _WIN32||_WIN64
+typedef LONG sem_count_t;
+//! Edsger Dijkstra's counting semaphore
+class semaphore : no_copy {
+    static const int max_semaphore_cnt = MAXLONG;
+public:
+    //! ctor
+    semaphore(size_t start_cnt_ = 0) {init_semaphore(start_cnt_);}
+    //! dtor
+    ~semaphore() {CloseHandle( sem );}
+    //! wait/acquire
+    void P() {WaitForSingleObject( sem, INFINITE );}
+    //! post/release 
+    void V() {ReleaseSemaphore( sem, 1, NULL );}
+private:
+    HANDLE sem;
+    void init_semaphore(size_t start_cnt_) {sem = CreateSemaphore( NULL, LONG(start_cnt_), max_semaphore_cnt, NULL );}
+};
+#elif __APPLE__
+//! Edsger Dijkstra's counting semaphore
+class semaphore : no_copy {
+public:
+    //! ctor
+    semaphore(int start_cnt_ = 0) : sem(start_cnt_) { init_semaphore(start_cnt_); }
+    //! dtor
+    ~semaphore() {
+        kern_return_t ret = semaphore_destroy( mach_task_self(), sem );
+        __TBB_ASSERT_EX( ret==err_none, NULL );
+    }
+    //! wait/acquire
+    void P() { 
+        int ret;
+        do {
+            ret = semaphore_wait( sem );
+        } while( ret==KERN_ABORTED );
+        __TBB_ASSERT( ret==KERN_SUCCESS, "semaphore_wait() failed" );
+    }
+    //! post/release 
+    void V() { semaphore_signal( sem ); }
+private:
+    semaphore_t sem;
+    void init_semaphore(int start_cnt_) {
+        kern_return_t ret = semaphore_create( mach_task_self(), &sem, SYNC_POLICY_FIFO, start_cnt_ );
+        __TBB_ASSERT_EX( ret==err_none, "failed to create a semaphore" );
+    }
+};
+#else /* Linux/Unix */
+typedef uint32_t sem_count_t;
+//! Edsger Dijkstra's counting semaphore
+class semaphore : no_copy {
+public:
+    //! ctor
+    semaphore(int start_cnt_ = 0 ) { init_semaphore( start_cnt_ ); }
+
+    //! dtor
+    ~semaphore() {
+        int ret = sem_destroy( &sem );
+        __TBB_ASSERT_EX( !ret, NULL );
+    }
+    //! wait/acquire
+    void P() {
+        while( sem_wait( &sem )!=0 )
+            __TBB_ASSERT( errno==EINTR, NULL );
+    }
+    //! post/release 
+    void V() { sem_post( &sem ); }
+private:
+    sem_t sem;
+    void init_semaphore(int start_cnt_) {
+        int ret = sem_init( &sem, /*shared among threads*/ 0, start_cnt_ );
+        __TBB_ASSERT_EX( !ret, NULL );
+    }
+};
+#endif /* _WIN32||_WIN64 */
+
+} // namespace internal
+} // namespace tbb
+
+#endif /* __TBB_tbb_semaphore_H */
diff --git a/src/tbb/spin_mutex.cpp b/src/tbb/spin_mutex.cpp
index d5b11af..2dda139 100644
--- a/src/tbb/spin_mutex.cpp
+++ b/src/tbb/spin_mutex.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -46,7 +46,7 @@ void spin_mutex::scoped_lock::internal_release() {
     __TBB_ASSERT( !(my_unlock_value&1), "corrupted scoped_lock?" );
 
     ITT_NOTIFY(sync_releasing, my_mutex);
-    __TBB_store_with_release(my_mutex->flag, static_cast<unsigned char>(my_unlock_value));
+    __TBB_UnlockByte(my_mutex->flag, static_cast<__TBB_Byte>(my_unlock_value));
     my_mutex = NULL;
 }
 
diff --git a/src/tbb/spin_rw_mutex.cpp b/src/tbb/spin_rw_mutex.cpp
index f4f09da..506a7ed 100644
--- a/src/tbb/spin_rw_mutex.cpp
+++ b/src/tbb/spin_rw_mutex.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/task.cpp b/src/tbb/task.cpp
index f70d44f..920ce4a 100644
--- a/src/tbb/task.cpp
+++ b/src/tbb/task.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -50,7 +50,7 @@ task& allocate_root_proxy::allocate( size_t size ) {
     internal::generic_scheduler* v = governor::local_scheduler();
     __TBB_ASSERT( v, "thread did not activate a task_scheduler_init object?" );
 #if __TBB_TASK_GROUP_CONTEXT
-    task_prefix& p = v->innermost_running_task->prefix();
+    task_prefix& p = v->my_innermost_running_task->prefix();
 
     ITT_STACK_CREATE(p.context->itt_caller);
 #endif
@@ -72,46 +72,20 @@ void allocate_root_proxy::free( task& task ) {
 // Methods of allocate_root_with_context_proxy
 //------------------------------------------------------------------------
 task& allocate_root_with_context_proxy::allocate( size_t size ) const {
-    internal::generic_scheduler* v = governor::local_scheduler();
-    __TBB_ASSERT( v, "thread did not activate a task_scheduler_init object?" );
-    task_prefix& p = v->innermost_running_task->prefix();
-    task& t = v->allocate_task( size, __TBB_CONTEXT_ARG(NULL, &my_context) );
+    internal::generic_scheduler* s = governor::local_scheduler();
+    __TBB_ASSERT( s, "Scheduler auto-initialization failed?" );
+    task& t = s->allocate_task( size, __TBB_CONTEXT_ARG(NULL, &my_context) );
     // Supported usage model prohibits concurrent initial binding. Thus we do not 
     // need interlocked operations or fences to manipulate with my_context.my_kind
     if ( my_context.my_kind == task_group_context::binding_required ) {
-        __TBB_ASSERT ( my_context.my_owner, "Context without owner" );
-        __TBB_ASSERT ( !my_context.my_parent, "Parent context set before initial binding" );
-        // If we are in the outermost task dispatch loop of a master thread, then
-        // there is nothing to bind this context to, and we skip the binding part.
-        if ( v->innermost_running_task != v->dummy_task ) {
-            // Though the following assignment makes my_context accessible for 
-            // cancelation propagation, we cannot rely on the cancellation being 
-            // propagated into it without taking a global lock. Instead we always 
-            // check the state of my_context's ancestors, and use cancelation 
-            // epoch counters to minimize the depth of inspection.
-            my_context.my_parent = p.context;
-            uintptr_t local_count_snapshot = v->local_cancel_count;
-            // Prevent load of global_cancel_count from being hoisted above store
-            // to my_context.my_parent and load of local_cancel_count.
-            __TBB_full_memory_fence();
-            // The full fence guarantees that if no cancelation propagation was
-            // detected by the following condition, either my_context's parent 
-            // has correct cancelation state or my_context will receive cancelation
-            // signal if new cancelation starts after 
-            if ( local_count_snapshot != global_cancel_count ) {
-                // Another thread is propagating cancellation right now. Make sure 
-                // that my_context's parent gets the cancellation request (if one 
-                // of its ancestors is canceled) before we read it later on.
-                p.context->propagate_cancellation_from_ancestors();
-            }
-            if ( p.context->my_cancellation_requested ) {
-                // Propagate cancellation state from the parent context
-                my_context.my_cancellation_requested = 1;
-            }
-        }
-        my_context.my_kind = task_group_context::binding_completed;
+        // If we are in the outermost task dispatch loop of a master thread, then 
+        // there is nothing to bind this context to, and we skip the binding part 
+        // treating the context as isolated.
+        if ( s->my_innermost_running_task == s->my_dummy_task )
+            my_context.my_kind = task_group_context::isolated;
+        else
+            my_context.bind_to( s );
     }
-    // else the context either has already been associated with its parent or is isolated
     ITT_STACK_CREATE(my_context.itt_caller);
     return t;
 }
@@ -129,7 +103,7 @@ void allocate_root_with_context_proxy::free( task& task ) const {
 //------------------------------------------------------------------------
 task& allocate_continuation_proxy::allocate( size_t size ) const {
     task& t = *((task*)this);
-    __TBB_ASSERT( AssertOkay(t), NULL );
+    assert_task_valid(t);
     generic_scheduler* s = governor::local_scheduler();
     task* parent = t.parent();
     t.prefix().parent = NULL;
@@ -147,7 +121,7 @@ void allocate_continuation_proxy::free( task& mytask ) const {
 //------------------------------------------------------------------------
 task& allocate_child_proxy::allocate( size_t size ) const {
     task& t = *((task*)this);
-    __TBB_ASSERT( AssertOkay(t), NULL );
+    assert_task_valid(t);
     generic_scheduler* s = governor::local_scheduler();
     return s->allocate_task( size, __TBB_CONTEXT_ARG(&t, t.prefix().context) );
 }
@@ -216,9 +190,11 @@ using namespace tbb::internal;
 
 void task::internal_set_ref_count( int count ) {
     __TBB_ASSERT( count>=0, "count must not be negative" );
-    __TBB_ASSERT( !(prefix().extra_state & es_ref_count_active), "ref_count race detected" );
-    ITT_NOTIFY(sync_releasing, &prefix().ref_count);
-    prefix().ref_count = count;
+    task_prefix &p = prefix();
+    __TBB_ASSERT(p.ref_count==1 && p.state==allocated && self().parent()==this
+        || !(p.extra_state & es_ref_count_active), "ref_count race detected");
+    ITT_NOTIFY(sync_releasing, &p.ref_count);
+    p.ref_count = count;
 }
 
 internal::reference_count task::internal_decrement_ref_count() {
@@ -232,9 +208,9 @@ internal::reference_count task::internal_decrement_ref_count() {
 
 task& task::self() {
     generic_scheduler *v = governor::local_scheduler();
-    __TBB_ASSERT( v->assert_okay(), NULL );
-    __TBB_ASSERT( v->innermost_running_task, NULL );
-    return *v->innermost_running_task;
+    v->assert_task_pool_valid();
+    __TBB_ASSERT( v->my_innermost_running_task, NULL );
+    return *v->my_innermost_running_task;
 }
 
 bool task::is_owned_by_current_thread() const {
@@ -242,7 +218,10 @@ bool task::is_owned_by_current_thread() const {
 }
 
 void interface5::internal::task_base::destroy( task& victim ) {
-    __TBB_ASSERT( victim.prefix().ref_count== (ConcurrentWaitsEnabled(victim) ? 1 : 0), "Task being destroyed must not have children" );
+    // 1 may be a guard reference for wait_for_all, which was not reset because 
+    // of concurrent_wait mode or because prepared root task was not actually used
+    // for spawning tasks (as in structured_task_group).
+    __TBB_ASSERT( (intptr_t)victim.prefix().ref_count <= 1, "Task being destroyed must not have children" );
     __TBB_ASSERT( victim.state()==task::allocated, "illegal state for victim task" );
     task* parent = victim.parent();
     victim.~task();
@@ -271,5 +250,22 @@ void task::spawn_and_wait_for_all( task_list& list ) {
 void task::note_affinity( affinity_id ) {
 }
 
+#if __TBB_TASK_GROUP_CONTEXT
+void task::change_group ( task_group_context& ctx ) {
+    prefix().context = &ctx;
+    if ( ctx.my_kind == task_group_context::binding_required ) {
+        internal::generic_scheduler* s = governor::local_scheduler();
+        // If we are in the outermost task dispatch loop of a master thread, then 
+        // there is nothing to bind this context to, and we skip the binding part 
+        // treating the context as isolated.
+        if ( s->my_innermost_running_task == s->my_dummy_task )
+            ctx.my_kind = task_group_context::isolated;
+        else
+            ctx.bind_to( s );
+    }
+    ITT_STACK_CREATE(ctx.itt_caller);
+}
+#endif /* __TBB_TASK_GROUP_CONTEXT */
+
 } // namespace tbb
 
diff --git a/src/tbb/task_group_context.cpp b/src/tbb/task_group_context.cpp
index 6a971e9..3b2f3d7 100644
--- a/src/tbb/task_group_context.cpp
+++ b/src/tbb/task_group_context.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -33,10 +33,6 @@
 #include "tbb/cache_aligned_allocator.h"
 #include "itt_notify.h"
 
-#if __SUNPRO_CC
-#include <string.h>
-#endif
-
 namespace tbb {
 
 #if __TBB_TASK_GROUP_CONTEXT
@@ -57,6 +53,10 @@ inline char* duplicate_string ( const char* src ) {
     return dst;
 }
 
+captured_exception::~captured_exception () throw() {
+    clear();
+}
+
 void captured_exception::set ( const char* name, const char* info ) throw() {
     my_exception_name = duplicate_string( name );
     my_exception_info = duplicate_string( info );
@@ -149,29 +149,33 @@ void tbb_exception_ptr::destroy () throw() {
 //------------------------------------------------------------------------
 
 task_group_context::~task_group_context () {
-    if ( my_kind != isolated ) {
-        generic_scheduler *s = (generic_scheduler*)my_owner;
-        if ( governor::is_set(s) ) {
+    if ( my_kind == binding_completed ) {
+        if ( governor::is_set(my_owner) ) {
             // Local update of the context list 
-            uintptr_t local_count_snapshot = s->local_cancel_count;
-            s->local_ctx_list_update = 1;
-            __TBB_full_memory_fence();
-            if ( s->nonlocal_ctx_list_update ) {
-                spin_mutex::scoped_lock lock(s->context_list_mutex);
+            uintptr_t local_count_snapshot = my_owner->my_context_state_propagation_epoch;
+            my_owner->my_local_ctx_list_update = 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 ) {
+                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;
-                s->local_ctx_list_update = 0;
+                my_owner->my_local_ctx_list_update = 0;
             }
             else {
                 my_node.my_prev->my_next = my_node.my_next;
                 my_node.my_next->my_prev = my_node.my_prev;
-                __TBB_store_with_release( s->local_ctx_list_update, 0 );
-                if ( local_count_snapshot != global_cancel_count ) {
+                // 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 );
+                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 
                     // when this destructor finishes. We'll be able to acquire the lock 
                     // below only after the other thread finishes with us.
-                    spin_mutex::scoped_lock lock(s->context_list_mutex);
+                    spin_mutex::scoped_lock lock(my_owner->my_context_list_mutex);
                 }
             }
         }
@@ -182,22 +186,20 @@ task_group_context::~task_group_context () {
                 my_node.my_next->my_prev = my_node.my_prev;
             }
             else {
-                __TBB_FetchAndAddW(&s->nonlocal_ctx_list_update, 1);
-                spin_wait_until_eq( s->local_ctx_list_update, 0u );
-                s->context_list_mutex.lock();
+                __TBB_FetchAndAddW(&my_owner->my_nonlocal_ctx_list_update, 1);
+                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;
-                s->context_list_mutex.unlock();
-                __TBB_FetchAndAddW(&s->nonlocal_ctx_list_update, -1);
+                my_owner->my_context_list_mutex.unlock();
+                __TBB_FetchAndAddW(&my_owner->my_nonlocal_ctx_list_update, -1);
             }
         }
     }
-#if TBB_USE_DEBUG
-    my_version_and_traits = 0xDeadBeef;
-#endif /* TBB_USE_DEBUG */
+    poison_value(my_version_and_traits);
     if ( my_exception )
         my_exception->destroy();
-    if (itt_caller != ITT_CALLER_NULL) ITT_STACK(caller_destroy, itt_caller);
+    ITT_STACK(itt_caller != ITT_CALLER_NULL, caller_destroy, itt_caller);
 }
 
 void task_group_context::init () {
@@ -208,33 +210,186 @@ void task_group_context::init () {
     my_parent = NULL;
     my_cancellation_requested = 0;
     my_exception = NULL;
+    my_owner = NULL;
+    my_state = 0;
     itt_caller = ITT_CALLER_NULL;
-    if ( my_kind == bound ) {
-        generic_scheduler *s = governor::local_scheduler();
-        my_owner = s;
-        __TBB_ASSERT ( my_owner, "Thread has not activated a task_scheduler_init object?" );
-        // Backward links are used by this thread only, thus no fences are necessary
-        my_node.my_prev = &s->context_list_head;
-        s->context_list_head.my_next->my_prev = &my_node;
-        my_node.my_next = s->context_list_head.my_next;
-        // Thread local list of contexts allows concurrent traversal by another 
-        // thread while propagating cancellation request. Release fence ensures 
-        // visibility of my_node's members in the traversing thread.
-        __TBB_store_with_release(s->context_list_head.my_next, &my_node);
+#if __TBB_TASK_PRIORITY
+    my_priority = normalized_normal_priority;
+#endif /* __TBB_TASK_PRIORITY */
+}
+
+void task_group_context::register_with ( generic_scheduler *local_sched ) {
+    __TBB_ASSERT( local_sched, NULL );
+    my_owner = 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;
+    // 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 ) {
+        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;
+        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 
+        // 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.
+        __TBB_store_with_release(local_sched->my_context_list_head.my_next, &my_node);
+    }
+}
+
+void task_group_context::bind_to ( generic_scheduler *local_sched ) {
+    __TBB_ASSERT ( my_kind == binding_required, "Already bound or isolated?" );
+    __TBB_ASSERT ( !my_parent, "Parent is set before initial binding" );
+    my_parent = local_sched->my_innermost_running_task->prefix().context;
+
+    // Condition below prevents unnecessary thrashing parent context's cache line
+    if ( !(my_parent->my_state & may_have_children) )
+        my_parent->my_state |= may_have_children;
+    if ( my_parent->my_parent ) {
+        // Even if this context were made accessible for state change propagation
+        // (by placing __TBB_store_with_release(s->my_context_list_head.my_next, &my_node)
+        // above), it still could be missed if state propagation from a grand-ancestor
+        // was underway concurrently with binding.
+        // Speculative propagation from the parent together with epoch counters 
+        // detecting possibility of such a race allow to avoid taking locks when
+        // there is no contention.
+
+        // Acquire fence is necessary to prevent reordering subsequent speculative
+        // loads of parent state data out of the scope where epoch counters comparison
+        // can reliably validate it.
+        uintptr_t local_count_snapshot = __TBB_load_with_acquire( my_parent->my_owner->my_context_state_propagation_epoch );
+        // Speculative propagation of parent's state. The speculation will be 
+        // validated by the epoch counters check further on.
+        my_cancellation_requested = my_parent->my_cancellation_requested;
+#if __TBB_TASK_PRIORITY
+        my_priority = my_parent->my_priority;
+#endif /* __TBB_TASK_PRIORITY */
+        register_with( local_sched ); // Issues full fence
+
+        // If no state propagation was detected by the following condition, the above 
+        // full fence guarantees that the parent had correct state during speculative
+        // propagation before the fence. Otherwise the propagation from parent is
+        // repeated under the lock.
+        if ( local_count_snapshot != the_context_state_propagation_epoch ) {
+            // Another thread may be propagating state change right now. So resort to lock.
+            spin_mutex::scoped_lock lock(the_context_state_propagation_mutex);
+            my_cancellation_requested = my_parent->my_cancellation_requested;
+#if __TBB_TASK_PRIORITY
+            my_priority = my_parent->my_priority;
+#endif /* __TBB_TASK_PRIORITY */
+        }
+    }
+    else {
+        register_with( local_sched ); // Issues full fence
+        // As we do not have grand-ancestors, concurrent state propagation (if any)
+        // may originate only from the parent context, and thus it is safe to directly
+        // copy the state from it.
+        my_cancellation_requested = my_parent->my_cancellation_requested;
+#if __TBB_TASK_PRIORITY
+        my_priority = my_parent->my_priority;
+#endif /* __TBB_TASK_PRIORITY */
+    }
+    my_kind = binding_completed;
+}
+
+#if __TBB_TASK_GROUP_CONTEXT
+template <typename T>
+void task_group_context::propagate_state_from_ancestors ( T task_group_context::*mptr_state, T new_state ) {
+    task_group_context *ancestor = my_parent;
+    while ( ancestor && ancestor->*mptr_state != new_state )
+        ancestor = ancestor->my_parent;
+    if ( ancestor ) {
+        task_group_context *ctx = this;
+        do {
+            ctx->*mptr_state = new_state;
+            ctx = ctx->my_parent;
+        } while ( ctx != ancestor );
+    }
+}
+
+template <typename T>
+void generic_scheduler::propagate_task_group_state ( T task_group_context::*mptr_state, T new_state ) {
+    spin_mutex::scoped_lock lock(my_context_list_mutex);
+    // Acquire fence is necessary to ensure that the subsequent node->my_next load 
+    // returned the correct value in case it was just inserted in another thread.
+    // The fence also ensures visibility of the correct my_parent value.
+    context_list_node_t *node = __TBB_load_with_acquire(my_context_list_head.my_next);
+    while ( node != &my_context_list_head ) {
+        task_group_context &ctx = __TBB_get_object_ref(task_group_context, my_node, node);
+        if ( ctx.*mptr_state != new_state )
+            ctx.propagate_state_from_ancestors( mptr_state, new_state );
+        node = node->my_next;
+        __TBB_ASSERT( is_alive(ctx.my_version_and_traits), "Local context list contains destroyed object" );
     }
+    // Sync up local propagation epoch with the global one. Release fence prevents 
+    // reordering of possible store to *mptr_state after the sync point.
+    __TBB_store_with_release(my_context_state_propagation_epoch, the_context_state_propagation_epoch);
 }
 
+template <typename T>
+bool market::propagate_task_group_state ( T task_group_context::*mptr_state, task_group_context& src, T new_state ) {
+    if ( !(src.my_state & task_group_context::may_have_children) )
+        return true;
+    // The whole propagation algorithm is under the lock in order to ensure correctness 
+    // in case of concurrent state changes at the different levels of the context tree.
+    // See the note 3 at the bottom of scheduler.cpp
+    spin_mutex::scoped_lock lock(the_context_state_propagation_mutex);
+    if ( src.*mptr_state != new_state )
+        // Another thread has concurrently changed the state. Back off.
+        return false;
+    src.*mptr_state = new_state;
+    // Advance global state propagation epoch
+    __TBB_FetchAndAddWrelease(&the_context_state_propagation_epoch, 1);
+    // Propagate to all workers and masters and sync up their local epochs with the global one
+    unsigned num_workers = my_num_workers;
+    for ( unsigned i = 0; i < num_workers; ++i ) {
+        generic_scheduler *s = my_workers[i];
+        // If the worker is only about to be registered, skip it.
+        if ( s )
+            s->propagate_task_group_state( mptr_state, new_state );
+    }
+    // Propagate to all master threads (under my_arenas_list_mutex lock)
+    ForEachArena(a) {
+        arena_slot &slot = a.my_slots[0];
+        generic_scheduler *s = slot.my_scheduler;
+        // If the master is under construction, skip it. Otherwise make sure that it does not 
+        // leave its arena and its scheduler get destroyed while we accessing its data.
+        if ( s && __TBB_CompareAndSwapW(&slot.my_scheduler, (intptr_t)LockedMaster, (intptr_t)s) == (intptr_t)s ) {
+            __TBB_ASSERT( slot.my_scheduler == LockedMaster, NULL );
+            // The whole propagation sequence is locked, thus no contention is expected
+            __TBB_ASSERT( s != LockedMaster, NULL );
+            s->propagate_task_group_state( mptr_state, new_state );
+            __TBB_store_with_release( slot.my_scheduler, s );
+        }
+    } EndForEach();
+    return true;
+}
+
+template <typename T>
+bool arena::propagate_task_group_state ( T task_group_context::*mptr_state, task_group_context& src, T new_state ) {
+    return my_market->propagate_task_group_state( mptr_state, src, new_state );
+}
+#endif /* __TBB_TASK_GROUP_CONTEXT */
+
 bool task_group_context::cancel_group_execution () {
     __TBB_ASSERT ( my_cancellation_requested == 0 || my_cancellation_requested == 1, "Invalid cancellation state");
     if ( my_cancellation_requested || __TBB_CompareAndSwapW(&my_cancellation_requested, 1, 0) ) {
         // This task group has already been canceled
         return false;
     }
-#if __TBB_ARENA_PER_MASTER
-    governor::local_scheduler()->my_arena->propagate_cancellation( *this );
-#else /* !__TBB_ARENA_PER_MASTER */
-    governor::local_scheduler()->propagate_cancellation( *this );
-#endif /* !__TBB_ARENA_PER_MASTER */
+    governor::local_scheduler()->my_arena->propagate_task_group_state( &task_group_context::my_cancellation_requested, *this, (uintptr_t)1 );
     return true;
 }
 
@@ -254,20 +409,6 @@ void task_group_context::reset () {
     my_cancellation_requested = 0;
 }
 
-void task_group_context::propagate_cancellation_from_ancestors () {
-    task_group_context *ancestor = my_parent;
-    while ( ancestor && !ancestor->my_cancellation_requested )
-        ancestor = ancestor->my_parent;
-    if ( ancestor ) {
-        // One of my ancestor groups was canceled. Cancel all its descendants in my heritage line.
-        task_group_context *ctx = this;
-        do {
-            ctx->my_cancellation_requested = 1;
-            ctx = ctx->my_parent;
-        } while ( ctx != ancestor );
-    }
-}
-
 void task_group_context::register_pending_exception () {
     if ( my_cancellation_requested )
         return;
@@ -278,6 +419,30 @@ void task_group_context::register_pending_exception () {
 #endif /* TBB_USE_EXCEPTIONS */
 }
 
+#if __TBB_TASK_PRIORITY
+void task_group_context::set_priority ( priority_t prio ) {
+    __TBB_ASSERT( prio == priority_low || prio == priority_normal || prio == priority_high, "Invalid priority level value" );
+    intptr_t p = normalize_priority(prio);
+    if ( my_priority == p )
+        return;
+    my_priority = p;
+    internal::generic_scheduler* s = governor::local_scheduler_if_initialized();
+    if ( !s || !s->my_arena->propagate_task_group_state(&task_group_context::my_priority, *this, p) )
+        return;
+    // Updating arena priority here does not eliminate necessity of checking each
+    // task priority and updating arena priority if necessary before the task execution.
+    // These checks will be necessary because:
+    // a) set_priority() may be invoked before any tasks from this task group are spawned;
+    // b) all spawned tasks from this task group are retrieved from the task pools.
+    // These cases create a time window when arena priority may be lowered.
+    s->my_market->update_arena_priority( *s->my_arena, p );
+}
+
+priority_t task_group_context::priority () const {
+    return static_cast<priority_t>(priority_from_normalized_rep[my_priority]);
+}
+#endif /* __TBB_TASK_PRIORITY */
+
 #endif /* __TBB_TASK_GROUP_CONTEXT */
 
 } // namespace tbb
diff --git a/src/tbb/task_stream.h b/src/tbb/task_stream.h
index 8ba4865..a26bc2d 100644
--- a/src/tbb/task_stream.h
+++ b/src/tbb/task_stream.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -30,9 +30,6 @@
 #define _TBB_task_stream_H
 
 #include "tbb/tbb_stddef.h"
-
-#if __TBB_ARENA_PER_MASTER
-
 #include <deque>
 #include <climits>
 #include "tbb/atomic.h" // for __TBB_Atomic*
@@ -165,6 +162,4 @@ public:
 } // namespace internal
 } // namespace tbb
 
-#endif /* __TBB_ARENA_PER_MASTER */
-
 #endif /* _TBB_task_stream_H */
diff --git a/src/tbb/tbb_assert_impl.h b/src/tbb/tbb_assert_impl.h
index 52cd780..3ef322f 100644
--- a/src/tbb/tbb_assert_impl.h
+++ b/src/tbb/tbb_assert_impl.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/tbb_main.cpp b/src/tbb/tbb_main.cpp
index bace385..3985f24 100644
--- a/src/tbb/tbb_main.cpp
+++ b/src/tbb/tbb_main.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -45,21 +45,14 @@ static const char _pad[NFS_MaxLineSize - sizeof(int)] = {};
 //------------------------------------------------------------------------
 // governor data
 basic_tls<generic_scheduler*> governor::theTLS;
-#if !__TBB_ARENA_PER_MASTER
-arena* governor::theArena;
-mutex  governor::theArenaMutex;
-unsigned governor::NumWorkers;
-#endif /* !__TBB_ARENA_PER_MASTER */
 unsigned governor::DefaultNumberOfThreads;
 rml::tbb_factory governor::theRMLServerFactory;
 bool governor::UsePrivateRML;
 
-#if __TBB_ARENA_PER_MASTER
 //------------------------------------------------------------------------
 // market data
 market* market::theMarket;
 market::global_market_mutex_type market::theMarketMutex;
-#endif /* __TBB_ARENA_PER_MASTER */
 
 //------------------------------------------------------------------------
 // One time initialization data
@@ -77,7 +70,7 @@ bool __TBB_InitOnce::InitializationDone;
     static bool ITT_InitializationDone;
 #endif
 
-#if !(_WIN32||_WIN64) || __TBB_TASK_CPP_DIRECTLY_INCLUDED
+#if !(_WIN32||_WIN64) || !__TBB_DYNAMIC_LOAD_ENABLED
     static __TBB_InitOnce __TBB_InitOnceHiddenInstance;
 #endif
 
@@ -148,22 +141,14 @@ void initialize_cache_aligned_allocator();
 void Scheduler_OneTimeInitialization ( bool itt_present );
 
 #if DO_ITT_NOTIFY
-//! Performs initialization of tools support.
-/** Defined in itt_notify.cpp. Must be called in a protected do-once manner.
-    \return true if notification hooks were installed, false otherwise. **/
-bool InitializeITT();
 
 /** Thread-unsafe lazy one-time initialization of tools interop.
     Used by both dummy handlers and general TBB one-time initialization routine. **/
 void ITT_DoUnsafeOneTimeInitialization () {
     if ( !ITT_InitializationDone ) {
-        ITT_Present = InitializeITT();
+        ITT_Present = (__TBB_load_ittnotify()!=0);
         ITT_InitializationDone = true;
-#if __TBB_ARENA_PER_MASTER
         ITT_SYNC_CREATE(&market::theMarketMutex, SyncType_GlobalLock, SyncObj_SchedulerInitialization);
-#else /* !__TBB_ARENA_PER_MASTER */
-        ITT_SYNC_CREATE(&governor::theArenaMutex, SyncType_GlobalLock, SyncObj_SchedulerInitialization);
-#endif /* !__TBB_ARENA_PER_MASTER */
     }
 }
 
@@ -185,21 +170,24 @@ void DoOneTimeInitializations() {
         __TBB_InitOnce::add_ref();
         if( GetBoolEnvironmentVariable("TBB_VERSION") )
             PrintVersion();
-        bool have_itt = false;
+        bool itt_present = false;
 #if DO_ITT_NOTIFY
         ITT_DoUnsafeOneTimeInitialization();
-        have_itt = ITT_Present;
+        itt_present = ITT_Present;
 #endif /* DO_ITT_NOTIFY */
         initialize_cache_aligned_allocator();
+        Scheduler_OneTimeInitialization( itt_present );
+        // Force processor groups support detection
+        governor::default_num_threads();
+        // Dump version data
         governor::print_version_info();
-        PrintExtraVersionInfo( "SCHEDULER", have_itt ? "default" : "Intel" );
-        Scheduler_OneTimeInitialization( have_itt );
+        PrintExtraVersionInfo( "Tools support", itt_present ? "enabled" : "disabled" );
         __TBB_InitOnce::InitializationDone = true;
     }
     __TBB_InitOnce::unlock();
 }
 
-#if (_WIN32||_WIN64) && !__TBB_TASK_CPP_DIRECTLY_INCLUDED
+#if (_WIN32||_WIN64) && __TBB_DYNAMIC_LOAD_ENABLED
 //! Windows "DllMain" that handles startup and shutdown of dynamic library.
 extern "C" bool WINAPI DllMain( HANDLE /*hinstDLL*/, DWORD reason, LPVOID /*lpvReserved*/ ) {
     switch( reason ) {
@@ -221,7 +209,7 @@ extern "C" bool WINAPI DllMain( HANDLE /*hinstDLL*/, DWORD reason, LPVOID /*lpvR
     }
     return true;
 }
-#endif /* (_WIN32||_WIN64) && !__TBB_TASK_CPP_DIRECTLY_INCLUDED */
+#endif /* (_WIN32||_WIN64) && __TBB_DYNAMIC_LOAD_ENABLED */
 
 void itt_store_pointer_with_release_v3( void* dst, void* src ) {
     ITT_NOTIFY(sync_releasing, dst);
@@ -234,6 +222,19 @@ void* itt_load_pointer_with_acquire_v3( const void* src ) {
     return result;
 }
     
+#if DO_ITT_NOTIFY
+void call_itt_notify_v5(int t, void *ptr) {
+    switch (t) {
+    case 0: ITT_NOTIFY(sync_prepare, ptr); break;
+    case 1: ITT_NOTIFY(sync_cancel, ptr); break;
+    case 2: ITT_NOTIFY(sync_acquired, ptr); break;
+    case 3: ITT_NOTIFY(sync_releasing, ptr); break;
+    }
+}
+#else
+void call_itt_notify_v5(int /*t*/, void* /*ptr*/) {}
+#endif
+
 void* itt_load_pointer_v3( const void* src ) {
     void* result = *static_cast<void*const*>(src);
     return result;
diff --git a/src/tbb/tbb_main.h b/src/tbb/tbb_main.h
index b207b34..ae165ef 100644
--- a/src/tbb/tbb_main.h
+++ b/src/tbb/tbb_main.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -63,7 +63,7 @@ class __TBB_InitOnce {
     // TBB itself. This imposes a requirement that the global initialization lock 
     // has to support valid static initialization, and does not issue any tool
     // notifications in any build mode.
-    typedef unsigned char mutex_type;
+    typedef __TBB_Byte mutex_type;
 
     // Global initialization lock
     static mutex_type InitializationLock;
@@ -71,7 +71,7 @@ class __TBB_InitOnce {
 public:
     static void lock()   { __TBB_LockByte( InitializationLock ); }
 
-    static void unlock() { __TBB_store_with_release( InitializationLock, 0 ); }
+    static void unlock() { __TBB_UnlockByte( InitializationLock, 0 ); }
 
     static bool initialization_done() { return __TBB_load_with_acquire(InitializationDone); }
 
diff --git a/src/tbb/tbb_misc.cpp b/src/tbb/tbb_misc.cpp
index 12c7bc0..b06a05c 100644
--- a/src/tbb/tbb_misc.cpp
+++ b/src/tbb/tbb_misc.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -37,6 +37,10 @@
 #include <cstdio>
 #include <cstdlib>
 
+#if _WIN32||_WIN64
+#include "tbb/machine/windows_api.h"
+#endif
+
 #if !TBB_USE_EXCEPTIONS && _MSC_VER
     // Suppress "C++ exception handler used, but unwind semantics are not enabled" warning in STL headers
     #pragma warning (push)
@@ -166,7 +170,7 @@ void PrintVersion() {
 
 void PrintExtraVersionInfo( const char* category, const char* description ) {
     if( PrintVersionFlag ) 
-        fprintf(stderr, "%s: %s\t%s\n", "TBB", category, description );
+        fprintf(stderr, "TBB: %s\t%s\n", category, description );
 }
 
 void PrintRMLVersionInfo( void* arg, const char* server_info ) {
@@ -209,7 +213,7 @@ done:;
 extern "C" void __TBB_machine_store8_slow( volatile void *ptr, int64_t value ) {
     for( tbb::internal::atomic_backoff b;; b.pause() ) {
         int64_t tmp = *(int64_t*)ptr;
-        if( __TBB_machine_cmpswp8(ptr,value,tmp)==tmp ) 
+        if( __TBB_CompareAndSwap8(ptr,value,tmp)==tmp ) 
             break;
     }
 }
@@ -218,6 +222,9 @@ extern "C" void __TBB_machine_store8_slow( volatile void *ptr, int64_t value ) {
 #endif /* !__TBB_RML_STATIC */
 
 #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.
+ */
 extern "C" intptr_t __TBB_machine_lockbyte( volatile unsigned char& flag ) {
     if ( !__TBB_TryLockByte(flag) ) {
         tbb::internal::atomic_backoff b;
diff --git a/src/tbb/tbb_misc.h b/src/tbb/tbb_misc.h
index 34478de..403c86e 100644
--- a/src/tbb/tbb_misc.h
+++ b/src/tbb/tbb_misc.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -31,25 +31,13 @@
 
 #include "tbb/tbb_stddef.h"
 #include "tbb/tbb_machine.h"
+#include "tbb/atomic.h"     // For atomic_xxx definitions
 
-#if _WIN32||_WIN64
-#if _XBOX
-    #define NONET
-    #define NOD3D
-    #include <xtl.h>
-#else
-#include <windows.h>
+#if __linux__ || __FreeBSD__
+#include <sys/param.h>  // __FreeBSD_version
+#if __FreeBSD_version >= 701000
+#include <sys/cpuset.h>
 #endif
-#elif defined(__linux__)
-#include <sys/sysinfo.h>
-#elif defined(__sun)
-#include <sys/sysinfo.h>
-#include <unistd.h>
-#elif defined(__APPLE__)
-#include <sys/types.h>
-#include <sys/sysctl.h>
-#elif defined(__FreeBSD__)
-#include <unistd.h>
 #endif
 
 namespace tbb {
@@ -65,99 +53,34 @@ const size_t MByte = 1<<20;
     const size_t ThreadStackSize = 4*MByte;
 #endif
 
-#if defined(__TBB_DetectNumberOfWorkers)
-
-static inline int DetectNumberOfWorkers() {
-    return __TBB_DetectNumberOfWorkers(); 
-}
 
-#else /* !__TBB_DetectNumberOfWorkers */
+#ifndef __TBB_HardwareConcurrency
 
-#if _WIN32||_WIN64
+//! Returns maximal parallelism level supported by the current OS configuration.
+int AvailableHwConcurrency();
 
-#if _XBOX
-
-// This port uses only 2 hardware threads for TBB on XBOX 360. 
-// Others are left to sound etc.
-// Change the following mask to allow TBB use more HW threads.
-static const int XBOX360_HARDWARE_THREAD_MASK = 0x0C;
-
-static inline int DetectNumberOfWorkers() 
-{
- char a[XBOX360_HARDWARE_THREAD_MASK];  //compile time assert - at least one bit should be set always
- a[0]=0;
- 
- return ((XBOX360_HARDWARE_THREAD_MASK >> 0) & 1) +
-        ((XBOX360_HARDWARE_THREAD_MASK >> 1) & 1) +
-        ((XBOX360_HARDWARE_THREAD_MASK >> 2) & 1) +
-        ((XBOX360_HARDWARE_THREAD_MASK >> 3) & 1) +
-        ((XBOX360_HARDWARE_THREAD_MASK >> 4) & 1) +
-        ((XBOX360_HARDWARE_THREAD_MASK >> 5) & 1) + 1;  //+1 - tbb is creating DetectNumberOfWorkers()-1 threads in arena 
-}
+#else
 
-static inline int GetHardwareThreadIndex(int workerThreadIndex)
-{
- workerThreadIndex %= DetectNumberOfWorkers()-1;
- int m = XBOX360_HARDWARE_THREAD_MASK;
- int index = 0;
- int skipcount = workerThreadIndex;
- while (true)
-  {
-   if ((m & 1)!=0) 
-    {
-     if (skipcount==0) break;
-     skipcount--;
-    }
-   m >>= 1;
-   index++;
-  }
- return index; 
+inline int AvailableHwConcurrency() {
+    int n = __TBB_HardwareConcurrency();
+    return n > 0 ? n : 1; // Fail safety strap
 }
+#endif /* __TBB_HardwareConcurrency */
 
-#else /* !_XBOX */
 
-static inline int DetectNumberOfWorkers() {
-    SYSTEM_INFO si;
-    GetSystemInfo(&si);
-    return static_cast<int>(si.dwNumberOfProcessors);
-}
+#if _WIN32||_WIN64
 
-#endif /* !_XBOX */
-
-#elif defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) || defined(__sun) 
-static inline int DetectNumberOfWorkers() {
-    long number_of_workers;
-
-#if (defined(__FreeBSD__) || defined(__sun)) && defined(_SC_NPROCESSORS_ONLN) 
-    number_of_workers = sysconf(_SC_NPROCESSORS_ONLN);
-
-// In theory, sysconf should work everywhere.
-// But in practice, system-specific methods are more reliable
-#elif defined(__linux__)
-    number_of_workers = get_nprocs();
-#elif defined(__APPLE__)
-    int name[2] = {CTL_HW, HW_AVAILCPU};
-    int ncpu;
-    size_t size = sizeof(ncpu);
-    sysctl( name, 2, &ncpu, &size, NULL, 0 );
-    number_of_workers = ncpu;
-#else
-#error DetectNumberOfWorkers: Method to detect the number of online CPUs is unknown
-#endif
+//! Returns number of processor groups in the current OS configuration.
+/** AvailableHwConcurrency must be called at least once before calling this method. **/
+int NumberOfProcessorGroups();
 
-// Fail-safety strap
-    if ( number_of_workers < 1 ) {
-        number_of_workers = 1;
-    }
-    
-    return number_of_workers;
-}
+//! Retrieves index of processor group containing processor with the given index
+int FindProcessorGroupIndex ( int processorIndex );
 
-#else
-#error DetectNumberOfWorkers: OS detection method is unknown
-#endif /* os kind */
+//! Affinitizes the thread to the specified processor group
+void MoveThreadIntoProcessorGroup( void* hThread, int groupIndex );
 
-#endif /* !__TBB_DetectNumberOfWorkers */
+#endif /* _WIN32||_WIN64 */
 
 //! Throws std::runtime_error with what() returning error_code description prefixed with aux_info
 void handle_win_error( int error_code );
@@ -165,10 +88,10 @@ void handle_win_error( int error_code );
 //! True if environment variable with given name is set and not 0; otherwise false.
 bool GetBoolEnvironmentVariable( const char * name );
 
-//! Print TBB version information on stderr
+//! Prints TBB version information on stderr
 void PrintVersion();
 
-//! Print extra TBB version information on stderr
+//! Prints arbitrary extra TBB version information on stderr
 void PrintExtraVersionInfo( const char* category, const char* description );
 
 //! A callback routine to print RML version information on stderr
@@ -227,6 +150,104 @@ public:
     }
 };
 
+//------------------------------------------------------------------------
+// Atomic extensions
+//------------------------------------------------------------------------
+
+//! 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> 
+T1 atomic_update ( tbb::atomic<T1>& dst, const T2& newValue, Pred compare ) {
+    T1 oldValue = dst;
+    while ( compare(oldValue, newValue) ) {
+        if ( dst.compare_and_swap(newValue, oldValue) == oldValue )
+            break;
+        oldValue = dst;
+    }
+    return oldValue;
+}
+
+//! One-time initialization states
+enum do_once_state {
+    do_once_uninitialized = 0,  ///< No execution attempts have been undertaken yet
+    do_once_pending,            ///< A thread is executing associated do-once routine
+    do_once_executed,           ///< Do-once routine has been executed
+    initialization_complete = do_once_executed  ///< Convenience alias
+};
+
+//! 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 
+           the initialization attempt was repeated the next time.
+    /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 
+    // 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
+    // the point where it can recognize the changed conditions.
+    while ( state != do_once_executed ) {
+        if( state == do_once_uninitialized ) {
+            if( state.compare_and_swap( do_once_pending, do_once_uninitialized ) == do_once_uninitialized ) {
+                run_initializer( initializer, state );
+                break;
+            }
+        }
+        spin_wait_while_eq( state, do_once_pending );
+    }
+}
+
+// Run the initializer which can not fail
+inline void run_initializer( void (*f)(), atomic<do_once_state>& state ) {
+    f();
+    state = do_once_executed;
+}
+
+// Run the initializer which can require repeated call
+inline void run_initializer( bool (*f)(), atomic<do_once_state>& state ) {
+    state = f() ? do_once_executed : do_once_uninitialized;
+}
+
+#ifdef __TBB_HardwareConcurrency
+    class affinity_helper {
+    public:
+        void protect_affinity_mask() {}
+    };
+#elif __linux__ || __FreeBSD_version >= 701000
+  #if __linux__
+    typedef cpu_set_t basic_mask_t;
+  #elif __FreeBSD_version >= 701000
+    typedef cpuset_t basic_mask_t;
+  #else
+    #error affinity_helper is not implemented in this OS
+  #endif
+    class affinity_helper {
+        basic_mask_t* threadMask;
+        int is_changed;
+    public:
+        affinity_helper() : threadMask(NULL), is_changed(0) {}
+        ~affinity_helper();
+        void protect_affinity_mask();
+    };
+#elif defined(_SC_NPROCESSORS_ONLN)
+    class affinity_helper {
+    public:
+        void protect_affinity_mask() {}
+    };
+#elif _WIN32||_WIN64
+    class affinity_helper {
+    public:
+        void protect_affinity_mask() {}
+    };
+#else
+    #error affinity_helper is not implemented in this OS
+#endif /* __TBB_HardwareConcurrency */
+
 } // namespace internal
 } // namespace tbb
 
diff --git a/src/tbb/tbb_misc_ex.cpp b/src/tbb/tbb_misc_ex.cpp
new file mode 100644
index 0000000..0c463a0
--- /dev/null
+++ b/src/tbb/tbb_misc_ex.cpp
@@ -0,0 +1,336 @@
+/*
+    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.
+*/
+
+// Source file for miscellaneous entities that are infrequently referenced by 
+// an executing program, and implementation of which requires dynamic linking.
+
+#include "tbb_misc.h"
+
+#if !defined(__TBB_HardwareConcurrency)
+
+#include "dynamic_link.h"
+#include <stdio.h>
+#include <limits.h>
+
+#if _WIN32||_WIN64
+#include "tbb/machine/windows_api.h"
+#elif __linux__
+#include <sys/sysinfo.h>
+#include <string.h>
+#include <sched.h>
+#elif __sun
+#include <sys/sysinfo.h>
+#include <unistd.h>
+#elif __FreeBSD__
+#include <unistd.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/param.h>  // Required by <sys/cpuset.h>
+#include <sys/cpuset.h>
+#elif _AIX
+#include <unistd.h>
+#endif
+
+namespace tbb {
+namespace internal {
+
+#if __linux__ || __FreeBSD_version >= 701000
+
+static void set_affinity_mask( size_t maskSize, const basic_mask_t* threadMask ) {
+#if __linux__
+    if( sched_setaffinity( 0, maskSize, threadMask ) )
+#else /* FreeBSD */
+    if( cpuset_setaffinity( CPU_LEVEL_WHICH, CPU_WHICH_TID, -1, maskSize, threadMask ) )
+#endif
+        runtime_warning( "setaffinity syscall failed" );
+}
+
+static void get_affinity_mask( size_t maskSize, basic_mask_t* threadMask ) {
+#if __linux__
+    if( sched_getaffinity( 0, maskSize, threadMask ) )
+#else /* FreeBSD */
+    if( cpuset_getaffinity( CPU_LEVEL_WHICH, CPU_WHICH_TID, -1, maskSize, threadMask ) )
+#endif
+        runtime_warning( "getaffinity syscall failed" );
+}
+
+static basic_mask_t* process_mask;
+static int num_masks;
+struct process_mask_cleanup_helper {
+    ~process_mask_cleanup_helper() {
+        if( process_mask ) {
+            delete [] process_mask;
+        }
+     }
+};
+static process_mask_cleanup_helper process_mask_cleanup;
+
+#define curMaskSize sizeof(basic_mask_t) * num_masks
+affinity_helper::~affinity_helper() {
+    if( threadMask ) {
+        if( is_changed ) {
+            set_affinity_mask( curMaskSize, threadMask );
+        }
+        delete [] threadMask;
+    }
+}
+void affinity_helper::protect_affinity_mask() {
+    if( threadMask == NULL && num_masks && process_mask ) {
+        threadMask = new basic_mask_t [num_masks];
+        memset( threadMask, 0, curMaskSize );
+        get_affinity_mask( curMaskSize, threadMask );
+        is_changed = memcmp( process_mask, threadMask, curMaskSize );
+        if( is_changed ) {
+            set_affinity_mask( curMaskSize, process_mask );
+        }
+    }
+}
+#undef curMaskSize
+
+static atomic<do_once_state> hardware_concurrency_info;
+
+static int theNumProcs;
+
+static void initialize_hardware_concurrency_info () {
+    int err;
+    int availableProcs = 0;
+    int numMasks = 1;
+#if __linux__
+    int maxProcs = get_nprocs();
+    int pid = getpid();
+    cpu_set_t *processMask;
+    const size_t BasicMaskSize =  sizeof(cpu_set_t);
+    for (;;) {
+        int curMaskSize = BasicMaskSize * numMasks;
+        processMask = new cpu_set_t[numMasks];
+        memset( processMask, 0, curMaskSize );
+        err = sched_getaffinity( pid, curMaskSize, processMask );
+        if ( !err || errno != EINVAL || curMaskSize * CHAR_BIT >= 256 * 1024 )
+            break;
+        delete[] processMask;
+        numMasks <<= 1;
+    }
+#else /* FreeBSD >= 7.1 */
+    int maxProcs = sysconf(_SC_NPROCESSORS_ONLN);
+    cpuset_t *processMask;
+    const size_t BasicMaskSize = sizeof(cpuset_t);
+    for (;;) {
+        int curMaskSize = BasicMaskSize * numMasks;
+        processMask = new cpuset_t[numMasks];
+        memset( processMask, 0, curMaskSize );
+        // CPU_LEVEL_WHICH - anonymous (current) mask, CPU_LEVEL_CPUSET - assigned mask
+#if __TBB_MAIN_THREAD_AFFINITY_BROKEN
+        err = cpuset_getaffinity( CPU_LEVEL_WHICH, CPU_WHICH_TID, -1, curMaskSize, processMask );
+#else
+        err = cpuset_getaffinity( CPU_LEVEL_WHICH, CPU_WHICH_PID, -1, curMaskSize, processMask );
+#endif
+        if ( !err || errno != ERANGE || curMaskSize * CHAR_BIT >= 16 * 1024 )
+            break;
+        delete[] processMask;
+        numMasks <<= 1;
+    }
+#endif /* FreeBSD >= 7.1 */
+    if ( !err ) {
+        for ( int m = 0; availableProcs < maxProcs && m < numMasks; ++m ) {
+            for ( size_t i = 0; (availableProcs < maxProcs) && (i < BasicMaskSize * CHAR_BIT); ++i ) {
+                if ( CPU_ISSET( i, processMask + m ) )
+                    ++availableProcs;
+            }
+        }
+        num_masks = numMasks;
+        process_mask = processMask;
+    }
+    else {
+        availableProcs = maxProcs;
+        delete[] processMask;
+    }
+    theNumProcs = availableProcs > 0 ? availableProcs : 1; // Fail safety strap
+}
+
+int AvailableHwConcurrency() {
+    atomic_do_once( &initialize_hardware_concurrency_info, hardware_concurrency_info );
+    return theNumProcs;
+}
+
+#elif defined(_SC_NPROCESSORS_ONLN)
+
+int AvailableHwConcurrency() {
+    int n = sysconf(_SC_NPROCESSORS_ONLN);
+    return n > 0 ? n : 1;
+}
+
+#elif _WIN32||_WIN64
+
+static atomic<do_once_state> hardware_concurrency_info;
+
+static const WORD TBB_ALL_PROCESSOR_GROUPS = 0xffff;
+
+// Statically allocate an array for processor group information.
+// Windows 7 supports maximum 4 groups, but let's look ahead a little.
+static const WORD MaxProcessorGroups = 64;
+
+struct ProcessorGroupInfo {
+    DWORD_PTR   mask;                   ///< Affinity mask covering the whole group
+    int         numProcs;               ///< Number of processors in the group
+    int         numProcsRunningTotal;   ///< Subtotal of processors in this and preceding groups
+
+    //! Total number of processor groups in the system
+    static int NumGroups; 
+
+    //! Index of the group with a slot reserved for the first master thread
+    /** In the context of multiple processor groups support current implementation
+        defines "the first master thread" as the first thread to invoke
+        AvailableHwConcurrency(). 
+
+        TODO:   Implement a dynamic scheme remapping workers depending on the pending
+                master threads affinity. **/
+    static int HoleIndex;
+};
+
+int ProcessorGroupInfo::NumGroups = 1;
+int ProcessorGroupInfo::HoleIndex = 0;
+
+
+ProcessorGroupInfo theProcessorGroups[MaxProcessorGroups];
+
+struct TBB_GROUP_AFFINITY {
+    DWORD_PTR Mask;
+    WORD   Group;
+    WORD   Reserved[3];
+};
+
+static DWORD (WINAPI *TBB_GetMaximumProcessorCount)( WORD groupIndex ) = NULL;
+static WORD (WINAPI *TBB_GetMaximumProcessorGroupCount)() = NULL;
+static BOOL (WINAPI *TBB_SetThreadGroupAffinity)( HANDLE hThread, 
+                        const TBB_GROUP_AFFINITY* newAff, TBB_GROUP_AFFINITY *prevAff );
+static BOOL (WINAPI *TBB_GetThreadGroupAffinity)( HANDLE hThread, TBB_GROUP_AFFINITY* );
+
+static const dynamic_link_descriptor ProcessorGroupsApiLinkTable[] = {
+      DLD(GetMaximumProcessorCount, TBB_GetMaximumProcessorCount)
+    , DLD(GetMaximumProcessorGroupCount, TBB_GetMaximumProcessorGroupCount)
+    , DLD(SetThreadGroupAffinity, TBB_SetThreadGroupAffinity)
+    , DLD(GetThreadGroupAffinity, TBB_GetThreadGroupAffinity)
+};
+
+static void initialize_hardware_concurrency_info () {
+    dynamic_link( GetModuleHandleA( "Kernel32.dll" ), ProcessorGroupsApiLinkTable,
+                  sizeof(ProcessorGroupsApiLinkTable)/sizeof(dynamic_link_descriptor) );
+    SYSTEM_INFO si;
+    GetSystemInfo(&si);
+    DWORD_PTR pam, sam, m = 1;
+    GetProcessAffinityMask( GetCurrentProcess(), &pam, &sam );
+    int nproc = 0;
+    for ( size_t i = 0; i < sizeof(DWORD_PTR) * CHAR_BIT; ++i, m <<= 1 ) {
+        if ( pam & m )
+            ++nproc;
+    }
+    __TBB_ASSERT( nproc <= (int)si.dwNumberOfProcessors, NULL );
+    if ( nproc == (int)si.dwNumberOfProcessors && TBB_GetMaximumProcessorCount ) {
+        // The process does not have restricting affinity mask and multiple processor groups are possible
+        ProcessorGroupInfo::NumGroups = (int)TBB_GetMaximumProcessorGroupCount();
+        __TBB_ASSERT( ProcessorGroupInfo::NumGroups <= MaxProcessorGroups, NULL );
+        // Fail safety bootstrap. Release versions will limit available concurrency
+        // level, while debug ones would assert.
+        if ( ProcessorGroupInfo::NumGroups > MaxProcessorGroups )
+            ProcessorGroupInfo::NumGroups = MaxProcessorGroups;
+        if ( ProcessorGroupInfo::NumGroups > 1 ) {
+            TBB_GROUP_AFFINITY ga;
+            if ( TBB_GetThreadGroupAffinity( GetCurrentThread(), &ga ) )
+                ProcessorGroupInfo::HoleIndex = ga.Group;
+            int nprocs = 0;
+            for ( WORD i = 0; i < ProcessorGroupInfo::NumGroups; ++i ) {
+                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.numProcsRunningTotal = nprocs += pgi.numProcs;
+            }
+            __TBB_ASSERT( nprocs == (int)TBB_GetMaximumProcessorCount( TBB_ALL_PROCESSOR_GROUPS ), NULL );
+            return;
+        }
+    }
+    // Either the process has restricting affinity mask or only a single processor groups is present
+    theProcessorGroups[0].numProcs = theProcessorGroups[0].numProcsRunningTotal = nproc;
+}
+
+int AvailableHwConcurrency() {
+    atomic_do_once( &initialize_hardware_concurrency_info, hardware_concurrency_info );
+    return theProcessorGroups[ProcessorGroupInfo::NumGroups - 1].numProcsRunningTotal;
+}
+
+int NumberOfProcessorGroups() {
+    __TBB_ASSERT( hardware_concurrency_info == initialization_complete, "NumberOfProcessorGroups is used before AvailableHwConcurrency" );
+    return ProcessorGroupInfo::NumGroups;
+}
+
+// Offset for the slot reserved for the first master thread
+#define HoleAdjusted(procIdx, grpIdx) (procIdx + (holeIdx <= grpIdx))
+
+int FindProcessorGroupIndex ( int procIdx ) {
+    // In case of oversubscription spread extra workers in a round robin manner
+    int holeIdx;
+    const int numProcs = theProcessorGroups[ProcessorGroupInfo::NumGroups - 1].numProcsRunningTotal;
+    if ( procIdx >= numProcs - 1 ) {
+        holeIdx = INT_MAX;
+        procIdx = (procIdx - numProcs + 1) % numProcs;
+    }
+    else
+        holeIdx = ProcessorGroupInfo::HoleIndex;
+    __TBB_ASSERT( hardware_concurrency_info == initialization_complete, "FindProcessorGroupIndex is used before AvailableHwConcurrency" );
+    int i = procIdx / theProcessorGroups[0].numProcs;
+    if ( theProcessorGroups[i].numProcsRunningTotal > HoleAdjusted(procIdx, i) ) {
+        while ( theProcessorGroups[i].numProcsRunningTotal - theProcessorGroups[i].numProcs > HoleAdjusted(procIdx, i) ) {
+            __TBB_ASSERT( i > 0, NULL );
+            --i;
+        }
+    }
+    else {
+        do {
+            ++i;
+        } while ( theProcessorGroups[i].numProcsRunningTotal <= HoleAdjusted(procIdx, i) );
+    }
+    __TBB_ASSERT( i < ProcessorGroupInfo::NumGroups, NULL );
+    return i;
+}
+
+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_SetThreadGroupAffinity( hThread, &ga, NULL );
+}
+
+#else
+    #error AvailableHwConcurrency is not implemented in this OS 
+#endif /* OS */
+
+} // namespace internal
+} // namespace tbb
+
+#endif /* !__TBB_HardwareConcurrency */
diff --git a/src/tbb/tbb_resource.rc b/src/tbb/tbb_resource.rc
index b20cb53..48bcf4e 100644
--- a/src/tbb/tbb_resource.rc
+++ b/src/tbb/tbb_resource.rc
@@ -1,4 +1,4 @@
-// Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+// Copyright 2005-2011 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-2010 Intel Corporation.  All Rights Reserved.\0"
+            VALUE "LegalCopyright", "Copyright 2005-2011 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
new file mode 100644
index 0000000..3a1fcd1
--- /dev/null
+++ b/src/tbb/tbb_statistics.cpp
@@ -0,0 +1,192 @@
+/*
+    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.
+*/
+
+#include "tbb_statistics.h"
+
+#if __TBB_STATISTICS
+
+#include <climits>
+#include <cstdarg>
+#if __TBB_STATISTICS_STDOUT
+#include <cstdio>
+#endif
+
+#include "tbb/spin_mutex.h"
+
+namespace tbb {
+namespace internal {
+
+//! Human readable titles of statistics groups defined by statistics_groups enum.
+/** The order of this vector elements must correspond to the statistics_counters 
+    structure layout. **/
+const char* StatGroupTitles[] = { 
+    "task objects", "tasks executed", "stealing attempts", "task proxies", "arena", "market", "priority ops", "prio ops details"
+};
+
+//! Human readable titles of statistics elements defined by statistics_counters struct.
+/** The order of this vector elements must correspond to the statistics_counters 
+    structure layout (with NULLs interspersed to separate groups). **/
+const char* StatFieldTitles[] = {
+    /*task objects*/        "active", "freed", "big", NULL,
+    /*tasks executed*/      "total", "w/o spawn", NULL,
+    /*stealing attempts*/   "succeeded", "failed", "conflicts", "backoffs", NULL,
+    /*task proxies*/        "mailed", "revoked", "stolen", "bypassed", "ignored", NULL,
+    /*arena*/               "switches", "roundtrips", "avg.conc", "avg.allot", NULL,
+    /*market*/              "roundtrips", NULL,
+    /*priority ops*/        "ar.switch", "mkt.switch", "ar.reset", "ref.fixup", "avg.ar.pr", "avg.mkt.pr", NULL,
+    /*prio ops details*/    "winnows", "reloads", "orphaned", "winnowed", "reloaded", NULL
+};
+
+//! Class for logging statistics
+/** There should be only one instance of this class. 
+    Results are written to a file "statistics.txt" in tab-separated format. */
+class statistics_logger {
+public:
+    statistics_logger () {
+        __TBB_ASSERT( sg_end - 1 == 1 << (sizeof(StatGroupTitles)/sizeof(*StatGroupTitles) - 1), NULL );
+
+        my_file = fopen("statistics.txt","w");
+        if( !my_file )
+            perror("fopen(\"statistics.txt\"\")");
+        // Initialize groups dump layout info
+        group_start_field[0] = 0;
+        for ( size_t i = 0, j = 0; i < NumGroups; ++i, ++j ) {
+            __TBB_ASSERT( StatFieldTitles[j], "Empty group occurred" );
+            while ( StatFieldTitles[j] )
+                ++j;
+            group_start_field[i + 1] = j - i; // -i accounts for preceding NULL separators
+        }
+        __TBB_ASSERT( group_start_field[NumGroups] == statistics_counters::size(),
+                      "Wrong number of elements in StatFieldTitles" );
+        dump( "%-*s", IDColumnWidth, "");
+        process_groups( &statistics_logger::print_group_title );
+        dump( "%-*s", IDColumnWidth, "ID");
+        process_groups( &statistics_logger::print_field_titles );
+    }
+
+    ~statistics_logger () { fclose(my_file); }
+
+    void record( const statistics_counters& c, size_t id ) {
+        spin_mutex::scoped_lock lock(my_mutex);
+        counters_to_dump = &c;
+#if __TBB_STATISTICS_TOTALS_ONLY
+        if ( id == arena_counters_total ) {
+            dump( "%-*s", IDColumnWidth, "Tot" );
+            process_groups( &statistics_logger::print_field_values );
+        }
+#else /* !__TBB_STATISTICS_TOTALS_ONLY */
+        const char* idString = NULL;
+        switch ( id ) {
+        case 0:
+            idString = "M"; break;
+        case workers_counters_total:
+            idString = "Wtot"; break;
+        case arena_counters_total:
+            idString = "Tot"; break;
+        default:
+            dump( "W%-*u", IDColumnWidth - 1, id );
+        }
+        if ( idString )
+            dump( "%-*s", IDColumnWidth, idString );
+        process_groups( &statistics_logger::print_field_values );
+#endif /* !__TBB_STATISTICS_TOTALS_ONLY */
+    }
+private:
+    static const size_t IDColumnWidth = 5;
+    static const size_t StatisticsColumnWidth = 10;
+    static const size_t NumGroups = sizeof(StatGroupTitles)/sizeof(char*);
+
+    //! File into which statistics are written.
+    FILE* my_file;
+    //! Mutex that serializes accesses to my_file
+    spin_mutex my_mutex;
+    //! Indices of the each group's first field in statistics_counters struct.
+    /** An extra element is used to track the total number of statistics fields. **/
+    size_t group_start_field[NumGroups + 1];
+    //! Currently processed set of counters.
+    const statistics_counters* counters_to_dump;
+
+    static const size_t NumFields = sizeof(StatFieldTitles)/sizeof(*StatFieldTitles) - NumGroups;
+    bool averages_fields[NumFields];
+
+    void dump ( char const* fmt, ... ) {
+        va_list args;
+        va_start( args, fmt );
+        if ( my_file )
+            vfprintf( my_file, fmt, args );
+        va_start( args, fmt );
+#if __TBB_STATISTICS_STDOUT
+        vprintf( fmt, args );
+#endif
+    }
+
+    void process_groups ( void (statistics_logger::*per_group_action)(size_t group_idx) ) {
+        for ( size_t i = 0, group_flag = 1; i < NumGroups; ++i, group_flag <<= 1 ) {
+            __TBB_ASSERT( group_flag < sg_end, "StatGroupTitles contents is incompatible with statistics_groups definition" );
+            if ( __TBB_ActiveStatisticsGroups & group_flag )
+                (this->*per_group_action)( i );
+        }
+        dump( "\n" );
+    }
+
+    void print_group_title ( size_t group_idx ) {
+        dump( "%-*s", (group_start_field[group_idx + 1] - group_start_field[group_idx]) * (StatisticsColumnWidth + 1),
+                        StatGroupTitles[group_idx] );
+    }
+
+    void print_field_titles ( size_t group_idx ) {
+        // +group_idx accounts for preceding NULL separators
+        size_t i = group_start_field[group_idx] + group_idx;
+        while ( StatFieldTitles[i] ) {
+            averages_fields[i - group_idx] = strncmp(StatFieldTitles[i], "avg.", 4) == 0;
+            dump( "%-*s ", StatisticsColumnWidth, StatFieldTitles[i++] );
+        }
+    }
+
+    void print_field_values ( size_t group_idx ) {
+        size_t begin = group_start_field[group_idx],
+               end = group_start_field[group_idx + 1];
+        for ( size_t i = begin; i < end; ++i ) {
+            if ( averages_fields[i] )
+                dump( "%-*.2f ", StatisticsColumnWidth, (double)counters_to_dump->field(i)/counters_to_dump->tasks_executed );
+            else
+                dump( "%-*ld ", StatisticsColumnWidth, counters_to_dump->field(i) );
+        }
+    }
+}; // class statistics_logger
+
+static statistics_logger the_statistics;
+
+void dump_statistics ( const statistics_counters& c, size_t id ) {
+    the_statistics.record(c, id);
+}
+
+} // namespace internal
+} // namespace tbb
+
+#endif /* __TBB_STATISTICS */
diff --git a/src/tbb/tbb_statistics.h b/src/tbb/tbb_statistics.h
new file mode 100644
index 0000000..2ea9f82
--- /dev/null
+++ b/src/tbb/tbb_statistics.h
@@ -0,0 +1,248 @@
+/*
+    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.
+*/
+
+#ifndef _TBB_tbb_statistics_H
+#define _TBB_tbb_statistics_H
+
+/**
+    This file defines parameters of the internal statistics collected by the TBB
+    library (currently by the task scheduler only).
+    
+    Statistics is accumulated separately in each thread and is dumped when 
+    the scheduler instance associated with the given  thread is destroyed.
+    For apps with multiple master threads or with the same master repeatedly
+    initializing and then deinitializing task scheduler this results in TBB
+    workers statistics getting inseparably mixed.
+    
+    Therefore statistics is accumulated in arena slots, and should be dumped
+    when arena is destroyed. This separates statistics collected for each
+    scheduler activity region in each master thread.
+
+    With the current RML implementation (TBB 2.2, 3.0) to avoid complete loss of 
+    statistics data during app shutdown (because of lazy workers deinitialization 
+    logic) set __TBB_STATISTICS_EARLY_DUMP macro to write the statistics at the 
+    moment a master thread deinitializes its scheduler. This may happen a little 
+    earlier than the moment of arena destruction resulting in the following undesired
+    (though usually tolerable) effects:
+    - a few events related to unsuccessful stealing or thread pool activity may be lost,
+    - statistics may be substantially incomplete in case of FIFO tasks used in 
+      the FAF mode.
+
+    Macro __TBB_STATISTICS_STDOUT and global variable __TBB_ActiveStatisticsGroups
+    defined below can be used to configure the statistics output.
+
+    To add new counter:
+    1) Insert it into the appropriate group range in statistics_counters;
+    2) Insert the corresponding field title into StatFieldTitles (preserving 
+       relative order of the fields).
+
+    To add new counters group:
+    1) Insert new group bit flag into statistics_groups;
+    2) Insert the new group title into StatGroupTitles (preserving 
+       relative order of the groups).
+    3) Add counter belonging to the new group as described above
+**/
+
+#include "tbb/tbb_stddef.h"
+
+#ifndef __TBB_STATISTICS
+#define __TBB_STATISTICS 0
+#endif /* __TBB_STATISTICS */
+
+#if __TBB_STATISTICS
+
+#include <string.h>  // for memset
+
+//! Dump counters into stdout as well.
+/** By default statistics counters are written to the file "statistics.txt" only. **/
+#define __TBB_STATISTICS_STDOUT 1
+
+//! Dump only totals for all threads in the given arena
+/** By default statistics counters for each arena slot are dumped separately, as
+    well as the subtotal for workers. **/
+#define __TBB_STATISTICS_TOTALS_ONLY 1
+
+//! Dump statistics for an arena when its master completes
+/** By default (when this macro is not set) the statistics is sent to output when
+    arena object is destroyed. But with the current lazy workers termination
+    logic default behavior may result in loosing all statistics output. **/
+#define __TBB_STATISTICS_EARLY_DUMP 1
+
+#define GATHER_STATISTIC(x) (x)
+
+namespace tbb {
+namespace internal {
+
+//! Groups of statistics counters.
+/** The order of enumerators must be the same as the order of the corresponding
+    field groups in the statistics_counters structure. **/
+enum statistics_groups {
+    sg_task_allocation = 0x01,
+    sg_task_execution = 0x02,
+    sg_stealing = 0x04,
+    sg_affinity = 0x08,
+    sg_arena = 0x10,
+    sg_market = 0x20,
+    sg_prio = 0x40,
+    sg_prio_ex = 0x80,
+    // List end marker. Insert new groups only before it.
+    sg_end
+};
+
+//! Groups of counters to output
+const uintptr_t __TBB_ActiveStatisticsGroups = sg_task_execution | sg_stealing | sg_arena | sg_market;
+
+//! A set of various statistics counters that are updated by the library on per thread basis.
+/** All the fields must be of the same type (statistics_counters::counter_type).
+    This is necessary to allow reinterpreting this structure as an array. **/
+struct statistics_counters {
+    typedef long counter_type;
+
+    // Group: sg_task_allocation
+    // Counters in this group can have negative values as the tasks migrate across 
+    // threads while the associated counters are updated in the current thread only
+    // to avoid data races
+    
+    //! Number of tasks allocated and not yet destroyed
+    counter_type active_tasks;
+    //! Number of task corpses stored for future reuse
+    counter_type free_list_length;
+    //! Number of big tasks allocated during the run
+    /** To find total number of tasks malloc'd, compute (big_tasks+my_small_task_count) */
+    counter_type big_tasks;
+    
+    // Group: sg_task_execution
+
+    //! Number of tasks executed
+    counter_type tasks_executed;
+    //! Number of elided spawns
+    counter_type spawns_bypassed;
+    
+    // Group: sg_stealing
+
+    //! Number of tasks successfully stolen
+    counter_type steals_committed;
+    //! Number of failed stealing attempts
+    counter_type steals_failed;
+    //! Number of failed attempts to lock victim's task pool
+    counter_type thieves_conflicts;
+    //! Number of times thief backed off because of the collision with the owner
+    counter_type thief_backoffs;
+
+    // Group: sg_affinity
+
+    //! Number of tasks received from mailbox
+    counter_type mails_received;
+    //! Number of affinitized tasks executed by the owner
+    /** Goes as "revoked" in statistics printout. **/
+    counter_type proxies_executed;
+    //! Number of affinitized tasks intercepted by thieves 
+    counter_type proxies_stolen;
+    //! Number of proxy bypasses by thieves during stealing
+    counter_type proxies_bypassed;
+    //! Number of affinitized tasks executed by the owner via scheduler bypass mechanism
+    counter_type affinity_ignored;
+
+    // Group: sg_arena
+
+    //! Number of times the state of arena switched between "full" and "empty"
+    counter_type gate_switches;
+    //! Number of times workers left an arena and returned into the market
+    counter_type arena_roundtrips;
+    // !Average concurrency level of this arena
+    counter_type avg_arena_concurrency;
+    //! Average assigned priority
+    counter_type avg_assigned_workers;
+
+    // Group: sg_market
+
+    //! Number of times workers left the market and returned into RML
+    counter_type market_roundtrips;
+
+    // Group; sg_prio
+
+    //! Number of arena priority switches
+    counter_type arena_prio_switches;
+    //! Number of market priority switches
+    counter_type market_prio_switches;
+    //! Number of arena priority switches
+    counter_type arena_prio_resets;
+    //! Number of reference priority source fixups to avoid deadlock
+    counter_type prio_ref_fixups;
+    //! Average arena priority
+    counter_type avg_arena_prio;
+    //! Average market priority
+    counter_type avg_market_prio;
+
+    // Group; sg_prio_ex
+
+    //! Number of times local task pools were winnowed
+    counter_type prio_winnowings;
+    //! Number of times secondary task pools were searched for top priority tasks
+    counter_type prio_reloads;
+    //! Number of times secondary task pools were abandoned by quitting workers
+    counter_type prio_orphanings;
+    //! Number of tasks offloaded into secondary task pools
+    counter_type prio_tasks_offloaded;
+    //! Number of tasks reloaded from secondary task pools
+    counter_type prio_tasks_reloaded;
+
+    // Constructor and helpers
+
+    statistics_counters() { reset(); }
+
+    void reset () { memset( this, 0, sizeof(statistics_counters) ); }
+
+    counter_type& field ( size_t index ) { return reinterpret_cast<counter_type*>(this)[index]; }
+
+    const counter_type& field ( size_t index ) const { return reinterpret_cast<const counter_type*>(this)[index]; }
+
+    static size_t size () { return sizeof(statistics_counters) / sizeof(counter_type); }
+
+    const statistics_counters& operator += ( const statistics_counters& rhs ) {
+        for ( size_t i = 0; i < size(); ++i )
+            field(i) += rhs.field(i);
+        return *this;
+    }
+}; // statistics_counters
+
+static const size_t workers_counters_total = (size_t)-1;
+static const size_t arena_counters_total = (size_t)-2;
+
+void dump_statistics ( const statistics_counters& c, size_t id );
+
+} // namespace internal
+} // namespace tbb
+
+#else /* !__TBB_STATISTICS */
+
+#define GATHER_STATISTIC(x) ((void)0)
+
+#endif /* !__TBB_STATISTICS */
+
+#endif /* _TBB_tbb_statistics_H */
diff --git a/src/tbb/tbb_thread.cpp b/src/tbb/tbb_thread.cpp
index 40cb56f..b94dd38 100644
--- a/src/tbb/tbb_thread.cpp
+++ b/src/tbb/tbb_thread.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -27,13 +27,13 @@
 */
 
 #if _WIN32||_WIN64
-#include <process.h>        /* Need _beginthreadex from there */
+#include <process.h>        // _beginthreadex()
 #endif
-#include "tbb_misc.h"       // handle_win_error, ThreadStackSize
+#include "tbb_misc.h"       // handle_win_error(), ThreadStackSize
 #include "tbb/tbb_stddef.h"
 #include "tbb/tbb_thread.h"
 #include "tbb/tbb_allocator.h"
-#include "tbb/task_scheduler_init.h" /* Need task_scheduler_init::default_num_threads() */
+#include "governor.h"       // default_num_threads()
 
 namespace tbb {
 namespace internal {
@@ -118,7 +118,7 @@ void tbb_thread_v3::internal_start( __TBB_NATIVE_THREAD_ROUTINE_PTR(start_routin
 }
 
 unsigned tbb_thread_v3::hardware_concurrency() {
-    return task_scheduler_init::default_num_threads();
+    return governor::default_num_threads();
 }
 
 tbb_thread_v3::id thread_get_id_v3() {
diff --git a/src/tbb/tbb_version.h b/src/tbb/tbb_version.h
index efb9b75..852b2b1 100644
--- a/src/tbb/tbb_version.h
+++ b/src/tbb/tbb_version.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -79,6 +79,11 @@
 #else
     #error Unexpected value for TBB_USE_ASSERT
 #endif
+#ifndef __TBB_CPF_BUILD
+    #define __TBB_VERSION_TBB_PREVIEW_BINARY
+#else
+    #define __TBB_VERSION_TBB_PREVIEW_BINARY "TBB: TBB_PREVIEW_BINARY\t1" ENDL
+#endif
 #ifndef DO_ITT_NOTIFY
     #define __TBB_VERSION_DO_NOTIFY "TBB: DO_ITT_NOTIFY\tundefined" ENDL
 #elif DO_ITT_NOTIFY==1
@@ -89,7 +94,7 @@
     #error Unexpected value for DO_ITT_NOTIFY
 #endif
 
-#define TBB_VERSION_STRINGS __TBB_VERSION_NUMBER __TBB_INTERFACE_VERSION_NUMBER __TBB_VERSION_DATETIME __TBB_VERSION_STRINGS __TBB_VERSION_USE_DEBUG __TBB_VERSION_USE_ASSERT __TBB_VERSION_DO_NOTIFY
+#define TBB_VERSION_STRINGS __TBB_VERSION_NUMBER __TBB_INTERFACE_VERSION_NUMBER __TBB_VERSION_DATETIME __TBB_VERSION_STRINGS __TBB_VERSION_USE_DEBUG __TBB_VERSION_USE_ASSERT __TBB_VERSION_TBB_PREVIEW_BINARY __TBB_VERSION_DO_NOTIFY
 
 // numbers
 #ifndef __TBB_VERSION_YMD
diff --git a/src/tbb/tls.h b/src/tbb/tls.h
index 7f508a3..5bc678a 100644
--- a/src/tbb/tls.h
+++ b/src/tbb/tls.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -32,13 +32,7 @@
 #if USE_PTHREAD
 #include <pthread.h>
 #else /* assume USE_WINTHREAD */
-#if defined(_XBOX)
-    #define NONET
-    #define NOD3D
-    #include <xtl.h>
-#else
-#include <windows.h>
-#endif
+#include "tbb/machine/windows_api.h"
 #endif
 
 namespace tbb {
diff --git a/src/tbb/tools_api/disable_warnings.h b/src/tbb/tools_api/disable_warnings.h
index 28100e1..869ae87 100644
--- a/src/tbb/tools_api/disable_warnings.h
+++ b/src/tbb/tools_api/disable_warnings.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 f037807..7287907 100644
--- a/src/tbb/tools_api/internal/ittnotify.h
+++ b/src/tbb/tools_api/internal/ittnotify.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 254f7d3..6ec8efd 100644
--- a/src/tbb/tools_api/ittnotify.h
+++ b/src/tbb/tools_api/ittnotify.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/tools_api/ittnotify_config.h b/src/tbb/tools_api/ittnotify_config.h
index f02cc47..ec06355 100644
--- a/src/tbb/tools_api/ittnotify_config.h
+++ b/src/tbb/tools_api/ittnotify_config.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/tools_api/ittnotify_static.c b/src/tbb/tools_api/ittnotify_static.c
index 85a0a6e..71765b3 100644
--- a/src/tbb/tools_api/ittnotify_static.c
+++ b/src/tbb/tools_api/ittnotify_static.c
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/tools_api/ittnotify_static.h b/src/tbb/tools_api/ittnotify_static.h
index 109674f..d7c10f2 100644
--- a/src/tbb/tools_api/ittnotify_static.h
+++ b/src/tbb/tools_api/ittnotify_static.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/tools_api/ittnotify_types.h b/src/tbb/tools_api/ittnotify_types.h
index ec0d696..f971cbc 100644
--- a/src/tbb/tools_api/ittnotify_types.h
+++ b/src/tbb/tools_api/ittnotify_types.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/tools_api/legacy/ittnotify.h b/src/tbb/tools_api/legacy/ittnotify.h
index dff5bbc..b8808cd 100644
--- a/src/tbb/tools_api/legacy/ittnotify.h
+++ b/src/tbb/tools_api/legacy/ittnotify.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/tools_api/prototype/ittnotify.h b/src/tbb/tools_api/prototype/ittnotify.h
index 89fb5cf..e7db4fb 100644
--- a/src/tbb/tools_api/prototype/ittnotify.h
+++ b/src/tbb/tools_api/prototype/ittnotify.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 8a8ead2..365e010 100644
--- a/src/tbb/win32-tbb-export.def
+++ b/src/tbb/win32-tbb-export.def
@@ -1,4 +1,4 @@
-; Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+; Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 ;
 ; This file is part of Threading Building Blocks.
 ;
@@ -24,274 +24,8 @@
 ; invalidate any other reasons why the executable file might be covered by
 ; the GNU General Public License.
 
-#include "tbb/tbb_config.h"
-
 EXPORTS
 
-; Assembly-language support that is called directly by clients
-;__TBB_machine_cmpswp1
-;__TBB_machine_cmpswp2
-;__TBB_machine_cmpswp4
-__TBB_machine_cmpswp8
-;__TBB_machine_fetchadd1
-;__TBB_machine_fetchadd2
-;__TBB_machine_fetchadd4
-__TBB_machine_fetchadd8
-;__TBB_machine_fetchstore1
-;__TBB_machine_fetchstore2
-;__TBB_machine_fetchstore4
-__TBB_machine_fetchstore8
-__TBB_machine_store8
-__TBB_machine_load8
-__TBB_machine_trylockbyte
-
-; cache_aligned_allocator.cpp
-?NFS_Allocate at internal@tbb@@YAPAXIIPAX at Z
-?NFS_GetLineSize at internal@tbb@@YAIXZ
-?NFS_Free at internal@tbb@@YAXPAX at Z
-?allocate_via_handler_v3 at internal@tbb@@YAPAXI at Z
-?deallocate_via_handler_v3 at internal@tbb@@YAXPAX at Z
-?is_malloc_used_v3 at internal@tbb@@YA_NXZ
-
-; task.cpp v3
-?allocate at allocate_additional_child_of_proxy@internal at tbb@@QBEAAVtask at 3@I at Z
-?allocate at allocate_child_proxy@internal at tbb@@QBEAAVtask at 3@I at Z
-?allocate at allocate_continuation_proxy@internal at tbb@@QBEAAVtask at 3@I at Z
-?allocate at allocate_root_proxy@internal at tbb@@SAAAVtask at 3@I at Z
-?destroy at task_base@internal at interface5@tbb@@SAXAAVtask at 4@@Z
-?free at allocate_additional_child_of_proxy@internal at tbb@@QBEXAAVtask at 3@@Z
-?free at allocate_child_proxy@internal at tbb@@QBEXAAVtask at 3@@Z
-?free at allocate_continuation_proxy@internal at tbb@@QBEXAAVtask at 3@@Z
-?free at allocate_root_proxy@internal at tbb@@SAXAAVtask at 3@@Z
-?internal_set_ref_count at task@tbb@@AAEXH at Z
-?internal_decrement_ref_count at task@tbb@@AAEHXZ
-?is_owned_by_current_thread at task@tbb@@QBE_NXZ
-?note_affinity at task@tbb@@UAEXG at Z
-?resize at affinity_partitioner_base_v3@internal at tbb@@AAEXI at Z
-?self at task@tbb@@SAAAV12 at XZ
-?spawn_and_wait_for_all at task@tbb@@QAEXAAVtask_list at 2@@Z
-?default_num_threads at task_scheduler_init@tbb@@SAHXZ
-?initialize at task_scheduler_init@tbb@@QAEXHI at Z
-?initialize at task_scheduler_init@tbb@@QAEXH at Z
-?terminate at task_scheduler_init@tbb@@QAEXXZ
-?observe at task_scheduler_observer_v3@internal at tbb@@QAEX_N at Z
-
-#if !TBB_NO_LEGACY
-; task_v2.cpp
-?destroy at task@tbb@@QAEXAAV12@@Z
-#endif
-
-; exception handling support
-#if __TBB_TASK_GROUP_CONTEXT
-?allocate at allocate_root_with_context_proxy@internal at tbb@@QBEAAVtask at 3@I at Z
-?free at allocate_root_with_context_proxy@internal at tbb@@QBEXAAVtask at 3@@Z
-?is_group_execution_cancelled at task_group_context@tbb@@QBE_NXZ
-?cancel_group_execution at task_group_context@tbb@@QAE_NXZ
-?reset at task_group_context@tbb@@QAEXXZ
-?init at task_group_context@tbb@@IAEXXZ
-?register_pending_exception at task_group_context@tbb@@QAEXXZ
-??1task_group_context at tbb@@QAE at XZ
-?name at captured_exception@tbb@@UBEPBDXZ
-?what at captured_exception@tbb@@UBEPBDXZ
-??1captured_exception at tbb@@UAE at XZ
-?move at captured_exception@tbb@@UAEPAV12 at XZ
-?destroy at captured_exception@tbb@@UAEXXZ
-?set at captured_exception@tbb@@QAEXPBD0 at Z
-?clear at captured_exception@tbb@@QAEXXZ
-#endif /* __TBB_TASK_GROUP_CONTEXT */
-
-; Symbols for exceptions thrown from TBB
-?throw_bad_last_alloc_exception_v4 at internal@tbb@@YAXXZ
-?throw_exception_v4 at internal@tbb@@YAXW4exception_id at 12@@Z
-?what at bad_last_alloc@tbb@@UBEPBDXZ
-?what at missing_wait@tbb@@UBEPBDXZ
-?what at invalid_multiple_scheduling@tbb@@UBEPBDXZ
-?what at improper_lock@tbb@@UBEPBDXZ
-
-; tbb_misc.cpp
-?assertion_failure at tbb@@YAXPBDH00 at Z
-?get_initial_auto_partitioner_divisor at internal@tbb@@YAIXZ
-?handle_perror at internal@tbb@@YAXHPBD at Z
-?set_assertion_handler at tbb@@YAP6AXPBDH00 at ZP6AX0H00@Z at Z
-?runtime_warning at internal@tbb@@YAXPBDZZ
-TBB_runtime_interface_version
-
-; itt_notify.cpp
-?itt_load_pointer_with_acquire_v3 at internal@tbb@@YAPAXPBX at Z
-?itt_store_pointer_with_release_v3 at internal@tbb@@YAXPAX0 at Z
-?itt_set_sync_name_v3 at internal@tbb@@YAXPAXPB_W at Z
-?itt_load_pointer_v3 at internal@tbb@@YAPAXPBX at Z
-
-; pipeline.cpp
-??0pipeline at tbb@@QAE at XZ
-??1filter at tbb@@UAE at XZ
-??1pipeline at tbb@@UAE at XZ
-??_7pipeline at tbb@@6B@
-?add_filter at pipeline@tbb@@QAEXAAVfilter at 2@@Z
-?clear at pipeline@tbb@@QAEXXZ
-?inject_token at pipeline@tbb@@AAEXAAVtask at 2@@Z
-?run at pipeline@tbb@@QAEXI at Z
-#if __TBB_TASK_GROUP_CONTEXT
-?run at pipeline@tbb@@QAEXIAAVtask_group_context at 2@@Z
-#endif
-?process_item at thread_bound_filter@tbb@@QAE?AW4result_type at 12@XZ
-?try_process_item at thread_bound_filter@tbb@@QAE?AW4result_type at 12@XZ
-
-; queuing_rw_mutex.cpp
-?internal_construct at queuing_rw_mutex@tbb@@QAEXXZ
-?acquire at scoped_lock@queuing_rw_mutex at tbb@@QAEXAAV23 at _N@Z
-?downgrade_to_reader at scoped_lock@queuing_rw_mutex at tbb@@QAE_NXZ
-?release at scoped_lock@queuing_rw_mutex at tbb@@QAEXXZ
-?upgrade_to_writer at scoped_lock@queuing_rw_mutex at tbb@@QAE_NXZ
-?try_acquire at scoped_lock@queuing_rw_mutex at tbb@@QAE_NAAV23 at _N@Z
-
-; reader_writer_lock.cpp
-?try_lock_read at reader_writer_lock@interface5 at tbb@@QAE_NXZ
-?try_lock at reader_writer_lock@interface5 at tbb@@QAE_NXZ
-?unlock at reader_writer_lock@interface5 at tbb@@QAEXXZ
-?lock_read at reader_writer_lock@interface5 at tbb@@QAEXXZ
-?lock at reader_writer_lock@interface5 at tbb@@QAEXXZ
-?internal_construct at reader_writer_lock@interface5 at tbb@@AAEXXZ
-?internal_destroy at reader_writer_lock@interface5 at tbb@@AAEXXZ
-?internal_construct at scoped_lock@reader_writer_lock at interface5@tbb@@AAEXAAV234@@Z
-?internal_destroy at scoped_lock@reader_writer_lock at interface5@tbb@@AAEXXZ
-?internal_construct at scoped_lock_read@reader_writer_lock at interface5@tbb@@AAEXAAV234@@Z
-?internal_destroy at scoped_lock_read@reader_writer_lock at interface5@tbb@@AAEXXZ
-
-#if !TBB_NO_LEGACY
-; spin_rw_mutex.cpp v2
-?internal_acquire_reader at spin_rw_mutex@tbb@@CAXPAV12@@Z
-?internal_acquire_writer at spin_rw_mutex@tbb@@CA_NPAV12@@Z
-?internal_downgrade at spin_rw_mutex@tbb@@CAXPAV12@@Z
-?internal_itt_releasing at spin_rw_mutex@tbb@@CAXPAV12@@Z
-?internal_release_reader at spin_rw_mutex@tbb@@CAXPAV12@@Z
-?internal_release_writer at spin_rw_mutex@tbb@@CAXPAV12@@Z
-?internal_upgrade at spin_rw_mutex@tbb@@CA_NPAV12@@Z
-?internal_try_acquire_writer at spin_rw_mutex@tbb@@CA_NPAV12@@Z
-?internal_try_acquire_reader at spin_rw_mutex@tbb@@CA_NPAV12@@Z
-#endif
-
-; spin_rw_mutex v3
-?internal_construct at spin_rw_mutex_v3@tbb@@AAEXXZ
-?internal_upgrade at spin_rw_mutex_v3@tbb@@AAE_NXZ
-?internal_downgrade at spin_rw_mutex_v3@tbb@@AAEXXZ
-?internal_acquire_reader at spin_rw_mutex_v3@tbb@@AAEXXZ
-?internal_acquire_writer at spin_rw_mutex_v3@tbb@@AAE_NXZ
-?internal_release_reader at spin_rw_mutex_v3@tbb@@AAEXXZ
-?internal_release_writer at spin_rw_mutex_v3@tbb@@AAEXXZ
-?internal_try_acquire_reader at spin_rw_mutex_v3@tbb@@AAE_NXZ
-?internal_try_acquire_writer at spin_rw_mutex_v3@tbb@@AAE_NXZ
-
-; spin_mutex.cpp
-?internal_construct at spin_mutex@tbb@@QAEXXZ
-?internal_acquire at scoped_lock@spin_mutex at tbb@@AAEXAAV23@@Z
-?internal_release at scoped_lock@spin_mutex at tbb@@AAEXXZ
-?internal_try_acquire at scoped_lock@spin_mutex at tbb@@AAE_NAAV23@@Z
-
-; mutex.cpp
-?internal_acquire at scoped_lock@mutex at tbb@@AAEXAAV23@@Z
-?internal_release at scoped_lock@mutex at tbb@@AAEXXZ
-?internal_try_acquire at scoped_lock@mutex at tbb@@AAE_NAAV23@@Z
-?internal_construct at mutex@tbb@@AAEXXZ
-?internal_destroy at mutex@tbb@@AAEXXZ
-
-; recursive_mutex.cpp
-?internal_acquire at scoped_lock@recursive_mutex at tbb@@AAEXAAV23@@Z
-?internal_release at scoped_lock@recursive_mutex at tbb@@AAEXXZ
-?internal_try_acquire at scoped_lock@recursive_mutex at tbb@@AAE_NAAV23@@Z
-?internal_construct at recursive_mutex@tbb@@AAEXXZ
-?internal_destroy at recursive_mutex@tbb@@AAEXXZ
-
-; queuing_mutex.cpp
-?internal_construct at queuing_mutex@tbb@@QAEXXZ
-?acquire at scoped_lock@queuing_mutex at tbb@@QAEXAAV23@@Z
-?release at scoped_lock@queuing_mutex at tbb@@QAEXXZ
-?try_acquire at scoped_lock@queuing_mutex at tbb@@QAE_NAAV23@@Z
-
-; critical_section.cpp
-?internal_construct at critical_section_v4@internal at tbb@@QAEXXZ
-
-#if !TBB_NO_LEGACY
-; concurrent_hash_map.cpp
-?internal_grow_predicate at hash_map_segment_base@internal at tbb@@QBE_NXZ
-
-; concurrent_queue.cpp v2
-?advance at concurrent_queue_iterator_base@internal at tbb@@IAEXXZ
-?assign at concurrent_queue_iterator_base@internal at tbb@@IAEXABV123@@Z
-?internal_size at concurrent_queue_base@internal at tbb@@IBEHXZ
-??0concurrent_queue_base at internal@tbb@@IAE at I@Z
-??0concurrent_queue_iterator_base at internal@tbb@@IAE at ABVconcurrent_queue_base@12@@Z
-??1concurrent_queue_base at internal@tbb@@MAE at XZ
-??1concurrent_queue_iterator_base at internal@tbb@@IAE at XZ
-?internal_pop at concurrent_queue_base@internal at tbb@@IAEXPAX at Z
-?internal_pop_if_present at concurrent_queue_base@internal at tbb@@IAE_NPAX at Z
-?internal_push at concurrent_queue_base@internal at tbb@@IAEXPBX at Z
-?internal_push_if_not_full at concurrent_queue_base@internal at tbb@@IAE_NPBX at Z
-?internal_set_capacity at concurrent_queue_base@internal at tbb@@IAEXHI at Z
-#endif
-
-; concurrent_queue v3
-??1concurrent_queue_iterator_base_v3 at internal@tbb@@IAE at XZ
-??0concurrent_queue_iterator_base_v3 at internal@tbb@@IAE at ABVconcurrent_queue_base_v3@12@@Z
-??0concurrent_queue_iterator_base_v3 at internal@tbb@@IAE at ABVconcurrent_queue_base_v3@12 at I@Z
-?advance at concurrent_queue_iterator_base_v3@internal at tbb@@IAEXXZ
-?assign at concurrent_queue_iterator_base_v3@internal at tbb@@IAEXABV123@@Z
-??0concurrent_queue_base_v3 at internal@tbb@@IAE at I@Z
-??1concurrent_queue_base_v3 at internal@tbb@@MAE at XZ
-?internal_pop at concurrent_queue_base_v3@internal at tbb@@IAEXPAX at Z
-?internal_pop_if_present at concurrent_queue_base_v3@internal at tbb@@IAE_NPAX at Z
-?internal_push at concurrent_queue_base_v3@internal at tbb@@IAEXPBX at Z
-?internal_push_if_not_full at concurrent_queue_base_v3@internal at tbb@@IAE_NPBX at Z
-?internal_size at concurrent_queue_base_v3@internal at tbb@@IBEHXZ
-?internal_empty at concurrent_queue_base_v3@internal at tbb@@IBE_NXZ
-?internal_set_capacity at concurrent_queue_base_v3@internal at tbb@@IAEXHI at Z
-?internal_finish_clear at concurrent_queue_base_v3@internal at tbb@@IAEXXZ
-?internal_throw_exception at concurrent_queue_base_v3@internal at tbb@@IBEXXZ
-?assign at concurrent_queue_base_v3@internal at tbb@@IAEXABV123@@Z
-
-#if !TBB_NO_LEGACY
-; concurrent_vector.cpp v2
-?internal_assign at concurrent_vector_base@internal at tbb@@IAEXABV123 at IP6AXPAXI@ZP6AX1PBXI at Z4@Z
-?internal_capacity at concurrent_vector_base@internal at tbb@@IBEIXZ
-?internal_clear at concurrent_vector_base@internal at tbb@@IAEXP6AXPAXI at Z_N@Z
-?internal_copy at concurrent_vector_base@internal at tbb@@IAEXABV123 at IP6AXPAXPBXI@Z at Z
-?internal_grow_by at concurrent_vector_base@internal at tbb@@IAEIIIP6AXPAXI at Z@Z
-?internal_grow_to_at_least at concurrent_vector_base@internal at tbb@@IAEXIIP6AXPAXI at Z@Z
-?internal_push_back at concurrent_vector_base@internal at tbb@@IAEPAXIAAI at Z
-?internal_reserve at concurrent_vector_base@internal at tbb@@IAEXIII at Z
-#endif
-
-; concurrent_vector v3
-??1concurrent_vector_base_v3 at internal@tbb@@IAE at XZ
-?internal_assign at concurrent_vector_base_v3@internal at tbb@@IAEXABV123 at IP6AXPAXI@ZP6AX1PBXI at Z4@Z
-?internal_capacity at concurrent_vector_base_v3@internal at tbb@@IBEIXZ
-?internal_clear at concurrent_vector_base_v3@internal at tbb@@IAEIP6AXPAXI at Z@Z
-?internal_copy at concurrent_vector_base_v3@internal at tbb@@IAEXABV123 at IP6AXPAXPBXI@Z at Z
-?internal_grow_by at concurrent_vector_base_v3@internal at tbb@@IAEIIIP6AXPAXPBXI at Z1@Z
-?internal_grow_to_at_least at concurrent_vector_base_v3@internal at tbb@@IAEXIIP6AXPAXPBXI at Z1@Z
-?internal_push_back at concurrent_vector_base_v3@internal at tbb@@IAEPAXIAAI at Z
-?internal_reserve at concurrent_vector_base_v3@internal at tbb@@IAEXIII at Z
-?internal_compact at concurrent_vector_base_v3@internal at tbb@@IAEPAXIPAXP6AX0I at ZP6AX0PBXI@Z at Z
-?internal_swap at concurrent_vector_base_v3@internal at tbb@@IAEXAAV123@@Z
-?internal_throw_exception at concurrent_vector_base_v3@internal at tbb@@IBEXI at Z
-?internal_resize at concurrent_vector_base_v3@internal at tbb@@IAEXIIIPBXP6AXPAXI at ZP6AX10I@Z at Z
-?internal_grow_to_at_least_with_result at concurrent_vector_base_v3@internal at tbb@@IAEIIIP6AXPAXPBXI at Z1@Z
-
-; tbb_thread
-?join at tbb_thread_v3@internal at tbb@@QAEXXZ
-?detach at tbb_thread_v3@internal at tbb@@QAEXXZ
-?internal_start at tbb_thread_v3@internal at tbb@@AAEXP6GIPAX at Z0@Z
-?allocate_closure_v3 at internal@tbb@@YAPAXI at Z
-?free_closure_v3 at internal@tbb@@YAXPAX at Z
-?hardware_concurrency at tbb_thread_v3@internal at tbb@@SAIXZ
-?thread_yield_v3 at internal@tbb@@YAXXZ
-?thread_sleep_v3 at internal@tbb@@YAXABVinterval_t at tick_count@2@@Z
-?move_v3 at internal@tbb@@YAXAAVtbb_thread_v3 at 12@0 at Z
-?thread_get_id_v3 at internal@tbb@@YA?AVid at tbb_thread_v3@12 at XZ
+#define __TBB_SYMBOL( sym ) sym
+#include "win32-tbb-export.lst"
 
-; condition_variable
-?internal_initialize_condition_variable at internal@interface5 at tbb@@YAXAATcondvar_impl_t at 123@@Z
-?internal_condition_variable_wait at internal@interface5 at tbb@@YA_NAATcondvar_impl_t at 123@PAVmutex at 3@PBVinterval_t at tick_count@3@@Z
-?internal_condition_variable_notify_one at internal@interface5 at tbb@@YAXAATcondvar_impl_t at 123@@Z
-?internal_condition_variable_notify_all at internal@interface5 at tbb@@YAXAATcondvar_impl_t at 123@@Z
-?internal_destroy_condition_variable at internal@interface5 at tbb@@YAXAATcondvar_impl_t at 123@@Z
diff --git a/src/tbb/win32-tbb-export.lst b/src/tbb/win32-tbb-export.lst
new file mode 100644
index 0000000..9651de9
--- /dev/null
+++ b/src/tbb/win32-tbb-export.lst
@@ -0,0 +1,298 @@
+/*
+    Copyright 2005-2011 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.
+*/
+
+#include "tbb/tbb_config.h"
+
+// Assembly-language support that is called directly by clients
+// __TBB_SYMBOL( __TBB_machine_cmpswp1 )
+// __TBB_SYMBOL( __TBB_machine_cmpswp2 )
+// __TBB_SYMBOL( __TBB_machine_cmpswp4 )
+__TBB_SYMBOL( __TBB_machine_cmpswp8 )
+// __TBB_SYMBOL( __TBB_machine_fetchadd1 )
+// __TBB_SYMBOL( __TBB_machine_fetchadd2 )
+// __TBB_SYMBOL( __TBB_machine_fetchadd4 )
+__TBB_SYMBOL( __TBB_machine_fetchadd8 )
+// __TBB_SYMBOL( __TBB_machine_fetchstore1 )
+// __TBB_SYMBOL( __TBB_machine_fetchstore2 )
+// __TBB_SYMBOL( __TBB_machine_fetchstore4 )
+__TBB_SYMBOL( __TBB_machine_fetchstore8 )
+__TBB_SYMBOL( __TBB_machine_store8 )
+__TBB_SYMBOL( __TBB_machine_load8 )
+__TBB_SYMBOL( __TBB_machine_trylockbyte )
+
+// cache_aligned_allocator.cpp
+__TBB_SYMBOL( ?NFS_Allocate at internal@tbb@@YAPAXIIPAX at Z )
+__TBB_SYMBOL( ?NFS_GetLineSize at internal@tbb@@YAIXZ )
+__TBB_SYMBOL( ?NFS_Free at internal@tbb@@YAXPAX at Z )
+__TBB_SYMBOL( ?allocate_via_handler_v3 at internal@tbb@@YAPAXI at Z )
+__TBB_SYMBOL( ?deallocate_via_handler_v3 at internal@tbb@@YAXPAX at Z )
+__TBB_SYMBOL( ?is_malloc_used_v3 at internal@tbb@@YA_NXZ )
+
+// task.cpp v3
+__TBB_SYMBOL( ?allocate at allocate_additional_child_of_proxy@internal at tbb@@QBEAAVtask at 3@I at Z )
+__TBB_SYMBOL( ?allocate at allocate_child_proxy@internal at tbb@@QBEAAVtask at 3@I at Z )
+__TBB_SYMBOL( ?allocate at allocate_continuation_proxy@internal at tbb@@QBEAAVtask at 3@I at Z )
+__TBB_SYMBOL( ?allocate at allocate_root_proxy@internal at tbb@@SAAAVtask at 3@I at Z )
+__TBB_SYMBOL( ?destroy at task_base@internal at interface5@tbb@@SAXAAVtask at 4@@Z )
+__TBB_SYMBOL( ?free at allocate_additional_child_of_proxy@internal at tbb@@QBEXAAVtask at 3@@Z )
+__TBB_SYMBOL( ?free at allocate_child_proxy@internal at tbb@@QBEXAAVtask at 3@@Z )
+__TBB_SYMBOL( ?free at allocate_continuation_proxy@internal at tbb@@QBEXAAVtask at 3@@Z )
+__TBB_SYMBOL( ?free at allocate_root_proxy@internal at tbb@@SAXAAVtask at 3@@Z )
+__TBB_SYMBOL( ?internal_set_ref_count at task@tbb@@AAEXH at Z )
+__TBB_SYMBOL( ?internal_decrement_ref_count at task@tbb@@AAEHXZ )
+__TBB_SYMBOL( ?is_owned_by_current_thread at task@tbb@@QBE_NXZ )
+__TBB_SYMBOL( ?note_affinity at task@tbb@@UAEXG at Z )
+__TBB_SYMBOL( ?resize at affinity_partitioner_base_v3@internal at tbb@@AAEXI at Z )
+__TBB_SYMBOL( ?self at task@tbb@@SAAAV12 at XZ )
+__TBB_SYMBOL( ?spawn_and_wait_for_all at task@tbb@@QAEXAAVtask_list at 2@@Z )
+__TBB_SYMBOL( ?default_num_threads at task_scheduler_init@tbb@@SAHXZ )
+__TBB_SYMBOL( ?initialize at task_scheduler_init@tbb@@QAEXHI at Z )
+__TBB_SYMBOL( ?initialize at task_scheduler_init@tbb@@QAEXH at Z )
+__TBB_SYMBOL( ?terminate at task_scheduler_init@tbb@@QAEXXZ )
+__TBB_SYMBOL( ?observe at task_scheduler_observer_v3@internal at tbb@@QAEX_N at Z )
+
+#if !TBB_NO_LEGACY
+// task_v2.cpp
+__TBB_SYMBOL( ?destroy at task@tbb@@QAEXAAV12@@Z )
+#endif
+
+// exception handling support
+#if __TBB_TASK_GROUP_CONTEXT
+__TBB_SYMBOL( ?allocate at allocate_root_with_context_proxy@internal at tbb@@QBEAAVtask at 3@I at Z )
+__TBB_SYMBOL( ?free at allocate_root_with_context_proxy@internal at tbb@@QBEXAAVtask at 3@@Z )
+__TBB_SYMBOL( ?change_group at task@tbb@@QAEXAAVtask_group_context at 2@@Z )
+__TBB_SYMBOL( ?is_group_execution_cancelled at task_group_context@tbb@@QBE_NXZ )
+__TBB_SYMBOL( ?cancel_group_execution at task_group_context@tbb@@QAE_NXZ )
+__TBB_SYMBOL( ?reset at task_group_context@tbb@@QAEXXZ )
+__TBB_SYMBOL( ?init at task_group_context@tbb@@IAEXXZ )
+__TBB_SYMBOL( ?register_pending_exception at task_group_context@tbb@@QAEXXZ )
+__TBB_SYMBOL( ??1task_group_context at tbb@@QAE at XZ )
+#if __TBB_TASK_PRIORITY
+__TBB_SYMBOL( ?set_priority at task_group_context@tbb@@QAEXW4priority_t at 2@@Z )
+__TBB_SYMBOL( ?priority at task_group_context@tbb@@QBE?AW4priority_t at 2@XZ )
+#endif /* __TBB_TASK_PRIORITY */
+__TBB_SYMBOL( ?name at captured_exception@tbb@@UBEPBDXZ )
+__TBB_SYMBOL( ?what at captured_exception@tbb@@UBEPBDXZ )
+__TBB_SYMBOL( ??1captured_exception at tbb@@UAE at XZ )
+__TBB_SYMBOL( ?move at captured_exception@tbb@@UAEPAV12 at XZ )
+__TBB_SYMBOL( ?destroy at captured_exception@tbb@@UAEXXZ )
+__TBB_SYMBOL( ?set at captured_exception@tbb@@QAEXPBD0 at Z )
+__TBB_SYMBOL( ?clear at captured_exception@tbb@@QAEXXZ )
+#endif /* __TBB_TASK_GROUP_CONTEXT */
+
+// Symbols for exceptions thrown from TBB
+__TBB_SYMBOL( ?throw_bad_last_alloc_exception_v4 at internal@tbb@@YAXXZ )
+__TBB_SYMBOL( ?throw_exception_v4 at internal@tbb@@YAXW4exception_id at 12@@Z )
+__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_misc.cpp
+__TBB_SYMBOL( ?assertion_failure at tbb@@YAXPBDH00 at Z )
+__TBB_SYMBOL( ?get_initial_auto_partitioner_divisor at internal@tbb@@YAIXZ )
+__TBB_SYMBOL( ?handle_perror at internal@tbb@@YAXHPBD at Z )
+__TBB_SYMBOL( ?set_assertion_handler at tbb@@YAP6AXPBDH00 at ZP6AX0H00@Z at Z )
+__TBB_SYMBOL( ?runtime_warning at internal@tbb@@YAXPBDZZ )
+__TBB_SYMBOL( TBB_runtime_interface_version )
+
+// tbb_main.cpp
+__TBB_SYMBOL( ?itt_load_pointer_with_acquire_v3 at internal@tbb@@YAPAXPBX at Z )
+__TBB_SYMBOL( ?itt_store_pointer_with_release_v3 at internal@tbb@@YAXPAX0 at Z )
+__TBB_SYMBOL( ?call_itt_notify_v5 at internal@tbb@@YAXHPAX at Z )
+__TBB_SYMBOL( ?itt_set_sync_name_v3 at internal@tbb@@YAXPAXPB_W at Z )
+__TBB_SYMBOL( ?itt_load_pointer_v3 at internal@tbb@@YAPAXPBX at Z )
+
+// pipeline.cpp
+__TBB_SYMBOL( ??0pipeline at tbb@@QAE at XZ )
+__TBB_SYMBOL( ??1filter at tbb@@UAE at XZ )
+__TBB_SYMBOL( ??1pipeline at tbb@@UAE at XZ )
+__TBB_SYMBOL( ??_7pipeline at tbb@@6B@ )
+__TBB_SYMBOL( ?add_filter at pipeline@tbb@@QAEXAAVfilter at 2@@Z )
+__TBB_SYMBOL( ?clear at pipeline@tbb@@QAEXXZ )
+__TBB_SYMBOL( ?inject_token at pipeline@tbb@@AAEXAAVtask at 2@@Z )
+__TBB_SYMBOL( ?run at pipeline@tbb@@QAEXI at Z )
+#if __TBB_TASK_GROUP_CONTEXT
+__TBB_SYMBOL( ?run at pipeline@tbb@@QAEXIAAVtask_group_context at 2@@Z )
+#endif
+__TBB_SYMBOL( ?process_item at thread_bound_filter@tbb@@QAE?AW4result_type at 12@XZ )
+__TBB_SYMBOL( ?try_process_item at thread_bound_filter@tbb@@QAE?AW4result_type at 12@XZ )
+__TBB_SYMBOL( ?set_end_of_input at filter@tbb@@IAEXXZ )
+
+// queuing_rw_mutex.cpp
+__TBB_SYMBOL( ?internal_construct at queuing_rw_mutex@tbb@@QAEXXZ )
+__TBB_SYMBOL( ?acquire at scoped_lock@queuing_rw_mutex at tbb@@QAEXAAV23 at _N@Z )
+__TBB_SYMBOL( ?downgrade_to_reader at scoped_lock@queuing_rw_mutex at tbb@@QAE_NXZ )
+__TBB_SYMBOL( ?release at scoped_lock@queuing_rw_mutex at tbb@@QAEXXZ )
+__TBB_SYMBOL( ?upgrade_to_writer at scoped_lock@queuing_rw_mutex at tbb@@QAE_NXZ )
+__TBB_SYMBOL( ?try_acquire at scoped_lock@queuing_rw_mutex at tbb@@QAE_NAAV23 at _N@Z )
+
+// reader_writer_lock.cpp
+__TBB_SYMBOL( ?try_lock_read at reader_writer_lock@interface5 at tbb@@QAE_NXZ )
+__TBB_SYMBOL( ?try_lock at reader_writer_lock@interface5 at tbb@@QAE_NXZ )
+__TBB_SYMBOL( ?unlock at reader_writer_lock@interface5 at tbb@@QAEXXZ )
+__TBB_SYMBOL( ?lock_read at reader_writer_lock@interface5 at tbb@@QAEXXZ )
+__TBB_SYMBOL( ?lock at reader_writer_lock@interface5 at tbb@@QAEXXZ )
+__TBB_SYMBOL( ?internal_construct at reader_writer_lock@interface5 at tbb@@AAEXXZ )
+__TBB_SYMBOL( ?internal_destroy at reader_writer_lock@interface5 at tbb@@AAEXXZ )
+__TBB_SYMBOL( ?internal_construct at scoped_lock@reader_writer_lock at interface5@tbb@@AAEXAAV234@@Z )
+__TBB_SYMBOL( ?internal_destroy at scoped_lock@reader_writer_lock at interface5@tbb@@AAEXXZ )
+__TBB_SYMBOL( ?internal_construct at scoped_lock_read@reader_writer_lock at interface5@tbb@@AAEXAAV234@@Z )
+__TBB_SYMBOL( ?internal_destroy at scoped_lock_read@reader_writer_lock at interface5@tbb@@AAEXXZ )
+
+#if !TBB_NO_LEGACY
+// spin_rw_mutex.cpp v2
+__TBB_SYMBOL( ?internal_acquire_reader at spin_rw_mutex@tbb@@CAXPAV12@@Z )
+__TBB_SYMBOL( ?internal_acquire_writer at spin_rw_mutex@tbb@@CA_NPAV12@@Z )
+__TBB_SYMBOL( ?internal_downgrade at spin_rw_mutex@tbb@@CAXPAV12@@Z )
+__TBB_SYMBOL( ?internal_itt_releasing at spin_rw_mutex@tbb@@CAXPAV12@@Z )
+__TBB_SYMBOL( ?internal_release_reader at spin_rw_mutex@tbb@@CAXPAV12@@Z )
+__TBB_SYMBOL( ?internal_release_writer at spin_rw_mutex@tbb@@CAXPAV12@@Z )
+__TBB_SYMBOL( ?internal_upgrade at spin_rw_mutex@tbb@@CA_NPAV12@@Z )
+__TBB_SYMBOL( ?internal_try_acquire_writer at spin_rw_mutex@tbb@@CA_NPAV12@@Z )
+__TBB_SYMBOL( ?internal_try_acquire_reader at spin_rw_mutex@tbb@@CA_NPAV12@@Z )
+#endif
+
+// spin_rw_mutex v3
+__TBB_SYMBOL( ?internal_construct at spin_rw_mutex_v3@tbb@@AAEXXZ )
+__TBB_SYMBOL( ?internal_upgrade at spin_rw_mutex_v3@tbb@@AAE_NXZ )
+__TBB_SYMBOL( ?internal_downgrade at spin_rw_mutex_v3@tbb@@AAEXXZ )
+__TBB_SYMBOL( ?internal_acquire_reader at spin_rw_mutex_v3@tbb@@AAEXXZ )
+__TBB_SYMBOL( ?internal_acquire_writer at spin_rw_mutex_v3@tbb@@AAE_NXZ )
+__TBB_SYMBOL( ?internal_release_reader at spin_rw_mutex_v3@tbb@@AAEXXZ )
+__TBB_SYMBOL( ?internal_release_writer at spin_rw_mutex_v3@tbb@@AAEXXZ )
+__TBB_SYMBOL( ?internal_try_acquire_reader at spin_rw_mutex_v3@tbb@@AAE_NXZ )
+__TBB_SYMBOL( ?internal_try_acquire_writer at spin_rw_mutex_v3@tbb@@AAE_NXZ )
+
+// spin_mutex.cpp
+__TBB_SYMBOL( ?internal_construct at spin_mutex@tbb@@QAEXXZ )
+__TBB_SYMBOL( ?internal_acquire at scoped_lock@spin_mutex at tbb@@AAEXAAV23@@Z )
+__TBB_SYMBOL( ?internal_release at scoped_lock@spin_mutex at tbb@@AAEXXZ )
+__TBB_SYMBOL( ?internal_try_acquire at scoped_lock@spin_mutex at tbb@@AAE_NAAV23@@Z )
+
+// mutex.cpp
+__TBB_SYMBOL( ?internal_acquire at scoped_lock@mutex at tbb@@AAEXAAV23@@Z )
+__TBB_SYMBOL( ?internal_release at scoped_lock@mutex at tbb@@AAEXXZ )
+__TBB_SYMBOL( ?internal_try_acquire at scoped_lock@mutex at tbb@@AAE_NAAV23@@Z )
+__TBB_SYMBOL( ?internal_construct at mutex@tbb@@AAEXXZ )
+__TBB_SYMBOL( ?internal_destroy at mutex@tbb@@AAEXXZ )
+
+// recursive_mutex.cpp
+__TBB_SYMBOL( ?internal_acquire at scoped_lock@recursive_mutex at tbb@@AAEXAAV23@@Z )
+__TBB_SYMBOL( ?internal_release at scoped_lock@recursive_mutex at tbb@@AAEXXZ )
+__TBB_SYMBOL( ?internal_try_acquire at scoped_lock@recursive_mutex at tbb@@AAE_NAAV23@@Z )
+__TBB_SYMBOL( ?internal_construct at recursive_mutex@tbb@@AAEXXZ )
+__TBB_SYMBOL( ?internal_destroy at recursive_mutex@tbb@@AAEXXZ )
+
+// queuing_mutex.cpp
+__TBB_SYMBOL( ?internal_construct at queuing_mutex@tbb@@QAEXXZ )
+__TBB_SYMBOL( ?acquire at scoped_lock@queuing_mutex at tbb@@QAEXAAV23@@Z )
+__TBB_SYMBOL( ?release at scoped_lock@queuing_mutex at tbb@@QAEXXZ )
+__TBB_SYMBOL( ?try_acquire at scoped_lock@queuing_mutex at tbb@@QAE_NAAV23@@Z )
+
+// critical_section.cpp
+__TBB_SYMBOL( ?internal_construct at critical_section_v4@internal at tbb@@QAEXXZ )
+
+#if !TBB_NO_LEGACY
+// concurrent_hash_map.cpp
+__TBB_SYMBOL( ?internal_grow_predicate at hash_map_segment_base@internal at tbb@@QBE_NXZ )
+
+// concurrent_queue.cpp v2
+__TBB_SYMBOL( ?advance at concurrent_queue_iterator_base@internal at tbb@@IAEXXZ )
+__TBB_SYMBOL( ?assign at concurrent_queue_iterator_base@internal at tbb@@IAEXABV123@@Z )
+__TBB_SYMBOL( ?internal_size at concurrent_queue_base@internal at tbb@@IBEHXZ )
+__TBB_SYMBOL( ??0concurrent_queue_base at internal@tbb@@IAE at I@Z )
+__TBB_SYMBOL( ??0concurrent_queue_iterator_base at internal@tbb@@IAE at ABVconcurrent_queue_base@12@@Z )
+__TBB_SYMBOL( ??1concurrent_queue_base at internal@tbb@@MAE at XZ )
+__TBB_SYMBOL( ??1concurrent_queue_iterator_base at internal@tbb@@IAE at XZ )
+__TBB_SYMBOL( ?internal_pop at concurrent_queue_base@internal at tbb@@IAEXPAX at Z )
+__TBB_SYMBOL( ?internal_pop_if_present at concurrent_queue_base@internal at tbb@@IAE_NPAX at Z )
+__TBB_SYMBOL( ?internal_push at concurrent_queue_base@internal at tbb@@IAEXPBX at Z )
+__TBB_SYMBOL( ?internal_push_if_not_full at concurrent_queue_base@internal at tbb@@IAE_NPBX at Z )
+__TBB_SYMBOL( ?internal_set_capacity at concurrent_queue_base@internal at tbb@@IAEXHI at Z )
+#endif
+
+// concurrent_queue v3
+__TBB_SYMBOL( ??1concurrent_queue_iterator_base_v3 at internal@tbb@@IAE at XZ )
+__TBB_SYMBOL( ??0concurrent_queue_iterator_base_v3 at internal@tbb@@IAE at ABVconcurrent_queue_base_v3@12@@Z )
+__TBB_SYMBOL( ??0concurrent_queue_iterator_base_v3 at internal@tbb@@IAE at ABVconcurrent_queue_base_v3@12 at I@Z )
+__TBB_SYMBOL( ?advance at concurrent_queue_iterator_base_v3@internal at tbb@@IAEXXZ )
+__TBB_SYMBOL( ?assign at concurrent_queue_iterator_base_v3@internal at tbb@@IAEXABV123@@Z )
+__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_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 )
+__TBB_SYMBOL( ?internal_empty at concurrent_queue_base_v3@internal at tbb@@IBE_NXZ )
+__TBB_SYMBOL( ?internal_set_capacity at concurrent_queue_base_v3@internal at tbb@@IAEXHI at Z )
+__TBB_SYMBOL( ?internal_finish_clear at concurrent_queue_base_v3@internal at tbb@@IAEXXZ )
+__TBB_SYMBOL( ?internal_throw_exception at concurrent_queue_base_v3@internal at tbb@@IBEXXZ )
+__TBB_SYMBOL( ?assign at concurrent_queue_base_v3@internal at tbb@@IAEXABV123@@Z )
+
+#if !TBB_NO_LEGACY
+// concurrent_vector.cpp v2
+__TBB_SYMBOL( ?internal_assign at concurrent_vector_base@internal at tbb@@IAEXABV123 at IP6AXPAXI@ZP6AX1PBXI at Z4@Z )
+__TBB_SYMBOL( ?internal_capacity at concurrent_vector_base@internal at tbb@@IBEIXZ )
+__TBB_SYMBOL( ?internal_clear at concurrent_vector_base@internal at tbb@@IAEXP6AXPAXI at Z_N@Z )
+__TBB_SYMBOL( ?internal_copy at concurrent_vector_base@internal at tbb@@IAEXABV123 at IP6AXPAXPBXI@Z at Z )
+__TBB_SYMBOL( ?internal_grow_by at concurrent_vector_base@internal at tbb@@IAEIIIP6AXPAXI at Z@Z )
+__TBB_SYMBOL( ?internal_grow_to_at_least at concurrent_vector_base@internal at tbb@@IAEXIIP6AXPAXI at Z@Z )
+__TBB_SYMBOL( ?internal_push_back at concurrent_vector_base@internal at tbb@@IAEPAXIAAI at Z )
+__TBB_SYMBOL( ?internal_reserve at concurrent_vector_base@internal at tbb@@IAEXIII at Z )
+#endif
+
+// concurrent_vector v3
+__TBB_SYMBOL( ??1concurrent_vector_base_v3 at internal@tbb@@IAE at XZ )
+__TBB_SYMBOL( ?internal_assign at concurrent_vector_base_v3@internal at tbb@@IAEXABV123 at IP6AXPAXI@ZP6AX1PBXI at Z4@Z )
+__TBB_SYMBOL( ?internal_capacity at concurrent_vector_base_v3@internal at tbb@@IBEIXZ )
+__TBB_SYMBOL( ?internal_clear at concurrent_vector_base_v3@internal at tbb@@IAEIP6AXPAXI at Z@Z )
+__TBB_SYMBOL( ?internal_copy at concurrent_vector_base_v3@internal at tbb@@IAEXABV123 at IP6AXPAXPBXI@Z at Z )
+__TBB_SYMBOL( ?internal_grow_by at concurrent_vector_base_v3@internal at tbb@@IAEIIIP6AXPAXPBXI at Z1@Z )
+__TBB_SYMBOL( ?internal_grow_to_at_least at concurrent_vector_base_v3@internal at tbb@@IAEXIIP6AXPAXPBXI at Z1@Z )
+__TBB_SYMBOL( ?internal_push_back at concurrent_vector_base_v3@internal at tbb@@IAEPAXIAAI at Z )
+__TBB_SYMBOL( ?internal_reserve at concurrent_vector_base_v3@internal at tbb@@IAEXIII at Z )
+__TBB_SYMBOL( ?internal_compact at concurrent_vector_base_v3@internal at tbb@@IAEPAXIPAXP6AX0I at ZP6AX0PBXI@Z at Z )
+__TBB_SYMBOL( ?internal_swap at concurrent_vector_base_v3@internal at tbb@@IAEXAAV123@@Z )
+__TBB_SYMBOL( ?internal_throw_exception at concurrent_vector_base_v3@internal at tbb@@IBEXI at Z )
+__TBB_SYMBOL( ?internal_resize at concurrent_vector_base_v3@internal at tbb@@IAEXIIIPBXP6AXPAXI at ZP6AX10I@Z at Z )
+__TBB_SYMBOL( ?internal_grow_to_at_least_with_result at concurrent_vector_base_v3@internal at tbb@@IAEIIIP6AXPAXPBXI at Z1@Z )
+
+// tbb_thread
+__TBB_SYMBOL( ?join at tbb_thread_v3@internal at tbb@@QAEXXZ )
+__TBB_SYMBOL( ?detach at tbb_thread_v3@internal at tbb@@QAEXXZ )
+__TBB_SYMBOL( ?internal_start at tbb_thread_v3@internal at tbb@@AAEXP6GIPAX at Z0@Z )
+__TBB_SYMBOL( ?allocate_closure_v3 at internal@tbb@@YAPAXI at Z )
+__TBB_SYMBOL( ?free_closure_v3 at internal@tbb@@YAXPAX at Z )
+__TBB_SYMBOL( ?hardware_concurrency at tbb_thread_v3@internal at tbb@@SAIXZ )
+__TBB_SYMBOL( ?thread_yield_v3 at internal@tbb@@YAXXZ )
+__TBB_SYMBOL( ?thread_sleep_v3 at internal@tbb@@YAXABVinterval_t at tick_count@2@@Z )
+__TBB_SYMBOL( ?move_v3 at internal@tbb@@YAXAAVtbb_thread_v3 at 12@0 at Z )
+__TBB_SYMBOL( ?thread_get_id_v3 at internal@tbb@@YA?AVid at tbb_thread_v3@12 at XZ )
+
+// condition_variable
+__TBB_SYMBOL( ?internal_initialize_condition_variable at internal@interface5 at tbb@@YAXAATcondvar_impl_t at 123@@Z )
+__TBB_SYMBOL( ?internal_condition_variable_wait at internal@interface5 at tbb@@YA_NAATcondvar_impl_t at 123@PAVmutex at 3@PBVinterval_t at tick_count@3@@Z )
+__TBB_SYMBOL( ?internal_condition_variable_notify_one at internal@interface5 at tbb@@YAXAATcondvar_impl_t at 123@@Z )
+__TBB_SYMBOL( ?internal_condition_variable_notify_all at internal@interface5 at tbb@@YAXAATcondvar_impl_t at 123@@Z )
+__TBB_SYMBOL( ?internal_destroy_condition_variable at internal@interface5 at tbb@@YAXAATcondvar_impl_t at 123@@Z )
+
+#undef __TBB_SYMBOL
diff --git a/src/tbb/win64-gcc-tbb-export.def b/src/tbb/win64-gcc-tbb-export.def
new file mode 100644
index 0000000..f4dc4d2
--- /dev/null
+++ b/src/tbb/win64-gcc-tbb-export.def
@@ -0,0 +1,53 @@
+/*
+    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.
+*/
+
+
+{
+global:
+
+#define __TBB_SYMBOL( sym ) sym;
+#include "win64-gcc-tbb-export.lst"
+
+local:
+
+/* TBB symbols */
+*3tbb*;
+*__TBB*;
+
+/* Intel Compiler (libirc) symbols */
+__intel_*;
+_intel_*;
+get_msg_buf;
+get_text_buf;
+message_catalog;
+print_buf;
+irc__get_msg;
+irc__print;
+
+};
+
diff --git a/src/tbb/win64-gcc-tbb-export.lst b/src/tbb/win64-gcc-tbb-export.lst
new file mode 100644
index 0000000..70ef9dd
--- /dev/null
+++ b/src/tbb/win64-gcc-tbb-export.lst
@@ -0,0 +1,343 @@
+/*
+    Copyright 2005-2011 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.
+*/
+
+
+#include "tbb/tbb_config.h"
+
+/* cache_aligned_allocator.cpp */
+__TBB_SYMBOL( _ZN3tbb8internal12NFS_AllocateEyyPv ) // MODIFIED LINUX ENTRY
+__TBB_SYMBOL( _ZN3tbb8internal15NFS_GetLineSizeEv )
+__TBB_SYMBOL( _ZN3tbb8internal8NFS_FreeEPv )
+__TBB_SYMBOL( _ZN3tbb8internal23allocate_via_handler_v3Ey ) // MODIFIED LINUX ENTRY
+__TBB_SYMBOL( _ZN3tbb8internal25deallocate_via_handler_v3EPv )
+__TBB_SYMBOL( _ZN3tbb8internal17is_malloc_used_v3Ev )
+
+/* task.cpp v3 */
+__TBB_SYMBOL( _ZN3tbb4task13note_affinityEt )
+__TBB_SYMBOL( _ZN3tbb4task22internal_set_ref_countEi )
+__TBB_SYMBOL( _ZN3tbb4task28internal_decrement_ref_countEv )
+__TBB_SYMBOL( _ZN3tbb4task22spawn_and_wait_for_allERNS_9task_listE )
+__TBB_SYMBOL( _ZN3tbb4task4selfEv )
+__TBB_SYMBOL( _ZN3tbb10interface58internal9task_base7destroyERNS_4taskE )
+__TBB_SYMBOL( _ZNK3tbb4task26is_owned_by_current_threadEv )
+__TBB_SYMBOL( _ZN3tbb8internal19allocate_root_proxy4freeERNS_4taskE )
+__TBB_SYMBOL( _ZN3tbb8internal19allocate_root_proxy8allocateEy ) // MODIFIED LINUX ENTRY
+__TBB_SYMBOL( _ZN3tbb8internal28affinity_partitioner_base_v36resizeEj )
+__TBB_SYMBOL( _ZNK3tbb8internal20allocate_child_proxy4freeERNS_4taskE )
+__TBB_SYMBOL( _ZNK3tbb8internal20allocate_child_proxy8allocateEy ) // MODIFIED LINUX ENTRY
+__TBB_SYMBOL( _ZNK3tbb8internal27allocate_continuation_proxy4freeERNS_4taskE )
+__TBB_SYMBOL( _ZNK3tbb8internal27allocate_continuation_proxy8allocateEy ) // MODIFIED LINUX ENTRY
+__TBB_SYMBOL( _ZNK3tbb8internal34allocate_additional_child_of_proxy4freeERNS_4taskE )
+__TBB_SYMBOL( _ZNK3tbb8internal34allocate_additional_child_of_proxy8allocateEy ) // MODIFIED LINUX ENTRY
+__TBB_SYMBOL( _ZTIN3tbb4taskE )
+__TBB_SYMBOL( _ZTSN3tbb4taskE )
+__TBB_SYMBOL( _ZTVN3tbb4taskE )
+__TBB_SYMBOL( _ZN3tbb19task_scheduler_init19default_num_threadsEv )
+__TBB_SYMBOL( _ZN3tbb19task_scheduler_init10initializeEiy )  // MODIFIED LINUX ENTRY
+__TBB_SYMBOL( _ZN3tbb19task_scheduler_init10initializeEi )
+__TBB_SYMBOL( _ZN3tbb19task_scheduler_init9terminateEv )
+__TBB_SYMBOL( _ZN3tbb8internal26task_scheduler_observer_v37observeEb )
+__TBB_SYMBOL( _ZN3tbb10empty_task7executeEv )
+__TBB_SYMBOL( _ZN3tbb10empty_taskD0Ev )
+__TBB_SYMBOL( _ZN3tbb10empty_taskD1Ev )
+__TBB_SYMBOL( _ZTIN3tbb10empty_taskE )
+__TBB_SYMBOL( _ZTSN3tbb10empty_taskE )
+__TBB_SYMBOL( _ZTVN3tbb10empty_taskE )
+
+#if !TBB_NO_LEGACY
+/* task_v2.cpp */
+__TBB_SYMBOL( _ZN3tbb4task7destroyERS0_ )
+#endif /* !TBB_NO_LEGACY */
+
+/* Exception handling in task scheduler */
+#if __TBB_TASK_GROUP_CONTEXT
+__TBB_SYMBOL( _ZNK3tbb8internal32allocate_root_with_context_proxy8allocateEy ) // MODIFIED LINUX ENTRY
+__TBB_SYMBOL( _ZNK3tbb8internal32allocate_root_with_context_proxy4freeERNS_4taskE )
+__TBB_SYMBOL( _ZN3tbb4task12change_groupERNS_18task_group_contextE )
+__TBB_SYMBOL( _ZNK3tbb18task_group_context28is_group_execution_cancelledEv )
+__TBB_SYMBOL( _ZN3tbb18task_group_context22cancel_group_executionEv )
+__TBB_SYMBOL( _ZN3tbb18task_group_context26register_pending_exceptionEv )
+__TBB_SYMBOL( _ZN3tbb18task_group_context5resetEv )
+__TBB_SYMBOL( _ZN3tbb18task_group_context4initEv )
+__TBB_SYMBOL( _ZN3tbb18task_group_contextD1Ev )
+__TBB_SYMBOL( _ZN3tbb18task_group_contextD2Ev )
+#if __TBB_TASK_PRIORITY
+__TBB_SYMBOL( _ZN3tbb18task_group_context12set_priorityENS_10priority_tE )
+__TBB_SYMBOL( _ZNK3tbb18task_group_context8priorityEv )
+#endif /* __TBB_TASK_PRIORITY */
+__TBB_SYMBOL( _ZNK3tbb18captured_exception4nameEv )
+__TBB_SYMBOL( _ZNK3tbb18captured_exception4whatEv )
+__TBB_SYMBOL( _ZN3tbb18captured_exception10throw_selfEv )
+__TBB_SYMBOL( _ZN3tbb18captured_exception3setEPKcS2_ )
+__TBB_SYMBOL( _ZN3tbb18captured_exception4moveEv )
+__TBB_SYMBOL( _ZN3tbb18captured_exception5clearEv )
+__TBB_SYMBOL( _ZN3tbb18captured_exception7destroyEv )
+__TBB_SYMBOL( _ZN3tbb18captured_exception8allocateEPKcS2_ )
+__TBB_SYMBOL( _ZN3tbb18captured_exceptionD0Ev )
+__TBB_SYMBOL( _ZN3tbb18captured_exceptionD1Ev )
+__TBB_SYMBOL( _ZN3tbb18captured_exceptionD2Ev )
+__TBB_SYMBOL( _ZTIN3tbb18captured_exceptionE )
+__TBB_SYMBOL( _ZTSN3tbb18captured_exceptionE )
+__TBB_SYMBOL( _ZTVN3tbb18captured_exceptionE )
+__TBB_SYMBOL( _ZN3tbb13tbb_exceptionD2Ev )
+__TBB_SYMBOL( _ZTIN3tbb13tbb_exceptionE )
+__TBB_SYMBOL( _ZTSN3tbb13tbb_exceptionE )
+__TBB_SYMBOL( _ZTVN3tbb13tbb_exceptionE )
+#endif /* __TBB_TASK_GROUP_CONTEXT */
+
+/* Symbols for exceptions thrown from TBB */
+__TBB_SYMBOL( _ZN3tbb8internal33throw_bad_last_alloc_exception_v4Ev )
+__TBB_SYMBOL( _ZN3tbb8internal18throw_exception_v4ENS0_12exception_idE )
+__TBB_SYMBOL( _ZN3tbb14bad_last_allocD0Ev )
+__TBB_SYMBOL( _ZN3tbb14bad_last_allocD1Ev )
+__TBB_SYMBOL( _ZNK3tbb14bad_last_alloc4whatEv )
+__TBB_SYMBOL( _ZTIN3tbb14bad_last_allocE )
+__TBB_SYMBOL( _ZTSN3tbb14bad_last_allocE )
+__TBB_SYMBOL( _ZTVN3tbb14bad_last_allocE )
+__TBB_SYMBOL( _ZN3tbb12missing_waitD0Ev )
+__TBB_SYMBOL( _ZN3tbb12missing_waitD1Ev )
+__TBB_SYMBOL( _ZNK3tbb12missing_wait4whatEv )
+__TBB_SYMBOL( _ZTIN3tbb12missing_waitE )
+__TBB_SYMBOL( _ZTSN3tbb12missing_waitE )
+__TBB_SYMBOL( _ZTVN3tbb12missing_waitE )
+__TBB_SYMBOL( _ZN3tbb27invalid_multiple_schedulingD0Ev )
+__TBB_SYMBOL( _ZN3tbb27invalid_multiple_schedulingD1Ev )
+__TBB_SYMBOL( _ZNK3tbb27invalid_multiple_scheduling4whatEv )
+__TBB_SYMBOL( _ZTIN3tbb27invalid_multiple_schedulingE )
+__TBB_SYMBOL( _ZTSN3tbb27invalid_multiple_schedulingE )
+__TBB_SYMBOL( _ZTVN3tbb27invalid_multiple_schedulingE )
+__TBB_SYMBOL( _ZN3tbb13improper_lockD0Ev )
+__TBB_SYMBOL( _ZN3tbb13improper_lockD1Ev )
+__TBB_SYMBOL( _ZNK3tbb13improper_lock4whatEv )
+__TBB_SYMBOL( _ZTIN3tbb13improper_lockE )
+__TBB_SYMBOL( _ZTSN3tbb13improper_lockE )
+__TBB_SYMBOL( _ZTVN3tbb13improper_lockE )
+
+/* tbb_misc.cpp */
+__TBB_SYMBOL( _ZN3tbb17assertion_failureEPKciS1_S1_ )
+__TBB_SYMBOL( _ZN3tbb21set_assertion_handlerEPFvPKciS1_S1_E )
+__TBB_SYMBOL( _ZN3tbb8internal36get_initial_auto_partitioner_divisorEv )
+__TBB_SYMBOL( _ZN3tbb8internal13handle_perrorEiPKc )
+__TBB_SYMBOL( _ZN3tbb8internal15runtime_warningEPKcz )
+__TBB_SYMBOL( TBB_runtime_interface_version )
+
+/* tbb_main.cpp */
+__TBB_SYMBOL( _ZN3tbb8internal32itt_load_pointer_with_acquire_v3EPKv )
+__TBB_SYMBOL( _ZN3tbb8internal33itt_store_pointer_with_release_v3EPvS1_ )
+__TBB_SYMBOL( _ZN3tbb8internal18call_itt_notify_v5EiPv )
+__TBB_SYMBOL( _ZN3tbb8internal20itt_set_sync_name_v3EPvPKc )
+__TBB_SYMBOL( _ZN3tbb8internal19itt_load_pointer_v3EPKv )
+
+/* pipeline.cpp */
+__TBB_SYMBOL( _ZTIN3tbb6filterE )
+__TBB_SYMBOL( _ZTSN3tbb6filterE )
+__TBB_SYMBOL( _ZTVN3tbb6filterE )
+__TBB_SYMBOL( _ZN3tbb6filterD2Ev )
+__TBB_SYMBOL( _ZN3tbb8pipeline10add_filterERNS_6filterE )
+__TBB_SYMBOL( _ZN3tbb8pipeline12inject_tokenERNS_4taskE )
+__TBB_SYMBOL( _ZN3tbb8pipeline13remove_filterERNS_6filterE )
+__TBB_SYMBOL( _ZN3tbb8pipeline3runEy ) // MODIFIED LINUX ENTRY
+#if __TBB_TASK_GROUP_CONTEXT
+__TBB_SYMBOL( _ZN3tbb8pipeline3runEyRNS_18task_group_contextE ) // MODIFIED LINUX ENTRY
+#endif
+__TBB_SYMBOL( _ZN3tbb8pipeline5clearEv )
+__TBB_SYMBOL( _ZN3tbb19thread_bound_filter12process_itemEv )
+__TBB_SYMBOL( _ZN3tbb19thread_bound_filter16try_process_itemEv )
+__TBB_SYMBOL( _ZTIN3tbb8pipelineE )
+__TBB_SYMBOL( _ZTSN3tbb8pipelineE )
+__TBB_SYMBOL( _ZTVN3tbb8pipelineE )
+__TBB_SYMBOL( _ZN3tbb8pipelineC1Ev )
+__TBB_SYMBOL( _ZN3tbb8pipelineC2Ev )
+__TBB_SYMBOL( _ZN3tbb8pipelineD0Ev )
+__TBB_SYMBOL( _ZN3tbb8pipelineD1Ev )
+__TBB_SYMBOL( _ZN3tbb8pipelineD2Ev )
+__TBB_SYMBOL( _ZN3tbb6filter16set_end_of_inputEv )
+
+/* queuing_rw_mutex.cpp */
+__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex18internal_constructEv )
+__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock17upgrade_to_writerEv )
+__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock19downgrade_to_readerEv )
+__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock7acquireERS0_b )
+__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock7releaseEv )
+__TBB_SYMBOL( _ZN3tbb16queuing_rw_mutex11scoped_lock11try_acquireERS0_b )
+
+/* reader_writer_lock.cpp */
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock11scoped_lock16internal_destroyEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock11scoped_lock18internal_constructERS1_ )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock13try_lock_readEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock16scoped_lock_read16internal_destroyEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock16scoped_lock_read18internal_constructERS1_ )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock16internal_destroyEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock18internal_constructEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock4lockEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock6unlockEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock8try_lockEv )
+__TBB_SYMBOL( _ZN3tbb10interface518reader_writer_lock9lock_readEv )
+
+#if !TBB_NO_LEGACY
+/* spin_rw_mutex.cpp v2 */
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex16internal_upgradeEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex22internal_itt_releasingEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_acquire_readerEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_acquire_writerEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex18internal_downgradeEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_release_readerEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex23internal_release_writerEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex27internal_try_acquire_readerEPS0_ )
+__TBB_SYMBOL( _ZN3tbb13spin_rw_mutex27internal_try_acquire_writerEPS0_ )
+#endif
+
+/* spin_rw_mutex v3 */
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v318internal_constructEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v316internal_upgradeEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v318internal_downgradeEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_acquire_readerEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_acquire_writerEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_release_readerEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v323internal_release_writerEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v327internal_try_acquire_readerEv )
+__TBB_SYMBOL( _ZN3tbb16spin_rw_mutex_v327internal_try_acquire_writerEv )
+
+/* spin_mutex.cpp */
+__TBB_SYMBOL( _ZN3tbb10spin_mutex11scoped_lock16internal_acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb10spin_mutex11scoped_lock16internal_releaseEv )
+__TBB_SYMBOL( _ZN3tbb10spin_mutex11scoped_lock20internal_try_acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb10spin_mutex18internal_constructEv )
+
+/* mutex.cpp */
+__TBB_SYMBOL( _ZN3tbb5mutex11scoped_lock16internal_acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb5mutex11scoped_lock16internal_releaseEv )
+__TBB_SYMBOL( _ZN3tbb5mutex11scoped_lock20internal_try_acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb5mutex16internal_destroyEv )
+__TBB_SYMBOL( _ZN3tbb5mutex18internal_constructEv )
+
+/* recursive_mutex.cpp */
+__TBB_SYMBOL( _ZN3tbb15recursive_mutex11scoped_lock16internal_acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb15recursive_mutex11scoped_lock16internal_releaseEv )
+__TBB_SYMBOL( _ZN3tbb15recursive_mutex11scoped_lock20internal_try_acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb15recursive_mutex16internal_destroyEv )
+__TBB_SYMBOL( _ZN3tbb15recursive_mutex18internal_constructEv )
+
+/* QueuingMutex.cpp */
+__TBB_SYMBOL( _ZN3tbb13queuing_mutex18internal_constructEv )
+__TBB_SYMBOL( _ZN3tbb13queuing_mutex11scoped_lock7acquireERS0_ )
+__TBB_SYMBOL( _ZN3tbb13queuing_mutex11scoped_lock7releaseEv )
+__TBB_SYMBOL( _ZN3tbb13queuing_mutex11scoped_lock11try_acquireERS0_ )
+
+/* critical_section.cpp */
+__TBB_SYMBOL( _ZN3tbb8internal19critical_section_v418internal_constructEv )
+
+#if !TBB_NO_LEGACY
+/* concurrent_hash_map */
+__TBB_SYMBOL( _ZNK3tbb8internal21hash_map_segment_base23internal_grow_predicateEv )
+
+/* concurrent_queue.cpp v2 */
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base12internal_popEPv )
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base13internal_pushEPKv )
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base21internal_set_capacityExy ) // MODIFIED LINUX ENTRY
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base23internal_pop_if_presentEPv )
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_base25internal_push_if_not_fullEPKv )
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_baseC2Ey ) // MODIFIED LINUX ENTRY
+__TBB_SYMBOL( _ZN3tbb8internal21concurrent_queue_baseD2Ev )
+__TBB_SYMBOL( _ZTIN3tbb8internal21concurrent_queue_baseE )
+__TBB_SYMBOL( _ZTSN3tbb8internal21concurrent_queue_baseE )
+__TBB_SYMBOL( _ZTVN3tbb8internal21concurrent_queue_baseE )
+__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_base6assignERKS1_ )
+__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_base7advanceEv )
+__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_baseC2ERKNS0_21concurrent_queue_baseE )
+__TBB_SYMBOL( _ZN3tbb8internal30concurrent_queue_iterator_baseD2Ev )
+__TBB_SYMBOL( _ZNK3tbb8internal21concurrent_queue_base13internal_sizeEv )
+#endif
+
+/* concurrent_queue v3 */
+/* constructors */
+__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v3C2Ey ) // MODIFIED LINUX ENTRY
+__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3E )
+__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3Ey ) // MODIFIED LINUX ENTRY
+/* destructors */
+__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v3D2Ev )
+__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v3D2Ev )
+/* typeinfo */
+__TBB_SYMBOL( _ZTIN3tbb8internal24concurrent_queue_base_v3E )
+__TBB_SYMBOL( _ZTSN3tbb8internal24concurrent_queue_base_v3E )
+/* vtable */
+__TBB_SYMBOL( _ZTVN3tbb8internal24concurrent_queue_base_v3E )
+/* methods */
+__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v36assignERKS1_ )
+__TBB_SYMBOL( _ZN3tbb8internal33concurrent_queue_iterator_base_v37advanceEv )
+__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_v321internal_finish_clearEv )
+__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v321internal_set_capacityExy ) // MODIFIED LINUX ENTRY
+__TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v313internal_sizeEv )
+__TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v314internal_emptyEv )
+__TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v324internal_throw_exceptionEv )
+__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v36assignERKS1_ )
+
+#if !TBB_NO_LEGACY
+/* concurrent_vector.cpp v2 */
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base13internal_copyERKS1_yPFvPvPKvyE ) // MODIFIED LINUX ENTRY
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base14internal_clearEPFvPvyEb ) // MODIFIED LINUX ENTRY
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base15internal_assignERKS1_yPFvPvyEPFvS4_PKvyESA_ ) // MODIFIED LINUX ENTRY
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base16internal_grow_byEyyPFvPvyE ) // MODIFIED LINUX ENTRY
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base16internal_reserveEyyy ) // MODIFIED LINUX ENTRY
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base18internal_push_backEyRy ) // MODIFIED LINUX ENTRY
+__TBB_SYMBOL( _ZN3tbb8internal22concurrent_vector_base25internal_grow_to_at_leastEyyPFvPvyE ) // MODIFIED LINUX ENTRY
+__TBB_SYMBOL( _ZNK3tbb8internal22concurrent_vector_base17internal_capacityEv )
+#endif
+
+/* concurrent_vector v3 */
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v313internal_copyERKS1_yPFvPvPKvyE ) // MODIFIED LINUX ENTRY
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v314internal_clearEPFvPvyE ) // MODIFIED LINUX ENTRY
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v315internal_assignERKS1_yPFvPvyEPFvS4_PKvyESA_ ) // MODIFIED LINUX ENTRY
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v316internal_grow_byEyyPFvPvPKvyES4_ ) // MODIFIED LINUX ENTRY
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v316internal_reserveEyyy ) // MODIFIED LINUX ENTRY
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v318internal_push_backEyRy ) // MODIFIED LINUX ENTRY
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v325internal_grow_to_at_leastEyyPFvPvPKvyES4_ ) // MODIFIED LINUX ENTRY
+__TBB_SYMBOL( _ZNK3tbb8internal25concurrent_vector_base_v317internal_capacityEv )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v316internal_compactEyPvPFvS2_yEPFvS2_PKvyE ) // MODIFIED LINUX ENTRY
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v313internal_swapERS1_ )
+__TBB_SYMBOL( _ZNK3tbb8internal25concurrent_vector_base_v324internal_throw_exceptionEy ) // MODIFIED LINUX ENTRY
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v3D2Ev )
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v315internal_resizeEyyyPKvPFvPvyEPFvS4_S3_yE ) // MODIFIED LINUX ENTRY
+__TBB_SYMBOL( _ZN3tbb8internal25concurrent_vector_base_v337internal_grow_to_at_least_with_resultEyyPFvPvPKvyES4_ ) // MODIFIED LINUX ENTRY
+
+/* tbb_thread */
+__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v320hardware_concurrencyEv )
+__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v36detachEv )
+__TBB_SYMBOL( _ZN3tbb8internal16thread_get_id_v3Ev )
+__TBB_SYMBOL( _ZN3tbb8internal15free_closure_v3EPv )
+__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v34joinEv )
+__TBB_SYMBOL( _ZN3tbb8internal13tbb_thread_v314internal_startEPFjPvES2_ )  // MODIFIED LINUX ENTRY
+__TBB_SYMBOL( _ZN3tbb8internal19allocate_closure_v3Ey )  // MODIFIED LINUX ENTRY
+__TBB_SYMBOL( _ZN3tbb8internal7move_v3ERNS0_13tbb_thread_v3ES2_ )
+__TBB_SYMBOL( _ZN3tbb8internal15thread_yield_v3Ev )
+__TBB_SYMBOL( _ZN3tbb8internal15thread_sleep_v3ERKNS_10tick_count10interval_tE )
+
+/* condition_variable */
+__TBB_SYMBOL( _ZN3tbb10interface58internal32internal_condition_variable_waitERNS1_14condvar_impl_tEPNS_5mutexEPKNS_10tick_count10interval_tE )
+__TBB_SYMBOL( _ZN3tbb10interface58internal35internal_destroy_condition_variableERNS1_14condvar_impl_tE )
+__TBB_SYMBOL( _ZN3tbb10interface58internal38internal_condition_variable_notify_allERNS1_14condvar_impl_tE )
+__TBB_SYMBOL( _ZN3tbb10interface58internal38internal_condition_variable_notify_oneERNS1_14condvar_impl_tE )
+__TBB_SYMBOL( _ZN3tbb10interface58internal38internal_initialize_condition_variableERNS1_14condvar_impl_tE )
+
+#undef __TBB_SYMBOL
diff --git a/src/tbb/win64-tbb-export.def b/src/tbb/win64-tbb-export.def
index 1ca8ed7..36061d2 100644
--- a/src/tbb/win64-tbb-export.def
+++ b/src/tbb/win64-tbb-export.def
@@ -1,293 +1,26 @@
-; Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+; Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 ;
-; This file is part of Threading Building Blocks.
+; 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.
 ;
-; 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.
+; 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.
 ;
-; 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.
-
 ; This file is organized with a section for each .cpp file.
 ; Each of these sections is in alphabetical order.
 
-#include "tbb/tbb_config.h"
-
 EXPORTS
 
-; Assembly-language support that is called directly by clients
-__TBB_machine_cmpswp1
-__TBB_machine_fetchadd1
-__TBB_machine_fetchstore1
-__TBB_machine_cmpswp2
-__TBB_machine_fetchadd2
-__TBB_machine_fetchstore2
-__TBB_machine_pause
-
-; cache_aligned_allocator.cpp
-?NFS_Allocate at internal@tbb@@YAPEAX_K0PEAX at Z
-?NFS_GetLineSize at internal@tbb@@YA_KXZ
-?NFS_Free at internal@tbb@@YAXPEAX at Z
-?allocate_via_handler_v3 at internal@tbb@@YAPEAX_K at Z
-?deallocate_via_handler_v3 at internal@tbb@@YAXPEAX at Z
-?is_malloc_used_v3 at internal@tbb@@YA_NXZ
-
-
-; task.cpp v3
-?resize at affinity_partitioner_base_v3@internal at tbb@@AEAAXI at Z
-?allocate at allocate_additional_child_of_proxy@internal at tbb@@QEBAAEAVtask at 3@_K at Z
-?allocate at allocate_child_proxy@internal at tbb@@QEBAAEAVtask at 3@_K at Z
-?allocate at allocate_continuation_proxy@internal at tbb@@QEBAAEAVtask at 3@_K at Z
-?allocate at allocate_root_proxy@internal at tbb@@SAAEAVtask at 3@_K at Z
-?destroy at task_base@internal at interface5@tbb@@SAXAEAVtask at 4@@Z
-?free at allocate_additional_child_of_proxy@internal at tbb@@QEBAXAEAVtask at 3@@Z
-?free at allocate_child_proxy@internal at tbb@@QEBAXAEAVtask at 3@@Z
-?free at allocate_continuation_proxy@internal at tbb@@QEBAXAEAVtask at 3@@Z
-?free at allocate_root_proxy@internal at tbb@@SAXAEAVtask at 3@@Z
-?internal_set_ref_count at task@tbb@@AEAAXH at Z
-?internal_decrement_ref_count at task@tbb@@AEAA_JXZ
-?is_owned_by_current_thread at task@tbb@@QEBA_NXZ
-?note_affinity at task@tbb@@UEAAXG at Z
-?self at task@tbb@@SAAEAV12 at XZ
-?spawn_and_wait_for_all at task@tbb@@QEAAXAEAVtask_list at 2@@Z
-?default_num_threads at task_scheduler_init@tbb@@SAHXZ
-?initialize at task_scheduler_init@tbb@@QEAAXH_K at Z
-?initialize at task_scheduler_init@tbb@@QEAAXH at Z
-?terminate at task_scheduler_init@tbb@@QEAAXXZ
-?observe at task_scheduler_observer_v3@internal at tbb@@QEAAX_N at Z
-
-#if !TBB_NO_LEGACY
-; task_v2.cpp
-?destroy at task@tbb@@QEAAXAEAV12@@Z
-#endif
-
-; Exception handling in task scheduler
-#if __TBB_TASK_GROUP_CONTEXT
-?allocate at allocate_root_with_context_proxy@internal at tbb@@QEBAAEAVtask at 3@_K at Z
-?free at allocate_root_with_context_proxy@internal at tbb@@QEBAXAEAVtask at 3@@Z
-?is_group_execution_cancelled at task_group_context@tbb@@QEBA_NXZ
-?cancel_group_execution at task_group_context@tbb@@QEAA_NXZ
-?reset at task_group_context@tbb@@QEAAXXZ
-?init at task_group_context@tbb@@IEAAXXZ
-?register_pending_exception at task_group_context@tbb@@QEAAXXZ
-??1task_group_context at tbb@@QEAA at XZ
-?name at captured_exception@tbb@@UEBAPEBDXZ
-?what at captured_exception@tbb@@UEBAPEBDXZ
-??1captured_exception at tbb@@UEAA at XZ
-?move at captured_exception@tbb@@UEAAPEAV12 at XZ
-?destroy at captured_exception@tbb@@UEAAXXZ
-?set at captured_exception@tbb@@QEAAXPEBD0 at Z
-?clear at captured_exception@tbb@@QEAAXXZ
-#endif /* __TBB_TASK_GROUP_CONTEXT */
-
-; Symbols for exceptions thrown from TBB
-?throw_bad_last_alloc_exception_v4 at internal@tbb@@YAXXZ
-?throw_exception_v4 at internal@tbb@@YAXW4exception_id at 12@@Z
-?what at bad_last_alloc@tbb@@UEBAPEBDXZ
-?what at missing_wait@tbb@@UEBAPEBDXZ
-?what at invalid_multiple_scheduling@tbb@@UEBAPEBDXZ
-?what at improper_lock@tbb@@UEBAPEBDXZ
-
-; tbb_misc.cpp
-?assertion_failure at tbb@@YAXPEBDH00 at Z
-?get_initial_auto_partitioner_divisor at internal@tbb@@YA_KXZ
-?handle_perror at internal@tbb@@YAXHPEBD at Z
-?set_assertion_handler at tbb@@YAP6AXPEBDH00 at ZP6AX0H00@Z at Z
-?runtime_warning at internal@tbb@@YAXPEBDZZ
-TBB_runtime_interface_version
-
-; itt_notify.cpp
-?itt_load_pointer_with_acquire_v3 at internal@tbb@@YAPEAXPEBX at Z
-?itt_store_pointer_with_release_v3 at internal@tbb@@YAXPEAX0 at Z
-?itt_load_pointer_v3 at internal@tbb@@YAPEAXPEBX at Z
-?itt_set_sync_name_v3 at internal@tbb@@YAXPEAXPEB_W at Z
-
-; pipeline.cpp
-??_7pipeline at tbb@@6B@
-??0pipeline at tbb@@QEAA at XZ
-??1filter at tbb@@UEAA at XZ
-??1pipeline at tbb@@UEAA at XZ
-?add_filter at pipeline@tbb@@QEAAXAEAVfilter at 2@@Z
-?clear at pipeline@tbb@@QEAAXXZ
-?inject_token at pipeline@tbb@@AEAAXAEAVtask at 2@@Z
-?run at pipeline@tbb@@QEAAX_K at Z
-#if __TBB_TASK_GROUP_CONTEXT
-?run at pipeline@tbb@@QEAAX_KAEAVtask_group_context at 2@@Z
-#endif
-?process_item at thread_bound_filter@tbb@@QEAA?AW4result_type at 12@XZ
-?try_process_item at thread_bound_filter@tbb@@QEAA?AW4result_type at 12@XZ
-
-; queuing_rw_mutex.cpp
-?internal_construct at queuing_rw_mutex@tbb@@QEAAXXZ
-?acquire at scoped_lock@queuing_rw_mutex at tbb@@QEAAXAEAV23 at _N@Z
-?downgrade_to_reader at scoped_lock@queuing_rw_mutex at tbb@@QEAA_NXZ
-?release at scoped_lock@queuing_rw_mutex at tbb@@QEAAXXZ
-?upgrade_to_writer at scoped_lock@queuing_rw_mutex at tbb@@QEAA_NXZ
-?try_acquire at scoped_lock@queuing_rw_mutex at tbb@@QEAA_NAEAV23 at _N@Z
-
-; reader_writer_lock.cpp
-?try_lock_read at reader_writer_lock@interface5 at tbb@@QEAA_NXZ
-?try_lock at reader_writer_lock@interface5 at tbb@@QEAA_NXZ
-?unlock at reader_writer_lock@interface5 at tbb@@QEAAXXZ
-?lock_read at reader_writer_lock@interface5 at tbb@@QEAAXXZ
-?lock at reader_writer_lock@interface5 at tbb@@QEAAXXZ
-?internal_construct at reader_writer_lock@interface5 at tbb@@AEAAXXZ
-?internal_destroy at reader_writer_lock@interface5 at tbb@@AEAAXXZ
-?internal_construct at scoped_lock@reader_writer_lock at interface5@tbb@@AEAAXAEAV234@@Z
-?internal_destroy at scoped_lock@reader_writer_lock at interface5@tbb@@AEAAXXZ
-?internal_construct at scoped_lock_read@reader_writer_lock at interface5@tbb@@AEAAXAEAV234@@Z
-?internal_destroy at scoped_lock_read@reader_writer_lock at interface5@tbb@@AEAAXXZ
-
-#if !TBB_NO_LEGACY
-; spin_rw_mutex.cpp v2
-?internal_itt_releasing at spin_rw_mutex@tbb@@CAXPEAV12@@Z
-?internal_acquire_writer at spin_rw_mutex@tbb@@CA_NPEAV12@@Z
-?internal_acquire_reader at spin_rw_mutex@tbb@@CAXPEAV12@@Z
-?internal_downgrade at spin_rw_mutex@tbb@@CAXPEAV12@@Z
-?internal_upgrade at spin_rw_mutex@tbb@@CA_NPEAV12@@Z
-?internal_release_reader at spin_rw_mutex@tbb@@CAXPEAV12@@Z
-?internal_release_writer at spin_rw_mutex@tbb@@CAXPEAV12@@Z
-?internal_try_acquire_writer at spin_rw_mutex@tbb@@CA_NPEAV12@@Z
-?internal_try_acquire_reader at spin_rw_mutex@tbb@@CA_NPEAV12@@Z
-#endif
-
-; spin_rw_mutex v3
-?internal_construct at spin_rw_mutex_v3@tbb@@AEAAXXZ
-?internal_upgrade at spin_rw_mutex_v3@tbb@@AEAA_NXZ
-?internal_downgrade at spin_rw_mutex_v3@tbb@@AEAAXXZ
-?internal_acquire_reader at spin_rw_mutex_v3@tbb@@AEAAXXZ
-?internal_acquire_writer at spin_rw_mutex_v3@tbb@@AEAA_NXZ
-?internal_release_reader at spin_rw_mutex_v3@tbb@@AEAAXXZ
-?internal_release_writer at spin_rw_mutex_v3@tbb@@AEAAXXZ
-?internal_try_acquire_reader at spin_rw_mutex_v3@tbb@@AEAA_NXZ
-?internal_try_acquire_writer at spin_rw_mutex_v3@tbb@@AEAA_NXZ
-
-; spin_mutex.cpp
-?internal_construct at spin_mutex@tbb@@QEAAXXZ
-?internal_acquire at scoped_lock@spin_mutex at tbb@@AEAAXAEAV23@@Z
-?internal_release at scoped_lock@spin_mutex at tbb@@AEAAXXZ
-?internal_try_acquire at scoped_lock@spin_mutex at tbb@@AEAA_NAEAV23@@Z
-
-; mutex.cpp
-?internal_acquire at scoped_lock@mutex at tbb@@AEAAXAEAV23@@Z
-?internal_release at scoped_lock@mutex at tbb@@AEAAXXZ
-?internal_try_acquire at scoped_lock@mutex at tbb@@AEAA_NAEAV23@@Z
-?internal_construct at mutex@tbb@@AEAAXXZ
-?internal_destroy at mutex@tbb@@AEAAXXZ
-
-; recursive_mutex.cpp
-?internal_construct at recursive_mutex@tbb@@AEAAXXZ
-?internal_destroy at recursive_mutex@tbb@@AEAAXXZ
-?internal_acquire at scoped_lock@recursive_mutex at tbb@@AEAAXAEAV23@@Z
-?internal_try_acquire at scoped_lock@recursive_mutex at tbb@@AEAA_NAEAV23@@Z
-?internal_release at scoped_lock@recursive_mutex at tbb@@AEAAXXZ
-
-; queuing_mutex.cpp
-?internal_construct at queuing_mutex@tbb@@QEAAXXZ
-?acquire at scoped_lock@queuing_mutex at tbb@@QEAAXAEAV23@@Z
-?release at scoped_lock@queuing_mutex at tbb@@QEAAXXZ
-?try_acquire at scoped_lock@queuing_mutex at tbb@@QEAA_NAEAV23@@Z
-
-;critical_section.cpp
-?internal_construct at critical_section_v4@internal at tbb@@QEAAXXZ
-
-#if !TBB_NO_LEGACY
-; concurrent_hash_map.cpp
-?internal_grow_predicate at hash_map_segment_base@internal at tbb@@QEBA_NXZ
-
-; concurrent_queue.cpp v2
-??0concurrent_queue_base at internal@tbb@@IEAA at _K@Z
-??0concurrent_queue_iterator_base at internal@tbb@@IEAA at AEBVconcurrent_queue_base@12@@Z
-??1concurrent_queue_base at internal@tbb@@MEAA at XZ
-??1concurrent_queue_iterator_base at internal@tbb@@IEAA at XZ
-?advance at concurrent_queue_iterator_base@internal at tbb@@IEAAXXZ
-?assign at concurrent_queue_iterator_base@internal at tbb@@IEAAXAEBV123@@Z
-?internal_pop at concurrent_queue_base@internal at tbb@@IEAAXPEAX at Z
-?internal_pop_if_present at concurrent_queue_base@internal at tbb@@IEAA_NPEAX at Z
-?internal_push at concurrent_queue_base@internal at tbb@@IEAAXPEBX at Z
-?internal_push_if_not_full at concurrent_queue_base@internal at tbb@@IEAA_NPEBX at Z
-?internal_set_capacity at concurrent_queue_base@internal at tbb@@IEAAX_J_K at Z
-?internal_size at concurrent_queue_base@internal at tbb@@IEBA_JXZ
-#endif
-
-; concurrent_queue v3
-??0concurrent_queue_iterator_base_v3 at internal@tbb@@IEAA at AEBVconcurrent_queue_base_v3@12@@Z
-??0concurrent_queue_iterator_base_v3 at internal@tbb@@IEAA at AEBVconcurrent_queue_base_v3@12 at _K@Z
-??1concurrent_queue_iterator_base_v3 at internal@tbb@@IEAA at XZ
-?assign at concurrent_queue_iterator_base_v3@internal at tbb@@IEAAXAEBV123@@Z
-?advance at concurrent_queue_iterator_base_v3@internal at tbb@@IEAAXXZ
-??0concurrent_queue_base_v3 at internal@tbb@@IEAA at _K@Z
-??1concurrent_queue_base_v3 at internal@tbb@@MEAA at XZ
-?internal_push at concurrent_queue_base_v3@internal at tbb@@IEAAXPEBX at Z
-?internal_push_if_not_full at concurrent_queue_base_v3@internal at tbb@@IEAA_NPEBX at Z
-?internal_pop at concurrent_queue_base_v3@internal at tbb@@IEAAXPEAX at Z
-?internal_pop_if_present at concurrent_queue_base_v3@internal at tbb@@IEAA_NPEAX at Z
-?internal_size at concurrent_queue_base_v3@internal at tbb@@IEBA_JXZ
-?internal_empty at concurrent_queue_base_v3@internal at tbb@@IEBA_NXZ
-?internal_finish_clear at concurrent_queue_base_v3@internal at tbb@@IEAAXXZ
-?internal_set_capacity at concurrent_queue_base_v3@internal at tbb@@IEAAX_J_K at Z
-?internal_throw_exception at concurrent_queue_base_v3@internal at tbb@@IEBAXXZ
-?assign at concurrent_queue_base_v3@internal at tbb@@IEAAXAEBV123@@Z
-
-#if !TBB_NO_LEGACY
-; concurrent_vector.cpp v2
-?internal_assign at concurrent_vector_base@internal at tbb@@IEAAXAEBV123 at _KP6AXPEAX1@ZP6AX2PEBX1 at Z5@Z
-?internal_capacity at concurrent_vector_base@internal at tbb@@IEBA_KXZ
-?internal_clear at concurrent_vector_base@internal at tbb@@IEAAXP6AXPEAX_K at Z_N@Z
-?internal_copy at concurrent_vector_base@internal at tbb@@IEAAXAEBV123 at _KP6AXPEAXPEBX1@Z at Z
-?internal_grow_by at concurrent_vector_base@internal at tbb@@IEAA_K_K0P6AXPEAX0 at Z@Z
-?internal_grow_to_at_least at concurrent_vector_base@internal at tbb@@IEAAX_K0P6AXPEAX0 at Z@Z
-?internal_push_back at concurrent_vector_base@internal at tbb@@IEAAPEAX_KAEA_K at Z
-?internal_reserve at concurrent_vector_base@internal at tbb@@IEAAX_K00 at Z
-#endif
-
-; concurrent_vector v3
-??1concurrent_vector_base_v3 at internal@tbb@@IEAA at XZ
-?internal_assign at concurrent_vector_base_v3@internal at tbb@@IEAAXAEBV123 at _KP6AXPEAX1@ZP6AX2PEBX1 at Z5@Z
-?internal_capacity at concurrent_vector_base_v3@internal at tbb@@IEBA_KXZ
-?internal_clear at concurrent_vector_base_v3@internal at tbb@@IEAA_KP6AXPEAX_K at Z@Z
-?internal_copy at concurrent_vector_base_v3@internal at tbb@@IEAAXAEBV123 at _KP6AXPEAXPEBX1@Z at Z
-?internal_grow_by at concurrent_vector_base_v3@internal at tbb@@IEAA_K_K0P6AXPEAXPEBX0 at Z2@Z
-?internal_grow_to_at_least at concurrent_vector_base_v3@internal at tbb@@IEAAX_K0P6AXPEAXPEBX0 at Z2@Z
-?internal_push_back at concurrent_vector_base_v3@internal at tbb@@IEAAPEAX_KAEA_K at Z
-?internal_reserve at concurrent_vector_base_v3@internal at tbb@@IEAAX_K00 at Z
-?internal_compact at concurrent_vector_base_v3@internal at tbb@@IEAAPEAX_KPEAXP6AX10 at ZP6AX1PEBX0@Z at Z
-?internal_swap at concurrent_vector_base_v3@internal at tbb@@IEAAXAEAV123@@Z
-?internal_throw_exception at concurrent_vector_base_v3@internal at tbb@@IEBAX_K at Z
-?internal_resize at concurrent_vector_base_v3@internal at tbb@@IEAAX_K00PEBXP6AXPEAX0 at ZP6AX210@Z at Z
-?internal_grow_to_at_least_with_result at concurrent_vector_base_v3@internal at tbb@@IEAA_K_K0P6AXPEAXPEBX0 at Z2@Z
-
-; tbb_thread
-?allocate_closure_v3 at internal@tbb@@YAPEAX_K at Z
-?detach at tbb_thread_v3@internal at tbb@@QEAAXXZ
-?free_closure_v3 at internal@tbb@@YAXPEAX at Z
-?hardware_concurrency at tbb_thread_v3@internal at tbb@@SAIXZ
-?internal_start at tbb_thread_v3@internal at tbb@@AEAAXP6AIPEAX at Z0@Z
-?join at tbb_thread_v3@internal at tbb@@QEAAXXZ
-?move_v3 at internal@tbb@@YAXAEAVtbb_thread_v3 at 12@0 at Z
-?thread_get_id_v3 at internal@tbb@@YA?AVid at tbb_thread_v3@12 at XZ
-?thread_sleep_v3 at internal@tbb@@YAXAEBVinterval_t at tick_count@2@@Z
-?thread_yield_v3 at internal@tbb@@YAXXZ
+#define __TBB_SYMBOL( sym ) sym
+#include "win64-tbb-export.lst"
 
-; condition_variable
-?internal_initialize_condition_variable at internal@interface5 at tbb@@YAXAEATcondvar_impl_t at 123@@Z
-?internal_condition_variable_wait at internal@interface5 at tbb@@YA_NAEATcondvar_impl_t at 123@PEAVmutex at 3@PEBVinterval_t at tick_count@3@@Z
-?internal_condition_variable_notify_one at internal@interface5 at tbb@@YAXAEATcondvar_impl_t at 123@@Z
-?internal_condition_variable_notify_all at internal@interface5 at tbb@@YAXAEATcondvar_impl_t at 123@@Z
-?internal_destroy_condition_variable at internal@interface5 at tbb@@YAXAEATcondvar_impl_t at 123@@Z
diff --git a/src/tbb/win64-tbb-export.lst b/src/tbb/win64-tbb-export.lst
new file mode 100644
index 0000000..3be44b2
--- /dev/null
+++ b/src/tbb/win64-tbb-export.lst
@@ -0,0 +1,294 @@
+/*
+    Copyright 2005-2011 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.
+*/
+
+// This file is organized with a section for each .cpp file.
+// Each of these sections is in alphabetical order.
+
+#include "tbb/tbb_config.h"
+
+// Assembly-language support that is called directly by clients
+__TBB_SYMBOL( __TBB_machine_cmpswp1 )
+__TBB_SYMBOL( __TBB_machine_fetchadd1 )
+__TBB_SYMBOL( __TBB_machine_fetchstore1 )
+__TBB_SYMBOL( __TBB_machine_cmpswp2 )
+__TBB_SYMBOL( __TBB_machine_fetchadd2 )
+__TBB_SYMBOL( __TBB_machine_fetchstore2 )
+__TBB_SYMBOL( __TBB_machine_pause )
+
+// cache_aligned_allocator.cpp
+__TBB_SYMBOL( ?NFS_Allocate at internal@tbb@@YAPEAX_K0PEAX at Z )
+__TBB_SYMBOL( ?NFS_GetLineSize at internal@tbb@@YA_KXZ )
+__TBB_SYMBOL( ?NFS_Free at internal@tbb@@YAXPEAX at Z )
+__TBB_SYMBOL( ?allocate_via_handler_v3 at internal@tbb@@YAPEAX_K at Z )
+__TBB_SYMBOL( ?deallocate_via_handler_v3 at internal@tbb@@YAXPEAX at Z )
+__TBB_SYMBOL( ?is_malloc_used_v3 at internal@tbb@@YA_NXZ )
+
+
+// task.cpp v3
+__TBB_SYMBOL( ?resize at affinity_partitioner_base_v3@internal at tbb@@AEAAXI at Z )
+__TBB_SYMBOL( ?allocate at allocate_additional_child_of_proxy@internal at tbb@@QEBAAEAVtask at 3@_K at Z )
+__TBB_SYMBOL( ?allocate at allocate_child_proxy@internal at tbb@@QEBAAEAVtask at 3@_K at Z )
+__TBB_SYMBOL( ?allocate at allocate_continuation_proxy@internal at tbb@@QEBAAEAVtask at 3@_K at Z )
+__TBB_SYMBOL( ?allocate at allocate_root_proxy@internal at tbb@@SAAEAVtask at 3@_K at Z )
+__TBB_SYMBOL( ?destroy at task_base@internal at interface5@tbb@@SAXAEAVtask at 4@@Z )
+__TBB_SYMBOL( ?free at allocate_additional_child_of_proxy@internal at tbb@@QEBAXAEAVtask at 3@@Z )
+__TBB_SYMBOL( ?free at allocate_child_proxy@internal at tbb@@QEBAXAEAVtask at 3@@Z )
+__TBB_SYMBOL( ?free at allocate_continuation_proxy@internal at tbb@@QEBAXAEAVtask at 3@@Z )
+__TBB_SYMBOL( ?free at allocate_root_proxy@internal at tbb@@SAXAEAVtask at 3@@Z )
+__TBB_SYMBOL( ?internal_set_ref_count at task@tbb@@AEAAXH at Z )
+__TBB_SYMBOL( ?internal_decrement_ref_count at task@tbb@@AEAA_JXZ )
+__TBB_SYMBOL( ?is_owned_by_current_thread at task@tbb@@QEBA_NXZ )
+__TBB_SYMBOL( ?note_affinity at task@tbb@@UEAAXG at Z )
+__TBB_SYMBOL( ?self at task@tbb@@SAAEAV12 at XZ )
+__TBB_SYMBOL( ?spawn_and_wait_for_all at task@tbb@@QEAAXAEAVtask_list at 2@@Z )
+__TBB_SYMBOL( ?default_num_threads at task_scheduler_init@tbb@@SAHXZ )
+__TBB_SYMBOL( ?initialize at task_scheduler_init@tbb@@QEAAXH_K at Z )
+__TBB_SYMBOL( ?initialize at task_scheduler_init@tbb@@QEAAXH at Z )
+__TBB_SYMBOL( ?terminate at task_scheduler_init@tbb@@QEAAXXZ )
+__TBB_SYMBOL( ?observe at task_scheduler_observer_v3@internal at tbb@@QEAAX_N at Z )
+
+#if !TBB_NO_LEGACY
+// task_v2.cpp
+__TBB_SYMBOL( ?destroy at task@tbb@@QEAAXAEAV12@@Z )
+#endif
+
+// Exception handling in task scheduler
+#if __TBB_TASK_GROUP_CONTEXT
+__TBB_SYMBOL( ?allocate at allocate_root_with_context_proxy@internal at tbb@@QEBAAEAVtask at 3@_K at Z )
+__TBB_SYMBOL( ?free at allocate_root_with_context_proxy@internal at tbb@@QEBAXAEAVtask at 3@@Z )
+__TBB_SYMBOL( ?change_group at task@tbb@@QEAAXAEAVtask_group_context at 2@@Z )
+__TBB_SYMBOL( ?is_group_execution_cancelled at task_group_context@tbb@@QEBA_NXZ )
+__TBB_SYMBOL( ?cancel_group_execution at task_group_context@tbb@@QEAA_NXZ )
+__TBB_SYMBOL( ?reset at task_group_context@tbb@@QEAAXXZ )
+__TBB_SYMBOL( ?init at task_group_context@tbb@@IEAAXXZ )
+__TBB_SYMBOL( ?register_pending_exception at task_group_context@tbb@@QEAAXXZ )
+__TBB_SYMBOL( ??1task_group_context at tbb@@QEAA at XZ )
+#if __TBB_TASK_PRIORITY
+__TBB_SYMBOL( ?set_priority at task_group_context@tbb@@QEAAXW4priority_t at 2@@Z )
+__TBB_SYMBOL( ?priority at task_group_context@tbb@@QEBA?AW4priority_t at 2@XZ )
+#endif /* __TBB_TASK_PRIORITY */
+__TBB_SYMBOL( ?name at captured_exception@tbb@@UEBAPEBDXZ )
+__TBB_SYMBOL( ?what at captured_exception@tbb@@UEBAPEBDXZ )
+__TBB_SYMBOL( ??1captured_exception at tbb@@UEAA at XZ )
+__TBB_SYMBOL( ?move at captured_exception@tbb@@UEAAPEAV12 at XZ )
+__TBB_SYMBOL( ?destroy at captured_exception@tbb@@UEAAXXZ )
+__TBB_SYMBOL( ?set at captured_exception@tbb@@QEAAXPEBD0 at Z )
+__TBB_SYMBOL( ?clear at captured_exception@tbb@@QEAAXXZ )
+#endif /* __TBB_TASK_GROUP_CONTEXT */
+
+// Symbols for exceptions thrown from TBB
+__TBB_SYMBOL( ?throw_bad_last_alloc_exception_v4 at internal@tbb@@YAXXZ )
+__TBB_SYMBOL( ?throw_exception_v4 at internal@tbb@@YAXW4exception_id at 12@@Z )
+__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_misc.cpp
+__TBB_SYMBOL( ?assertion_failure at tbb@@YAXPEBDH00 at Z )
+__TBB_SYMBOL( ?get_initial_auto_partitioner_divisor at internal@tbb@@YA_KXZ )
+__TBB_SYMBOL( ?handle_perror at internal@tbb@@YAXHPEBD at Z )
+__TBB_SYMBOL( ?set_assertion_handler at tbb@@YAP6AXPEBDH00 at ZP6AX0H00@Z at Z )
+__TBB_SYMBOL( ?runtime_warning at internal@tbb@@YAXPEBDZZ )
+__TBB_SYMBOL( TBB_runtime_interface_version )
+
+// tbb_main.cpp
+__TBB_SYMBOL( ?itt_load_pointer_with_acquire_v3 at internal@tbb@@YAPEAXPEBX at Z )
+__TBB_SYMBOL( ?itt_store_pointer_with_release_v3 at internal@tbb@@YAXPEAX0 at Z )
+__TBB_SYMBOL( ?call_itt_notify_v5 at internal@tbb@@YAXHPEAX at Z )
+__TBB_SYMBOL( ?itt_load_pointer_v3 at internal@tbb@@YAPEAXPEBX at Z )
+__TBB_SYMBOL( ?itt_set_sync_name_v3 at internal@tbb@@YAXPEAXPEB_W at Z )
+
+// pipeline.cpp
+__TBB_SYMBOL( ??_7pipeline at tbb@@6B@ )
+__TBB_SYMBOL( ??0pipeline at tbb@@QEAA at XZ )
+__TBB_SYMBOL( ??1filter at tbb@@UEAA at XZ )
+__TBB_SYMBOL( ??1pipeline at tbb@@UEAA at XZ )
+__TBB_SYMBOL( ?add_filter at pipeline@tbb@@QEAAXAEAVfilter at 2@@Z )
+__TBB_SYMBOL( ?clear at pipeline@tbb@@QEAAXXZ )
+__TBB_SYMBOL( ?inject_token at pipeline@tbb@@AEAAXAEAVtask at 2@@Z )
+__TBB_SYMBOL( ?run at pipeline@tbb@@QEAAX_K at Z )
+#if __TBB_TASK_GROUP_CONTEXT
+__TBB_SYMBOL( ?run at pipeline@tbb@@QEAAX_KAEAVtask_group_context at 2@@Z )
+#endif
+__TBB_SYMBOL( ?process_item at thread_bound_filter@tbb@@QEAA?AW4result_type at 12@XZ )
+__TBB_SYMBOL( ?try_process_item at thread_bound_filter@tbb@@QEAA?AW4result_type at 12@XZ )
+__TBB_SYMBOL( ?set_end_of_input at filter@tbb@@IEAAXXZ )
+
+// queuing_rw_mutex.cpp
+__TBB_SYMBOL( ?internal_construct at queuing_rw_mutex@tbb@@QEAAXXZ )
+__TBB_SYMBOL( ?acquire at scoped_lock@queuing_rw_mutex at tbb@@QEAAXAEAV23 at _N@Z )
+__TBB_SYMBOL( ?downgrade_to_reader at scoped_lock@queuing_rw_mutex at tbb@@QEAA_NXZ )
+__TBB_SYMBOL( ?release at scoped_lock@queuing_rw_mutex at tbb@@QEAAXXZ )
+__TBB_SYMBOL( ?upgrade_to_writer at scoped_lock@queuing_rw_mutex at tbb@@QEAA_NXZ )
+__TBB_SYMBOL( ?try_acquire at scoped_lock@queuing_rw_mutex at tbb@@QEAA_NAEAV23 at _N@Z )
+
+// reader_writer_lock.cpp
+__TBB_SYMBOL( ?try_lock_read at reader_writer_lock@interface5 at tbb@@QEAA_NXZ )
+__TBB_SYMBOL( ?try_lock at reader_writer_lock@interface5 at tbb@@QEAA_NXZ )
+__TBB_SYMBOL( ?unlock at reader_writer_lock@interface5 at tbb@@QEAAXXZ )
+__TBB_SYMBOL( ?lock_read at reader_writer_lock@interface5 at tbb@@QEAAXXZ )
+__TBB_SYMBOL( ?lock at reader_writer_lock@interface5 at tbb@@QEAAXXZ )
+__TBB_SYMBOL( ?internal_construct at reader_writer_lock@interface5 at tbb@@AEAAXXZ )
+__TBB_SYMBOL( ?internal_destroy at reader_writer_lock@interface5 at tbb@@AEAAXXZ )
+__TBB_SYMBOL( ?internal_construct at scoped_lock@reader_writer_lock at interface5@tbb@@AEAAXAEAV234@@Z )
+__TBB_SYMBOL( ?internal_destroy at scoped_lock@reader_writer_lock at interface5@tbb@@AEAAXXZ )
+__TBB_SYMBOL( ?internal_construct at scoped_lock_read@reader_writer_lock at interface5@tbb@@AEAAXAEAV234@@Z )
+__TBB_SYMBOL( ?internal_destroy at scoped_lock_read@reader_writer_lock at interface5@tbb@@AEAAXXZ )
+
+#if !TBB_NO_LEGACY
+// spin_rw_mutex.cpp v2
+__TBB_SYMBOL( ?internal_itt_releasing at spin_rw_mutex@tbb@@CAXPEAV12@@Z )
+__TBB_SYMBOL( ?internal_acquire_writer at spin_rw_mutex@tbb@@CA_NPEAV12@@Z )
+__TBB_SYMBOL( ?internal_acquire_reader at spin_rw_mutex@tbb@@CAXPEAV12@@Z )
+__TBB_SYMBOL( ?internal_downgrade at spin_rw_mutex@tbb@@CAXPEAV12@@Z )
+__TBB_SYMBOL( ?internal_upgrade at spin_rw_mutex@tbb@@CA_NPEAV12@@Z )
+__TBB_SYMBOL( ?internal_release_reader at spin_rw_mutex@tbb@@CAXPEAV12@@Z )
+__TBB_SYMBOL( ?internal_release_writer at spin_rw_mutex@tbb@@CAXPEAV12@@Z )
+__TBB_SYMBOL( ?internal_try_acquire_writer at spin_rw_mutex@tbb@@CA_NPEAV12@@Z )
+__TBB_SYMBOL( ?internal_try_acquire_reader at spin_rw_mutex@tbb@@CA_NPEAV12@@Z )
+#endif
+
+// spin_rw_mutex v3
+__TBB_SYMBOL( ?internal_construct at spin_rw_mutex_v3@tbb@@AEAAXXZ )
+__TBB_SYMBOL( ?internal_upgrade at spin_rw_mutex_v3@tbb@@AEAA_NXZ )
+__TBB_SYMBOL( ?internal_downgrade at spin_rw_mutex_v3@tbb@@AEAAXXZ )
+__TBB_SYMBOL( ?internal_acquire_reader at spin_rw_mutex_v3@tbb@@AEAAXXZ )
+__TBB_SYMBOL( ?internal_acquire_writer at spin_rw_mutex_v3@tbb@@AEAA_NXZ )
+__TBB_SYMBOL( ?internal_release_reader at spin_rw_mutex_v3@tbb@@AEAAXXZ )
+__TBB_SYMBOL( ?internal_release_writer at spin_rw_mutex_v3@tbb@@AEAAXXZ )
+__TBB_SYMBOL( ?internal_try_acquire_reader at spin_rw_mutex_v3@tbb@@AEAA_NXZ )
+__TBB_SYMBOL( ?internal_try_acquire_writer at spin_rw_mutex_v3@tbb@@AEAA_NXZ )
+
+// spin_mutex.cpp
+__TBB_SYMBOL( ?internal_construct at spin_mutex@tbb@@QEAAXXZ )
+__TBB_SYMBOL( ?internal_acquire at scoped_lock@spin_mutex at tbb@@AEAAXAEAV23@@Z )
+__TBB_SYMBOL( ?internal_release at scoped_lock@spin_mutex at tbb@@AEAAXXZ )
+__TBB_SYMBOL( ?internal_try_acquire at scoped_lock@spin_mutex at tbb@@AEAA_NAEAV23@@Z )
+
+// mutex.cpp
+__TBB_SYMBOL( ?internal_acquire at scoped_lock@mutex at tbb@@AEAAXAEAV23@@Z )
+__TBB_SYMBOL( ?internal_release at scoped_lock@mutex at tbb@@AEAAXXZ )
+__TBB_SYMBOL( ?internal_try_acquire at scoped_lock@mutex at tbb@@AEAA_NAEAV23@@Z )
+__TBB_SYMBOL( ?internal_construct at mutex@tbb@@AEAAXXZ )
+__TBB_SYMBOL( ?internal_destroy at mutex@tbb@@AEAAXXZ )
+
+// recursive_mutex.cpp
+__TBB_SYMBOL( ?internal_construct at recursive_mutex@tbb@@AEAAXXZ )
+__TBB_SYMBOL( ?internal_destroy at recursive_mutex@tbb@@AEAAXXZ )
+__TBB_SYMBOL( ?internal_acquire at scoped_lock@recursive_mutex at tbb@@AEAAXAEAV23@@Z )
+__TBB_SYMBOL( ?internal_try_acquire at scoped_lock@recursive_mutex at tbb@@AEAA_NAEAV23@@Z )
+__TBB_SYMBOL( ?internal_release at scoped_lock@recursive_mutex at tbb@@AEAAXXZ )
+
+// queuing_mutex.cpp
+__TBB_SYMBOL( ?internal_construct at queuing_mutex@tbb@@QEAAXXZ )
+__TBB_SYMBOL( ?acquire at scoped_lock@queuing_mutex at tbb@@QEAAXAEAV23@@Z )
+__TBB_SYMBOL( ?release at scoped_lock@queuing_mutex at tbb@@QEAAXXZ )
+__TBB_SYMBOL( ?try_acquire at scoped_lock@queuing_mutex at tbb@@QEAA_NAEAV23@@Z )
+
+//critical_section.cpp
+__TBB_SYMBOL( ?internal_construct at critical_section_v4@internal at tbb@@QEAAXXZ )
+
+#if !TBB_NO_LEGACY
+// concurrent_hash_map.cpp
+__TBB_SYMBOL( ?internal_grow_predicate at hash_map_segment_base@internal at tbb@@QEBA_NXZ )
+
+// concurrent_queue.cpp v2
+__TBB_SYMBOL( ??0concurrent_queue_base at internal@tbb@@IEAA at _K@Z )
+__TBB_SYMBOL( ??0concurrent_queue_iterator_base at internal@tbb@@IEAA at AEBVconcurrent_queue_base@12@@Z )
+__TBB_SYMBOL( ??1concurrent_queue_base at internal@tbb@@MEAA at XZ )
+__TBB_SYMBOL( ??1concurrent_queue_iterator_base at internal@tbb@@IEAA at XZ )
+__TBB_SYMBOL( ?advance at concurrent_queue_iterator_base@internal at tbb@@IEAAXXZ )
+__TBB_SYMBOL( ?assign at concurrent_queue_iterator_base@internal at tbb@@IEAAXAEBV123@@Z )
+__TBB_SYMBOL( ?internal_pop at concurrent_queue_base@internal at tbb@@IEAAXPEAX at Z )
+__TBB_SYMBOL( ?internal_pop_if_present at concurrent_queue_base@internal at tbb@@IEAA_NPEAX at Z )
+__TBB_SYMBOL( ?internal_push at concurrent_queue_base@internal at tbb@@IEAAXPEBX at Z )
+__TBB_SYMBOL( ?internal_push_if_not_full at concurrent_queue_base@internal at tbb@@IEAA_NPEBX at Z )
+__TBB_SYMBOL( ?internal_set_capacity at concurrent_queue_base@internal at tbb@@IEAAX_J_K at Z )
+__TBB_SYMBOL( ?internal_size at concurrent_queue_base@internal at tbb@@IEBA_JXZ )
+#endif
+
+// concurrent_queue v3
+__TBB_SYMBOL( ??0concurrent_queue_iterator_base_v3 at internal@tbb@@IEAA at AEBVconcurrent_queue_base_v3@12@@Z )
+__TBB_SYMBOL( ??0concurrent_queue_iterator_base_v3 at internal@tbb@@IEAA at AEBVconcurrent_queue_base_v3@12 at _K@Z )
+__TBB_SYMBOL( ??1concurrent_queue_iterator_base_v3 at internal@tbb@@IEAA at XZ )
+__TBB_SYMBOL( ?assign at concurrent_queue_iterator_base_v3@internal at tbb@@IEAAXAEBV123@@Z )
+__TBB_SYMBOL( ?advance at concurrent_queue_iterator_base_v3@internal at tbb@@IEAAXXZ )
+__TBB_SYMBOL( ??0concurrent_queue_base_v3 at internal@tbb@@IEAA at _K@Z )
+__TBB_SYMBOL( ??1concurrent_queue_base_v3 at internal@tbb@@MEAA at XZ )
+__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_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 )
+__TBB_SYMBOL( ?internal_set_capacity at concurrent_queue_base_v3@internal at tbb@@IEAAX_J_K at Z )
+__TBB_SYMBOL( ?internal_throw_exception at concurrent_queue_base_v3@internal at tbb@@IEBAXXZ )
+__TBB_SYMBOL( ?assign at concurrent_queue_base_v3@internal at tbb@@IEAAXAEBV123@@Z )
+
+#if !TBB_NO_LEGACY
+// concurrent_vector.cpp v2
+__TBB_SYMBOL( ?internal_assign at concurrent_vector_base@internal at tbb@@IEAAXAEBV123 at _KP6AXPEAX1@ZP6AX2PEBX1 at Z5@Z )
+__TBB_SYMBOL( ?internal_capacity at concurrent_vector_base@internal at tbb@@IEBA_KXZ )
+__TBB_SYMBOL( ?internal_clear at concurrent_vector_base@internal at tbb@@IEAAXP6AXPEAX_K at Z_N@Z )
+__TBB_SYMBOL( ?internal_copy at concurrent_vector_base@internal at tbb@@IEAAXAEBV123 at _KP6AXPEAXPEBX1@Z at Z )
+__TBB_SYMBOL( ?internal_grow_by at concurrent_vector_base@internal at tbb@@IEAA_K_K0P6AXPEAX0 at Z@Z )
+__TBB_SYMBOL( ?internal_grow_to_at_least at concurrent_vector_base@internal at tbb@@IEAAX_K0P6AXPEAX0 at Z@Z )
+__TBB_SYMBOL( ?internal_push_back at concurrent_vector_base@internal at tbb@@IEAAPEAX_KAEA_K at Z )
+__TBB_SYMBOL( ?internal_reserve at concurrent_vector_base@internal at tbb@@IEAAX_K00 at Z )
+#endif
+
+// concurrent_vector v3
+__TBB_SYMBOL( ??1concurrent_vector_base_v3 at internal@tbb@@IEAA at XZ )
+__TBB_SYMBOL( ?internal_assign at concurrent_vector_base_v3@internal at tbb@@IEAAXAEBV123 at _KP6AXPEAX1@ZP6AX2PEBX1 at Z5@Z )
+__TBB_SYMBOL( ?internal_capacity at concurrent_vector_base_v3@internal at tbb@@IEBA_KXZ )
+__TBB_SYMBOL( ?internal_clear at concurrent_vector_base_v3@internal at tbb@@IEAA_KP6AXPEAX_K at Z@Z )
+__TBB_SYMBOL( ?internal_copy at concurrent_vector_base_v3@internal at tbb@@IEAAXAEBV123 at _KP6AXPEAXPEBX1@Z at Z )
+__TBB_SYMBOL( ?internal_grow_by at concurrent_vector_base_v3@internal at tbb@@IEAA_K_K0P6AXPEAXPEBX0 at Z2@Z )
+__TBB_SYMBOL( ?internal_grow_to_at_least at concurrent_vector_base_v3@internal at tbb@@IEAAX_K0P6AXPEAXPEBX0 at Z2@Z )
+__TBB_SYMBOL( ?internal_push_back at concurrent_vector_base_v3@internal at tbb@@IEAAPEAX_KAEA_K at Z )
+__TBB_SYMBOL( ?internal_reserve at concurrent_vector_base_v3@internal at tbb@@IEAAX_K00 at Z )
+__TBB_SYMBOL( ?internal_compact at concurrent_vector_base_v3@internal at tbb@@IEAAPEAX_KPEAXP6AX10 at ZP6AX1PEBX0@Z at Z )
+__TBB_SYMBOL( ?internal_swap at concurrent_vector_base_v3@internal at tbb@@IEAAXAEAV123@@Z )
+__TBB_SYMBOL( ?internal_throw_exception at concurrent_vector_base_v3@internal at tbb@@IEBAX_K at Z )
+__TBB_SYMBOL( ?internal_resize at concurrent_vector_base_v3@internal at tbb@@IEAAX_K00PEBXP6AXPEAX0 at ZP6AX210@Z at Z )
+__TBB_SYMBOL( ?internal_grow_to_at_least_with_result at concurrent_vector_base_v3@internal at tbb@@IEAA_K_K0P6AXPEAXPEBX0 at Z2@Z )
+
+// tbb_thread
+__TBB_SYMBOL( ?allocate_closure_v3 at internal@tbb@@YAPEAX_K at Z )
+__TBB_SYMBOL( ?detach at tbb_thread_v3@internal at tbb@@QEAAXXZ )
+__TBB_SYMBOL( ?free_closure_v3 at internal@tbb@@YAXPEAX at Z )
+__TBB_SYMBOL( ?hardware_concurrency at tbb_thread_v3@internal at tbb@@SAIXZ )
+__TBB_SYMBOL( ?internal_start at tbb_thread_v3@internal at tbb@@AEAAXP6AIPEAX at Z0@Z )
+__TBB_SYMBOL( ?join at tbb_thread_v3@internal at tbb@@QEAAXXZ )
+__TBB_SYMBOL( ?move_v3 at internal@tbb@@YAXAEAVtbb_thread_v3 at 12@0 at Z )
+__TBB_SYMBOL( ?thread_get_id_v3 at internal@tbb@@YA?AVid at tbb_thread_v3@12 at XZ )
+__TBB_SYMBOL( ?thread_sleep_v3 at internal@tbb@@YAXAEBVinterval_t at tick_count@2@@Z )
+__TBB_SYMBOL( ?thread_yield_v3 at internal@tbb@@YAXXZ )
+
+// condition_variable
+__TBB_SYMBOL( ?internal_initialize_condition_variable at internal@interface5 at tbb@@YAXAEATcondvar_impl_t at 123@@Z )
+__TBB_SYMBOL( ?internal_condition_variable_wait at internal@interface5 at tbb@@YA_NAEATcondvar_impl_t at 123@PEAVmutex at 3@PEBVinterval_t at tick_count@3@@Z )
+__TBB_SYMBOL( ?internal_condition_variable_notify_one at internal@interface5 at tbb@@YAXAEATcondvar_impl_t at 123@@Z )
+__TBB_SYMBOL( ?internal_condition_variable_notify_all at internal@interface5 at tbb@@YAXAEATcondvar_impl_t at 123@@Z )
+__TBB_SYMBOL( ?internal_destroy_condition_variable at internal@interface5 at tbb@@YAXAEATcondvar_impl_t at 123@@Z )
+
+#undef __TBB_SYMBOL
diff --git a/src/tbb/xbox360-tbb-export.def b/src/tbb/xbox360-tbb-export.def
index ac5f14e..6b4b207 100644
--- a/src/tbb/xbox360-tbb-export.def
+++ b/src/tbb/xbox360-tbb-export.def
@@ -1,4 +1,4 @@
-; Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+; Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 ;
 ; This file is part of Threading Building Blocks.
 ;
@@ -92,7 +92,7 @@ EXPORTS
 ?set_assertion_handler at tbb@@YAP6AXPBDH00 at ZP6AX0H00@Z at Z @40
 ?runtime_warning at internal@tbb@@YAXPBDZZ @41
 
-; itt_notify.cpp
+; tbb_main.cpp
 ?itt_load_pointer_with_acquire_v3 at internal@tbb@@YAPAXPBX at Z @42
 ?itt_store_pointer_with_release_v3 at internal@tbb@@YAXPAX0 at Z @43
 
diff --git a/src/tbbmalloc/Customize.h b/src/tbbmalloc/Customize.h
index 2ad17a9..51c2810 100644
--- a/src/tbbmalloc/Customize.h
+++ b/src/tbbmalloc/Customize.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -70,18 +70,16 @@ extern "C" void mallocProcessShutdownNotification(void);
     There are no methods "acquire" or "release".  The scoped_lock must be used
     in a strict block-scoped locking pattern.  Omitting these methods permitted
     further simplication. */
-class MallocMutex {
-    unsigned char value;
+class MallocMutex : tbb::internal::no_copy {
+    __TBB_Byte value;
 
-    //! Deny assignment
-    void operator=( MallocMutex& MallocMutex );
 public:
-    class scoped_lock {
-        const unsigned char value;
+    class scoped_lock : tbb::internal::no_copy {
+        const __TBB_Byte unlock_value;
         MallocMutex& mutex;
     public:
-        scoped_lock( MallocMutex& m ) : value( __TBB_LockByte(m.value)), mutex(m) {}
-        ~scoped_lock() { __TBB_store_with_release(mutex.value, value); }
+        scoped_lock( MallocMutex& m ) : unlock_value( __TBB_LockByte(m.value)), mutex(m) {}
+        ~scoped_lock() { __TBB_UnlockByte(mutex.value, unlock_value); }
     };
     friend class scoped_lock;
 };
diff --git a/src/tbbmalloc/LifoList.h b/src/tbbmalloc/LifoList.h
index e45934c..45eb363 100644
--- a/src/tbbmalloc/LifoList.h
+++ b/src/tbbmalloc/LifoList.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbbmalloc/MapMemory.h b/src/tbbmalloc/MapMemory.h
index 4ec32bf..ee18082 100644
--- a/src/tbbmalloc/MapMemory.h
+++ b/src/tbbmalloc/MapMemory.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -61,7 +61,7 @@ int UnmapMemory(void *area, size_t bytes)
     return munmap(area, bytes);
 }
 
-#elif _WIN32 || _WIN64
+#elif (_WIN32 || _WIN64) && !_XBOX
 #include <windows.h>
 
 #define MEMORY_MAPPING_USES_MALLOC 0
diff --git a/src/tbbmalloc/MemoryAllocator.cpp b/src/tbbmalloc/MemoryAllocator.cpp
deleted file mode 100644
index 482caa3..0000000
--- a/src/tbbmalloc/MemoryAllocator.cpp
+++ /dev/null
@@ -1,2770 +0,0 @@
-/*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks.
-
-    Threading Building Blocks is free software; you can redistribute it
-    and/or modify it under the terms of the GNU General Public License
-    version 2 as published by the Free Software Foundation.
-
-    Threading Building Blocks is distributed in the hope that it will be
-    useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-    of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with Threading Building Blocks; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    As a special exception, you may use this file as part of a free software
-    library without restriction.  Specifically, if other files instantiate
-    templates or use macros or inline functions from this file, or you compile
-    this file and link it with other files to produce an executable, this
-    file does not by itself cause the resulting executable to be covered by
-    the GNU General Public License.  This exception does not however
-    invalidate any other reasons why the executable file might be covered by
-    the GNU General Public License.
-*/
-
-
-#include "TypeDefinitions.h" /* Also includes customization layer Customize.h */
-
-#if USE_PTHREAD
-    // Some pthreads documentation says that <pthreads.h> must be first header.
-    #include <pthread.h>
-    #define TlsSetValue_func pthread_setspecific
-    #define TlsGetValue_func pthread_getspecific
-    typedef pthread_key_t tls_key_t;
-    #include <sched.h>
-    inline void do_yield() {sched_yield();}
-
-#elif USE_WINTHREAD
-    #define _WIN32_WINNT 0x0400
-    #include <windows.h>
-    #define TlsSetValue_func TlsSetValue
-    #define TlsGetValue_func TlsGetValue
-    typedef DWORD tls_key_t;
-    inline void do_yield() {SwitchToThread();}
-
-#else
-    #error Must define USE_PTHREAD or USE_WINTHREAD
-
-#endif
-
-// intrin.h available since VS2005
-#if defined(_MSC_VER) && _MSC_VER >= 1400
-#define __TBB_HAS_INTRIN_H 1
-#else
-#define __TBB_HAS_INTRIN_H 0
-#endif
-
-#if __sun || __SUNPRO_CC
-#define __asm__ asm 
-#endif
-
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <new>        /* for placement new */
-#if __TBB_HAS_INTRIN_H
-#include <intrin.h>   /* for __cpuid */
-#endif
-
-extern "C" {
-    void * scalable_malloc(size_t size);
-    void   scalable_free(void *object);
-    void mallocThreadShutdownNotification(void*);
-}
-
-/********* Various compile-time options        **************/
-
-#define MALLOC_TRACE 0
-
-#if MALLOC_TRACE
-#define TRACEF(x) printf x
-#else
-#define TRACEF(x) ((void)0)
-#endif /* MALLOC_TRACE */
-
-#define ASSERT_TEXT NULL
-
-//! Define the main synchronization method
-/** It should be specified before including LifoList.h */
-#define FINE_GRAIN_LOCKS
-#include "LifoList.h"
-
-#define COLLECT_STATISTICS MALLOC_DEBUG && defined(MALLOCENV_COLLECT_STATISTICS)
-#include "Statistics.h"
-
-#define FREELIST_NONBLOCKING 1
-
-// 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
-
-/********* End compile-time options        **************/
-
-namespace rml {
-
-namespace internal {
-
-struct Block;
-struct Bin;
-
-#if MALLOC_DEBUG
-#define NOINLINE(decl) decl
-#define ALWAYSINLINE(decl) decl
-
-#elif __INTEL_COMPILER || _MSC_VER
-#define NOINLINE(decl) __declspec(noinline) decl
-#define ALWAYSINLINE(decl) __forceinline decl
-
-#elif __GNUC__
-#define NOINLINE(decl) decl __attribute__ ((noinline))
-#define ALWAYSINLINE(decl) decl __attribute__ ((always_inline))
-
-#else
-#define NOINLINE(decl) decl
-#define ALWAYSINLINE(decl) decl
-
-#endif
-
-static NOINLINE( Block* getPublicFreeListBlock(Bin* bin) );
-static NOINLINE( void moveBlockToBinFront(Block *block) );
-static NOINLINE( void processLessUsedBlock(Block *block) );
-static NOINLINE( void doInitialization() );
-
-ALWAYSINLINE( Bin* getAllocationBin(size_t size) );
-ALWAYSINLINE( bool isMallocInitialized() );
-
-#undef ALWAYSINLINE
-#undef NOINLINE
-
-/******* A helper class to support overriding malloc with scalable_malloc *******/
-#if MALLOC_CHECK_RECURSION
-
-class RecursiveMallocCallProtector {
-    // pointer to an automatic data of holding thread
-    static void       *autoObjPtr;
-    static MallocMutex rmc_mutex;
-    static pthread_t   owner_thread;
-/* Under FreeBSD 8.0 1st call to any pthread function including pthread_self
-   leads to pthread initialization, that causes malloc calls. As 1st usage of
-   RecursiveMallocCallProtector can be before pthread initialized, pthread calls
-   can't be used in 1st instance of RecursiveMallocCallProtector.
-   RecursiveMallocCallProtector is used 1st time in doInitialization(),
-   so there is a guarantee that on 2nd usage pthread is initialized. 
-   No such situation observed with other supported OSes.
- */
-#if __FreeBSD__
-    static bool        canUsePthread;
-#else
-    static const bool  canUsePthread = true;
-#endif
-    static bool mallocRecursionDetected;
-
-    MallocMutex::scoped_lock* lock_acquired;
-    char scoped_lock_space[sizeof(MallocMutex::scoped_lock)+1];
-
-    static uintptr_t absDiffPtr(void *x, void *y) {
-        uintptr_t xi = (uintptr_t)x, yi = (uintptr_t)y;
-        return xi > yi ? xi - yi : yi - xi;
-    }
-public:
-
-    RecursiveMallocCallProtector() : lock_acquired(NULL) {
-        lock_acquired = new (scoped_lock_space) MallocMutex::scoped_lock( rmc_mutex );
-        if (canUsePthread)
-            owner_thread = pthread_self();
-        autoObjPtr = &scoped_lock_space;
-    }
-    ~RecursiveMallocCallProtector() {
-        if (lock_acquired) {
-            autoObjPtr = NULL;
-            lock_acquired->~scoped_lock();
-        }
-    }
-    static bool sameThreadActive() {
-        if (!autoObjPtr) // fast path
-            return false;
-        // Some thread has an active recursive call protector; check if the current one.
-        // Exact pthread_self based test
-        if (canUsePthread)
-            if (pthread_equal( owner_thread, pthread_self() )) {
-                mallocRecursionDetected = true;
-                return true;
-            } else
-                return false;
-        // inexact stack size based test
-        const uintptr_t threadStackSz = 2*1024*1024;
-        int dummy;
-        return absDiffPtr(autoObjPtr, &dummy)<threadStackSz;
-    }
-    static bool noRecursion() {
-        MALLOC_ASSERT(isMallocInitialized(), 
-                      "Recursion status can be checked only after initialization.");
-        /* mallocRecursionDetected is only modified in doInitialization,
-           so can be read without memory barriers */
-        return !mallocRecursionDetected;
-    }
-/* The function is called on 1st scalable_malloc call to check if malloc calls
-   scalable_malloc (nested call must set mallocRecursionDetected). */
-    static void detectNaiveOverload() {
-        if (!malloc_proxy) {
-#if __FreeBSD__
-/* If !canUsePthread, we can't call pthread_self() before, but now pthread 
-   is already on, so can do it. False positives here lead to silent switching 
-   from malloc to mmap for all large allocations with bad performance impact. */
-            if (!canUsePthread) {
-                canUsePthread = true;
-                owner_thread = pthread_self();
-            }
-#endif
-            free(malloc(1));
-        }
-    }
-};
-
-
-MallocMutex RecursiveMallocCallProtector::rmc_mutex;
-pthread_t   RecursiveMallocCallProtector::owner_thread;
-void       *RecursiveMallocCallProtector::autoObjPtr;
-bool        RecursiveMallocCallProtector::mallocRecursionDetected;
-#if __FreeBSD__
-bool        RecursiveMallocCallProtector::canUsePthread;
-#endif
-
-#else
-
-class RecursiveMallocCallProtector {
-public:
-    RecursiveMallocCallProtector() {}
-    ~RecursiveMallocCallProtector() {}
-};
-
-#endif  /* MALLOC_CHECK_RECURSION */
-
-/*
- * This number of bins in the TLS that leads to blocks that we can allocate in.
- */
-const uint32_t numBlockBinLimit = 31;
-
- /*
-  * The number of bins to cache large objects.
-  */
-const uint32_t numLargeBlockBins = 1024; // for 1024 max cached size is near 8MB
- 
-/********* The data structures and global objects        **************/
-
-class BackRefIdx { // composite index to backreference array
-private:
-    uint16_t master;      // index in BackRefMaster
-    uint16_t largeObj:1;  // is this object "large"?
-    uint16_t offset  :15; // offset from beginning of BackRefBlock
-public:
-    BackRefIdx() : master((uint16_t)-1) {}
-    bool isInvalid() const { return master == (uint16_t)-1; }
-    bool isLargeObject() const { return largeObj; }
-    uint16_t getMaster() const { return master; }
-    uint16_t getOffset() const { return offset; }
-
-    // only newBackRef can modify BackRefIdx
-    static BackRefIdx newBackRef(bool largeObj);
-};
-
-struct FreeObject {
-    FreeObject  *next;
-};
-
-/*
- * The following constant is used to define the size of struct Block, the block header.
- * The intent is to have the size of a Block multiple of the cache line size, this allows us to
- * get good alignment at the cost of some overhead equal to the amount of padding included in the Block.
- */
-
-const int blockHeaderAlignment = 64; // a common size of a cache line
-
-/* The 'next' field in the block header has to maintain some invariants:
- *   it needs to be on a 16K boundary and the first field in the block.
- *   Any value stored there needs to have the lower 14 bits set to 0
- *   so that various assert work. This means that if you want to smash this memory
- *   for debugging purposes you will need to obey this invariant.
- * The total size of the header needs to be a power of 2 to simplify
- * the alignment requirements. For now it is a 128 byte structure.
- * To avoid false sharing, the fields changed only locally are separated 
- * from the fields changed by foreign threads.
- * Changing the size of the block header would require to change
- * some bin allocation sizes, in particular "fitting" sizes (see above).
- */
-
-struct LocalBlockFields {
-    Block       *next;            /* This field needs to be on a 16K boundary and the first field in the block
-                                     for LIFO lists to work. */
-    Block       *previous;        /* Use double linked list to speed up removal */
-    unsigned int objectSize;
-    unsigned int owner;
-    FreeObject  *bumpPtr;         /* Bump pointer moves from the end to the beginning of a block */
-    FreeObject  *freeList;
-    BackRefIdx   backRefIdx;
-    unsigned int allocatedCount;  /* Number of objects allocated (obviously by the owning thread) */
-    unsigned int isFull;
-};
-
-struct Block : public LocalBlockFields {
-    size_t       __pad_local_fields[(blockHeaderAlignment-sizeof(LocalBlockFields))/sizeof(size_t)];
-    FreeObject  *publicFreeList;
-    Block       *nextPrivatizable;
-    size_t       __pad_public_fields[(blockHeaderAlignment-2*sizeof(void*))/sizeof(size_t)];
-};
-
-struct Bin {
-    Block      *activeBlk;
-    Block      *mailbox;
-    MallocMutex mailLock;
-};
-
-/* 
- * To decrease contention for free blocks, free blocks are split, and access
- * to them is based on process number.
- */
-const int numOfFreeBlockLists = 4;
-
-/*
- * This is an array of LIFO linked lists that one can init, push or pop from
- */
-static LifoList freeBlockList[numOfFreeBlockLists];
-
-/*
- * When a block that is not completely free is returned for reuse by other threads
- * this is where the block goes.
- *
- * LifoList assumes zero initialization; so below its constructors are omitted,
- * to avoid linking with C++ libraries on Linux.
- */
-static char globalBinSpace[sizeof(LifoList)*numBlockBinLimit];
-static LifoList* globalSizeBins = (LifoList*)globalBinSpace;
-
-/*
- * Per-thread pool of 16KB blocks. Idea behind it is to not share with other 
- * threads memory that are likely in local cache(s) of our CPU.
- */
-class FreeBlockPool {
-    Block *head;
-    Block *tail;
-    int    size;
-    void insertBlock(Block *block);
-public:
-    static const int POOL_HIGH_MARK = 32;
-    static const int POOL_LOW_MARK  = 8;
-
-    Block *getBlock();
-    void returnBlock(Block *block);
-    void releaseAllBlocks();
-};
-
-struct TLSData {
-    Bin           bin[numBlockBinLimit];
-    FreeBlockPool pool;
-};
-
-
-static struct LargeBlockCacheStat {
-    uintptr_t age;
-    size_t cacheSize;
-} loCacheStat;
-
-struct LargeMemoryBlock {
-    LargeMemoryBlock *next,          // ptrs in list of cached blocks
-                     *prev;
-    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
-    bool              fromMapMemory;
-    BackRefIdx        backRefIdx;    // cached here, used copy is in LargeObjectHdr
-};
-
-struct LargeObjectHdr {
-    LargeMemoryBlock *memoryBlock;
-    /* Backreference points to LargeObjectHdr. 
-       Duplicated in LargeMemoryBlock to reuse in subsequent allocations. */
-    BackRefIdx       backRefIdx;
-};
-
-class CachedBlocksList {
-    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. */
-    uintptr_t     ageThreshold;
-
-    MallocMutex   lock;
-    /* CachedBlocksList should be placed in zero-initialized memory,
-       ctor not needed. */
-    CachedBlocksList();
-public:
-    inline void push(LargeMemoryBlock* ptr);
-    inline LargeMemoryBlock* pop();
-    void releaseLastIfOld(uintptr_t currAge, size_t size);
-};
-
-/*
- * Array of bins with lists of recently freed large objects cached for re-use.
- */
-static char globalCachedBlockBinsSpace[sizeof(CachedBlocksList)*numLargeBlockBins];
-static CachedBlocksList* globalCachedBlockBins = (CachedBlocksList*)globalCachedBlockBinsSpace;
-
-/********* End of the data structures                    **************/
-
-/********** Various numeric parameters controlling allocations ********/
-
-/*
- * blockSize - the size of a block, it must be larger than maxSegregatedObjectSize.
- *
- */
-const uintptr_t blockSize = 16*1024;
-
-/*
- * There are bins for all 8 byte aligned objects less than this segregated size; 8 bins in total
- */
-const uint32_t minSmallObjectIndex = 0;
-const uint32_t numSmallObjectBins = 8;
-const uint32_t maxSmallObjectSize = 64;
-
-/*
- * There are 4 bins between each couple of powers of 2 [64-128-256-...]
- * from maxSmallObjectSize till this size; 16 bins in total
- */
-const uint32_t minSegregatedObjectIndex = minSmallObjectIndex+numSmallObjectBins;
-const uint32_t numSegregatedObjectBins = 16;
-const uint32_t maxSegregatedObjectSize = 1024;
-
-/*
- * And there are 5 bins with the following allocation sizes: 1792, 2688, 3968, 5376, 8064.
- * They selected to fit 9, 6, 4, 3, and 2 sizes per a block, and also are multiples of 128.
- * If sizeof(Block) changes from 128, these sizes require close attention!
- */
-const uint32_t minFittingIndex = minSegregatedObjectIndex+numSegregatedObjectBins;
-const uint32_t numFittingBins = 5;
-
-const uint32_t fittingAlignment = 128;
-
-#define SET_FITTING_SIZE(N) ( (blockSize-sizeof(Block))/N ) & ~(fittingAlignment-1)
-const uint32_t fittingSize1 = SET_FITTING_SIZE(9);
-const uint32_t fittingSize2 = SET_FITTING_SIZE(6);
-const uint32_t fittingSize3 = SET_FITTING_SIZE(4);
-const uint32_t fittingSize4 = SET_FITTING_SIZE(3);
-const uint32_t fittingSize5 = SET_FITTING_SIZE(2);
-#undef SET_FITTING_SIZE
-
-/*
- * The total number of thread-specific Block-based bins
- */
-const uint32_t numBlockBins = minFittingIndex+numFittingBins;
-
-/*
- * Objects of this size and larger are considered large objects.
- */
-const uint32_t minLargeObjectSize = fittingSize5 + 1;
-
-/*
- * Block::objectSize value used to mark blocks allocated by startupAlloc
- */
-const unsigned int startupAllocObjSizeMark = ~(unsigned int)0;
-
-/*
- * Difference between object sizes in large block bins
- */
-const uint32_t largeBlockCacheStep = 8*1024;
-
-/*
- * Large blocks cache cleanup frequency.
- * It should be power of 2 for the fast checking.
- */
-const unsigned cacheCleanupFreq = 256;
-
-/*
- * Get virtual memory in pieces of this size: 0x0100000 is 1 megabyte decimal
- */
-static size_t mmapRequestSize = 0x0100000;
-
-/*
- * Alignment of large (>= minLargeObjectSize) objects.
- */
-static int largeObjectAlignment = 64; // 64 is common cache line size
-
-/********** End of numeric parameters controlling allocations *********/
-
-/*********** Code to provide thread ID and a thread-local void pointer **********/
-
-typedef intptr_t ThreadId;
-
-static ThreadId ThreadIdCount;
-
-static tls_key_t TLS_pointer_key;
-static tls_key_t Tid_key;
-
-static inline ThreadId  getThreadId(void)
-{
-    ThreadId result;
-    result = reinterpret_cast<ThreadId>(TlsGetValue_func(Tid_key));
-    if( !result ) {
-        RecursiveMallocCallProtector scoped;
-        // Thread-local value is zero -> first call from this thread,
-        // need to initialize with next ID value (IDs start from 1)
-        result = AtomicIncrement(ThreadIdCount); // returned new value!
-        TlsSetValue_func( Tid_key, reinterpret_cast<void*>(result) );
-    }
-    return result;
-}
-
-static inline TLSData* getThreadMallocTLS() {
-    TLSData *result;
-    result = (TLSData *)TlsGetValue_func( TLS_pointer_key );
-// The assert below is incorrect: with lazy initialization, it fails on the first call of the function.
-//    MALLOC_ASSERT( result, "Memory allocator not initialized" );
-    return result;
-}
-
-static inline void  setThreadMallocTLS( TLSData * newvalue ) {
-    RecursiveMallocCallProtector scoped;
-    TlsSetValue_func( TLS_pointer_key, newvalue );
-}
-
-/*********** End code to provide thread ID and a TLS pointer **********/
-
-/*********** Code to acquire memory from the OS or other executive ****************/
-
-#if USE_DEFAULT_MEMORY_MAPPING
-#include "MapMemory.h"
-#else
-/* 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
-static inline void* getRawMemory (size_t size, bool useMapMem = false)
-{
-    void *object;
-
-    if (useMapMem) 
-        object = MapMemory(size);
-    else
-#if MALLOC_CHECK_RECURSION
-    if (RecursiveMallocCallProtector::noRecursion())
-        object = malloc(size);
-    else if ( rml::internal::original_malloc_found )
-        object = (*rml::internal::original_malloc_ptr)(size);
-    else
-        object = MapMemory(size);
-#else
-    object = malloc(size);
-#endif /* MALLOC_CHECK_RECURSION */
-    return object;
-}
-
-static inline void freeRawMemory (void *object, size_t size, bool useMapMem)
-{
-    if (useMapMem)
-        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
-        UnmapMemory(object, size);
-#else
-    free(object);
-#endif /* MALLOC_CHECK_RECURSION */
-}
-
-#else /* USE_MALLOC_FOR_LARGE_OBJECT */
-
-static inline void* getRawMemory (size_t size, bool = false) { return MapMemory(size); }
-
-static inline void freeRawMemory (void *object, size_t size, bool) {
-    UnmapMemory(object, size);
-}
-
-#endif /* USE_MALLOC_FOR_LARGE_OBJECT */
-
-/********* End memory acquisition code ********************************/
-
-/********* Now some rough utility code to deal with indexing the size bins. **************/
-
-/*
- * Given a number return the highest non-zero bit in it. It is intended to work with 32-bit values only.
- * Moreover, on IPF, for sake of simplicity and performance, it is narrowed to only serve for 64 to 1023.
- * This is enough for current algorithm of distribution of sizes among bins.
- */
-#if _WIN64 && _MSC_VER>=1400 && !__INTEL_COMPILER
-extern "C" unsigned char _BitScanReverse( unsigned long* i, unsigned long w );
-#pragma intrinsic(_BitScanReverse)
-#endif
-static inline unsigned int highestBitPos(unsigned int n)
-{
-    unsigned int pos;
-#if __ARCH_x86_32||__ARCH_x86_64
-
-# if __linux__||__APPLE__||__FreeBSD__||__sun||__MINGW32__
-    __asm__ ("bsr %1,%0" : "=r"(pos) : "r"(n));
-# elif (_WIN32 && (!_WIN64 || __INTEL_COMPILER))
-    __asm
-    {
-        bsr eax, n
-        mov pos, eax
-    }
-# elif _WIN64 && _MSC_VER>=1400
-    _BitScanReverse((unsigned long*)&pos, (unsigned long)n);
-# else
-#   error highestBitPos() not implemented for this platform
-# endif
-
-#elif __ARCH_ipf || __ARCH_other
-    static unsigned int bsr[16] = {0,6,7,7,8,8,8,8,9,9,9,9,9,9,9,9};
-    MALLOC_ASSERT( n>=64 && n<1024, ASSERT_TEXT );
-    pos = bsr[ n>>6 ];
-#else
-#   error highestBitPos() not implemented for this platform
-#endif /* __ARCH_* */
-    return pos;
-}
-
-unsigned int getCPUid()
-{
-    unsigned int id;
-
-#if (__ARCH_x86_32||__ARCH_x86_64) && (__linux__||__APPLE__||__FreeBSD__||__sun||__MINGW32__)
-    int res;
- #if __ARCH_x86_32
-    /* EBX used for PIC support. Having EAX in output operands 
-       prevents ICC from crash like in __TBB_ICC_ASM_VOLATILE_BROKEN. */
-    int _eax, _ecx, _edx;
-    __asm__ ("xchgl %%ebx, %1\n\t"
-             "cpuid\n\t"
-             "xchgl %%ebx, %1\n\t"
-             : "=a" (_eax), "=r" (res)
-             : "a" (1) : "ecx", "edx");
- #else
-    __asm__ ("cpuid\n\t"
-             : "=b" (res)
-             : "a" (1) );
- #endif // __ARCH_x86_32
-    id = (res >> 24) & 0xff;
-#elif _WIN32 || _WIN64
- #if __TBB_HAS_INTRIN_H
-    int CPUInfo[4];
-    __cpuid(CPUInfo, 1);
-    id = (CPUInfo[1] >> 24) & 0xff;
- #else
-    int res;
-    _asm {
-        push ebx
-        push ecx
-        mov  eax,1
-        cpuid
-        mov  res,ebx
-        pop  ecx
-        pop  ebx
-    }
-    id = (res >> 24) & 0xff;
- #endif
-# else
-    id = getThreadId();
-#endif
-    return id;
-}
-
-/*
- * Depending on indexRequest, for a given size return either the index into the bin
- * for objects of this size, or the actual size of objects in this bin.
- */
-template<bool indexRequest>
-static unsigned int getIndexOrObjectSize (unsigned int size)
-{
-    if (size <= maxSmallObjectSize) { // selection from 4/8/16/24/32/40/48/56/64
-         /* Index 0 holds up to 8 bytes, Index 1 16 and so forth */
-        return indexRequest ? (size - 1) >> 3 : alignUp(size,8);
-    }
-    else if (size <= maxSegregatedObjectSize ) { // 80/96/112/128 / 160/192/224/256 / 320/384/448/512 / 640/768/896/1024
-        unsigned int order = highestBitPos(size-1); // which group of bin sizes?
-        MALLOC_ASSERT( 6<=order && order<=9, ASSERT_TEXT );
-        if (indexRequest)
-            return minSegregatedObjectIndex - (4*6) - 4 + (4*order) + ((size-1)>>(order-2));
-        else {
-            unsigned int alignment = 128 >> (9-order); // alignment in the group
-            MALLOC_ASSERT( alignment==16 || alignment==32 || alignment==64 || alignment==128, ASSERT_TEXT );
-            return alignUp(size,alignment);
-        }
-    }
-    else {
-        if( size <= fittingSize3 ) {
-            if( size <= fittingSize2 ) {
-                if( size <= fittingSize1 )
-                    return indexRequest ? minFittingIndex : fittingSize1; 
-                else
-                    return indexRequest ? minFittingIndex+1 : fittingSize2;
-            } else
-                return indexRequest ? minFittingIndex+2 : fittingSize3;
-        } else {
-            if( size <= fittingSize5 ) {
-                if( size <= fittingSize4 )
-                    return indexRequest ? minFittingIndex+3 : fittingSize4;
-                else
-                    return indexRequest ? minFittingIndex+4 : fittingSize5;
-            } else {
-                MALLOC_ASSERT( 0,ASSERT_TEXT ); // this should not happen
-                return ~0U;
-            }
-        }
-    }
-}
-
-static unsigned int getIndex (unsigned int size)
-{
-    return getIndexOrObjectSize</*indexRequest*/true>(size);
-}
-
-static unsigned int getObjectSize (unsigned int size)
-{
-    return getIndexOrObjectSize</*indexRequest*/false>(size);
-}
-
-/*
- * Initialization code.
- *
- */
-
-/*
- * Big Blocks are the blocks we get from the OS or some similar place using getMemory above.
- * They are placed on the freeBlockList once they are acquired.
- */
-
-static inline void *alignBigBlock(void *unalignedBigBlock)
-{
-    void *alignedBigBlock;
-    /* align the entireHeap so all blocks are aligned. */
-    alignedBigBlock = alignUp(unalignedBigBlock, blockSize);
-    return alignedBigBlock;
-}
-
-/* Divide the big block into smaller bigBlocks that hold this many blocks.
- * This is done since we really need a lot of blocks on the freeBlockList or there will be
- * contention problems.
- */
-const unsigned int blocksPerBigBlock = 16/numOfFreeBlockLists;
-
-/* Returns 0 if unsuccessful, otherwise 1. */
-static int mallocBigBlock()
-{
-    void *unalignedBigBlock;
-    void *alignedBigBlock;
-    void *bigBlockCeiling;
-    Block *splitBlock;
-    void *splitEdge;
-    size_t bigBlockSplitSize;
-
-    unalignedBigBlock = getRawMemory(mmapRequestSize, /*useMapMem=*/true);
-
-    if (!unalignedBigBlock) {
-        TRACEF(( "[ScalableMalloc trace] in mallocBigBlock, getMemory returns 0\n" ));
-        /* We can't get any more memory from the OS or executive so return 0 */
-        return 0;
-    }
-
-    alignedBigBlock = alignBigBlock(unalignedBigBlock);
-    bigBlockCeiling = (void*)((uintptr_t)unalignedBigBlock + mmapRequestSize);
-
-    bigBlockSplitSize = blocksPerBigBlock * blockSize;
-
-    splitBlock = (Block*)alignedBigBlock;
-
-    // distribute alignedBigBlock between all freeBlockList elements
-    for (unsigned currListIdx = 0;
-         ((uintptr_t)splitBlock + blockSize) <= (uintptr_t)bigBlockCeiling;
-         currListIdx = (currListIdx+1) % numOfFreeBlockLists) {
-        splitEdge = (void*)((uintptr_t)splitBlock + bigBlockSplitSize);
-        if( splitEdge > bigBlockCeiling) {
-            splitEdge = alignDown(bigBlockCeiling, blockSize);
-        }
-        splitBlock->bumpPtr = (FreeObject*)splitEdge;
-        MALLOC_ITT_SYNC_RELEASING(freeBlockList+currListIdx);
-        freeBlockList[currListIdx].push((void**) splitBlock);
-        splitBlock = (Block*)splitEdge;
-    }
-
-    TRACEF(( "[ScalableMalloc trace] in mallocBigBlock returning 1\n" ));
-    return 1;
-}
-
-/*
- * The malloc routines themselves need to be able to occasionally malloc some space,
- * in order to set up the structures used by the thread local structures. This
- * routine preforms that fuctions.
- */
-
-/*
- * Forward Refs
- */
-static Block *getEmptyBlock(size_t size);
-static void setBackRef(BackRefIdx backRefIdx, void *newPtr);
-static void removeBackRef(BackRefIdx backRefIdx);
-
-static MallocMutex bootStrapLock;
-
-static Block      *bootStrapBlock = NULL;
-static Block      *bootStrapBlockUsed = NULL;
-static FreeObject *bootStrapObjectList = NULL; 
-
-static void *bootStrapMalloc(size_t size)
-{
-    FreeObject *result;
-
-    MALLOC_ASSERT( size == sizeof(TLSData), ASSERT_TEXT );
-
-    { // Lock with acquire
-        MallocMutex::scoped_lock scoped_cs(bootStrapLock);
-
-        if( bootStrapObjectList) {
-            result = bootStrapObjectList;
-            bootStrapObjectList = bootStrapObjectList->next;
-        } else {
-            if (!bootStrapBlock) {
-                bootStrapBlock = getEmptyBlock(size);
-                if (!bootStrapBlock) return NULL;
-            }
-            result = bootStrapBlock->bumpPtr;
-            bootStrapBlock->bumpPtr = (FreeObject *)((uintptr_t)bootStrapBlock->bumpPtr - bootStrapBlock->objectSize);
-            if ((uintptr_t)bootStrapBlock->bumpPtr < (uintptr_t)bootStrapBlock+sizeof(Block)) {
-                bootStrapBlock->bumpPtr = NULL;
-                bootStrapBlock->next = bootStrapBlockUsed;
-                bootStrapBlockUsed = bootStrapBlock;
-                bootStrapBlock = NULL;
-            }
-        }
-    } // Unlock with release
-
-    memset (result, 0, size);
-    return (void*)result;
-}
-
-static void bootStrapFree(void* ptr)
-{
-    MALLOC_ASSERT( ptr, ASSERT_TEXT );
-    { // Lock with acquire
-        MallocMutex::scoped_lock scoped_cs(bootStrapLock);
-        ((FreeObject*)ptr)->next = bootStrapObjectList;
-        bootStrapObjectList = (FreeObject*)ptr;
-    } // Unlock with release
-}
-
-/********* End rough utility code  **************/
-
-/********* Thread and block related code      *************/
-
-#if MALLOC_DEBUG>1
-/* The debug version verifies the TLSBin as needed */
-static void verifyTLSBin (Bin* bin, size_t size)
-{
-    Block* temp;
-    Bin*   tlsBin = getThreadMallocTLS()->bin;
-    uint32_t index = getIndex(size);
-    uint32_t objSize = getObjectSize(size);
-
-    MALLOC_ASSERT( bin == tlsBin+index, ASSERT_TEXT );
-
-    if (tlsBin[index].activeBlk) {
-        MALLOC_ASSERT( tlsBin[index].activeBlk->owner == getThreadId(), ASSERT_TEXT );
-        MALLOC_ASSERT( tlsBin[index].activeBlk->objectSize == objSize, ASSERT_TEXT );
-
-        for (temp = tlsBin[index].activeBlk->next; temp; temp=temp->next) {
-            MALLOC_ASSERT( temp!=tlsBin[index].activeBlk, ASSERT_TEXT );
-            MALLOC_ASSERT( temp->owner == getThreadId(), ASSERT_TEXT );
-            MALLOC_ASSERT( temp->objectSize == objSize, ASSERT_TEXT );
-            MALLOC_ASSERT( temp->previous->next == temp, ASSERT_TEXT );
-            if (temp->next) {
-                MALLOC_ASSERT( temp->next->previous == temp, ASSERT_TEXT );
-            }
-        }
-        for (temp = tlsBin[index].activeBlk->previous; temp; temp=temp->previous) {
-            MALLOC_ASSERT( temp!=tls[index].activeBlk, ASSERT_TEXT );
-            MALLOC_ASSERT( temp->owner == getThreadId(), ASSERT_TEXT );
-            MALLOC_ASSERT( temp->objectSize == objSize, ASSERT_TEXT );
-            MALLOC_ASSERT( temp->next->previous == temp, ASSERT_TEXT );
-            if (temp->previous) {
-                MALLOC_ASSERT( temp->previous->next == temp, ASSERT_TEXT );
-            }
-        }
-    }
-}
-#else
-inline static void verifyTLSBin (Bin*, size_t) {}
-#endif /* MALLOC_DEBUG>1 */
-
-/*
- * Add a block to the start of this tls bin list.
- */
-static void pushTLSBin (Bin* bin, Block* block)
-{
-    /* The objectSize should be defined and not a parameter
-       because the function is applied to partially filled blocks as well */
-    unsigned int size = block->objectSize;
-    Block* activeBlk;
-
-    MALLOC_ASSERT( block->owner == getThreadId(), ASSERT_TEXT );
-    MALLOC_ASSERT( block->objectSize != 0, ASSERT_TEXT );
-    MALLOC_ASSERT( block->next == NULL, ASSERT_TEXT );
-    MALLOC_ASSERT( block->previous == NULL, ASSERT_TEXT );
-
-    MALLOC_ASSERT( bin, ASSERT_TEXT );
-    verifyTLSBin(bin, size);
-    activeBlk = bin->activeBlk;
-
-    block->next = activeBlk;
-    if( activeBlk ) {
-        block->previous = activeBlk->previous;
-        activeBlk->previous = block;
-        if( block->previous )
-            block->previous->next = block;
-    } else {
-        bin->activeBlk = block;
-    }
-
-    verifyTLSBin(bin, size);
-}
-
-/*
- * Take a block out of its tls bin (e.g. before removal).
- */
-static void outofTLSBin (Bin* bin, Block* block)
-{
-    unsigned int size = block->objectSize;
-
-    MALLOC_ASSERT( block->owner == getThreadId(), ASSERT_TEXT );
-    MALLOC_ASSERT( block->objectSize != 0, ASSERT_TEXT );
-
-    MALLOC_ASSERT( bin, ASSERT_TEXT );
-    verifyTLSBin(bin, size);
-
-    if (block == bin->activeBlk) {
-        bin->activeBlk = block->previous? block->previous : block->next;
-    }
-    /* Delink the block */
-    if (block->previous) {
-        MALLOC_ASSERT( block->previous->next == block, ASSERT_TEXT );
-        block->previous->next = block->next;
-    }
-    if (block->next) {
-        MALLOC_ASSERT( block->next->previous == block, ASSERT_TEXT );
-        block->next->previous = block->previous;
-    }
-    block->next = NULL;
-    block->previous = NULL;
-
-    verifyTLSBin(bin, size);
-}
-
-/*
- * Return the bin for the given size. If the TLS bin structure is absent, create it.
- */
-inline Bin* getAllocationBin(size_t size)
-{
-    TLSData* tls = getThreadMallocTLS();
-    if( !tls ) {
-        MALLOC_ASSERT( sizeof(TLSData) >= sizeof(Bin) * numBlockBins + sizeof(FreeBlockPool), ASSERT_TEXT );
-        tls = (TLSData*) bootStrapMalloc(sizeof(TLSData));
-        if ( !tls ) return NULL;
-        /* the block contains zeroes after bootStrapMalloc, so bins are initialized */
-#if MALLOC_DEBUG
-        for (int i = 0; i < numBlockBinLimit; i++) {
-            MALLOC_ASSERT( tls->bin[i].activeBlk == 0, ASSERT_TEXT );
-            MALLOC_ASSERT( tls->bin[i].mailbox == 0, ASSERT_TEXT );
-        }
-#endif
-        setThreadMallocTLS(tls);
-    }
-    MALLOC_ASSERT( tls, ASSERT_TEXT );
-    return tls->bin + getIndex(size);
-}
-
-const float emptyEnoughRatio = 1.0 / 4.0; /* "Reactivate" a block if this share of its objects is free. */
-
-static unsigned int emptyEnoughToUse (Block *mallocBlock)
-{
-    const float threshold = (blockSize - sizeof(Block)) * (1-emptyEnoughRatio);
-
-    if (mallocBlock->bumpPtr) {
-        /* If we are still using a bump ptr for this block it is empty enough to use. */
-        STAT_increment(mallocBlock->owner, getIndex(mallocBlock->objectSize), examineEmptyEnough);
-        mallocBlock->isFull = 0;
-        return 1;
-    }
-
-    /* allocatedCount shows how many objects in the block are in use; however it still counts
-       blocks freed by other threads; so prior call to privatizePublicFreeList() is recommended */
-    mallocBlock->isFull = (mallocBlock->allocatedCount*mallocBlock->objectSize > threshold)? 1: 0;
-#if COLLECT_STATISTICS
-    if (mallocBlock->isFull)
-        STAT_increment(mallocBlock->owner, getIndex(mallocBlock->objectSize), examineNotEmpty);
-    else
-        STAT_increment(mallocBlock->owner, getIndex(mallocBlock->objectSize), examineEmptyEnough);
-#endif
-    return 1-mallocBlock->isFull;
-}
-
-/* Restore the bump pointer for an empty block that is planned to use */
-static void restoreBumpPtr (Block *block)
-{
-    MALLOC_ASSERT( block->allocatedCount == 0, ASSERT_TEXT );
-    MALLOC_ASSERT( block->publicFreeList == NULL, ASSERT_TEXT );
-    STAT_increment(block->owner, getIndex(block->objectSize), freeRestoreBumpPtr);
-    block->bumpPtr = (FreeObject *)((uintptr_t)block + blockSize - block->objectSize);
-    block->freeList = NULL;
-    block->isFull = 0;
-}
-
-#if !(FREELIST_NONBLOCKING)
-static MallocMutex publicFreeListLock; // lock for changes of publicFreeList
-#endif
-
-const uintptr_t UNUSABLE = 0x1;
-inline bool isSolidPtr( void* ptr )
-{
-    return (UNUSABLE|(uintptr_t)ptr)!=UNUSABLE;
-}
-inline bool isNotForUse( void* ptr )
-{
-    return (uintptr_t)ptr==UNUSABLE;
-}
-
-static void freePublicObject (Block *block, FreeObject *objectToFree)
-{
-    Bin* theBin;
-    FreeObject *publicFreeList;
-
-    MALLOC_ITT_SYNC_RELEASING(&block->publicFreeList);
-#if FREELIST_NONBLOCKING
-    FreeObject *temp = block->publicFreeList;
-    do {
-        publicFreeList = objectToFree->next = temp;
-        temp = (FreeObject*)AtomicCompareExchange(
-                                (intptr_t&)block->publicFreeList,
-                                (intptr_t)objectToFree, (intptr_t)publicFreeList );
-        // no backoff necessary because trying to make change, not waiting for a change
-    } while( temp != publicFreeList );
-#else
-    STAT_increment(getThreadId(), ThreadCommonCounters, lockPublicFreeList);
-    {
-        MallocMutex::scoped_lock scoped_cs(publicFreeListLock);
-        publicFreeList = objectToFree->next = block->publicFreeList;
-        block->publicFreeList = objectToFree;
-    }
-#endif
-
-    if( publicFreeList==NULL ) {
-        // if the block is abandoned, its nextPrivatizable pointer should be UNUSABLE
-        // otherwise, it should point to the bin the block belongs to.
-        // reading nextPrivatizable is thread-safe below, because:
-        // 1) the executing thread atomically got publicFreeList==NULL and changed it to non-NULL;
-        // 2) only owning thread can change it back to NULL,
-        // 3) but it can not be done until the block is put to the mailbox
-        // So the executing thread is now the only one that can change nextPrivatizable
-        if( !isNotForUse(block->nextPrivatizable) ) {
-            MALLOC_ASSERT( block->nextPrivatizable!=NULL, ASSERT_TEXT );
-            MALLOC_ASSERT( block->owner!=0, ASSERT_TEXT );
-            theBin = (Bin*) block->nextPrivatizable;
-            MallocMutex::scoped_lock scoped_cs(theBin->mailLock);
-            block->nextPrivatizable = theBin->mailbox;
-            theBin->mailbox = block;
-        } else {
-            MALLOC_ASSERT( block->owner==0, ASSERT_TEXT );
-        }
-    }
-    STAT_increment(getThreadId(), ThreadCommonCounters, freeToOtherThread);
-    STAT_increment(block->owner, getIndex(block->objectSize), freeByOtherThread);
-}
-
-static void privatizePublicFreeList (Block *mallocBlock)
-{
-    FreeObject *temp, *publicFreeList;
-
-    MALLOC_ASSERT( mallocBlock->owner == getThreadId(), ASSERT_TEXT );
-#if FREELIST_NONBLOCKING
-    temp = mallocBlock->publicFreeList;
-    do {
-        publicFreeList = temp;
-        temp = (FreeObject*)AtomicCompareExchange(
-                                (intptr_t&)mallocBlock->publicFreeList,
-                                0, (intptr_t)publicFreeList);
-        // no backoff necessary because trying to make change, not waiting for a change
-    } while( temp != publicFreeList );
-#else
-    STAT_increment(mallocBlock->owner, ThreadCommonCounters, lockPublicFreeList);
-    {
-        MallocMutex::scoped_lock scoped_cs(publicFreeListLock);
-        publicFreeList = mallocBlock->publicFreeList;
-        mallocBlock->publicFreeList = NULL;
-    }
-    temp = publicFreeList;
-#endif
-    MALLOC_ITT_SYNC_ACQUIRED(&mallocBlock->publicFreeList);
-
-    MALLOC_ASSERT( publicFreeList && publicFreeList==temp, ASSERT_TEXT ); // there should be something in publicFreeList!
-    if( !isNotForUse(temp) ) { // return/getPartialBlock could set it to UNUSABLE
-        MALLOC_ASSERT( mallocBlock->allocatedCount <= (blockSize-sizeof(Block))/mallocBlock->objectSize, ASSERT_TEXT );
-        /* other threads did not change the counter freeing our blocks */
-        mallocBlock->allocatedCount--;
-        while( isSolidPtr(temp->next) ){ // the list will end with either NULL or UNUSABLE
-            temp = temp->next;
-            mallocBlock->allocatedCount--;
-        }
-        MALLOC_ASSERT( mallocBlock->allocatedCount < (blockSize-sizeof(Block))/mallocBlock->objectSize, ASSERT_TEXT );
-        /* merge with local freeList */
-        temp->next = mallocBlock->freeList;
-        mallocBlock->freeList = publicFreeList;
-        STAT_increment(mallocBlock->owner, getIndex(mallocBlock->objectSize), allocPrivatized);
-    }
-}
-
-static Block* getPublicFreeListBlock (Bin* bin)
-{
-    Block* block;
-    MALLOC_ASSERT( bin, ASSERT_TEXT );
-// the counter should be changed    STAT_increment(getThreadId(), ThreadCommonCounters, lockPublicFreeList);
-    {
-        MallocMutex::scoped_lock scoped_cs(bin->mailLock);
-        block = bin->mailbox;
-        if( block ) {
-            MALLOC_ASSERT( block->owner == getThreadId(), ASSERT_TEXT );
-            MALLOC_ASSERT( !isNotForUse(block->nextPrivatizable), ASSERT_TEXT );
-            bin->mailbox = block->nextPrivatizable;
-            block->nextPrivatizable = (Block*) bin;
-        }
-    }
-    if( block ) {
-        MALLOC_ASSERT( isSolidPtr(block->publicFreeList), ASSERT_TEXT );
-        privatizePublicFreeList(block);
-    }
-    return block;
-}
-
-static Block *getPartialBlock(Bin* bin, unsigned int size)
-{
-    Block *result;
-    MALLOC_ASSERT( bin, ASSERT_TEXT );
-    unsigned int index = getIndex(size);
-    result = (Block *) globalSizeBins[index].pop();
-    if (result) {
-        MALLOC_ITT_SYNC_ACQUIRED(globalSizeBins+index);
-        result->next = NULL;
-        result->previous = NULL;
-        MALLOC_ASSERT( result->publicFreeList!=NULL, ASSERT_TEXT );
-        /* There is not a race here since no other thread owns this block */
-        MALLOC_ASSERT( result->owner == 0, ASSERT_TEXT );
-        result->owner = getThreadId();
-        // It is safe to change nextPrivatizable, as publicFreeList is not null
-        MALLOC_ASSERT( isNotForUse(result->nextPrivatizable), ASSERT_TEXT );
-        result->nextPrivatizable = (Block*)bin;
-        // the next call is required to change publicFreeList to 0
-        privatizePublicFreeList(result);
-        if( result->allocatedCount ) {
-            // check its fullness and set result->isFull
-            emptyEnoughToUse(result);
-        } else {
-            restoreBumpPtr(result);
-        }
-        MALLOC_ASSERT( !isNotForUse(result->publicFreeList), ASSERT_TEXT );
-        STAT_increment(result->owner, index, allocBlockPublic);
-    }
-    return result;
-}
-
-static void returnPartialBlock(Bin* bin, Block *block)
-{
-    unsigned int index = getIndex(block->objectSize);
-    MALLOC_ASSERT( bin, ASSERT_TEXT );
-    MALLOC_ASSERT( block->owner==getThreadId(), ASSERT_TEXT );
-    STAT_increment(block->owner, index, freeBlockPublic);
-    // need to set publicFreeList to non-zero, so other threads
-    // will not change nextPrivatizable and it can be zeroed.
-    if ((intptr_t)block->nextPrivatizable==(intptr_t)bin) {
-        void* oldval;
-#if FREELIST_NONBLOCKING
-        oldval = (void*)AtomicCompareExchange((intptr_t&)block->publicFreeList, (intptr_t)UNUSABLE, 0);
-#else
-        STAT_increment(block->owner, ThreadCommonCounters, lockPublicFreeList);
-        {
-            MallocMutex::scoped_lock scoped_cs(publicFreeListLock);
-            if ( (oldval=block->publicFreeList)==NULL )
-                (uintptr_t&)(block->publicFreeList) = UNUSABLE;
-        }
-#endif
-        if ( oldval!=NULL ) {
-            // another thread freed an object; we need to wait until it finishes.
-            // I believe there is no need for exponential backoff, as the wait here is not for a lock;
-            // but need to yield, so the thread we wait has a chance to run.
-            int count = 256;
-            while( (intptr_t)const_cast<Block* volatile &>(block->nextPrivatizable)==(intptr_t)bin ) {
-                if (--count==0) {
-                    do_yield();
-                    count = 256;
-                }
-            }
-        }
-    } else {
-        MALLOC_ASSERT( isSolidPtr(block->publicFreeList), ASSERT_TEXT );
-    }
-    MALLOC_ASSERT( block->publicFreeList!=NULL, ASSERT_TEXT );
-    // now it is safe to change our data
-    block->previous = NULL;
-    block->owner = 0;
-    // it is caller responsibility to ensure that the list of blocks
-    // formed by nextPrivatizable pointers is kept consistent if required.
-    // if only called from thread shutdown code, it does not matter.
-    (uintptr_t&)(block->nextPrivatizable) = UNUSABLE;
-    MALLOC_ITT_SYNC_RELEASING(globalSizeBins+index);
-    globalSizeBins[index].push((void **)block);
-}
-
-static void cleanBlockHeader(Block *block)
-{
-    block->next = NULL;
-    block->previous = NULL;
-    block->freeList = NULL;
-    block->allocatedCount = 0;
-    block->isFull = 0;
-
-    block->publicFreeList = NULL;
-}
-
-static void initEmptyBlock(Block *block, size_t size)
-{
-    // Having getIndex and getObjectSize called next to each other
-    // allows better compiler optimization as they basically share the code.
-    unsigned int index      = getIndex(size);
-    unsigned int objectSize = getObjectSize(size); 
-    Bin* tlsBin = getThreadMallocTLS()->bin;
-
-    cleanBlockHeader(block);
-    block->objectSize = objectSize;
-    block->owner = getThreadId();
-    // bump pointer should be prepared for first allocation - thus mode it down to objectSize
-    block->bumpPtr = (FreeObject *)((uintptr_t)block + blockSize - objectSize);
-
-    // each block should have the address where the head of the list of "privatizable" blocks is kept
-    // the only exception is a block for boot strap which is initialized when TLS is yet NULL
-    block->nextPrivatizable = tlsBin? (Block*)(tlsBin + index) : NULL;
-    TRACEF(( "[ScalableMalloc trace] Empty block %p is initialized, owner is %d, objectSize is %d, bumpPtr is %p\n",
-             block, block->owner, block->objectSize, block->bumpPtr ));
-}
-
-void FreeBlockPool::insertBlock(Block *block)
-{
-    size++;
-    block->next = head;
-    head = block;
-    if (!tail)
-        tail = block;
-}
-
-Block *FreeBlockPool::getBlock()
-{
-    Block *result = head;
-    if (head) {
-        size--;
-        head = head->next;
-        if (!head)
-            tail = NULL;
-    }
-    return result;
-}
-
-void FreeBlockPool::returnBlock(Block *block)
-{
-    MALLOC_ASSERT( size <= POOL_HIGH_MARK, ASSERT_TEXT );
-    if (size == POOL_HIGH_MARK) {
-        // release cold blocks and add hot one
-        Block *headToFree = head, 
-              *tailToFree = tail;
-        for (int i=0; i<POOL_LOW_MARK-2; i++)
-            headToFree = headToFree->next;
-        tail = headToFree;
-        headToFree = headToFree->next;
-        tail->next = NULL;
-        size = POOL_LOW_MARK-1;
-        for (Block *currBl = headToFree; currBl; currBl = currBl->next)
-            removeBackRef(currBl->backRefIdx);
-        unsigned myFreeList = getCPUid()%numOfFreeBlockLists;
-        MALLOC_ITT_SYNC_RELEASING(freeBlockList+myFreeList);
-        freeBlockList[myFreeList].pushList((void **)headToFree, (void **)tailToFree);
-    }
-    insertBlock(block);
-}
-
-void FreeBlockPool::releaseAllBlocks()
-{
-    if (head) {
-        for (Block *currBl = head; currBl; currBl = currBl->next)
-            removeBackRef(currBl->backRefIdx);
-        unsigned myFreeList = getCPUid()%numOfFreeBlockLists;
-        MALLOC_ITT_SYNC_RELEASING(freeBlockList+myFreeList);
-        freeBlockList[myFreeList].pushList((void**)head, (void**)tail);
-    }
-}
-
-/* Return an empty uninitialized block in a non-blocking fashion. */
-static Block *getRawBlock(bool startup)
-{
-    Block *result;
-    Block *bigBlock;
-    const unsigned myFreeList = startup? 0 : getCPUid()%numOfFreeBlockLists;
-    unsigned currListIdx = myFreeList;
-    
-    result = NULL;
-
-    do {
-        if (bigBlock = (Block *) freeBlockList[currListIdx].pop()) {
-            MALLOC_ITT_SYNC_ACQUIRED(freeBlockList+currListIdx);
-            break;
-        }
-        currListIdx = (currListIdx+1) % numOfFreeBlockLists;
-    } while (currListIdx != myFreeList);
-
-    while (!bigBlock) {
-        /* We are out of blocks so go to the OS and get another one */
-        if (!mallocBigBlock()) {
-            return NULL;
-        }
-        bigBlock = (Block *) freeBlockList[myFreeList].pop();
-        if (bigBlock)
-            MALLOC_ITT_SYNC_ACQUIRED(freeBlockList+myFreeList);
-    }
-
-    // check alignment
-    MALLOC_ASSERT( isAligned( bigBlock, blockSize ), ASSERT_TEXT );
-    MALLOC_ASSERT( isAligned( bigBlock->bumpPtr, blockSize ), ASSERT_TEXT );
-    // block should be at least as big as blockSize; otherwise the previous block can be damaged.
-    MALLOC_ASSERT( (uintptr_t)bigBlock->bumpPtr >= (uintptr_t)bigBlock + blockSize, ASSERT_TEXT );
-    bigBlock->bumpPtr = (FreeObject *)((uintptr_t)bigBlock->bumpPtr - blockSize);
-    result = (Block *)bigBlock->bumpPtr;
-    if ( result!=bigBlock ) {
-        TRACEF(( "[ScalableMalloc trace] Pushing partial rest of block back on.\n" ));
-        MALLOC_ITT_SYNC_RELEASING(freeBlockList+myFreeList);
-        freeBlockList[myFreeList].push((void **)bigBlock);
-    }
-
-    return result;
-}
-
-/* Return an empty uninitialized block in a non-blocking fashion. */
-static Block *getEmptyBlock(size_t size)
-{
-    Block *result = NULL;
-    TLSData* tls = getThreadMallocTLS();
-    if (tls)
-        result = tls->pool.getBlock();
-    if (!result) {
-        BackRefIdx backRefIdx = BackRefIdx::newBackRef(/*largeObj=*/false);
-        if (backRefIdx.isInvalid() || !(result = getRawBlock(/*startup=*/false)))
-            return NULL;
-        setBackRef(backRefIdx, result);
-        result->backRefIdx = backRefIdx;
-    }
-    if (result) {
-        initEmptyBlock(result, size);
-        STAT_increment(result->owner, getIndex(result->objectSize), allocBlockNew);
-    }
-    return result;
-}
-
-/* We have a block give it back to the malloc block manager */
-static void returnEmptyBlock (Block *block, bool poolTheBlock)
-{
-    // it is caller's responsibility to ensure no data is lost before calling this
-    MALLOC_ASSERT( block->allocatedCount==0, ASSERT_TEXT );
-    MALLOC_ASSERT( block->publicFreeList==NULL, ASSERT_TEXT );
-    MALLOC_ASSERT( !poolTheBlock || block->next == NULL, ASSERT_TEXT );
-    MALLOC_ASSERT( !poolTheBlock || block->previous == NULL, ASSERT_TEXT );
-    STAT_increment(block->owner, getIndex(block->objectSize), freeBlockBack);
-
-    cleanBlockHeader(block);
-
-    block->nextPrivatizable = NULL;
-
-    block->objectSize = 0;
-    block->owner = (unsigned)-1;
-    // for an empty block, bump pointer should point right after the end of the block
-    block->bumpPtr = (FreeObject *)((uintptr_t)block + blockSize);
-    if (poolTheBlock) {
-        MALLOC_ASSERT(getThreadMallocTLS(), "Is TLS still not initialized?");
-        getThreadMallocTLS()->pool.returnBlock(block);
-    }
-    else {
-        removeBackRef(block->backRefIdx);
-        unsigned myFreeList = getCPUid()%numOfFreeBlockLists;
-        MALLOC_ITT_SYNC_RELEASING(freeBlockList+myFreeList);
-        freeBlockList[myFreeList].push((void **)block);
-    }
-}
-
-inline static Block* getActiveBlock( Bin* bin )
-{
-    MALLOC_ASSERT( bin, ASSERT_TEXT );
-    return bin->activeBlk;
-}
-
-inline static void setActiveBlock (Bin* bin, Block *block)
-{
-    MALLOC_ASSERT( bin, ASSERT_TEXT );
-    MALLOC_ASSERT( block->owner == getThreadId(), ASSERT_TEXT );
-    // it is the caller responsibility to keep bin consistence (i.e. ensure this block is in the bin list)
-    bin->activeBlk = block;
-}
-
-inline static Block* setPreviousBlockActive( Bin* bin )
-{
-    MALLOC_ASSERT( bin && bin->activeBlk, ASSERT_TEXT );
-    Block* temp = bin->activeBlk->previous;
-    if( temp ) {
-        MALLOC_ASSERT( temp->isFull == 0, ASSERT_TEXT );
-        bin->activeBlk = temp;
-    }
-    return temp;
-}
-
-#if MALLOC_CHECK_RECURSION
-
-/*
- * It's a special kind of allocation that can be used when malloc is 
- * not available (either during startup or when malloc was already called and
- * we are, say, inside pthread_setspecific's call). 
- * Block can contain objects of different sizes, 
- * allocations are performed by moving bump pointer and increasing of object counter, 
- * releasing is done via counter of objects allocated in the block 
- * or moving bump pointer if releasing object is on a bound.
- */
-
-struct StartupBlock : public Block {
-    size_t availableSize() {
-        return blockSize - ((uintptr_t)bumpPtr - (uintptr_t)this);
-    }
-};
-
-static MallocMutex startupMallocLock;
-static StartupBlock *firstStartupBlock;
-
-static StartupBlock *getNewStartupBlock()
-{
-    BackRefIdx backRefIdx = BackRefIdx::newBackRef(/*largeObj=*/false);
-    if (backRefIdx.isInvalid()) return NULL;
-
-    StartupBlock *block = (StartupBlock *)getRawBlock(/*startup=*/true);
-    if (!block) return NULL;
-
-    cleanBlockHeader(block);
-    setBackRef(backRefIdx, block);
-    block->backRefIdx = backRefIdx;
-    // use startupAllocObjSizeMark to mark objects from startup block marker
-    block->objectSize = startupAllocObjSizeMark;
-    block->bumpPtr = (FreeObject *)((uintptr_t)block + sizeof(StartupBlock));
-    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. */
-static FreeObject *startupAlloc(size_t size)
-{
-    FreeObject *result;
-    StartupBlock *newBlock = NULL;
-    bool newBlockUnused = false;
-
-    /* Objects must be aligned on their natural bounds, 
-       and objects bigger than word on word's bound. */
-    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 = getNewStartupBlock()))
-            return NULL;
-
-    {
-        MallocMutex::scoped_lock scoped_cs(startupMallocLock);
-    
-        if (!firstStartupBlock || firstStartupBlock->availableSize() < reqSize) {
-            if (!newBlock && !(newBlock = getNewStartupBlock()))
-                return NULL;
-            newBlock->next = (Block*)firstStartupBlock;
-            if (firstStartupBlock)
-                firstStartupBlock->previous = (Block*)newBlock;
-            firstStartupBlock = newBlock;
-        } else
-            newBlockUnused = true;
-        result = firstStartupBlock->bumpPtr;
-        firstStartupBlock->allocatedCount++;
-        firstStartupBlock->bumpPtr = 
-            (FreeObject *)((uintptr_t)firstStartupBlock->bumpPtr + reqSize);
-    }
-    if (newBlock && newBlockUnused)
-        returnEmptyBlock(newBlock, /*poolTheBlock=*/false);
-
-    // keep object size at the negative offset
-    *((size_t*)result) = size;
-    return (FreeObject*)((size_t*)result+1);
-}
-
-static size_t startupMsize(void *ptr) { return *((size_t*)ptr - 1); }
-
-static void startupFree(StartupBlock *block, void *ptr)
-{
-    Block* blockToRelease = NULL;
-    {
-        MallocMutex::scoped_lock scoped_cs(startupMallocLock);
-    
-        MALLOC_ASSERT(firstStartupBlock, ASSERT_TEXT);
-        MALLOC_ASSERT(startupAllocObjSizeMark==block->objectSize 
-                      && block->allocatedCount>0, ASSERT_TEXT);
-        MALLOC_ASSERT((uintptr_t)ptr>=(uintptr_t)block+sizeof(StartupBlock)
-                      && (uintptr_t)ptr+startupMsize(ptr)<=(uintptr_t)block+blockSize, 
-                      ASSERT_TEXT);
-        if (0 == --block->allocatedCount) {
-            if (block == firstStartupBlock)
-                firstStartupBlock = (StartupBlock*)firstStartupBlock->next;
-            if (block->previous)
-                block->previous->next = block->next;
-            if (block->next)
-                block->next->previous = block->previous;
-            blockToRelease = block;
-        } else if ((uintptr_t)ptr + startupMsize(ptr) == (uintptr_t)block->bumpPtr) {
-            // last object in the block released
-            FreeObject *newBump = (FreeObject*)((size_t*)ptr - 1);
-            MALLOC_ASSERT((uintptr_t)newBump>(uintptr_t)block+sizeof(StartupBlock), 
-                          ASSERT_TEXT);
-            block->bumpPtr = newBump;
-        }
-    }
-    if (blockToRelease) {
-        blockToRelease->previous = blockToRelease->next = NULL;
-        returnEmptyBlock(blockToRelease, /*poolTheBlock=*/false);
-    }
-}
-
-#endif /* MALLOC_CHECK_RECURSION */
-
-/********* End thread related code  *************/
-
-/********* backreferences ***********************/
-/* Each 16KB block and each large memory object header contains BackRefIdx 
- * that points out in some BackRefBlock which points back to this block or header.
- */
-struct BackRefBlock {
-    BackRefBlock *nextForUse;     // the next in the chain of blocks with free items
-    FreeObject   *bumpPtr;        // bump pointer moves from the end to the beginning of the block
-    FreeObject   *freeList;
-    int           allocatedCount; // the number of objects allocated
-    int           myNum;          // the index in the parent array
-    MallocMutex   blockMutex;
-    bool          addedToForUse;  // this block is already added to the listForUse chain
-
-    BackRefBlock(BackRefBlock *blockToUse, int myNum) :
-        nextForUse(NULL), bumpPtr((FreeObject*)((uintptr_t)blockToUse + blockSize - sizeof(void*))),
-        freeList(NULL), allocatedCount(0), myNum(myNum), addedToForUse(false) {}
-};
-
-// max number of backreference pointers in 16KB block
-static const int BR_MAX_CNT = (blockSize-sizeof(BackRefBlock))/sizeof(void*);
-
-struct BackRefMaster {
-/* A 16KB block can hold up to ~2K back pointers to 16KB blocks or large objects,
- * so it can address at least 32MB. The array of 64KB holds 8K pointers
- * to such blocks, addressing ~256 GB.
- */
-    static const size_t bytes = 64*1024;
-    static const int dataSz;
-
-    BackRefBlock  *active;         // if defined, use it for allocations
-    BackRefBlock  *listForUse;     // the chain of data blocks with free items
-    int            lastUsed;       // index of the last used block
-    BackRefBlock  *backRefBl[1];   // the real size of the array is dataSz
-
-    BackRefBlock *findFreeBlock();
-    bool          addActiveBackRefBlock();
-};
-
-const int BackRefMaster::dataSz
-    = 1+(BackRefMaster::bytes-sizeof(BackRefMaster))/sizeof(BackRefBlock*);
-
-static MallocMutex backRefMutex;
-static BackRefMaster *backRefMaster;
-
-static bool initBackRefMaster()
-{
-    // MapMemory forced because the function runs during startup 
-    backRefMaster = (BackRefMaster*)getRawMemory(BackRefMaster::bytes, 
-                                                 /*useMapMem=*/true);
-    if (NULL == backRefMaster)
-        return false;
-    backRefMaster->listForUse = NULL;
-    backRefMaster->lastUsed = 0;
-    
-    if (!backRefMaster->addActiveBackRefBlock()) {
-        freeRawMemory(backRefMaster, BackRefMaster::bytes, /*useMapMem=*/true);
-        return false;
-    }
-    return true;
-}
-
-bool BackRefMaster::addActiveBackRefBlock()
-{
-    BackRefBlock *newBl = (BackRefBlock*)getRawBlock(/*startup=*/true);
-
-    if (!newBl) return false;
-    active = newBl;
-    memset(active, 0, blockSize);
-    new (active) BackRefBlock(active, lastUsed);
-    backRefBl[lastUsed] = active;
-    return true;
-}
-
-BackRefBlock *BackRefMaster::findFreeBlock()
-{
-    if (active->allocatedCount < BR_MAX_CNT)
-        return active;
-        
-    if (listForUse) {                                   // use released list
-        active = listForUse;
-        listForUse = listForUse->nextForUse;
-        MALLOC_ASSERT(active->addedToForUse, ASSERT_TEXT);
-        active->addedToForUse = false;
-    } else if (lastUsed-1 < backRefMaster->dataSz) {    // allocate new data node
-        lastUsed++;
-        if (!backRefMaster->addActiveBackRefBlock()) {
-            lastUsed--;
-            return NULL;
-        }
-    } else  // no free blocks, give up
-        return NULL;
-    return active;
-}
-
-static inline void *getBackRef(BackRefIdx backRefIdx)
-{
-    // !backRefMaster means no initialization done, so it can't be valid memory
-    if (!backRefMaster || backRefIdx.getMaster() > backRefMaster->lastUsed
-        || backRefIdx.getOffset() >= BR_MAX_CNT) 
-        return NULL;
-    return *(void**)((uintptr_t)backRefMaster->backRefBl[backRefIdx.getMaster()]
-                     + sizeof(BackRefBlock)+backRefIdx.getOffset()*sizeof(void*));
-}
-
-static void setBackRef(BackRefIdx backRefIdx, void *newPtr)
-{
-    MALLOC_ASSERT(backRefIdx.getMaster()<=backRefMaster->lastUsed && backRefIdx.getOffset()<BR_MAX_CNT,
-                  ASSERT_TEXT);
-    *(void**)((uintptr_t)backRefMaster->backRefBl[backRefIdx.getMaster()]
-              + sizeof(BackRefBlock) + backRefIdx.getOffset()*sizeof(void*)) = newPtr;
-}
-
-BackRefIdx BackRefIdx::newBackRef(bool largeObj)
-{
-    BackRefBlock *blockToUse;
-    void **toUse;
-    BackRefIdx res;
-
-    do {
-        { // global lock taken to find a block
-            MallocMutex::scoped_lock lock(backRefMutex);
-
-            MALLOC_ASSERT(backRefMaster, ASSERT_TEXT);
-            if (! (blockToUse = backRefMaster->findFreeBlock()))
-                return BackRefIdx();
-        }
-        toUse = NULL;
-        { // the block is locked to find a reference
-            MallocMutex::scoped_lock lock(blockToUse->blockMutex);
-
-            if (blockToUse->freeList) {
-                toUse = (void**)blockToUse->freeList;
-                blockToUse->freeList = blockToUse->freeList->next;
-            } else if (blockToUse->allocatedCount < BR_MAX_CNT) {
-                toUse = (void**)blockToUse->bumpPtr;
-                blockToUse->bumpPtr = 
-                    (FreeObject*)((uintptr_t)blockToUse->bumpPtr - sizeof(void*));
-                if (blockToUse->allocatedCount == BR_MAX_CNT-1) {
-                    MALLOC_ASSERT((uintptr_t)blockToUse->bumpPtr
-                                  < (uintptr_t)blockToUse+sizeof(BackRefBlock),
-                                  ASSERT_TEXT);
-                    blockToUse->bumpPtr = NULL;
-                }
-            }
-            if (toUse)
-                blockToUse->allocatedCount++;
-        } // end of lock scope
-    } while (!toUse);
-    res.master = blockToUse->myNum;
-    uintptr_t offset = 
-        ((uintptr_t)toUse - ((uintptr_t)blockToUse + sizeof(BackRefBlock)))/sizeof(void*);
-    // Is offset too big?
-    MALLOC_ASSERT(!(offset >> 15), ASSERT_TEXT);
-    res.offset = offset;
-    if (largeObj) res.largeObj = largeObj;
-
-    return res;
-}
-
-static void removeBackRef(BackRefIdx backRefIdx)
-{
-    MALLOC_ASSERT(backRefIdx.getMaster()<=backRefMaster->lastUsed 
-                  && backRefIdx.getOffset()<BR_MAX_CNT, ASSERT_TEXT);
-    BackRefBlock *currBlock = backRefMaster->backRefBl[backRefIdx.getMaster()];
-    FreeObject *freeObj = (FreeObject*)((uintptr_t)currBlock + sizeof(BackRefBlock)
-                                        + backRefIdx.getOffset()*sizeof(void*));
-    {
-        MallocMutex::scoped_lock lock(currBlock->blockMutex);
-
-        freeObj->next = currBlock->freeList;
-        currBlock->freeList = freeObj;
-        currBlock->allocatedCount--;
-    }
-    // TODO: do we need double-check here?
-    if (!currBlock->addedToForUse && currBlock!=backRefMaster->active) {
-        MallocMutex::scoped_lock lock(backRefMutex);
-
-        if (!currBlock->addedToForUse && currBlock!=backRefMaster->active) {
-            currBlock->nextForUse = backRefMaster->listForUse;
-            backRefMaster->listForUse = currBlock;
-            currBlock->addedToForUse = true;
-        }
-    }
-}
-
-/********* End of backreferences ***********************/
-
-/********* Library initialization *************/
-
-//! Value indicating the state of initialization.
-/* 0 = initialization not started.
- * 1 = initialization started but not finished.
- * 2 = initialization finished.
- * In theory, we only need values 0 and 2. But value 1 is nonetheless
- * useful for detecting errors in the double-check pattern.
- */
-static intptr_t mallocInitialized;   // implicitly initialized to 0
-static MallocMutex initMutex;
-
-inline bool isMallocInitialized() {
-    // Load must have acquire fence; otherwise thread taking "initialized" path
-    // might perform textually later loads *before* mallocInitialized becomes 2.
-    return 2 == FencedLoad(mallocInitialized);
-}
-
-/*
- * Allocator initialization routine;
- * it is called lazily on the very first scalable_malloc call.
- */
-static void initMemoryManager()
-{
-    TRACEF(( "[ScalableMalloc trace] sizeof(Block) is %d (expected 128); sizeof(uintptr_t) is %d\n",
-             sizeof(Block), sizeof(uintptr_t) ));
-    MALLOC_ASSERT( 2*blockHeaderAlignment == sizeof(Block), ASSERT_TEXT );
-    MALLOC_ASSERT( sizeof(FreeObject) == sizeof(void*), ASSERT_TEXT );
-
-// TODO: add error handling, and on error do something better than exit(1)
-    if (!mallocBigBlock() || !initBackRefMaster()) {
-        fprintf (stderr, "The memory manager cannot access sufficient memory to initialize; exiting \n");
-        exit(1);
-    }
-// Create keys for thread-local storage and for thread id
-#if USE_WINTHREAD
-    TLS_pointer_key = TlsAlloc();
-    Tid_key = TlsAlloc();
-#else
-    int status1 = pthread_key_create( &TLS_pointer_key, mallocThreadShutdownNotification );
-    int status2 = pthread_key_create( &Tid_key, NULL );
-    if ( status1 || status2 ) {
-        fprintf (stderr, "The memory manager cannot create tls key during initialization; exiting \n");
-        exit(1);
-    }
-#endif /* USE_WINTHREAD */
-#if COLLECT_STATISTICS
-    initStatisticsCollection();
-#endif
-}
-
-//! Ensures that initMemoryManager() is called once and only once.
-/** Does not return until initMemoryManager() has been completed by a thread.
-    There is no need to call this routine if mallocInitialized==2 . */
-static void doInitialization()
-{
-    MallocMutex::scoped_lock lock( initMutex );
-    if (mallocInitialized!=2) {
-        MALLOC_ASSERT( mallocInitialized==0, ASSERT_TEXT );
-        mallocInitialized = 1;
-        RecursiveMallocCallProtector scoped;
-        initMemoryManager();
-#ifdef  MALLOC_EXTRA_INITIALIZATION
-        MALLOC_EXTRA_INITIALIZATION;
-#endif
-#if MALLOC_CHECK_RECURSION
-        RecursiveMallocCallProtector::detectNaiveOverload();
-#endif
-        MALLOC_ASSERT( mallocInitialized==1, ASSERT_TEXT );
-        // Store must have release fence, otherwise mallocInitialized==2 might become 
-        // remotely visible before side effects of initMemoryManager() become remotely visible.
-        FencedStore( mallocInitialized, 2 );
-    }
-    MALLOC_ASSERT( mallocInitialized==2, ASSERT_TEXT ); /* It can't be 0 or I would have initialized it */
-}
-
-/********* End library initialization *************/
-
-/********* The malloc show begins     *************/
-
-
-/********* Allocation of large objects ************/
-
-/*
- * Large Objects are the only objects in the system that begin 
- * on a 16K byte boundary since the blocks used for smaller objects 
- * have the Block structure at each 16K boundary.
- */
-static uintptr_t cleanupCacheIfNeed();
-
-void CachedBlocksList::push(LargeMemoryBlock *ptr)
-{   
-    ptr->prev = NULL;
-    ptr->age  = cleanupCacheIfNeed ();
-
-    MallocMutex::scoped_lock scoped_cs(lock);
-    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;
-    }
-}
-
-LargeMemoryBlock *CachedBlocksList::pop()
-{   
-    uintptr_t currAge = cleanupCacheIfNeed();
-    LargeMemoryBlock *result=NULL;
-    {
-        MallocMutex::scoped_lock scoped_cs(lock);
-        if (first) {
-            result = first;
-            first = result->next;
-            if (first)  
-                first->prev = NULL;
-            else {
-                last = NULL;
-                oldest = 0;
-            }
-        } else {
-            /* If cache miss occured, set ageThreshold to twice the difference 
-               between current time and last time cache was cleaned. */
-            ageThreshold = 2*(currAge - lastCleanedAge);
-        }
-    }
-    return result;
-}
-
-void CachedBlocksList::releaseLastIfOld(uintptr_t currAge, size_t size)
-{
-    LargeMemoryBlock *toRelease = NULL;
- 
-    /* 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) {
-        MallocMutex::scoped_lock scoped_cs(lock);
-        // double check
-        if (last && (intptr_t)(currAge - last->age) > ageThreshold) {
-            do {
-                last = last->prev;
-            } while (last && (intptr_t)(currAge - last->age) > ageThreshold);
-            if (last) {
-                toRelease = last->next;
-                oldest = last->age;
-                last->next = NULL;
-            } else {
-                toRelease = first;
-                first = NULL;
-                oldest = 0;
-            }
-            MALLOC_ASSERT( toRelease, ASSERT_TEXT );
-            lastCleanedAge = toRelease->age;
-        } 
-        else 
-            return;
-    }
-    while ( toRelease ) {
-        LargeMemoryBlock *helper = toRelease->next;
-        removeBackRef(toRelease->backRefIdx);
-        freeRawMemory(toRelease, size, toRelease->fromMapMemory);
-        toRelease = helper;
-    }
-}
-
-
-/* 
- * Bad dereference caused by a foreign pointer is possible only here, not earlier in call chain.
- * Separate function isolates SEH code, as it has bad influence on compiler optimization.
- */
-static inline BackRefIdx safer_dereference (BackRefIdx *ptr)
-{
-    BackRefIdx id;
-#if _MSC_VER
-    __try {
-#endif
-        id = *ptr;
-#if _MSC_VER
-    } __except( GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION? 
-                EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH ) {
-        id = BackRefIdx();
-    }
-#endif
-    return id;
-}
-
-static inline bool isLargeObject(void *object)
-{
-    if (!isAligned(object, largeObjectAlignment)) 
-        return false;
-    LargeObjectHdr *header = (LargeObjectHdr*)object - 1;
-    BackRefIdx idx = safer_dereference(&header->backRefIdx);
-
-    return idx.isLargeObject() && getBackRef(idx) == header;
-}
-
-static uintptr_t cleanupCacheIfNeed ()
-{
-    /* 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 
-     * 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 ) {
-        size_t objSize;
-        int i;
-
-        for (i = numLargeBlockBins-1, 
-             objSize = (numLargeBlockBins-1)*largeBlockCacheStep+blockSize; 
-             i >= 0; 
-             i--, objSize-=largeBlockCacheStep) {
-            /* cached block size on iteration is
-             * i*largeBlockCacheStep+blockSize, it seems iterative
-             * computation of it improves performance.
-             */
-            // release from cache blocks that are older than ageThreshold
-            globalCachedBlockBins[i].releaseLastIfOld(currAge, objSize);
-        }
-    }
-    return currAge;
-}
-
-static LargeMemoryBlock* getCachedLargeBlock (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-blockSize)/largeBlockCacheStep;
-    if (idx<numLargeBlockBins) {
-        lmb = globalCachedBlockBins[idx].pop();
-        if (lmb) {
-            MALLOC_ITT_SYNC_ACQUIRED(globalCachedBlockBins+idx);
-            STAT_increment(getThreadId(), ThreadCommonCounters, allocCachedLargeBlk);
-        }
-    }
-    return lmb;
-}
-
-static inline void* mallocLargeObject (size_t size, size_t alignment, 
-                                       bool startupAlloc = false)
-{
-    LargeMemoryBlock* lmb;
-    size_t headersSize = sizeof(LargeMemoryBlock)+sizeof(LargeObjectHdr);
-    size_t allocationSize = alignUp(size+headersSize+alignment, largeBlockCacheStep);
-
-    if (startupAlloc || !(lmb = getCachedLargeBlock(allocationSize))) {
-        BackRefIdx backRefIdx;
-
-        if ((backRefIdx = BackRefIdx::newBackRef(/*largeObj=*/true)).isInvalid()) 
-            return NULL;
-        lmb = (LargeMemoryBlock*)getRawMemory(allocationSize, /*useMapMem=*/startupAlloc);
-        if (!lmb) return NULL;
-        lmb->fromMapMemory = startupAlloc;
-        lmb->backRefIdx = backRefIdx;
-        lmb->unalignedSize = allocationSize;
-        STAT_increment(getThreadId(), ThreadCommonCounters, allocNewLargeObj);
-    }
-
-    void *alignedArea = (void*)alignUp((uintptr_t)lmb+headersSize, alignment);
-    LargeObjectHdr *header = (LargeObjectHdr*)alignedArea-1;
-    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 (LargeMemoryBlock* largeBlock)
-{
-    size_t size = largeBlock->unalignedSize;
-    size_t idx = (size-blockSize)/largeBlockCacheStep;
-    if (idx<numLargeBlockBins) {
-        MALLOC_ASSERT( size%largeBlockCacheStep==0, ASSERT_TEXT );
-        MALLOC_ITT_SYNC_RELEASING(globalCachedBlockBins+idx);
-        globalCachedBlockBins[idx].push(largeBlock);
-
-        STAT_increment(getThreadId(), ThreadCommonCounters, cacheLargeBlk);
-        return true;
-    }
-    return false;
-}
-
-static inline void freeLargeObject (void *object)
-{
-    LargeObjectHdr *header = (LargeObjectHdr*)object - 1;
-
-    // overwrite backRefIdx to simplify double free detection
-    header->backRefIdx = BackRefIdx();
-    if (!freeLargeObjectToCache(header->memoryBlock)) {
-        removeBackRef(header->memoryBlock->backRefIdx);
-        freeRawMemory(header->memoryBlock, header->memoryBlock->unalignedSize, 
-                      /*useMapMem=*/ header->memoryBlock->fromMapMemory);
-        STAT_increment(getThreadId(), ThreadCommonCounters, freeLargeObj);
-    }
-}
-
-/*********** End allocation of large objects **********/
-
-
-static FreeObject *allocateFromFreeList(Block *mallocBlock)
-{
-    FreeObject *result;
-
-    if (!mallocBlock->freeList) {
-        return NULL;
-    }
-
-    result = mallocBlock->freeList;
-    MALLOC_ASSERT( result, ASSERT_TEXT );
-
-    mallocBlock->freeList = result->next;
-    MALLOC_ASSERT( mallocBlock->allocatedCount < (blockSize-sizeof(Block))/mallocBlock->objectSize, ASSERT_TEXT );
-    mallocBlock->allocatedCount++;
-    STAT_increment(mallocBlock->owner, getIndex(mallocBlock->objectSize), allocFreeListUsed);
-
-    return result;
-}
-
-static FreeObject *allocateFromBumpPtr(Block *mallocBlock)
-{
-    FreeObject *result = mallocBlock->bumpPtr;
-    if (result) {
-        mallocBlock->bumpPtr =
-            (FreeObject *) ((uintptr_t) mallocBlock->bumpPtr - mallocBlock->objectSize);
-        if ( (uintptr_t)mallocBlock->bumpPtr < (uintptr_t)mallocBlock+sizeof(Block) ) {
-            mallocBlock->bumpPtr = NULL;
-        }
-        MALLOC_ASSERT( mallocBlock->allocatedCount < (blockSize-sizeof(Block))/mallocBlock->objectSize, ASSERT_TEXT );
-        mallocBlock->allocatedCount++;
-        STAT_increment(mallocBlock->owner, getIndex(mallocBlock->objectSize), allocBumpPtrUsed);
-    }
-    return result;
-}
-
-inline static FreeObject* allocateFromBlock( Block *mallocBlock )
-{
-    FreeObject *result;
-
-    MALLOC_ASSERT( mallocBlock->owner == getThreadId(), ASSERT_TEXT );
-
-    /* for better cache locality, first looking in the free list. */
-    if ( (result = allocateFromFreeList(mallocBlock)) ) {
-        return result;
-    }
-    MALLOC_ASSERT( !mallocBlock->freeList, ASSERT_TEXT );
-
-    /* if free list is empty, try thread local bump pointer allocation. */
-    if ( (result = allocateFromBumpPtr(mallocBlock)) ) {
-        return result;
-    }
-    MALLOC_ASSERT( !mallocBlock->bumpPtr, ASSERT_TEXT );
-
-    /* the block is considered full. */
-    mallocBlock->isFull = 1;
-    return NULL;
-}
-
-static void moveBlockToBinFront(Block *block)
-{
-    Bin* bin = getAllocationBin(block->objectSize);
-    /* move the block to the front of the bin */
-    outofTLSBin(bin, block);
-    pushTLSBin(bin, block);
-}
-
-static void processLessUsedBlock(Block *block)
-{
-    Bin* bin = getAllocationBin(block->objectSize);
-    if (block != getActiveBlock(bin)) {
-        /* We are not actively using this block; return it to the general block pool */
-        outofTLSBin(bin, block);
-        returnEmptyBlock(block, /*poolTheBlock=*/true);
-    } else {
-        /* all objects are free - let's restore the bump pointer */
-        restoreBumpPtr(block);
-    }
-}
-
-/*
- * All aligned allocations fall into one of the following categories:
- *  1. if both request size and alignment are <= maxSegregatedObjectSize,
- *       we just align the size up, and request this amount, because for every size
- *       aligned to some power of 2, the allocated object is at least that aligned.
- * 2. for bigger size, check if already guaranteed fittingAlignment is enough.
- * 3. if size+alignment<minLargeObjectSize, we take an object of fittingSizeN and align
- *       its address up; given such pointer, scalable_free could find the real object.
- * 4. otherwise, aligned large object is allocated.
- */
-static void *allocateAligned(size_t size, size_t alignment)
-{
-    MALLOC_ASSERT( isPowerOfTwo(alignment), ASSERT_TEXT );
-
-    void *result;
-    if (size<=maxSegregatedObjectSize && alignment<=maxSegregatedObjectSize)
-        result = scalable_malloc(alignUp(size? size: sizeof(size_t), alignment));
-    else if (size<minLargeObjectSize && alignment<=fittingAlignment)
-        result = scalable_malloc(size);
-    else if (size+alignment < minLargeObjectSize) {
-        void *unaligned = scalable_malloc(size+alignment);
-        if (!unaligned) return NULL;
-        result = alignUp(unaligned, alignment);
-    } else {
-        /* This can be the first allocation call. */
-        if (!isMallocInitialized()) 
-            doInitialization();
-        // take into account only alignment that are higher then natural
-        result = mallocLargeObject(size, largeObjectAlignment>alignment? 
-                                         largeObjectAlignment: alignment);
-    }
-
-    MALLOC_ASSERT( isAligned(result, alignment), ASSERT_TEXT );
-    return result;
-}
-
-static void *reallocAligned(void *ptr, size_t size, size_t alignment = 0)
-{
-    void *result;
-    size_t copySize;
-
-    if (isLargeObject(ptr)) {
-        LargeMemoryBlock* lmb = ((LargeObjectHdr *)ptr - 1)->memoryBlock;
-        copySize = lmb->unalignedSize-((uintptr_t)ptr-(uintptr_t)lmb);
-        if (size <= copySize && (0==alignment || isAligned(ptr, alignment))) {
-            lmb->objectSize = size;
-            return ptr;
-        } else {
-            copySize = lmb->objectSize;
-            result = alignment ? allocateAligned(size, alignment) : scalable_malloc(size);
-        }
-    } else {
-        Block* block = (Block *)alignDown(ptr, blockSize);
-        copySize = block->objectSize;
-        if (size <= copySize && (0==alignment || isAligned(ptr, alignment))) {
-            return ptr;
-        } else {
-            result = alignment ? allocateAligned(size, alignment) : scalable_malloc(size);
-        }
-    }
-    if (result) {
-        memcpy(result, ptr, copySize<size? copySize: size);
-        scalable_free(ptr);
-    }
-    return result;
-}
-
-/* A predicate checks if an object is properly placed inside its block */
-static inline bool isProperlyPlaced(const void *object, const Block *block)
-{
-    return 0 == ((uintptr_t)block + blockSize - (uintptr_t)object) % block->objectSize;
-}
-
-/* Finds the real object inside the block */
-static inline FreeObject *findAllocatedObject(const void *address, const Block *block)
-{
-    // calculate offset from the end of the block space
-    uintptr_t offset = (uintptr_t)block + blockSize - (uintptr_t)address;
-    MALLOC_ASSERT( offset<blockSize-sizeof(Block), ASSERT_TEXT );
-    // find offset difference from a multiple of allocation size
-    offset %= block->objectSize;
-    // and move the address down to where the real object starts.
-    return (FreeObject*)((uintptr_t)address - (offset? block->objectSize-offset: 0));
-}
-
-/**** Check if an object was allocated by scalable_malloc ****/
-
-static inline bool isSmallObject (void *ptr)
-{
-    void* expected = alignDown(ptr, blockSize);
-    BackRefIdx* idx = &((Block*)expected)->backRefIdx;
-
-    return expected == getBackRef(safer_dereference(idx));
-}
-
-static inline bool isRecognized (void* ptr)
-{
-    return isLargeObject(ptr) || isSmallObject(ptr);
-}
-
-static inline void freeSmallObject (void *object) {
-    FreeObject *objectToFree;
-
-    Block *block = (Block *)alignDown(object, blockSize);/* mask low bits to get the block */
-    MALLOC_ASSERT( block->allocatedCount, ASSERT_TEXT );
-
-#if MALLOC_CHECK_RECURSION
-    if (block->objectSize == startupAllocObjSizeMark) {
-        startupFree((StartupBlock *)block, object);
-        return;
-    }
-#endif
-
-    ThreadId myTid = getThreadId();
-
-    // Due to aligned allocations, a pointer passed to scalable_free
-    // might differ from the address of internally allocated object.
-    // Small objects however should always be fine.    
-    if (block->objectSize <= maxSegregatedObjectSize)
-        objectToFree = (FreeObject*)object;
-    // "Fitting size" allocations are suspicious if aligned higher than naturally
-    else {
-        if ( ! isAligned(object,2*fittingAlignment) )
-        // TODO: the above check is questionable - it gives false negatives in ~50% cases,
-        //       so might even be slower in average than unconditional use of findAllocatedObject.
-        // here it should be a "real" object
-            objectToFree = (FreeObject*)object;
-        else
-        // here object can be an aligned address, so applying additional checks
-            objectToFree = findAllocatedObject(object, block);
-        MALLOC_ASSERT( isAligned(objectToFree,fittingAlignment), ASSERT_TEXT );
-    }
-    MALLOC_ASSERT( isProperlyPlaced(objectToFree, block), ASSERT_TEXT );
-
-    if (myTid == block->owner) {
-        objectToFree->next = block->freeList;
-        block->freeList = objectToFree;
-        block->allocatedCount--;
-        MALLOC_ASSERT( block->allocatedCount < (blockSize-sizeof(Block))/block->objectSize, ASSERT_TEXT );
-#if COLLECT_STATISTICS
-        if (getActiveBlock(getAllocationBin(block->objectSize)) != block)
-            STAT_increment(myTid, getIndex(block->objectSize), freeToInactiveBlock);
-        else
-            STAT_increment(myTid, getIndex(block->objectSize), freeToActiveBlock);
-#endif
-        if (block->isFull) {
-            if (emptyEnoughToUse(block))
-                moveBlockToBinFront(block);
-        } else {
-            if (block->allocatedCount==0 && block->publicFreeList==NULL)
-                processLessUsedBlock(block);
-        }
-    } else { /* Slower path to add to the shared list, the allocatedCount is updated by the owner thread in malloc. */
-        freePublicObject (block, objectToFree);
-    }
-}
-
-} // namespace internal
-} // namespace rml
-
-using namespace rml::internal;
-
-/*
- * When a thread is shutting down this routine should be called to remove all the thread ids
- * from the malloc blocks and replace them with a NULL thread id.
- *
- */
-#if MALLOC_TRACE
-static unsigned int threadGoingDownCount = 0;
-#endif
-
-/*
- * for pthreads, the function is set as a callback in pthread_key_create for TLS bin.
- * it will be automatically called at thread exit with the key value as the argument.
- *
- * 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.
-*/
-extern "C" void mallocThreadShutdownNotification(void* arg)
-{
-    TLSData *tls;
-    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++ ));
-#ifdef USE_WINTHREAD
-    tls = getThreadMallocTLS();
-#else
-    tls = (TLSData*)arg;
-#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 */
-                    returnEmptyBlock(threadlessBlock, /*poolTheBlock=*/false);
-                } else {
-                    returnPartialBlock(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 */
-                    returnEmptyBlock(threadlessBlock, /*poolTheBlock=*/false);
-                } else {
-                    returnPartialBlock(tlsBin+index, threadlessBlock);
-                }
-                threadlessBlock = threadBlock;
-            }
-            tlsBin[index].activeBlk = 0;
-        }
-        bootStrapFree(tls);
-        setThreadMallocTLS(NULL);
-    }
-
-    TRACEF(( "[ScalableMalloc trace] Thread id %d blocks return end\n", getThreadId() ));
-}
-
-extern "C" void mallocProcessShutdownNotification(void)
-{
-#if COLLECT_STATISTICS
-    ThreadId nThreads = ThreadIdCount;
-    for( int i=1; i<=nThreads && i<MAX_THREADS; ++i )
-        STAT_print(i);
-#endif
-}
-
-/********* The malloc code          *************/
-
-extern "C" void * scalable_malloc(size_t size)
-{
-    Bin* bin;
-    Block * mallocBlock;
-    FreeObject *result;
-
-    if (!size) size = sizeof(size_t);
-
-#if MALLOC_CHECK_RECURSION
-    if (RecursiveMallocCallProtector::sameThreadActive()) {
-        result = size<minLargeObjectSize? startupAlloc(size) : 
-              (FreeObject*)mallocLargeObject(size, blockSize, /*startupAlloc=*/ true);
-        if (!result) errno = ENOMEM;
-        return result;
-    }
-#endif
-
-    if (!isMallocInitialized()) 
-        doInitialization();
-
-    /*
-     * Use Large Object Allocation
-     */
-    if (size >= minLargeObjectSize) {
-        result = (FreeObject*)mallocLargeObject(size, largeObjectAlignment);
-        if (!result) errno = ENOMEM;
-        return result;
-    }
-
-    /*
-     * 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 = getAllocationBin(size);
-    if ( !bin ) {
-        errno = ENOMEM;
-        return NULL;
-    }
-
-    /* Get the block of you want to try to allocate in. */
-    mallocBlock = getActiveBlock(bin);
-
-    if (mallocBlock) {
-        do {
-            if( (result = allocateFromBlock(mallocBlock)) ) {
-                return result;
-            }
-            // the previous block, if any, should be empty enough
-        } while( (mallocBlock = setPreviousBlockActive(bin)) );
-    }
-    MALLOC_ASSERT( !(bin->activeBlk) || bin->activeBlk->isFull==1, ASSERT_TEXT );
-
-    /*
-     * else privatize publicly freed objects in some block and allocate from it
-     */
-    mallocBlock = getPublicFreeListBlock( bin );
-    if (mallocBlock) {
-        if (emptyEnoughToUse(mallocBlock)) {
-            /* move the block to the front of the bin */
-            outofTLSBin(bin, mallocBlock);
-            pushTLSBin(bin, mallocBlock);
-        }
-        MALLOC_ASSERT( mallocBlock->freeList, ASSERT_TEXT );
-        if ( (result = allocateFromFreeList(mallocBlock)) ) {
-            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 scalable_malloc(size);
-    }
-
-    /*
-     * no suitable own blocks, try to get a partial block that some other thread has discarded.
-     */
-    mallocBlock = getPartialBlock(bin, size);
-    while (mallocBlock) {
-        pushTLSBin(bin, mallocBlock);
-// guaranteed by pushTLSBin: MALLOC_ASSERT( *bin==mallocBlock || (*bin)->previous==mallocBlock, ASSERT_TEXT );
-        setActiveBlock(bin, mallocBlock);
-        if( (result = allocateFromBlock(mallocBlock)) ) {
-            return result;
-        }
-        mallocBlock = getPartialBlock(bin, size);
-    }
-
-    /*
-     * else try to get a new empty block
-     */
-    mallocBlock = getEmptyBlock(size);
-    if (mallocBlock) {
-        pushTLSBin(bin, mallocBlock);
-// guaranteed by pushTLSBin: MALLOC_ASSERT( *bin==mallocBlock || (*bin)->previous==mallocBlock, ASSERT_TEXT );
-        setActiveBlock(bin, mallocBlock);
-        if( (result = allocateFromBlock(mallocBlock)) ) {
-            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 scalable_malloc(size);
-    }
-    /*
-     * else nothing works so return NULL
-     */
-    TRACEF(( "[ScalableMalloc trace] No memory found, returning NULL.\n" ));
-    errno = ENOMEM;
-    return NULL;
-}
-
-/********* End the malloc code      *************/
-
-/********* The free code            *************/
-
-extern "C" void scalable_free (void *object) {
-    if (!object)
-        return;
-
-    MALLOC_ASSERT(isRecognized(object), "Invalid pointer in scalable_free detected.");
-
-    if (isLargeObject(object))
-        freeLargeObject(object);
-    else
-        freeSmallObject(object);
-}
-
-/*
- * A variant that provides additional memory safety, by checking whether the given address
- * was obtained with this allocator, and if not redirecting to the provided alternative call.
- */
-extern "C" void safer_scalable_free (void *object, void (*original_free)(void*)) 
-{
-    if (!object)
-        return;
-
-    // must check 1st for large object, because small object check touches 4 pages on left,
-    // and it can be unaccessable
-    if (isLargeObject(object))
-        freeLargeObject(object);
-    else if (isSmallObject(object))
-        freeSmallObject(object);
-    else if (original_free)
-        original_free(object);
-}
-
-/********* End the free code        *************/
-
-/********* Code for scalable_realloc       ***********/
-
-/*
- * From K&R
- * "realloc changes the size of the object pointed to by p to size. The contents will
- * be unchanged up to the minimum of the old and the new sizes. If the new size is larger,
- * the new space is uninitialized. realloc returns a pointer to the new space, or
- * NULL if the request cannot be satisfied, in which case *p is unchanged."
- *
- */
-extern "C" void* scalable_realloc(void* ptr, size_t size)
-{
-    /* corner cases left out of reallocAligned to not deal with errno there */
-    if (!ptr) {
-        return scalable_malloc(size);
-    }
-    if (!size) {
-        scalable_free(ptr);
-        return NULL;
-    }
-    void* tmp = reallocAligned(ptr, size, 0);
-    if (!tmp) errno = ENOMEM;
-    return tmp;
-}
-
-/*
- * A variant that provides additional memory safety, by checking whether the given address
- * was obtained with this allocator, and if not redirecting to the provided alternative call.
- */
-extern "C" void* safer_scalable_realloc (void* ptr, size_t sz, void* original_realloc) 
-{
-    if (!ptr) {
-        return scalable_malloc(sz);
-    }
-    if (isRecognized(ptr)) {
-        if (!sz) {
-            scalable_free(ptr);
-            return NULL;
-        }
-        void* tmp = reallocAligned(ptr, sz, 0);
-        if (!tmp) errno = ENOMEM;
-        return tmp;
-    }
-#if USE_WINTHREAD
-    else if (original_realloc && sz) {
-            orig_ptrs *original_ptrs = static_cast<orig_ptrs*>(original_realloc);
-            if ( original_ptrs->orig_msize ){
-                size_t oldSize = original_ptrs->orig_msize(ptr);
-                void *newBuf = scalable_malloc(sz);
-                if (newBuf) {
-                    memcpy(newBuf, ptr, sz<oldSize? sz : oldSize);
-                    if ( original_ptrs->orig_free ){
-                        original_ptrs->orig_free( ptr );
-                    }
-                }
-                return newBuf;
-             }
-    }
-#else
-    else if (original_realloc) {
-        typedef void* (*realloc_ptr_t)(void*,size_t);
-        realloc_ptr_t original_realloc_ptr;
-        (void *&)original_realloc_ptr = original_realloc;
-        return original_realloc_ptr(ptr,sz);
-    }
-#endif
-    return NULL;
-}
-
-/********* End code for scalable_realloc   ***********/
-
-/********* Code for scalable_calloc   ***********/
-
-/*
- * From K&R
- * calloc returns a pointer to space for an array of nobj objects, 
- * each of size size, or NULL if the request cannot be satisfied. 
- * The space is initialized to zero bytes.
- *
- */
-
-extern "C" void * scalable_calloc(size_t nobj, size_t size)
-{
-    size_t arraySize = nobj * size;
-    void* result = scalable_malloc(arraySize);
-    if (result)
-        memset(result, 0, arraySize);
-    return result;
-}
-
-/********* End code for scalable_calloc   ***********/
-
-/********* Code for aligned allocation API **********/
-
-extern "C" int scalable_posix_memalign(void **memptr, size_t alignment, size_t size)
-{
-    if ( !isPowerOfTwoMultiple(alignment, sizeof(void*)) )
-        return EINVAL;
-    void *result = allocateAligned(size, alignment);
-    if (!result)
-        return ENOMEM;
-    *memptr = result;
-    return 0;
-}
-
-extern "C" void * scalable_aligned_malloc(size_t size, size_t alignment)
-{
-    if (!isPowerOfTwo(alignment) || 0==size) {
-        errno = EINVAL;
-        return NULL;
-    }
-    void* tmp = allocateAligned(size, alignment);
-    if (!tmp) 
-        errno = ENOMEM;
-    return tmp;
-}
-
-extern "C" void * scalable_aligned_realloc(void *ptr, size_t size, size_t alignment)
-{
-    /* corner cases left out of reallocAligned to not deal with errno there */
-    if (!isPowerOfTwo(alignment)) {
-        errno = EINVAL;
-        return NULL;
-    }
-    if (!ptr) {
-        return allocateAligned(size, alignment);
-    }
-    if (!size) {
-        scalable_free(ptr);
-        return NULL;
-    }
-
-    void* tmp = reallocAligned(ptr, size, alignment);
-    if (!tmp) errno = ENOMEM;
-    return tmp;
-}
-
-extern "C" void * safer_scalable_aligned_realloc(void *ptr, size_t size, size_t alignment, void* orig_function)
-{
-    /* corner cases left out of reallocAligned to not deal with errno there */
-    if (!isPowerOfTwo(alignment)) {
-        errno = EINVAL;
-        return NULL;
-    }
-    if (!ptr) {
-        return allocateAligned(size, alignment);
-    }
-    if (isRecognized(ptr)) {
-        if (!size) {
-            scalable_free(ptr);
-            return NULL;
-        }
-        void* tmp = reallocAligned(ptr, size, alignment);
-        if (!tmp) errno = ENOMEM;
-        return tmp;
-    }
-#if USE_WINTHREAD
-    else {
-        orig_ptrs *original_ptrs = static_cast<orig_ptrs*>(orig_function);
-        if (size) {
-            if ( original_ptrs->orig_msize ){
-                size_t oldSize = original_ptrs->orig_msize(ptr);
-                void *newBuf = allocateAligned(size, alignment);
-                if (newBuf) {
-                    memcpy(newBuf, ptr, size<oldSize? size : oldSize);
-                    if ( original_ptrs->orig_free ){
-                        original_ptrs->orig_free( ptr );
-                    }
-                }
-                return newBuf;
-            }else{
-                //We can't do anything with this. Just keeping old pointer
-                return NULL;
-            }
-        } else {
-            if ( original_ptrs->orig_free ){
-                original_ptrs->orig_free( ptr );
-            }
-            return NULL;
-        }
-    }
-#endif
-    return NULL;
-}
-
-extern "C" void scalable_aligned_free(void *ptr)
-{
-    scalable_free(ptr);
-}
-
-/********* end code for aligned allocation API **********/
-
-/********* Code for scalable_msize       ***********/
-
-/*
- * Returns the size of a memory block allocated in the heap.
- */
-extern "C" size_t scalable_msize(void* ptr)
-{
-    if (ptr) {
-        MALLOC_ASSERT(isRecognized(ptr), "Invalid pointer in scalable_msize detected.");
-        if (isLargeObject(ptr)) {
-            LargeMemoryBlock* lmb = ((LargeObjectHdr*)ptr - 1)->memoryBlock;
-            return lmb->objectSize;
-        } else {
-            Block* block = (Block *)alignDown(ptr, blockSize);
-#if MALLOC_CHECK_RECURSION
-            size_t size = block->objectSize? block->objectSize : startupMsize(ptr);
-#else
-            size_t size = block->objectSize;
-#endif
-            MALLOC_ASSERT(size>0 && size<minLargeObjectSize, ASSERT_TEXT);
-            return size;
-        }
-    }
-    errno = EINVAL;
-    // Unlike _msize, return 0 in case of parameter error.
-    // Returning size_t(-1) looks more like the way to troubles.
-    return 0;
-}
-
-/*
- * A variant that provides additional memory safety, by checking whether the given address
- * was obtained with this allocator, and if not redirecting to the provided alternative call.
- */
-extern "C" size_t safer_scalable_msize (void *object, size_t (*original_msize)(void*)) 
-{
-    if (object) {
-        // Check if the memory was allocated by scalable_malloc
-        if (isRecognized(object))
-            return scalable_msize(object);
-        else if (original_msize)
-            return original_msize(object);
-    }
-    // object is NULL or unknown
-    errno = EINVAL;
-    return 0;
-}
-
-/********* End code for scalable_msize   ***********/
diff --git a/src/tbbmalloc/Statistics.h b/src/tbbmalloc/Statistics.h
index 9b59d0e..5d7927c 100644
--- a/src/tbbmalloc/Statistics.h
+++ b/src/tbbmalloc/Statistics.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbbmalloc/TypeDefinitions.h b/src/tbbmalloc/TypeDefinitions.h
index 9b90874..9bf4bce 100644
--- a/src/tbbmalloc/TypeDefinitions.h
+++ b/src/tbbmalloc/TypeDefinitions.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -31,7 +31,7 @@
 
 // Define preprocessor symbols used to determine architecture
 #if _WIN32||_WIN64
-#   if defined(_M_AMD64)
+#   if defined(_M_X64)||defined(__x86_64__)  // the latter for MinGW support
 #       define __ARCH_x86_64 1
 #   elif defined(_M_IA64)
 #       define __ARCH_ipf 1
diff --git a/src/tbbmalloc/backend.cpp b/src/tbbmalloc/backend.cpp
new file mode 100644
index 0000000..68e904a
--- /dev/null
+++ b/src/tbbmalloc/backend.cpp
@@ -0,0 +1,275 @@
+/*
+    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.
+*/
+
+// intrin.h available since VS2005
+#if defined(_MSC_VER) && _MSC_VER >= 1400
+#define __TBB_HAS_INTRIN_H 1
+#else
+#define __TBB_HAS_INTRIN_H 0
+#endif
+
+#if __TBB_HAS_INTRIN_H
+#include <intrin.h>   /* for __cpuid */
+#endif
+
+#include "tbbmalloc_internal.h"
+//! Define the main synchronization method
+/** It should be specified before including LifoList.h */
+#define FINE_GRAIN_LOCKS
+#include "LifoList.h"
+
+
+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 ****************/
+
+#if USE_DEFAULT_MEMORY_MAPPING
+#include "MapMemory.h"
+#else
+/* 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 = malloc(size);
+    else if ( rml::internal::original_malloc_found )
+        object = (*rml::internal::original_malloc_ptr)(size);
+    else
+        object = MapMemory(size);
+#else
+    object = malloc(size);
+#endif /* MALLOC_CHECK_RECURSION */
+    return object;
+}
+
+void freeRawMemory (void *object, size_t size, bool useMapMem)
+{
+    if (useMapMem)
+        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
+        UnmapMemory(object, size);
+#else
+    free(object);
+#endif /* MALLOC_CHECK_RECURSION */
+}
+
+#else /* USE_MALLOC_FOR_LARGE_OBJECT */
+
+void* getRawMemory (size_t size, bool = false) { return MapMemory(size); }
+
+void freeRawMemory (void *object, size_t size, bool) {
+    UnmapMemory(object, size);
+}
+
+#endif /* USE_MALLOC_FOR_LARGE_OBJECT */
+
+/********* End memory acquisition code ********************************/
+
+static unsigned int getCPUid()
+{
+    unsigned int id;
+
+#if (__ARCH_x86_32||__ARCH_x86_64) && (__linux__||__APPLE__||__FreeBSD__||__NetBSD__||__sun||__MINGW32__)
+    int res;
+ #if __ARCH_x86_32
+    /* EBX used for PIC support. Having EAX in output operands 
+       prevents ICC from crash like in __TBB_ICC_ASM_VOLATILE_BROKEN. */
+    int _eax, _ecx, _edx;
+    __asm__ ("xchgl %%ebx, %1\n\t"
+             "cpuid\n\t"
+             "xchgl %%ebx, %1\n\t"
+             : "=a" (_eax), "=r" (res)
+             : "a" (1) : "ecx", "edx");
+ #else
+    __asm__ ("cpuid\n\t"
+             : "=b" (res)
+             : "a" (1) );
+ #endif // __ARCH_x86_32
+    id = (res >> 24) & 0xff;
+#elif _WIN32 || _WIN64
+ #if __TBB_HAS_INTRIN_H
+    int CPUInfo[4];
+    __cpuid(CPUInfo, 1);
+    id = (CPUInfo[1] >> 24) & 0xff;
+ #else
+    int res;
+    _asm {
+        push ebx
+        push ecx
+        mov  eax,1
+        cpuid
+        mov  res,ebx
+        pop  ecx
+        pop  ebx
+    }
+    id = (res >> 24) & 0xff;
+ #endif
+# else
+    id = getThreadId();
+#endif
+    return id;
+}
+
+
+/* 
+ * To decrease contention for free blocks, free blocks are split, and access
+ * to them is based on process number.
+ */
+const int numOfFreeBlockLists = 4;
+
+/*
+ * This is a LIFO linked list that one can init, push or pop from
+ */
+static LifoList freeBlockList[numOfFreeBlockLists];
+
+FreeBlocks freeBlocks;
+
+bool FreeBlocks::bootstrap(RawAlloc myAlloc, RawFree myFree, size_t /*myReqSize*/)
+{
+    if (!myAlloc && !myFree) {
+        rawAlloc = getRawMemory;
+        rawFree = freeRawMemory;
+        // Get virtual memory in pieces of this size: 0x0100000 is 1 megabyte decimal
+        memReqSize = 0x0100000;
+    } else
+        MALLOC_ASSERT(0, "Not implemented yet.");
+    return mallocBigBlock();
+}
+
+BlockI *FreeBlocks::get(bool startup)
+{
+    BlockI *bigBlock;
+    // must not call getCPUid during malloc initialization 
+    // because getCPUid can call malloc
+    const unsigned myFreeList = startup? 0 : getCPUid()%numOfFreeBlockLists;
+    unsigned currListIdx = myFreeList;
+
+    do {
+        if (bigBlock = (BlockI *) freeBlockList[currListIdx].pop()) {
+            MALLOC_ITT_SYNC_ACQUIRED(freeBlockList+currListIdx);
+            break;
+        }
+        currListIdx = (currListIdx+1) % numOfFreeBlockLists;
+    } while (currListIdx != myFreeList);
+
+    while (!bigBlock) {
+        /* We are out of blocks so go to the OS and get another one */
+        if (!mallocBigBlock()) return NULL;
+
+        bigBlock = (BlockI *) freeBlockList[myFreeList].pop();
+        if (bigBlock)
+            MALLOC_ITT_SYNC_ACQUIRED(freeBlockList+myFreeList);
+    }
+
+    return bigBlock;
+}
+
+void FreeBlocks::put(BlockI *ptr, bool startup)
+{
+    unsigned myFreeList = startup? 0 : getCPUid()%numOfFreeBlockLists;
+    MALLOC_ITT_SYNC_RELEASING(freeBlockList+myFreeList);
+    freeBlockList[myFreeList].push((void **)ptr);
+}
+
+void FreeBlocks::putList(BlockI *head, BlockI *tail)
+{
+    unsigned myFreeList = getCPUid()%numOfFreeBlockLists;
+    MALLOC_ITT_SYNC_RELEASING(freeBlockList+myFreeList);
+    freeBlockList[myFreeList].pushList((void**)head, (void**)tail);
+}
+
+/*
+ * Big Blocks are the blocks we get from the OS or some similar place using getMemory above.
+ * They are placed on the freeBlockList once they are acquired.
+ */
+bool FreeBlocks::mallocBigBlock()
+{
+/* Divide the big block into smaller bigBlocks that hold that many blocks.
+ * This is done since we really need a lot of blocks on the freeBlockList 
+ * or there will be contention problems.
+ */
+    const unsigned int blocksPerBigBlock = 16/numOfFreeBlockLists;
+
+    void *unalignedBigBlock = (*rawAlloc)(memReqSize, /*useMapMem=*/true);
+
+    if (!unalignedBigBlock) {
+        TRACEF(( "[ScalableMalloc trace] in mallocBigBlock, getMemory returns 0\n" ));
+        /* We can't get any more memory from the OS or executive */
+        return false;
+    }
+
+    void *alignedBigBlock = alignUp(unalignedBigBlock, blockSize);
+    void *bigBlockCeiling = (void*)((uintptr_t)unalignedBigBlock + memReqSize);
+
+    size_t bigBlockSplitSize = blocksPerBigBlock * blockSize;
+
+    BlockI *splitBlock = (BlockI*)alignedBigBlock;
+
+    // distribute alignedBigBlock between all freeBlockList elements
+    for (unsigned currListIdx = 0;
+         ((uintptr_t)splitBlock + blockSize) <= (uintptr_t)bigBlockCeiling;
+         currListIdx = (currListIdx+1) % numOfFreeBlockLists) {
+        void *splitEdge = (void*)((uintptr_t)splitBlock + bigBlockSplitSize);
+        if( splitEdge > bigBlockCeiling) {
+            splitEdge = alignDown(bigBlockCeiling, blockSize);
+        }
+        ((BlockI*)splitBlock)->initialize(splitEdge);
+        MALLOC_ITT_SYNC_RELEASING(freeBlockList+currListIdx);
+        freeBlockList[currListIdx].push((void**) splitBlock);
+        splitBlock = (BlockI*)splitEdge;
+    }
+
+    TRACEF(( "[ScalableMalloc trace] in mallocBigBlock returning 1\n" ));
+    return true;
+}
+
+} } // namespaces
diff --git a/src/tbbmalloc/backref.cpp b/src/tbbmalloc/backref.cpp
new file mode 100644
index 0000000..c20084f
--- /dev/null
+++ b/src/tbbmalloc/backref.cpp
@@ -0,0 +1,240 @@
+/*
+    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.
+*/
+
+#include <string.h>
+#include <new>        /* for placement new */
+#include "tbbmalloc_internal.h"
+
+namespace rml {
+namespace internal {
+
+
+/********* backreferences ***********************/
+/* Each 16KB block and each large memory object header contains BackRefIdx 
+ * that points out in some BackRefBlock which points back to this block or header.
+ */
+struct BackRefBlock {
+    BackRefBlock *nextForUse;     // the next in the chain of blocks with free items
+    FreeObject   *bumpPtr;        // bump pointer moves from the end to the beginning of the block
+    FreeObject   *freeList;
+    int           allocatedCount; // the number of objects allocated
+    int           myNum;          // the index in the parent array
+    MallocMutex   blockMutex;
+    bool          addedToForUse;  // this block is already added to the listForUse chain
+
+    BackRefBlock(BackRefBlock *blockToUse, int myNum) :
+        nextForUse(NULL), bumpPtr((FreeObject*)((uintptr_t)blockToUse + blockSize - sizeof(void*))),
+        freeList(NULL), allocatedCount(0), myNum(myNum), addedToForUse(false) {
+        // index in BackRefMaster must fit to uint16_t
+        MALLOC_ASSERT(!(myNum >> 16), ASSERT_TEXT); 
+    }
+
+    // when BackRefMaster::findFreeBlock() calls getRawBlock, 
+    // BackRefBlock::bytes is used implicitly
+    static const int bytes = blockSize;
+};
+
+// max number of backreference pointers in 16KB block
+static const int BR_MAX_CNT = (BackRefBlock::bytes-sizeof(BackRefBlock))/sizeof(void*);
+
+struct BackRefMaster {
+/* A 16KB block can hold up to ~2K back pointers to 16KB blocks or large objects,
+ * so it can address at least 32MB. The array of 64KB holds 8K pointers
+ * to such blocks, addressing ~256 GB.
+ */
+    static const size_t bytes = 64*1024;
+    static const int dataSz;
+
+    BackRefBlock  *active;         // if defined, use it for allocations
+    BackRefBlock  *listForUse;     // the chain of data blocks with free items
+    int            lastUsed;       // index of the last used block
+    BackRefBlock  *backRefBl[1];   // the real size of the array is dataSz
+
+    BackRefBlock *findFreeBlock();
+    void          addBackRefBlockToList(BackRefBlock *bl);
+    void          addEmptyBackRefBlock(BackRefBlock *newBl);
+};
+
+const int BackRefMaster::dataSz
+    = 1+(BackRefMaster::bytes-sizeof(BackRefMaster))/sizeof(BackRefBlock*);
+
+static MallocMutex backRefMutex;
+static BackRefMaster *backRefMaster;
+
+bool initBackRefMaster()
+{
+    // 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;
+    if (! (backRefMaster = (BackRefMaster*)getRawMemory(BackRefMaster::bytes+leaves*BackRefBlock::bytes, /*useMapMem=*/true)))
+        return false;
+    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);
+        if (i)
+            backRefMaster->addBackRefBlockToList(bl);
+        else // active leaf is not needed in listForUse
+            backRefMaster->active = bl;
+    }
+    return true;
+}
+
+void BackRefMaster::addBackRefBlockToList(BackRefBlock *bl)
+{
+    bl->nextForUse = backRefMaster->listForUse;
+    backRefMaster->listForUse = bl;
+    bl->addedToForUse = true;
+}
+
+void BackRefMaster::addEmptyBackRefBlock(BackRefBlock *newBl)
+{
+    memset(newBl, 0, BackRefBlock::bytes);
+    new (newBl) BackRefBlock(newBl, lastUsed);
+    backRefBl[lastUsed] = newBl;
+}
+
+BackRefBlock *BackRefMaster::findFreeBlock()
+{
+    if (active->allocatedCount < BR_MAX_CNT)
+        return active;
+        
+    if (listForUse) {                                   // use released list
+        active = listForUse;
+        listForUse = listForUse->nextForUse;
+        MALLOC_ASSERT(active->addedToForUse, ASSERT_TEXT);
+        active->addedToForUse = false;
+    } else if (lastUsed-1 < backRefMaster->dataSz) {    // allocate new data node
+        // TODO: this block is never released, so can prevent re-using
+        // of the memory it belong to in the backend, 
+        // getRawMemory can be used instead.
+        BackRefBlock *newBl = 
+            (BackRefBlock*)BlockI::getRawBlock( /*startup=*/!isMallocInitializedExt() );
+        if (!newBl) return NULL;
+        lastUsed++;
+        backRefMaster->addEmptyBackRefBlock(newBl);
+        active = newBl;
+    } else  // no free blocks, give up
+        return NULL;
+    return active;
+}
+
+void *getBackRef(BackRefIdx backRefIdx)
+{
+    // !backRefMaster means no initialization done, so it can't be valid memory
+    if (!backRefMaster || backRefIdx.getMaster() > backRefMaster->lastUsed
+        || backRefIdx.getOffset() >= BR_MAX_CNT) 
+        return NULL;
+    return *(void**)((uintptr_t)backRefMaster->backRefBl[backRefIdx.getMaster()]
+                     + sizeof(BackRefBlock)+backRefIdx.getOffset()*sizeof(void*));
+}
+
+void setBackRef(BackRefIdx backRefIdx, void *newPtr)
+{
+    MALLOC_ASSERT(backRefIdx.getMaster()<=backRefMaster->lastUsed && backRefIdx.getOffset()<BR_MAX_CNT,
+                  ASSERT_TEXT);
+    *(void**)((uintptr_t)backRefMaster->backRefBl[backRefIdx.getMaster()]
+              + sizeof(BackRefBlock) + backRefIdx.getOffset()*sizeof(void*)) = newPtr;
+}
+
+BackRefIdx BackRefIdx::newBackRef(bool largeObj)
+{
+    BackRefBlock *blockToUse;
+    void **toUse;
+    BackRefIdx res;
+
+    do {
+        { // global lock taken to find a block
+            MallocMutex::scoped_lock lock(backRefMutex);
+
+            MALLOC_ASSERT(backRefMaster, ASSERT_TEXT);
+            if (! (blockToUse = backRefMaster->findFreeBlock()))
+                return BackRefIdx();
+        }
+        toUse = NULL;
+        { // the block is locked to find a reference
+            MallocMutex::scoped_lock lock(blockToUse->blockMutex);
+
+            if (blockToUse->freeList) {
+                toUse = (void**)blockToUse->freeList;
+                blockToUse->freeList = blockToUse->freeList->next;
+            } else if (blockToUse->allocatedCount < BR_MAX_CNT) {
+                toUse = (void**)blockToUse->bumpPtr;
+                blockToUse->bumpPtr = 
+                    (FreeObject*)((uintptr_t)blockToUse->bumpPtr - sizeof(void*));
+                if (blockToUse->allocatedCount == BR_MAX_CNT-1) {
+                    MALLOC_ASSERT((uintptr_t)blockToUse->bumpPtr
+                                  < (uintptr_t)blockToUse+sizeof(BackRefBlock),
+                                  ASSERT_TEXT);
+                    blockToUse->bumpPtr = NULL;
+                }
+            }
+            if (toUse)
+                blockToUse->allocatedCount++;
+        } // end of lock scope
+    } while (!toUse);
+    res.master = blockToUse->myNum;
+    uintptr_t offset = 
+        ((uintptr_t)toUse - ((uintptr_t)blockToUse + sizeof(BackRefBlock)))/sizeof(void*);
+    // Is offset too big?
+    MALLOC_ASSERT(!(offset >> 15), ASSERT_TEXT);
+    res.offset = offset;
+    if (largeObj) res.largeObj = largeObj;
+
+    return res;
+}
+
+void removeBackRef(BackRefIdx backRefIdx)
+{
+    MALLOC_ASSERT(backRefIdx.getMaster()<=backRefMaster->lastUsed 
+                  && backRefIdx.getOffset()<BR_MAX_CNT, ASSERT_TEXT);
+    BackRefBlock *currBlock = backRefMaster->backRefBl[backRefIdx.getMaster()];
+    FreeObject *freeObj = (FreeObject*)((uintptr_t)currBlock + sizeof(BackRefBlock)
+                                        + backRefIdx.getOffset()*sizeof(void*));
+    {
+        MallocMutex::scoped_lock lock(currBlock->blockMutex);
+
+        freeObj->next = currBlock->freeList;
+        currBlock->freeList = freeObj;
+        currBlock->allocatedCount--;
+    }
+    // TODO: do we need double-check here?
+    if (!currBlock->addedToForUse && currBlock!=backRefMaster->active) {
+        MallocMutex::scoped_lock lock(backRefMutex);
+
+        if (!currBlock->addedToForUse && currBlock!=backRefMaster->active)
+            backRefMaster->addBackRefBlockToList(currBlock);
+    }
+}
+
+/********* End of backreferences ***********************/
+
+} // namespace internal
+} // namespace rml
+
diff --git a/src/tbbmalloc/frontend.cpp b/src/tbbmalloc/frontend.cpp
new file mode 100644
index 0000000..cb22139
--- /dev/null
+++ b/src/tbbmalloc/frontend.cpp
@@ -0,0 +1,2090 @@
+/*
+    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.
+*/
+
+
+#include "tbbmalloc_internal.h"
+#include <errno.h>
+
+//! Define the main synchronization method
+/** It should be specified before including LifoList.h */
+#define FINE_GRAIN_LOCKS
+#include "LifoList.h"
+
+#if USE_PTHREAD
+    #define TlsSetValue_func pthread_setspecific
+    #define TlsGetValue_func pthread_getspecific
+    typedef pthread_key_t tls_key_t;
+    #include <sched.h>
+    inline void do_yield() {sched_yield();}
+
+#elif USE_WINTHREAD
+    #include "tbb/machine/windows_api.h"
+    #define TlsSetValue_func TlsSetValue
+    #define TlsGetValue_func TlsGetValue
+    typedef DWORD tls_key_t;
+    inline void do_yield() {SwitchToThread();}
+
+#else
+    #error Must define USE_PTHREAD or USE_WINTHREAD
+
+#endif
+
+
+#define FREELIST_NONBLOCKING 1
+
+void mallocThreadShutdownNotification(void* arg);
+
+namespace rml {
+namespace internal {
+
+class Block;
+
+#if MALLOC_CHECK_RECURSION
+
+inline bool isMallocInitialized();
+
+bool RecursiveMallocCallProtector::noRecursion() {
+    MALLOC_ASSERT(isMallocInitialized(),
+                  "Recursion status can be checked only when initialization was done.");
+    return !mallocRecursionDetected;
+}
+
+#endif // MALLOC_CHECK_RECURSION
+
+/*
+ * Block::objectSize value used to mark blocks allocated by startupAlloc
+ */
+const unsigned int startupAllocObjSizeMark = ~(unsigned int)0;
+
+/*
+ * This number of bins in the TLS that leads to blocks that we can allocate in.
+ */
+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        **************/
+
+/*
+ * The malloc routines themselves need to be able to occasionally malloc some space,
+ * in order to set up the structures used by the thread local structures. This
+ * routine preforms that fuctions.
+ */
+class BootStrapBlocks {
+    MallocMutex bootStrapLock;
+    Block      *bootStrapBlock;
+    Block      *bootStrapBlockUsed;
+    FreeObject *bootStrapObjectList;
+public:
+    void *allocate(size_t size);
+    void free(void* ptr);
+};
+
+class ThreadId {
+    static tls_key_t Tid_key;
+    static intptr_t ThreadIdCount;
+
+    unsigned int id;
+public:
+
+    static void init() {
+#if USE_WINTHREAD
+        Tid_key = TlsAlloc();
+#else
+        int status = pthread_key_create( &Tid_key, NULL );
+        if ( status ) {
+            fprintf (stderr, "The memory manager cannot create tls key during initialization; exiting \n");
+            exit(1);
+        }
+#endif /* USE_WINTHREAD */
+    }
+    static ThreadId get() {
+        ThreadId result;
+        result.id = reinterpret_cast<intptr_t>(TlsGetValue_func(Tid_key));
+        if( !result.id ) {
+            RecursiveMallocCallProtector scoped;
+            // Thread-local value is zero -> first call from this thread,
+            // need to initialize with next ID value (IDs start from 1)
+            result.id = AtomicIncrement(ThreadIdCount); // returned new value!
+            TlsSetValue_func( Tid_key, reinterpret_cast<void*>(result.id) );
+        }
+        return result;
+    }
+    bool defined() const { return id; }
+    void undef() { id = 0; }
+    void invalid() { id = (unsigned int)-1; }
+    bool own() const { return id == ThreadId::get().id; }
+
+    friend bool operator==(const ThreadId &id1, const ThreadId &id2);
+    friend unsigned int getThreadId();
+};
+
+tls_key_t ThreadId::Tid_key;
+intptr_t ThreadId::ThreadIdCount;
+
+bool operator==(const ThreadId &id1, const ThreadId &id2) {
+    return id1.id == id2.id;
+}
+
+unsigned int getThreadId() { return ThreadId::get().id; }
+
+/* The 'next' field in the block header has to maintain some invariants:
+ *   it needs to be on a 16K boundary and the first field in the block.
+ *   Any value stored there needs to have the lower 14 bits set to 0
+ *   so that various assert work. This means that if you want to smash this memory
+ *   for debugging purposes you will need to obey this invariant.
+ * The total size of the header needs to be a power of 2 to simplify
+ * the alignment requirements. For now it is a 128 byte structure.
+ * To avoid false sharing, the fields changed only locally are separated
+ * from the fields changed by foreign threads.
+ * Changing the size of the block header would require to change
+ * some bin allocation sizes, in particular "fitting" sizes (see above).
+ */
+class Bin;
+class StartupBlock;
+struct TLSData;
+
+class LocalBlockFields : public BlockI {
+protected:
+    Block       *next;            /* This field needs to be on a 16K boundary and the first field in the block
+                                     for LIFO lists to work. */
+    Block       *previous;        /* Use double linked list to speed up removal */
+    unsigned int 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;
+
+    friend void *BootStrapBlocks::allocate(size_t size);
+    friend class FreeBlockPool;
+    friend class StartupBlock;
+    friend void BlockI::initialize(void *bumpPtr);
+};
+
+class Block : public LocalBlockFields {
+    size_t       __pad_local_fields[(blockHeaderAlignment-sizeof(LocalBlockFields))/sizeof(size_t)];
+    FreeObject  *publicFreeList;
+    Block       *nextPrivatizable;
+    size_t       __pad_public_fields[(blockHeaderAlignment-2*sizeof(void*))/sizeof(size_t)];
+
+public:
+    static Block *getEmpty(size_t size);
+
+    inline FreeObject* allocate();
+    inline FreeObject *allocateFromFreeList();
+    inline bool emptyEnoughToUse();
+    bool freeListNonNull() { return freeList; }
+    void freePublicObject(FreeObject *objectToFree);
+    inline void freeOwnObject(FreeObject *objectToFree);
+    void returnEmpty(bool poolTheBlock);
+    void privatizePublicFreeList();
+    void restoreBumpPtr();
+    void privatizeOrphaned(Bin *bin);
+    void shareOrphaned(const Bin *bin);
+    unsigned int getSize() const { return objectSize; }
+    const BackRefIdx *getBackRefIdx() const { return &backRefIdx; }
+    bool ownBlock() const { return owner.own(); }
+    bool isStartupAllocObject() const { return objectSize == startupAllocObjSizeMark; }
+    inline FreeObject *findObjectToFree(void *object) const;
+    bool checkFreePrecond() const { return allocatedCount>0; }
+    const BackRefIdx *getBackRef() const { return &backRefIdx; }
+
+protected:
+    static Block *getRaw(bool startup);
+    void cleanBlockHeader();
+
+private:
+    static const float emptyEnoughRatio; /* "Reactivate" a block if this share of its objects is free. */
+
+    inline FreeObject *allocateFromBumpPtr();
+    void initEmptyBlock(size_t size);
+    inline FreeObject *findAllocatedObject(const void *address) const;
+    inline bool isProperlyPlaced(const void *object) const;
+
+    friend class Bin;
+    friend void ::mallocThreadShutdownNotification(void* arg);
+    friend BlockI *BlockI::getRawBlock(bool startup);
+};
+
+const float Block::emptyEnoughRatio = 1.0 / 4.0;
+
+class Bin {
+    Block      *activeBlk;
+    Block      *mailbox;
+    MallocMutex mailLock;
+
+    static TLSData* createTLS();
+public:
+    static inline Bin* getAllocationBin(size_t size);
+
+    inline Block* getActiveBlock() const { return activeBlk; }
+    inline void setActiveBlock(Block *block);
+    inline Block* setPreviousBlockActive();
+    Block* getPublicFreeListBlock();
+    void moveBlockToBinFront(Block *block);
+    void processLessUsedBlock(Block *block);
+
+    void outofTLSBin (Block* block);
+    void verifyTLSBin (size_t size) const;
+    void pushTLSBin(Block* block);
+
+    friend void ::mallocThreadShutdownNotification(void* arg);
+    friend void Block::freePublicObject (FreeObject *objectToFree);
+};
+
+/********* End of the data structures                    **************/
+
+/*
+ * There are bins for all 8 byte aligned objects less than this segregated size; 8 bins in total
+ */
+const uint32_t minSmallObjectIndex = 0;
+const uint32_t numSmallObjectBins = 8;
+const uint32_t maxSmallObjectSize = 64;
+
+/*
+ * There are 4 bins between each couple of powers of 2 [64-128-256-...]
+ * from maxSmallObjectSize till this size; 16 bins in total
+ */
+const uint32_t minSegregatedObjectIndex = minSmallObjectIndex+numSmallObjectBins;
+const uint32_t numSegregatedObjectBins = 16;
+const uint32_t maxSegregatedObjectSize = 1024;
+
+/*
+ * And there are 5 bins with allocation sizes that are multiples of estimatedCacheLineSize
+ * and selected to fit 9, 6, 4, 3, and 2 allocations in a block.
+ */
+const uint32_t minFittingIndex = minSegregatedObjectIndex+numSegregatedObjectBins;
+const uint32_t numFittingBins = 5;
+
+const uint32_t fittingAlignment = estimatedCacheLineSize;
+
+#define SET_FITTING_SIZE(N) ( (blockSize-sizeof(Block))/N ) & ~(fittingAlignment-1)
+// For blockSize=16*1024, sizeof(Block)=2*estimatedCacheLineSize and fittingAlignment=estimatedCacheLineSize,
+// the comments show the fitting sizes and the amounts left unused for estimatedCacheLineSize=64/128:
+const uint32_t fittingSize1 = SET_FITTING_SIZE(9); // 1792/1792 128/000
+const uint32_t fittingSize2 = SET_FITTING_SIZE(6); // 2688/2688 128/000
+const uint32_t fittingSize3 = SET_FITTING_SIZE(4); // 4032/3968 128/256
+const uint32_t fittingSize4 = SET_FITTING_SIZE(3); // 5376/5376 128/000
+const uint32_t fittingSize5 = SET_FITTING_SIZE(2); // 8128/8064 000/000
+#undef SET_FITTING_SIZE
+
+/*
+ * The total number of thread-specific Block-based bins
+ */
+const uint32_t numBlockBins = minFittingIndex+numFittingBins;
+
+/*
+ * Objects of this size and larger are considered large objects.
+ */
+const uint32_t minLargeObjectSize = fittingSize5 + 1;
+
+/*
+ * When a block that is not completely free is returned for reuse by other threads
+ * this is where the block goes.
+ *
+ * LifoList assumes zero initialization; so below its constructors are omitted,
+ * to avoid linking with C++ libraries on Linux.
+ */
+
+class OrphanedBlocks {
+    LifoList bins[numBlockBinLimit];
+public:
+    Block *get(Bin* bin, unsigned int size);
+    void put(Bin* bin, Block *block);
+};
+
+static char globalBinSpace[sizeof(LifoList)*numBlockBinLimit];
+static OrphanedBlocks *orphanedBlocks = (OrphanedBlocks*)globalBinSpace;
+
+/*
+ * Per-thread pool of 16KB blocks. Idea behind it is to not share with other
+ * threads memory that are likely in local cache(s) of our CPU.
+ */
+class FreeBlockPool {
+    Block *head;
+    Block *tail;
+    int    size;
+    void insertBlock(Block *block);
+public:
+    static const int POOL_HIGH_MARK = 32;
+    static const int POOL_LOW_MARK  = 8;
+
+    Block *getBlock();
+    void returnBlock(Block *block);
+    void releaseAllBlocks();
+};
+
+struct TLSData {
+    Bin           bin[numBlockBinLimit];
+    FreeBlockPool pool;
+};
+
+#if MALLOC_CHECK_RECURSION
+MallocMutex RecursiveMallocCallProtector::rmc_mutex;
+pthread_t   RecursiveMallocCallProtector::owner_thread;
+void       *RecursiveMallocCallProtector::autoObjPtr;
+bool        RecursiveMallocCallProtector::mallocRecursionDetected;
+#if __FreeBSD__
+bool        RecursiveMallocCallProtector::canUsePthread;
+#endif
+
+#endif
+
+/*********** Code to provide thread ID and a thread-local void pointer **********/
+
+static tls_key_t TLS_pointer_key;
+
+static inline TLSData* getThreadMallocTLS() {
+    TLSData *result;
+    result = (TLSData *)TlsGetValue_func( TLS_pointer_key );
+// The assert below is incorrect: with lazy initialization, it fails on the first call of the function.
+//    MALLOC_ASSERT( result, "Memory allocator not initialized" );
+    return result;
+}
+
+static inline void  setThreadMallocTLS( TLSData * newvalue ) {
+    RecursiveMallocCallProtector scoped;
+    TlsSetValue_func( TLS_pointer_key, newvalue );
+}
+
+/*********** End code to provide thread ID and a TLS pointer **********/
+
+static void *internalMalloc(size_t size);
+static void  internalFree(void *object);
+
+#if !MALLOC_DEBUG
+#if __INTEL_COMPILER || _MSC_VER
+#define NOINLINE(decl) __declspec(noinline) decl
+#define ALWAYSINLINE(decl) __forceinline decl
+#elif __GNUC__
+#define NOINLINE(decl) decl __attribute__ ((noinline))
+#define ALWAYSINLINE(decl) decl __attribute__ ((always_inline))
+#else
+#define NOINLINE(decl) decl
+#define ALWAYSINLINE(decl) decl
+#endif
+
+static NOINLINE( void doInitialization() );
+
+ALWAYSINLINE( bool isMallocInitialized() );
+
+#undef ALWAYSINLINE
+#undef NOINLINE
+#endif /* !MALLOC_DEBUG */
+
+
+/********* Now some rough utility code to deal with indexing the size bins. **************/
+
+/*
+ * Given a number return the highest non-zero bit in it. It is intended to work with 32-bit values only.
+ * Moreover, on IPF, for sake of simplicity and performance, it is narrowed to only serve for 64 to 1023.
+ * This is enough for current algorithm of distribution of sizes among bins.
+ * __TBB_Log2 is not used here to minimize dependencies on TBB specific sources.
+ */
+#if _WIN64 && _MSC_VER>=1400 && !__INTEL_COMPILER
+extern "C" unsigned char _BitScanReverse( unsigned long* i, unsigned long w );
+#pragma intrinsic(_BitScanReverse)
+#endif
+static inline unsigned int highestBitPos(unsigned int n)
+{
+    MALLOC_ASSERT( n>=64 && n<1024, ASSERT_TEXT ); // only needed for bsr array lookup, but always true
+    unsigned int pos;
+#if __ARCH_x86_32||__ARCH_x86_64
+
+# if __linux__||__APPLE__||__FreeBSD__||__NetBSD__||__sun||__MINGW32__
+    __asm__ ("bsr %1,%0" : "=r"(pos) : "r"(n));
+# elif (_WIN32 && (!_WIN64 || __INTEL_COMPILER))
+    __asm
+    {
+        bsr eax, n
+        mov pos, eax
+    }
+# elif _WIN64 && _MSC_VER>=1400
+    _BitScanReverse((unsigned long*)&pos, (unsigned long)n);
+# else
+#   error highestBitPos() not implemented for this platform
+# endif
+
+#else
+    static unsigned int bsr[16] = {0/*N/A*/,6,7,7,8,8,8,8,9,9,9,9,9,9,9,9};
+    pos = bsr[ n>>6 ];
+#endif /* __ARCH_* */
+    return pos;
+}
+
+/*
+ * Depending on indexRequest, for a given size return either the index into the bin
+ * for objects of this size, or the actual size of objects in this bin.
+ */
+template<bool indexRequest>
+static unsigned int getIndexOrObjectSize (unsigned int size)
+{
+    if (size <= maxSmallObjectSize) { // selection from 4/8/16/24/32/40/48/56/64
+         /* Index 0 holds up to 8 bytes, Index 1 16 and so forth */
+        return indexRequest ? (size - 1) >> 3 : alignUp(size,8);
+    }
+    else if (size <= maxSegregatedObjectSize ) { // 80/96/112/128 / 160/192/224/256 / 320/384/448/512 / 640/768/896/1024
+        unsigned int order = highestBitPos(size-1); // which group of bin sizes?
+        MALLOC_ASSERT( 6<=order && order<=9, ASSERT_TEXT );
+        if (indexRequest)
+            return minSegregatedObjectIndex - (4*6) - 4 + (4*order) + ((size-1)>>(order-2));
+        else {
+            unsigned int alignment = 128 >> (9-order); // alignment in the group
+            MALLOC_ASSERT( alignment==16 || alignment==32 || alignment==64 || alignment==128, ASSERT_TEXT );
+            return alignUp(size,alignment);
+        }
+    }
+    else {
+        if( size <= fittingSize3 ) {
+            if( size <= fittingSize2 ) {
+                if( size <= fittingSize1 )
+                    return indexRequest ? minFittingIndex : fittingSize1;
+                else
+                    return indexRequest ? minFittingIndex+1 : fittingSize2;
+            } else
+                return indexRequest ? minFittingIndex+2 : fittingSize3;
+        } else {
+            if( size <= fittingSize5 ) {
+                if( size <= fittingSize4 )
+                    return indexRequest ? minFittingIndex+3 : fittingSize4;
+                else
+                    return indexRequest ? minFittingIndex+4 : fittingSize5;
+            } else {
+                MALLOC_ASSERT( 0,ASSERT_TEXT ); // this should not happen
+                return ~0U;
+            }
+        }
+    }
+}
+
+static unsigned int getIndex (unsigned int size)
+{
+    return getIndexOrObjectSize</*indexRequest*/true>(size);
+}
+
+static unsigned int getObjectSize (unsigned int size)
+{
+    return getIndexOrObjectSize</*indexRequest*/false>(size);
+}
+
+/*
+ * Initialization code.
+ *
+ */
+
+/*
+ * Forward Refs
+ */
+
+static BootStrapBlocks bootStrapBlocks;
+
+void *BootStrapBlocks::allocate(size_t size)
+{
+    FreeObject *result;
+
+    MALLOC_ASSERT( size == sizeof(TLSData), ASSERT_TEXT );
+
+    { // Lock with acquire
+        MallocMutex::scoped_lock scoped_cs(bootStrapLock);
+
+        if( bootStrapObjectList) {
+            result = bootStrapObjectList;
+            bootStrapObjectList = bootStrapObjectList->next;
+        } else {
+            if (!bootStrapBlock) {
+                bootStrapBlock = Block::getEmpty(size);
+                if (!bootStrapBlock) return NULL;
+            }
+            result = bootStrapBlock->bumpPtr;
+            bootStrapBlock->bumpPtr = (FreeObject *)((uintptr_t)bootStrapBlock->bumpPtr - bootStrapBlock->objectSize);
+            if ((uintptr_t)bootStrapBlock->bumpPtr < (uintptr_t)bootStrapBlock+sizeof(Block)) {
+                bootStrapBlock->bumpPtr = NULL;
+                bootStrapBlock->next = bootStrapBlockUsed;
+                bootStrapBlockUsed = bootStrapBlock;
+                bootStrapBlock = NULL;
+            }
+        }
+    } // Unlock with release
+
+    memset (result, 0, size);
+    return (void*)result;
+}
+
+void BootStrapBlocks::free(void* ptr)
+{
+    MALLOC_ASSERT( ptr, ASSERT_TEXT );
+    { // Lock with acquire
+        MallocMutex::scoped_lock scoped_cs(bootStrapLock);
+        ((FreeObject*)ptr)->next = bootStrapObjectList;
+        bootStrapObjectList = (FreeObject*)ptr;
+    } // Unlock with release
+}
+
+#if !(FREELIST_NONBLOCKING)
+static MallocMutex publicFreeListLock; // lock for changes of publicFreeList
+#endif
+
+const uintptr_t UNUSABLE = 0x1;
+inline bool isSolidPtr( void* ptr )
+{
+    return (UNUSABLE|(uintptr_t)ptr)!=UNUSABLE;
+}
+inline bool isNotForUse( void* ptr )
+{
+    return (uintptr_t)ptr==UNUSABLE;
+}
+
+/********* End rough utility code  **************/
+
+/********* Thread and block related code      *************/
+
+void Bin::verifyTLSBin (size_t size) const
+{
+#if MALLOC_DEBUG
+/* The debug version verifies the TLSBin as needed */
+    Bin*   tlsBin = getThreadMallocTLS()->bin;
+    uint32_t index = getIndex(size);
+    uint32_t objSize = getObjectSize(size);
+
+    MALLOC_ASSERT( this == tlsBin+index, ASSERT_TEXT );
+
+    if (activeBlk) {
+        MALLOC_ASSERT( activeBlk->owner.own(), ASSERT_TEXT );
+        MALLOC_ASSERT( activeBlk->objectSize == objSize, ASSERT_TEXT );
+#if MALLOC_DEBUG>1
+        for (Block* temp = activeBlk->next; temp; temp=temp->next) {
+            MALLOC_ASSERT( temp!=activeBlk, ASSERT_TEXT );
+            MALLOC_ASSERT( temp->owner.own(), ASSERT_TEXT );
+            MALLOC_ASSERT( temp->objectSize == objSize, ASSERT_TEXT );
+            MALLOC_ASSERT( temp->previous->next == temp, ASSERT_TEXT );
+            if (temp->next) {
+                MALLOC_ASSERT( temp->next->previous == temp, ASSERT_TEXT );
+            }
+        }
+        for (Block* temp = activeBlk->previous; temp; temp=temp->previous) {
+            MALLOC_ASSERT( temp!=activeBlk, ASSERT_TEXT );
+            MALLOC_ASSERT( temp->owner.own(), ASSERT_TEXT );
+            MALLOC_ASSERT( temp->objectSize == objSize, ASSERT_TEXT );
+            MALLOC_ASSERT( temp->next->previous == temp, ASSERT_TEXT );
+            if (temp->previous) {
+                MALLOC_ASSERT( temp->previous->next == temp, ASSERT_TEXT );
+            }
+        }
+#endif /* MALLOC_DEBUG>1 */
+    }
+#endif /* MALLOC_DEBUG */
+}
+
+/*
+ * Add a block to the start of this tls bin list.
+ */
+void Bin::pushTLSBin(Block* block)
+{
+    /* The objectSize should be defined and not a parameter
+       because the function is applied to partially filled blocks as well */
+    unsigned int size = block->objectSize;
+
+    MALLOC_ASSERT( block->owner == ThreadId::get(), ASSERT_TEXT );
+    MALLOC_ASSERT( block->objectSize != 0, ASSERT_TEXT );
+    MALLOC_ASSERT( block->next == NULL, ASSERT_TEXT );
+    MALLOC_ASSERT( block->previous == NULL, ASSERT_TEXT );
+
+    MALLOC_ASSERT( this, ASSERT_TEXT );
+    verifyTLSBin(size);
+
+    block->next = activeBlk;
+    if( activeBlk ) {
+        block->previous = activeBlk->previous;
+        activeBlk->previous = block;
+        if( block->previous )
+            block->previous->next = block;
+    } else {
+        activeBlk = block;
+    }
+
+    verifyTLSBin(size);
+}
+
+/*
+ * Take a block out of its tls bin (e.g. before removal).
+ */
+void Bin::outofTLSBin(Block* block)
+{
+    unsigned int size = block->objectSize;
+
+    MALLOC_ASSERT( block->owner == ThreadId::get(), ASSERT_TEXT );
+    MALLOC_ASSERT( block->objectSize != 0, ASSERT_TEXT );
+
+    MALLOC_ASSERT( this, ASSERT_TEXT );
+    verifyTLSBin(size);
+
+    if (block == activeBlk) {
+        activeBlk = block->previous? block->previous : block->next;
+    }
+    /* Delink the block */
+    if (block->previous) {
+        MALLOC_ASSERT( block->previous->next == block, ASSERT_TEXT );
+        block->previous->next = block->next;
+    }
+    if (block->next) {
+        MALLOC_ASSERT( block->next->previous == block, ASSERT_TEXT );
+        block->next->previous = block->previous;
+    }
+    block->next = NULL;
+    block->previous = NULL;
+
+    verifyTLSBin(size);
+}
+
+TLSData* Bin::createTLS()
+{
+    MALLOC_ASSERT( sizeof(TLSData) >= sizeof(Bin) * numBlockBins + sizeof(FreeBlockPool), ASSERT_TEXT );
+    TLSData* tls = (TLSData*) bootStrapBlocks.allocate(sizeof(TLSData));
+    if ( !tls ) return NULL;
+    /* the block contains zeroes after bootStrapMalloc, so bins are initialized */
+#if MALLOC_DEBUG
+    for (uint32_t i = 0; i < numBlockBinLimit; i++) {
+        MALLOC_ASSERT( tls->bin[i].activeBlk == 0, ASSERT_TEXT );
+        MALLOC_ASSERT( tls->bin[i].mailbox == 0, ASSERT_TEXT );
+    }
+#endif
+    setThreadMallocTLS(tls);
+    return tls;
+}
+
+/*
+ * Return the bin for the given size. If the TLS bin structure is absent, create it.
+ */
+Bin* Bin::getAllocationBin(size_t size)
+{
+    TLSData* tls = getThreadMallocTLS();
+    if( !tls )
+        tls = createTLS();
+    MALLOC_ASSERT( tls, ASSERT_TEXT );
+    return tls->bin + getIndex(size);
+}
+
+Block* Bin::getPublicFreeListBlock()
+{
+    Block* block;
+    MALLOC_ASSERT( this, ASSERT_TEXT );
+    // if this method is called, active block usage must be unsuccesful
+    MALLOC_ASSERT( !activeBlk && !mailbox || activeBlk && activeBlk->isFull, ASSERT_TEXT );
+
+// the counter should be changed    STAT_increment(getThreadId(), ThreadCommonCounters, lockPublicFreeList);
+    {
+        MallocMutex::scoped_lock scoped_cs(mailLock);
+        block = mailbox;
+        if( block ) {
+            MALLOC_ASSERT( block->ownBlock(), ASSERT_TEXT );
+            MALLOC_ASSERT( !isNotForUse(block->nextPrivatizable), ASSERT_TEXT );
+            mailbox = block->nextPrivatizable;
+            block->nextPrivatizable = (Block*) this;
+        }
+    }
+    if( block ) {
+        MALLOC_ASSERT( isSolidPtr(block->publicFreeList), ASSERT_TEXT );
+        block->privatizePublicFreeList();
+    }
+    return block;
+}
+
+BlockI *BlockI::getRawBlock(bool startup) { return Block::getRaw(startup); }
+
+void BlockI::initialize(void *ptr) { ((LocalBlockFields*)this)->bumpPtr = (FreeObject*)ptr; }
+
+bool Block::emptyEnoughToUse()
+{
+    const float threshold = (blockSize - sizeof(Block)) * (1-emptyEnoughRatio);
+
+    if (bumpPtr) {
+        /* If we are still using a bump ptr for this block it is empty enough to use. */
+        STAT_increment(owner, getIndex(objectSize), examineEmptyEnough);
+        isFull = false;
+        return 1;
+    }
+
+    /* allocatedCount shows how many objects in the block are in use; however it still counts
+       blocks freed by other threads; so prior call to privatizePublicFreeList() is recommended */
+    isFull = (allocatedCount*objectSize > threshold)? true: false;
+#if COLLECT_STATISTICS
+    if (isFull)
+        STAT_increment(owner, getIndex(objectSize), examineNotEmpty);
+    else
+        STAT_increment(owner, getIndex(objectSize), examineEmptyEnough);
+#endif
+    return !isFull;
+}
+
+/* Restore the bump pointer for an empty block that is planned to use */
+void Block::restoreBumpPtr()
+{
+    MALLOC_ASSERT( allocatedCount == 0, ASSERT_TEXT );
+    MALLOC_ASSERT( publicFreeList == NULL, ASSERT_TEXT );
+    STAT_increment(owner, getIndex(objectSize), freeRestoreBumpPtr);
+    bumpPtr = (FreeObject *)((uintptr_t)this + blockSize - objectSize);
+    freeList = NULL;
+    isFull = 0;
+}
+
+void Block::freeOwnObject(FreeObject *objectToFree)
+{
+    objectToFree->next = freeList;
+    freeList = objectToFree;
+    allocatedCount--;
+    MALLOC_ASSERT( allocatedCount < (blockSize-sizeof(Block))/objectSize, ASSERT_TEXT );
+#if COLLECT_STATISTICS
+    if (getActiveBlock(getAllocationBin(block->objectSize)) != block)
+        STAT_increment(myTid, getIndex(block->objectSize), freeToInactiveBlock);
+    else
+        STAT_increment(myTid, getIndex(block->objectSize), freeToActiveBlock);
+#endif
+    if (isFull) {
+        if (emptyEnoughToUse())
+            Bin::getAllocationBin(objectSize)->moveBlockToBinFront(this);
+    } else {
+        if (allocatedCount==0 && publicFreeList==NULL)
+            Bin::getAllocationBin(objectSize)->processLessUsedBlock(this);
+    }
+}
+
+void Block::freePublicObject (FreeObject *objectToFree)
+{
+    FreeObject *localPublicFreeList;
+
+    MALLOC_ITT_SYNC_RELEASING(&publicFreeList);
+#if FREELIST_NONBLOCKING
+    FreeObject *temp = publicFreeList;
+    do {
+        localPublicFreeList = objectToFree->next = temp;
+        temp = (FreeObject*)AtomicCompareExchange(
+                                (intptr_t&)publicFreeList,
+                                (intptr_t)objectToFree, (intptr_t)localPublicFreeList );
+        // no backoff necessary because trying to make change, not waiting for a change
+    } while( temp != localPublicFreeList );
+#else
+    STAT_increment(getThreadId(), ThreadCommonCounters, lockPublicFreeList);
+    {
+        MallocMutex::scoped_lock scoped_cs(publicFreeListLock);
+        localPublicFreeList = objectToFree->next = publicFreeList;
+        publicFreeList = objectToFree;
+    }
+#endif
+
+    if( localPublicFreeList==NULL ) {
+        // if the block is abandoned, its nextPrivatizable pointer should be UNUSABLE
+        // otherwise, it should point to the bin the block belongs to.
+        // reading nextPrivatizable is thread-safe below, because:
+        // 1) the executing thread atomically got localPublicFreeList==NULL and changed it to non-NULL;
+        // 2) only owning thread can change it back to NULL,
+        // 3) but it can not be done until the block is put to the mailbox
+        // So the executing thread is now the only one that can change nextPrivatizable
+        if( !isNotForUse(nextPrivatizable) ) {
+            MALLOC_ASSERT( nextPrivatizable!=NULL, ASSERT_TEXT );
+            MALLOC_ASSERT( owner.defined(), ASSERT_TEXT );
+            Bin* theBin = (Bin*) nextPrivatizable;
+            MallocMutex::scoped_lock scoped_cs(theBin->mailLock);
+            nextPrivatizable = theBin->mailbox;
+            theBin->mailbox = this;
+        } else {
+            MALLOC_ASSERT( !owner.defined(), ASSERT_TEXT );
+        }
+    }
+    STAT_increment(ThreadId::get(), ThreadCommonCounters, freeToOtherThread);
+    STAT_increment(owner, getIndex(objectSize), freeByOtherThread);
+}
+
+void Block::privatizePublicFreeList()
+{
+    FreeObject *temp, *localPublicFreeList;
+
+    MALLOC_ASSERT( owner.own(), ASSERT_TEXT );
+#if FREELIST_NONBLOCKING
+    temp = publicFreeList;
+    do {
+        localPublicFreeList = temp;
+        temp = (FreeObject*)AtomicCompareExchange(
+                                (intptr_t&)publicFreeList,
+                                0, (intptr_t)localPublicFreeList);
+        // no backoff necessary because trying to make change, not waiting for a change
+    } while( temp != localPublicFreeList );
+#else
+    STAT_increment(owner, ThreadCommonCounters, lockPublicFreeList);
+    {
+        MallocMutex::scoped_lock scoped_cs(publicFreeListLock);
+        localPublicFreeList = publicFreeList;
+        publicFreeList = NULL;
+    }
+    temp = localPublicFreeList;
+#endif
+    MALLOC_ITT_SYNC_ACQUIRED(&publicFreeList);
+
+    MALLOC_ASSERT( localPublicFreeList && localPublicFreeList==temp, ASSERT_TEXT ); // there should be something in publicFreeList!
+    if( !isNotForUse(temp) ) { // return/getPartialBlock could set it to UNUSABLE
+        MALLOC_ASSERT( allocatedCount <= (blockSize-sizeof(Block))/objectSize, ASSERT_TEXT );
+        /* other threads did not change the counter freeing our blocks */
+        allocatedCount--;
+        while( isSolidPtr(temp->next) ){ // the list will end with either NULL or UNUSABLE
+            temp = temp->next;
+            allocatedCount--;
+        }
+        MALLOC_ASSERT( allocatedCount < (blockSize-sizeof(Block))/objectSize, ASSERT_TEXT );
+        /* merge with local freeList */
+        temp->next = freeList;
+        freeList = localPublicFreeList;
+        STAT_increment(owner, getIndex(objectSize), allocPrivatized);
+    }
+}
+
+void Block::privatizeOrphaned(Bin* bin)
+{
+    next = NULL;
+    previous = NULL;
+    MALLOC_ASSERT( publicFreeList!=NULL, ASSERT_TEXT );
+    /* There is not a race here since no other thread owns this block */
+    MALLOC_ASSERT( !owner.defined(), ASSERT_TEXT );
+    owner = ThreadId::get();
+    // It is safe to change nextPrivatizable, as publicFreeList is not null
+    MALLOC_ASSERT( isNotForUse(nextPrivatizable), ASSERT_TEXT );
+    nextPrivatizable = (Block*)bin;
+    // the next call is required to change publicFreeList to 0
+    privatizePublicFreeList();
+    if( allocatedCount ) {
+        emptyEnoughToUse(); // check its fullness and set result->isFull
+    } else {
+        restoreBumpPtr();
+    }
+    MALLOC_ASSERT( !isNotForUse(publicFreeList), ASSERT_TEXT );
+}
+
+void Block::shareOrphaned(const Bin *bin)
+{
+    MALLOC_ASSERT( bin, ASSERT_TEXT );
+    STAT_increment(owner, index, freeBlockPublic);
+    // 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) {
+        void* oldval;
+#if FREELIST_NONBLOCKING
+        oldval = (void*)AtomicCompareExchange((intptr_t&)publicFreeList, (intptr_t)UNUSABLE, 0);
+#else
+        STAT_increment(owner, ThreadCommonCounters, lockPublicFreeList);
+        {
+            MallocMutex::scoped_lock scoped_cs(publicFreeListLock);
+            if ( (oldval=publicFreeList)==NULL )
+                (uintptr_t&)(publicFreeList) = UNUSABLE;
+        }
+#endif
+        if ( oldval!=NULL ) {
+            // another thread freed an object; we need to wait until it finishes.
+            // I believe there is no need for exponential backoff, as the wait here is not for a lock;
+            // but need to yield, so the thread we wait has a chance to run.
+            int count = 256;
+            while( (intptr_t)const_cast<Block* volatile &>(nextPrivatizable)==(intptr_t)bin ) {
+                if (--count==0) {
+                    do_yield();
+                    count = 256;
+                }
+            }
+        }
+    } else {
+        MALLOC_ASSERT( isSolidPtr(publicFreeList), ASSERT_TEXT );
+    }
+    MALLOC_ASSERT( publicFreeList!=NULL, ASSERT_TEXT );
+    // now it is safe to change our data
+    previous = NULL;
+    owner.undef();
+    // it is caller responsibility to ensure that the list of blocks
+    // formed by nextPrivatizable pointers is kept consistent if required.
+    // if only called from thread shutdown code, it does not matter.
+    (uintptr_t&)(nextPrivatizable) = UNUSABLE;
+}
+
+void Block::cleanBlockHeader()
+{
+    next = NULL;
+    previous = NULL;
+    freeList = NULL;
+    allocatedCount = 0;
+    isFull = 0;
+
+    publicFreeList = NULL;
+}
+
+void Block::initEmptyBlock(size_t size)
+{
+    // Having getIndex and getObjectSize called next to each other
+    // allows better compiler optimization as they basically share the code.
+    unsigned int index = getIndex(size);
+    unsigned int objSz = getObjectSize(size);
+    Bin* tlsBin = getThreadMallocTLS()->bin;
+
+    cleanBlockHeader();
+    objectSize = objSz;
+    owner = ThreadId::get();
+    // bump pointer should be prepared for first allocation - thus mode it down to objectSize
+    bumpPtr = (FreeObject *)((uintptr_t)this + blockSize - objectSize);
+
+    // each block should have the address where the head of the list of "privatizable" blocks is kept
+    // the only exception is a block for boot strap which is initialized when TLS is yet NULL
+    nextPrivatizable = tlsBin? (Block*)(tlsBin + index) : NULL;
+    TRACEF(( "[ScalableMalloc trace] Empty block %p is initialized, owner is %d, objectSize is %d, bumpPtr is %p\n",
+             this, owner, objectSize, bumpPtr ));
+}
+
+Block *OrphanedBlocks::get(Bin* bin, unsigned int size)
+{
+    Block *result;
+    MALLOC_ASSERT( bin, ASSERT_TEXT );
+    unsigned int index = getIndex(size);
+    result = (Block *) bins[index].pop();
+    if (result) {
+        MALLOC_ITT_SYNC_ACQUIRED(bins+index);
+        result->privatizeOrphaned(bin);
+        STAT_increment(result->owner, index, allocBlockPublic);
+    }
+    return result;
+}
+
+void OrphanedBlocks::put(Bin* bin, Block *block)
+{
+    unsigned int index = getIndex(block->getSize());
+    block->shareOrphaned(bin);
+    MALLOC_ITT_SYNC_RELEASING(bins+index);
+    bins[index].push((void **)block);
+}
+
+void FreeBlockPool::insertBlock(Block *block)
+{
+    size++;
+    block->next = head;
+    head = block;
+    if (!tail)
+        tail = block;
+}
+
+Block *FreeBlockPool::getBlock()
+{
+    Block *result = head;
+    if (head) {
+        size--;
+        head = head->next;
+        if (!head)
+            tail = NULL;
+    }
+    return result;
+}
+
+void FreeBlockPool::returnBlock(Block *block)
+{
+    MALLOC_ASSERT( size <= POOL_HIGH_MARK, ASSERT_TEXT );
+    if (size == POOL_HIGH_MARK) {
+        // release cold blocks and add hot one
+        Block *headToFree = head,
+              *tailToFree = tail;
+        for (int i=0; i<POOL_LOW_MARK-2; i++)
+            headToFree = headToFree->next;
+        tail = headToFree;
+        headToFree = headToFree->next;
+        tail->next = NULL;
+        size = POOL_LOW_MARK-1;
+        for (Block *currBl = headToFree; currBl; currBl = currBl->next)
+            removeBackRef(currBl->backRefIdx);
+        freeBlocks.putList(headToFree, tailToFree);
+    }
+    insertBlock(block);
+}
+
+void FreeBlockPool::releaseAllBlocks()
+{
+    if (head) {
+        for (Block *currBl = head; currBl; currBl = currBl->next)
+            removeBackRef(currBl->backRefIdx);
+        freeBlocks.putList(head, tail);
+    }
+}
+
+/* Return an empty uninitialized block in a non-blocking fashion. */
+Block *Block::getRaw(bool startup)
+{
+    Block *result = NULL;
+    Block *bigBlock;
+
+    if (! (bigBlock = static_cast<Block*>(freeBlocks.get(startup)))) return NULL;
+
+    // check alignment
+    MALLOC_ASSERT( isAligned( bigBlock, blockSize ), ASSERT_TEXT );
+    MALLOC_ASSERT( isAligned( bigBlock->bumpPtr, blockSize ), ASSERT_TEXT );
+    // block should be at least as big as blockSize; otherwise the previous block can be damaged.
+    MALLOC_ASSERT( (uintptr_t)bigBlock->bumpPtr >= (uintptr_t)bigBlock + blockSize, ASSERT_TEXT );
+    bigBlock->bumpPtr = (FreeObject *)((uintptr_t)bigBlock->bumpPtr - blockSize);
+    result = (Block *)bigBlock->bumpPtr;
+    if ( result!=bigBlock ) {
+        TRACEF(( "[ScalableMalloc trace] Pushing partial rest of block back on.\n" ));
+        freeBlocks.put(bigBlock, startup);
+    }
+
+    return result;
+}
+
+/* Return an empty uninitialized block in a non-blocking fashion. */
+Block *Block::getEmpty(size_t size)
+{
+    Block *result = NULL;
+    TLSData* tls = getThreadMallocTLS();
+    if (tls)
+        result = tls->pool.getBlock();
+    if (!result) {
+        BackRefIdx backRefIdx = BackRefIdx::newBackRef(/*largeObj=*/false);
+        if (backRefIdx.isInvalid() || !(result = getRaw(/*startup=*/false)))
+            return NULL;
+        setBackRef(backRefIdx, result);
+        result->backRefIdx = backRefIdx;
+    }
+    if (result) {
+        result->initEmptyBlock(size);
+        STAT_increment(result->owner, getIndex(result->objectSize), allocBlockNew);
+    }
+    return result;
+}
+
+/* We have a block give it back to the malloc block manager */
+void Block::returnEmpty(bool poolTheBlock)
+{
+    // it is caller's responsibility to ensure no data is lost before calling this
+    MALLOC_ASSERT( allocatedCount==0, ASSERT_TEXT );
+    MALLOC_ASSERT( publicFreeList==NULL, ASSERT_TEXT );
+    MALLOC_ASSERT( !poolTheBlock || next == NULL, ASSERT_TEXT );
+    MALLOC_ASSERT( !poolTheBlock || previous == NULL, ASSERT_TEXT );
+    STAT_increment(owner, getIndex(objectSize), freeBlockBack);
+
+    cleanBlockHeader();
+
+    nextPrivatizable = NULL;
+
+    objectSize = 0;
+    owner.invalid();
+    // for an empty block, bump pointer should point right after the end of the block
+    bumpPtr = (FreeObject *)((uintptr_t)this + blockSize);
+    if (poolTheBlock) {
+        MALLOC_ASSERT(getThreadMallocTLS(), "Is TLS still not initialized?");
+        getThreadMallocTLS()->pool.returnBlock(this);
+    }
+    else {
+        removeBackRef(backRefIdx);
+        freeBlocks.put(this, /*startup=*/false);
+    }
+}
+
+inline void Bin::setActiveBlock (Block *block)
+{
+//    MALLOC_ASSERT( bin, ASSERT_TEXT );
+    MALLOC_ASSERT( block->owner.own(), ASSERT_TEXT );
+    // it is the caller responsibility to keep bin consistence (i.e. ensure this block is in the bin list)
+    activeBlk = block;
+}
+
+inline Block* Bin::setPreviousBlockActive()
+{
+    MALLOC_ASSERT( activeBlk, ASSERT_TEXT );
+    Block* temp = activeBlk->previous;
+    if( temp ) {
+        MALLOC_ASSERT( temp->isFull == 0, ASSERT_TEXT );
+        activeBlk = temp;
+    }
+    return temp;
+}
+
+FreeObject *Block::findObjectToFree(void *object) const
+{
+    FreeObject *objectToFree;
+    // Due to aligned allocations, a pointer passed to scalable_free
+    // might differ from the address of internally allocated object.
+    // Small objects however should always be fine.
+    if (objectSize <= maxSegregatedObjectSize)
+        objectToFree = (FreeObject*)object;
+    // "Fitting size" allocations are suspicious if aligned higher than naturally
+    else {
+        if ( ! isAligned(object,2*fittingAlignment) )
+            // TODO: the above check is questionable - it gives false negatives in ~50% cases,
+            //       so might even be slower in average than unconditional use of findAllocatedObject.
+            // here it should be a "real" object
+            objectToFree = (FreeObject*)object;
+        else
+            // here object can be an aligned address, so applying additional checks
+            objectToFree = findAllocatedObject(object);
+        MALLOC_ASSERT( isAligned(objectToFree,fittingAlignment), ASSERT_TEXT );
+    }
+    MALLOC_ASSERT( isProperlyPlaced(objectToFree), ASSERT_TEXT );
+
+    return objectToFree;
+}
+
+#if MALLOC_CHECK_RECURSION
+
+/*
+ * It's a special kind of allocation that can be used when malloc is
+ * not available (either during startup or when malloc was already called and
+ * we are, say, inside pthread_setspecific's call).
+ * Block can contain objects of different sizes,
+ * allocations are performed by moving bump pointer and increasing of object counter,
+ * releasing is done via counter of objects allocated in the block
+ * or moving bump pointer if releasing object is on a bound.
+ */
+
+class StartupBlock : public Block {
+    size_t availableSize() {
+        return blockSize - ((uintptr_t)bumpPtr - (uintptr_t)this);
+    }
+    static StartupBlock *getBlock();
+public:
+    static FreeObject *allocate(size_t size);
+    static size_t msize(void *ptr) { return *((size_t*)ptr - 1); }
+    void free(void *ptr);
+};
+
+static MallocMutex startupMallocLock;
+static StartupBlock *firstStartupBlock;
+
+StartupBlock *StartupBlock::getBlock()
+{
+    BackRefIdx backRefIdx = BackRefIdx::newBackRef(/*largeObj=*/false);
+    if (backRefIdx.isInvalid()) return NULL;
+
+    StartupBlock *block = (StartupBlock *)getRaw(/*startup=*/true);
+    if (!block) return NULL;
+
+    block->cleanBlockHeader();
+    setBackRef(backRefIdx, block);
+    block->backRefIdx = backRefIdx;
+    // use startupAllocObjSizeMark to mark objects from startup block marker
+    block->objectSize = startupAllocObjSizeMark;
+    block->bumpPtr = (FreeObject *)((uintptr_t)block + sizeof(StartupBlock));
+    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;
+    StartupBlock *newBlock = NULL;
+    bool newBlockUnused = false;
+
+    /* Objects must be aligned on their natural bounds,
+       and objects bigger than word on word's bound. */
+    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;
+
+    {
+        MallocMutex::scoped_lock scoped_cs(startupMallocLock);
+
+        if (!firstStartupBlock || firstStartupBlock->availableSize() < reqSize) {
+            if (!newBlock && !(newBlock = StartupBlock::getBlock()))
+                return NULL;
+            newBlock->next = (Block*)firstStartupBlock;
+            if (firstStartupBlock)
+                firstStartupBlock->previous = (Block*)newBlock;
+            firstStartupBlock = newBlock;
+        } else
+            newBlockUnused = true;
+        result = firstStartupBlock->bumpPtr;
+        firstStartupBlock->allocatedCount++;
+        firstStartupBlock->bumpPtr =
+            (FreeObject *)((uintptr_t)firstStartupBlock->bumpPtr + reqSize);
+    }
+    if (newBlock && newBlockUnused)
+        newBlock->returnEmpty(/*poolTheBlock=*/false);
+
+    // keep object size at the negative offset
+    *((size_t*)result) = size;
+    return (FreeObject*)((size_t*)result+1);
+}
+
+void StartupBlock::free(void *ptr)
+{
+    Block* blockToRelease = NULL;
+    {
+        MallocMutex::scoped_lock scoped_cs(startupMallocLock);
+
+        MALLOC_ASSERT(firstStartupBlock, ASSERT_TEXT);
+        MALLOC_ASSERT(startupAllocObjSizeMark==objectSize
+                      && allocatedCount>0, ASSERT_TEXT);
+        MALLOC_ASSERT((uintptr_t)ptr>=(uintptr_t)this+sizeof(StartupBlock)
+                      && (uintptr_t)ptr+StartupBlock::msize(ptr)<=(uintptr_t)this+blockSize,
+                      ASSERT_TEXT);
+        if (0 == --allocatedCount) {
+            if (this == firstStartupBlock)
+                firstStartupBlock = (StartupBlock*)firstStartupBlock->next;
+            if (previous)
+                previous->next = next;
+            if (next)
+                next->previous = previous;
+            blockToRelease = this;
+        } else if ((uintptr_t)ptr + StartupBlock::msize(ptr) == (uintptr_t)bumpPtr) {
+            // last object in the block released
+            FreeObject *newBump = (FreeObject*)((size_t*)ptr - 1);
+            MALLOC_ASSERT((uintptr_t)newBump>(uintptr_t)this+sizeof(StartupBlock),
+                          ASSERT_TEXT);
+            bumpPtr = newBump;
+        }
+    }
+    if (blockToRelease) {
+        blockToRelease->previous = blockToRelease->next = NULL;
+        blockToRelease->returnEmpty(/*poolTheBlock=*/false);
+    }
+}
+
+#endif /* MALLOC_CHECK_RECURSION */
+
+/********* End thread related code  *************/
+
+/********* Library initialization *************/
+
+//! Value indicating the state of initialization.
+/* 0 = initialization not started.
+ * 1 = initialization started but not finished.
+ * 2 = initialization finished.
+ * In theory, we only need values 0 and 2. But value 1 is nonetheless
+ * useful for detecting errors in the double-check pattern.
+ */
+static intptr_t mallocInitialized;   // implicitly initialized to 0
+static MallocMutex initMutex;
+
+inline bool isMallocInitialized() {
+    // Load must have acquire fence; otherwise thread taking "initialized" path
+    // might perform textually later loads *before* mallocInitialized becomes 2.
+    return 2 == FencedLoad(mallocInitialized);
+}
+
+bool isMallocInitializedExt() {
+    return isMallocInitialized();
+}
+
+/*
+ * Allocator initialization routine;
+ * it is called lazily on the very first scalable_malloc call.
+ */
+static void initMemoryManager()
+{
+    TRACEF(( "[ScalableMalloc trace] sizeof(Block) is %d (expected 128); sizeof(uintptr_t) is %d\n",
+             sizeof(Block), sizeof(uintptr_t) ));
+    MALLOC_ASSERT( 2*blockHeaderAlignment == sizeof(Block), ASSERT_TEXT );
+    MALLOC_ASSERT( sizeof(FreeObject) == sizeof(void*), ASSERT_TEXT );
+
+// TODO: add error handling, and on error do something better than exit(1)
+    if (!initBackRefMaster() || !freeBlocks.bootstrap(NULL, NULL, 0)) {
+        fprintf (stderr, "The memory manager cannot access sufficient memory to initialize; exiting \n");
+        exit(1);
+    }
+// Create keys for thread-local storage and for thread id
+#if USE_WINTHREAD
+    TLS_pointer_key = TlsAlloc();
+#else
+    int status1 = pthread_key_create( &TLS_pointer_key, mallocThreadShutdownNotification );
+    if ( status1 ) {
+        fprintf (stderr, "The memory manager cannot create tls key during initialization; exiting \n");
+        exit(1);
+    }
+#endif /* USE_WINTHREAD */
+    ThreadId::init();
+#if COLLECT_STATISTICS
+    initStatisticsCollection();
+#endif
+}
+
+//! Ensures that initMemoryManager() is called once and only once.
+/** Does not return until initMemoryManager() has been completed by a thread.
+    There is no need to call this routine if mallocInitialized==2 . */
+static void doInitialization()
+{
+    MallocMutex::scoped_lock lock( initMutex );
+    if (mallocInitialized!=2) {
+        MALLOC_ASSERT( mallocInitialized==0, ASSERT_TEXT );
+        mallocInitialized = 1;
+        RecursiveMallocCallProtector scoped;
+        initMemoryManager();
+#ifdef  MALLOC_EXTRA_INITIALIZATION
+        MALLOC_EXTRA_INITIALIZATION;
+#endif
+#if MALLOC_CHECK_RECURSION
+        RecursiveMallocCallProtector::detectNaiveOverload();
+#endif
+        MALLOC_ASSERT( mallocInitialized==1, ASSERT_TEXT );
+        // Store must have release fence, otherwise mallocInitialized==2
+        // might become remotely visible before side effects of
+        // initMemoryManager() become remotely visible.
+        FencedStore( mallocInitialized, 2 );
+    }
+    /* It can't be 0 or I would have initialized it */
+    MALLOC_ASSERT( mallocInitialized==2, ASSERT_TEXT );
+}
+
+/********* End library initialization *************/
+
+/********* The malloc show begins     *************/
+
+
+FreeObject *Block::allocateFromFreeList()
+{
+    FreeObject *result;
+
+    if (!freeList) return NULL;
+
+    result = freeList;
+    MALLOC_ASSERT( result, ASSERT_TEXT );
+
+    freeList = result->next;
+    MALLOC_ASSERT( allocatedCount < (blockSize-sizeof(Block))/objectSize, ASSERT_TEXT );
+    allocatedCount++;
+    STAT_increment(owner, getIndex(objectSize), allocFreeListUsed);
+
+    return result;
+}
+
+FreeObject *Block::allocateFromBumpPtr()
+{
+    FreeObject *result = bumpPtr;
+    if (result) {
+        bumpPtr = (FreeObject *) ((uintptr_t) bumpPtr - objectSize);
+        if ( (uintptr_t)bumpPtr < (uintptr_t)this+sizeof(Block) ) {
+            bumpPtr = NULL;
+        }
+        MALLOC_ASSERT( allocatedCount < (blockSize-sizeof(Block))/objectSize, ASSERT_TEXT );
+        allocatedCount++;
+        STAT_increment(owner, getIndex(objectSize), allocBumpPtrUsed);
+    }
+    return result;
+}
+
+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()) ) {
+        return result;
+    }
+    MALLOC_ASSERT( !freeList, ASSERT_TEXT );
+
+    /* if free list is empty, try thread local bump pointer allocation. */
+    if ( (result = allocateFromBumpPtr()) ) {
+        return result;
+    }
+    MALLOC_ASSERT( !bumpPtr, ASSERT_TEXT );
+
+    /* the block is considered full. */
+    isFull = 1;
+    return NULL;
+}
+
+void Bin::moveBlockToBinFront(Block *block)
+{
+    /* move the block to the front of the bin */
+    if (block == activeBlk) return;
+    outofTLSBin(block);
+    pushTLSBin(block);
+}
+
+void Bin::processLessUsedBlock(Block *block)
+{
+    if (block != activeBlk) {
+        /* We are not actively using this block; return it to the general block pool */
+        outofTLSBin(block);
+        block->returnEmpty(/*poolTheBlock=*/true);
+    } else {
+        /* all objects are free - let's restore the bump pointer */
+        block->restoreBumpPtr();
+    }
+}
+
+/*
+ * All aligned allocations fall into one of the following categories:
+ *  1. if both request size and alignment are <= maxSegregatedObjectSize,
+ *       we just align the size up, and request this amount, because for every size
+ *       aligned to some power of 2, the allocated object is at least that aligned.
+ * 2. for size<minLargeObjectSize, check if already guaranteed fittingAlignment is enough.
+ * 3. if size+alignment<minLargeObjectSize, we take an object of fittingSizeN and align
+ *       its address up; given such pointer, scalable_free could find the real object.
+ *       Wrapping of size+alignment is impossible because maximal allowed
+ *       alignment plus minLargeObjectSize can't lead to wrapping.
+ * 4. otherwise, aligned large object is allocated.
+ */
+static void *allocateAligned(size_t size, size_t alignment)
+{
+    MALLOC_ASSERT( isPowerOfTwo(alignment), ASSERT_TEXT );
+
+    void *result;
+    if (size<=maxSegregatedObjectSize && alignment<=maxSegregatedObjectSize)
+        result = internalMalloc(alignUp(size? size: sizeof(size_t), alignment));
+    else if (size<minLargeObjectSize) {
+        if (alignment<=fittingAlignment)
+            result = internalMalloc(size);
+        else if (size+alignment < minLargeObjectSize) {
+            void *unaligned = internalMalloc(size+alignment);
+            if (!unaligned) return NULL;
+            result = alignUp(unaligned, alignment);
+        } else
+            goto LargeObjAlloc;
+    } else {
+    LargeObjAlloc:
+        /* This can be the first allocation call. */
+        if (!isMallocInitialized())
+            doInitialization();
+        // take into account only alignment that are higher then natural
+        result = mallocLargeObject(size, largeObjectAlignment>alignment?
+                                         largeObjectAlignment: alignment);
+    }
+
+    MALLOC_ASSERT( isAligned(result, alignment), ASSERT_TEXT );
+    return result;
+}
+
+static void *reallocAligned(void *ptr, size_t size, size_t alignment = 0)
+{
+    void *result;
+    size_t copySize;
+
+    if (isLargeObject(ptr)) {
+        LargeMemoryBlock* lmb = ((LargeObjectHdr *)ptr - 1)->memoryBlock;
+        copySize = lmb->unalignedSize-((uintptr_t)ptr-(uintptr_t)lmb);
+        if (size <= copySize && (0==alignment || isAligned(ptr, alignment))) {
+            lmb->objectSize = size;
+            return ptr;
+        } else {
+            copySize = lmb->objectSize;
+            result = alignment ? allocateAligned(size, alignment) : internalMalloc(size);
+        }
+    } else {
+        Block* block = (Block *)alignDown(ptr, blockSize);
+        copySize = block->getSize();
+        if (size <= copySize && (0==alignment || isAligned(ptr, alignment))) {
+            return ptr;
+        } else {
+            result = alignment ? allocateAligned(size, alignment) : internalMalloc(size);
+        }
+    }
+    if (result) {
+        memcpy(result, ptr, copySize<size? copySize: size);
+        internalFree(ptr);
+    }
+    return result;
+}
+
+/* A predicate checks if an object is properly placed inside its block */
+inline bool Block::isProperlyPlaced(const void *object) const
+{
+    return 0 == ((uintptr_t)this + blockSize - (uintptr_t)object) % objectSize;
+}
+
+/* Finds the real object inside the block */
+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;
+    MALLOC_ASSERT( offset<=blockSize-sizeof(Block), ASSERT_TEXT );
+    // find offset difference from a multiple of allocation size
+    offset %= objectSize;
+    // and move the address down to where the real object starts.
+    return (FreeObject*)((uintptr_t)address - (offset? objectSize-offset: 0));
+}
+
+/*
+ * Bad dereference caused by a foreign pointer is possible only here, not earlier in call chain.
+ * Separate function isolates SEH code, as it has bad influence on compiler optimization.
+ */
+static inline BackRefIdx safer_dereference (const BackRefIdx *ptr)
+{
+    BackRefIdx id;
+#if _MSC_VER
+    __try {
+#endif
+        id = *ptr;
+#if _MSC_VER
+    } __except( GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION?
+                EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH ) {
+        id = BackRefIdx();
+    }
+#endif
+    return id;
+}
+
+bool isLargeObject(void *object)
+{
+    if (!isAligned(object, largeObjectAlignment))
+        return false;
+    LargeObjectHdr *header = (LargeObjectHdr*)object - 1;
+    BackRefIdx idx = safer_dereference(&header->backRefIdx);
+
+    return idx.isLargeObject() && getBackRef(idx) == header;
+}
+
+static inline bool isSmallObject (void *ptr)
+{
+    void* expected = alignDown(ptr, blockSize);
+    const BackRefIdx* idx = ((Block*)expected)->getBackRef();
+
+    return expected == getBackRef(safer_dereference(idx));
+}
+
+/**** Check if an object was allocated by scalable_malloc ****/
+static inline bool isRecognized (void* ptr)
+{
+    return isLargeObject(ptr) || isSmallObject(ptr);
+}
+
+static inline void freeSmallObject (void *object)
+{
+    /* mask low bits to get the block */
+    Block *block = (Block *)alignDown(object, blockSize);
+    MALLOC_ASSERT( block->checkFreePrecond(), ASSERT_TEXT );
+
+#if MALLOC_CHECK_RECURSION
+    if (block->isStartupAllocObject()) {
+        ((StartupBlock *)block)->free(object);
+        return;
+    }
+#endif
+    FreeObject *objectToFree = block->findObjectToFree(object);
+
+    if (block->ownBlock())
+        block->freeOwnObject(objectToFree);
+    else /* Slower path to add to the shared list, the allocatedCount is updated by the owner thread in malloc. */
+        block->freePublicObject(objectToFree);
+
+}
+
+static void *internalMalloc(size_t size)
+{
+    Bin* bin;
+    Block * mallocBlock;
+    FreeObject *result = NULL;
+
+    if (!size) size = sizeof(size_t);
+
+#if MALLOC_CHECK_RECURSION
+    if (RecursiveMallocCallProtector::sameThreadActive()) {
+        result = size<minLargeObjectSize? StartupBlock::allocate(size) :
+              (FreeObject*)mallocLargeObject(size, blockSize, /*startupAlloc=*/ true);
+        if (!result) errno = ENOMEM;
+        return result;
+    }
+#endif
+
+    if (!isMallocInitialized())
+        doInitialization();
+
+    /*
+     * Use Large Object Allocation
+     */
+    if (size >= minLargeObjectSize) {
+        result = (FreeObject*)mallocLargeObject(size, largeObjectAlignment);
+        if (!result) errno = ENOMEM;
+        return result;
+    }
+
+    /*
+     * 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 = Bin::getAllocationBin(size);
+    if ( !bin ) {
+        errno = ENOMEM;
+        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()) );
+    }
+
+    /*
+     * else privatize publicly freed objects in some block and allocate from it
+     */
+    mallocBlock = bin->getPublicFreeListBlock();
+    if (mallocBlock) {
+        if (mallocBlock->emptyEnoughToUse()) {
+            bin->moveBlockToBinFront(mallocBlock);
+        }
+        MALLOC_ASSERT( mallocBlock->freeListNonNull(), ASSERT_TEXT );
+        if ( (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 internalMalloc(size);
+    }
+
+    /*
+     * no suitable own blocks, try to get a partial block that some other thread has discarded.
+     */
+    mallocBlock = orphanedBlocks->get(bin, size);
+    while (mallocBlock) {
+        bin->pushTLSBin(mallocBlock);
+        bin->setActiveBlock(mallocBlock); // TODO: move under the below condition?
+        if( (result = mallocBlock->allocate()) ) {
+            return result;
+        }
+        mallocBlock = orphanedBlocks->get(bin, size);
+    }
+
+    /*
+     * else try to get a new empty block
+     */
+    mallocBlock = Block::getEmpty(size);
+    if (mallocBlock) {
+        bin->pushTLSBin(mallocBlock);
+        bin->setActiveBlock(mallocBlock);
+        if( (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 internalMalloc(size);
+    }
+    /*
+     * else nothing works so return NULL
+     */
+    TRACEF(( "[ScalableMalloc trace] No memory found, returning NULL.\n" ));
+    errno = ENOMEM;
+    return NULL;
+}
+
+static void internalFree (void *object) {
+    if (!object)
+        return;
+
+    MALLOC_ASSERT(isRecognized(object), "Invalid pointer in scalable_free detected.");
+
+    if (isLargeObject(object))
+        freeLargeObject(object);
+    else
+        freeSmallObject(object);
+}
+
+static size_t internalMsize(void* ptr)
+{
+    if (ptr) {
+        MALLOC_ASSERT(isRecognized(ptr), "Invalid pointer in scalable_msize detected.");
+        if (isLargeObject(ptr)) {
+            LargeMemoryBlock* lmb = ((LargeObjectHdr*)ptr - 1)->memoryBlock;
+            return lmb->objectSize;
+        } else {
+            Block* block = (Block *)alignDown(ptr, blockSize);
+#if MALLOC_CHECK_RECURSION
+            size_t size = block->getSize()? block->getSize() : StartupBlock::msize(ptr);
+#else
+            size_t size = block->getSize();
+#endif
+            MALLOC_ASSERT(size>0 && size<minLargeObjectSize, ASSERT_TEXT);
+            return size;
+        }
+    }
+    errno = EINVAL;
+    // Unlike _msize, return 0 in case of parameter error.
+    // Returning size_t(-1) looks more like the way to troubles.
+    return 0;
+}
+
+} // namespace internal
+} // namespace rml
+
+using namespace rml::internal;
+
+/*
+ * When a thread is shutting down this routine should be called to remove all the thread ids
+ * from the malloc blocks and replace them with a NULL thread id.
+ *
+ */
+#if MALLOC_TRACE
+static unsigned int threadGoingDownCount = 0;
+#endif
+
+/*
+ * for pthreads, the function is set as a callback in pthread_key_create for TLS bin.
+ * it will be automatically called at thread exit with the key value as the argument.
+ *
+ * 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.
+*/
+extern "C" void mallocThreadShutdownNotification(void* arg)
+{
+    TLSData *tls;
+    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++ ));
+#ifdef USE_WINTHREAD
+    tls = getThreadMallocTLS();
+#else
+    tls = (TLSData*)arg;
+#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 */
+                    threadlessBlock->returnEmpty(/*poolTheBlock=*/false);
+                } else {
+                    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 */
+                    threadlessBlock->returnEmpty(/*poolTheBlock=*/false);
+                } else {
+                    orphanedBlocks->put(tlsBin+index, threadlessBlock);
+                }
+                threadlessBlock = threadBlock;
+            }
+            tlsBin[index].activeBlk = 0;
+        }
+        bootStrapBlocks.free(tls);
+        setThreadMallocTLS(NULL);
+    }
+
+    TRACEF(( "[ScalableMalloc trace] Thread id %d blocks return end\n", getThreadId() ));
+}
+
+extern "C" void mallocProcessShutdownNotification(void)
+{
+#if COLLECT_STATISTICS
+    ThreadId nThreads = ThreadIdCount;
+    for( int i=1; i<=nThreads && i<MAX_THREADS; ++i )
+        STAT_print(i);
+#endif
+}
+
+extern "C" void * scalable_malloc(size_t size)
+{
+    return internalMalloc(size);
+}
+
+extern "C" void scalable_free (void *object)
+{
+    internalFree(object);
+}
+
+/*
+ * A variant that provides additional memory safety, by checking whether the given address
+ * was obtained with this allocator, and if not redirecting to the provided alternative call.
+ */
+extern "C" void safer_scalable_free (void *object, void (*original_free)(void*))
+{
+    if (!object)
+        return;
+
+    // must check 1st for large object, because small object check touches 4 pages on left,
+    // and it can be unaccessable
+    if (isLargeObject(object))
+        freeLargeObject(object);
+    else if (isSmallObject(object))
+        freeSmallObject(object);
+    else if (original_free)
+        original_free(object);
+}
+
+/********* End the free code        *************/
+
+/********* Code for scalable_realloc       ***********/
+
+/*
+ * From K&R
+ * "realloc changes the size of the object pointed to by p to size. The contents will
+ * be unchanged up to the minimum of the old and the new sizes. If the new size is larger,
+ * the new space is uninitialized. realloc returns a pointer to the new space, or
+ * NULL if the request cannot be satisfied, in which case *p is unchanged."
+ *
+ */
+extern "C" void* scalable_realloc(void* ptr, size_t size)
+{
+    /* corner cases left out of reallocAligned to not deal with errno there */
+    if (!ptr) {
+        return internalMalloc(size);
+    }
+    if (!size) {
+        internalFree(ptr);
+        return NULL;
+    }
+    void* tmp = reallocAligned(ptr, size, 0);
+    if (!tmp) errno = ENOMEM;
+    return tmp;
+}
+
+/*
+ * A variant that provides additional memory safety, by checking whether the given address
+ * was obtained with this allocator, and if not redirecting to the provided alternative call.
+ */
+extern "C" void* safer_scalable_realloc (void* ptr, size_t sz, void* original_realloc)
+{
+    if (!ptr) {
+        return internalMalloc(sz);
+    }
+    if (isRecognized(ptr)) {
+        if (!sz) {
+            internalFree(ptr);
+            return NULL;
+        }
+        void* tmp = reallocAligned(ptr, sz, 0);
+        if (!tmp) errno = ENOMEM;
+        return tmp;
+    }
+#if USE_WINTHREAD
+    else if (original_realloc && sz) {
+            orig_ptrs *original_ptrs = static_cast<orig_ptrs*>(original_realloc);
+            if ( original_ptrs->orig_msize ){
+                size_t oldSize = original_ptrs->orig_msize(ptr);
+                void *newBuf = internalMalloc(sz);
+                if (newBuf) {
+                    memcpy(newBuf, ptr, sz<oldSize? sz : oldSize);
+                    if ( original_ptrs->orig_free ){
+                        original_ptrs->orig_free( ptr );
+                    }
+                }
+                return newBuf;
+             }
+    }
+#else
+    else if (original_realloc) {
+        typedef void* (*realloc_ptr_t)(void*,size_t);
+        realloc_ptr_t original_realloc_ptr;
+        (void *&)original_realloc_ptr = original_realloc;
+        return original_realloc_ptr(ptr,sz);
+    }
+#endif
+    return NULL;
+}
+
+/********* End code for scalable_realloc   ***********/
+
+/********* Code for scalable_calloc   ***********/
+
+/*
+ * From K&R
+ * calloc returns a pointer to space for an array of nobj objects,
+ * each of size size, or NULL if the request cannot be satisfied.
+ * The space is initialized to zero bytes.
+ *
+ */
+
+extern "C" void * scalable_calloc(size_t nobj, size_t size)
+{
+    size_t arraySize = nobj * size;
+    void* result = internalMalloc(arraySize);
+    if (result)
+        memset(result, 0, arraySize);
+    return result;
+}
+
+/********* End code for scalable_calloc   ***********/
+
+/********* Code for aligned allocation API **********/
+
+extern "C" int scalable_posix_memalign(void **memptr, size_t alignment, size_t size)
+{
+    if ( !isPowerOfTwoMultiple(alignment, sizeof(void*)) )
+        return EINVAL;
+    void *result = allocateAligned(size, alignment);
+    if (!result)
+        return ENOMEM;
+    *memptr = result;
+    return 0;
+}
+
+extern "C" void * scalable_aligned_malloc(size_t size, size_t alignment)
+{
+    if (!isPowerOfTwo(alignment) || 0==size) {
+        errno = EINVAL;
+        return NULL;
+    }
+    void* tmp = allocateAligned(size, alignment);
+    if (!tmp)
+        errno = ENOMEM;
+    return tmp;
+}
+
+extern "C" void * scalable_aligned_realloc(void *ptr, size_t size, size_t alignment)
+{
+    /* corner cases left out of reallocAligned to not deal with errno there */
+    if (!isPowerOfTwo(alignment)) {
+        errno = EINVAL;
+        return NULL;
+    }
+    if (!ptr) {
+        return allocateAligned(size, alignment);
+    }
+    if (!size) {
+        internalFree(ptr);
+        return NULL;
+    }
+
+    void* tmp = reallocAligned(ptr, size, alignment);
+    if (!tmp) errno = ENOMEM;
+    return tmp;
+}
+
+extern "C" void * safer_scalable_aligned_realloc(void *ptr, size_t size, size_t alignment, void* orig_function)
+{
+    /* corner cases left out of reallocAligned to not deal with errno there */
+    if (!isPowerOfTwo(alignment)) {
+        errno = EINVAL;
+        return NULL;
+    }
+    if (!ptr) {
+        return allocateAligned(size, alignment);
+    }
+    if (isRecognized(ptr)) {
+        if (!size) {
+            internalFree(ptr);
+            return NULL;
+        }
+        void* tmp = reallocAligned(ptr, size, alignment);
+        if (!tmp) errno = ENOMEM;
+        return tmp;
+    }
+#if USE_WINTHREAD
+    else {
+        orig_ptrs *original_ptrs = static_cast<orig_ptrs*>(orig_function);
+        if (size) {
+            if ( original_ptrs->orig_msize ){
+                size_t oldSize = original_ptrs->orig_msize(ptr);
+                void *newBuf = allocateAligned(size, alignment);
+                if (newBuf) {
+                    memcpy(newBuf, ptr, size<oldSize? size : oldSize);
+                    if ( original_ptrs->orig_free ){
+                        original_ptrs->orig_free( ptr );
+                    }
+                }
+                return newBuf;
+            }else{
+                //We can't do anything with this. Just keeping old pointer
+                return NULL;
+            }
+        } else {
+            if ( original_ptrs->orig_free ){
+                original_ptrs->orig_free( ptr );
+            }
+            return NULL;
+        }
+    }
+#endif
+    return NULL;
+}
+
+extern "C" void scalable_aligned_free(void *ptr)
+{
+    internalFree(ptr);
+}
+
+/********* end code for aligned allocation API **********/
+
+/********* Code for scalable_msize       ***********/
+
+/*
+ * Returns the size of a memory block allocated in the heap.
+ */
+extern "C" size_t scalable_msize(void* ptr)
+{
+    return internalMsize(ptr);
+}
+
+/*
+ * A variant that provides additional memory safety, by checking whether the given address
+ * was obtained with this allocator, and if not redirecting to the provided alternative call.
+ */
+extern "C" size_t safer_scalable_msize (void *object, size_t (*original_msize)(void*))
+{
+    if (object) {
+        // Check if the memory was allocated by scalable_malloc
+        if (isRecognized(object))
+            return internalMsize(object);
+        else if (original_msize)
+            return original_msize(object);
+    }
+    // object is NULL or unknown
+    errno = EINVAL;
+    return 0;
+}
+
+/********* End code for scalable_msize   ***********/
diff --git a/src/tbbmalloc/large_objects.cpp b/src/tbbmalloc/large_objects.cpp
new file mode 100644
index 0000000..c26511e
--- /dev/null
+++ b/src/tbbmalloc/large_objects.cpp
@@ -0,0 +1,275 @@
+/*
+    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.
+*/
+
+#include "tbbmalloc_internal.h"
+
+/********* Allocation of large objects ************/
+
+
+namespace rml {
+namespace internal {
+
+static struct LargeBlockCacheStat {
+    uintptr_t age;
+    size_t cacheSize;
+} loCacheStat;
+
+ /*
+  * The number of bins to cache large objects.
+  */
+const uint32_t numLargeBlockBins = 1024; // for 1024 max cached size is near 8MB
+ 
+
+class CachedBlocksList {
+    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. */
+    CachedBlocksList();
+public:
+    inline void push(LargeMemoryBlock* ptr);
+    inline LargeMemoryBlock* pop();
+    void releaseLastIfOld(uintptr_t currAge, size_t size);
+};
+
+/*
+ * Array of bins with lists of recently freed large objects cached for re-use.
+ */
+static char globalCachedBlockBinsSpace[sizeof(CachedBlocksList)*numLargeBlockBins];
+static CachedBlocksList* globalCachedBlockBins = (CachedBlocksList*)globalCachedBlockBinsSpace;
+
+/*
+ * Large Objects are the only objects in the system that begin 
+ * on a 16K byte boundary since the blocks used for smaller objects 
+ * have the Block structure at each 16K boundary.
+ */
+static uintptr_t cleanupCacheIfNeed();
+
+void CachedBlocksList::push(LargeMemoryBlock *ptr)
+{   
+    ptr->prev = NULL;
+    ptr->age  = cleanupCacheIfNeed ();
+
+    MallocMutex::scoped_lock scoped_cs(lock);
+    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;
+    }
+}
+
+LargeMemoryBlock *CachedBlocksList::pop()
+{   
+    uintptr_t currAge = cleanupCacheIfNeed();
+    LargeMemoryBlock *result=NULL;
+    {
+        MallocMutex::scoped_lock scoped_cs(lock);
+        if (first) {
+            result = first;
+            first = result->next;
+            if (first)  
+                first->prev = NULL;
+            else {
+                last = NULL;
+                oldest = 0;
+            }
+        } else {
+            /* If cache miss occured, set ageThreshold to twice the difference 
+               between current time and last time cache was cleaned. */
+            ageThreshold = 2*(currAge - lastCleanedAge);
+        }
+    }
+    return result;
+}
+
+void CachedBlocksList::releaseLastIfOld(uintptr_t currAge, size_t size)
+{
+    LargeMemoryBlock *toRelease = NULL;
+ 
+    /* 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) {
+        MallocMutex::scoped_lock scoped_cs(lock);
+        // double check
+        if (last && (intptr_t)(currAge - last->age) > ageThreshold) {
+            do {
+                last = last->prev;
+            } while (last && (intptr_t)(currAge - last->age) > ageThreshold);
+            if (last) {
+                toRelease = last->next;
+                oldest = last->age;
+                last->next = NULL;
+            } else {
+                toRelease = first;
+                first = NULL;
+                oldest = 0;
+            }
+            MALLOC_ASSERT( toRelease, ASSERT_TEXT );
+            lastCleanedAge = toRelease->age;
+        } 
+        else 
+            return;
+    }
+    while ( toRelease ) {
+        LargeMemoryBlock *helper = toRelease->next;
+        removeBackRef(toRelease->backRefIdx);
+        freeRawMemory(toRelease, size, toRelease->fromMapMemory);
+        toRelease = helper;
+    }
+}
+
+static uintptr_t cleanupCacheIfNeed ()
+{
+    /* 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 
+     * 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 ) {
+        size_t objSize;
+        int i;
+
+        for (i = numLargeBlockBins-1, 
+             objSize = (numLargeBlockBins-1)*largeBlockCacheStep+blockSize; 
+             i >= 0; 
+             i--, objSize-=largeBlockCacheStep) {
+            /* cached block size on iteration is
+             * i*largeBlockCacheStep+blockSize, it seems iterative
+             * computation of it improves performance.
+             */
+            // release from cache blocks that are older than ageThreshold
+            globalCachedBlockBins[i].releaseLastIfOld(currAge, objSize);
+        }
+    }
+    return currAge;
+}
+
+static LargeMemoryBlock* getCachedLargeBlock (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;
+    if (idx<numLargeBlockBins) {
+        lmb = globalCachedBlockBins[idx].pop();
+        if (lmb) {
+            MALLOC_ITT_SYNC_ACQUIRED(globalCachedBlockBins+idx);
+            STAT_increment(getThreadId(), ThreadCommonCounters, allocCachedLargeBlk);
+        }
+    }
+    return lmb;
+}
+
+void* mallocLargeObject (size_t size, size_t alignment, bool startupAlloc)
+{
+    LargeMemoryBlock* lmb;
+    size_t headersSize = sizeof(LargeMemoryBlock)+sizeof(LargeObjectHdr);
+    size_t allocationSize = alignUp(size+headersSize+alignment, largeBlockCacheStep);
+
+    if (allocationSize < size) // allocationSize is wrapped around after alignUp
+        return NULL;
+
+    if (startupAlloc || !(lmb = getCachedLargeBlock(allocationSize))) {
+        BackRefIdx backRefIdx;
+
+        if ((backRefIdx = BackRefIdx::newBackRef(/*largeObj=*/true)).isInvalid()) 
+            return NULL;
+        lmb = (LargeMemoryBlock*)getRawMemory(allocationSize, /*useMapMem=*/startupAlloc);
+        if (!lmb) return NULL;
+        lmb->fromMapMemory = startupAlloc;
+        lmb->backRefIdx = backRefIdx;
+        lmb->unalignedSize = allocationSize;
+        STAT_increment(getThreadId(), ThreadCommonCounters, allocNewLargeObj);
+    }
+
+    void *alignedArea = (void*)alignUp((uintptr_t)lmb+headersSize, alignment);
+    LargeObjectHdr *header = (LargeObjectHdr*)alignedArea-1;
+    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 (LargeMemoryBlock* largeBlock)
+{
+    size_t size = largeBlock->unalignedSize;
+    size_t idx = (size-minLargeObjectSize)/largeBlockCacheStep;
+    if (idx<numLargeBlockBins) {
+        MALLOC_ASSERT( size%largeBlockCacheStep==0, ASSERT_TEXT );
+        MALLOC_ITT_SYNC_RELEASING(globalCachedBlockBins+idx);
+        globalCachedBlockBins[idx].push(largeBlock);
+
+        STAT_increment(getThreadId(), ThreadCommonCounters, cacheLargeBlk);
+        return true;
+    }
+    return false;
+}
+
+void freeLargeObject (void *object)
+{
+    LargeObjectHdr *header = (LargeObjectHdr*)object - 1;
+
+    // overwrite backRefIdx to simplify double free detection
+    header->backRefIdx = BackRefIdx();
+    if (!freeLargeObjectToCache(header->memoryBlock)) {
+        removeBackRef(header->memoryBlock->backRefIdx);
+        freeRawMemory(header->memoryBlock, header->memoryBlock->unalignedSize, 
+                      /*useMapMem=*/ header->memoryBlock->fromMapMemory);
+        STAT_increment(getThreadId(), ThreadCommonCounters, freeLargeObj);
+    }
+}
+
+/*********** End allocation of large objects **********/
+
+
+
+} // namespace internal
+} // namespace rml
+
diff --git a/src/tbbmalloc/lin-tbbmalloc-export.def b/src/tbbmalloc/lin-tbbmalloc-export.def
index cd766d7..0fd7a05 100644
--- a/src/tbbmalloc/lin-tbbmalloc-export.def
+++ b/src/tbbmalloc/lin-tbbmalloc-export.def
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbbmalloc/lin32-proxy-export.def b/src/tbbmalloc/lin32-proxy-export.def
index ba22eca..c32a241 100644
--- a/src/tbbmalloc/lin32-proxy-export.def
+++ b/src/tbbmalloc/lin32-proxy-export.def
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbbmalloc/lin64-proxy-export.def b/src/tbbmalloc/lin64-proxy-export.def
index b6eb7ae..e0933d9 100644
--- a/src/tbbmalloc/lin64-proxy-export.def
+++ b/src/tbbmalloc/lin64-proxy-export.def
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbbmalloc/lin64ipf-proxy-export.def b/src/tbbmalloc/lin64ipf-proxy-export.def
index b6eb7ae..e0933d9 100644
--- a/src/tbbmalloc/lin64ipf-proxy-export.def
+++ b/src/tbbmalloc/lin64ipf-proxy-export.def
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbbmalloc/mac32-tbbmalloc-export.def b/src/tbbmalloc/mac32-tbbmalloc-export.def
index 295fce2..0e36795 100644
--- a/src/tbbmalloc/mac32-tbbmalloc-export.def
+++ b/src/tbbmalloc/mac32-tbbmalloc-export.def
@@ -1,30 +1,24 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
-#
-# This file is part of Threading Building Blocks.
-#
-# Threading Building Blocks is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public License
-# version 2 as published by the Free Software Foundation.
-#
-# Threading Building Blocks is distributed in the hope that it will be
-# useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Threading Building Blocks; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-#
-# As a special exception, you may use this file as part of a free software
-# library without restriction.  Specifically, if other files instantiate
-# templates or use macros or inline functions from this file, or you compile
-# this file and link it with other files to produce an executable, this
-# file does not by itself cause the resulting executable to be covered by
-# the GNU General Public License.  This exception does not however
-# invalidate any other reasons why the executable file might be covered by
-# the GNU General Public License.
+/*
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
-# MemoryAllocator.cpp
+    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.
+*/
+
+// MemoryAllocator.cpp
 _scalable_calloc
 _scalable_free
 _scalable_malloc
diff --git a/src/tbbmalloc/mac64-tbbmalloc-export.def b/src/tbbmalloc/mac64-tbbmalloc-export.def
index 295fce2..0e36795 100644
--- a/src/tbbmalloc/mac64-tbbmalloc-export.def
+++ b/src/tbbmalloc/mac64-tbbmalloc-export.def
@@ -1,30 +1,24 @@
-# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
-#
-# This file is part of Threading Building Blocks.
-#
-# Threading Building Blocks is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public License
-# version 2 as published by the Free Software Foundation.
-#
-# Threading Building Blocks is distributed in the hope that it will be
-# useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Threading Building Blocks; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-#
-# As a special exception, you may use this file as part of a free software
-# library without restriction.  Specifically, if other files instantiate
-# templates or use macros or inline functions from this file, or you compile
-# this file and link it with other files to produce an executable, this
-# file does not by itself cause the resulting executable to be covered by
-# the GNU General Public License.  This exception does not however
-# invalidate any other reasons why the executable file might be covered by
-# the GNU General Public License.
+/*
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
-# MemoryAllocator.cpp
+    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.
+*/
+
+// MemoryAllocator.cpp
 _scalable_calloc
 _scalable_free
 _scalable_malloc
diff --git a/src/tbbmalloc/proxy.cpp b/src/tbbmalloc/proxy.cpp
index 87b03e5..ae249de 100644
--- a/src/tbbmalloc/proxy.cpp
+++ b/src/tbbmalloc/proxy.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbbmalloc/proxy.h b/src/tbbmalloc/proxy.h
index 315f628..a68fdc2 100644
--- a/src/tbbmalloc/proxy.h
+++ b/src/tbbmalloc/proxy.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 02ebea6..632987e 100644
--- a/src/tbbmalloc/tbb_function_replacement.cpp
+++ b/src/tbbmalloc/tbb_function_replacement.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 bf520b6..a1ea605 100644
--- a/src/tbbmalloc/tbb_function_replacement.h
+++ b/src/tbbmalloc/tbb_function_replacement.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbbmalloc/tbbmalloc.cpp b/src/tbbmalloc/tbbmalloc.cpp
index fff8bb1..10cb225 100644
--- a/src/tbbmalloc/tbbmalloc.cpp
+++ b/src/tbbmalloc/tbbmalloc.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -28,14 +28,16 @@
 
 #include "TypeDefinitions.h" // Customize.h and proxy.h get included
 
-#include "tbb/itt_notify.h" // for __TBB_load_ittnotify()
+#include "../tbb/itt_notify.h" // for __TBB_load_ittnotify()
+
+#include "../tbb/tbb_assert_impl.h" // Out-of-line TBB assertion handling routines are instantiated here.
 
 #undef UNICODE
 
 #if USE_PTHREAD
 #include <dlfcn.h>
 #elif USE_WINTHREAD
-#include <windows.h>
+#include "tbb/machine/windows_api.h"
 #endif
 
 #if MALLOC_CHECK_RECURSION
@@ -101,7 +103,7 @@ void ITT_DoOneTimeInitialization() {
 #define MALLOCLIB_NAME "libtbbmalloc" DEBUG_SUFFIX ".dylib"
 #elif __linux__
 #define MALLOCLIB_NAME "libtbbmalloc" DEBUG_SUFFIX  __TBB_STRING(.so.TBB_COMPATIBLE_INTERFACE_VERSION)
-#elif __FreeBSD__ || __sun
+#elif __FreeBSD__ || __NetBSD__ || __sun || _AIX
 #define MALLOCLIB_NAME "libtbbmalloc" DEBUG_SUFFIX ".so"
 #else
 #error Unknown OS
@@ -136,7 +138,7 @@ 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
+#if USE_WINTHREAD && __TBB_DYNAMIC_LOAD_ENABLED
     // Prevent Windows from displaying message boxes if it fails to load library
     UINT prev_mode = SetErrorMode (SEM_FAILCRITICALERRORS);
     LoadLibrary(MALLOCLIB_NAME);
@@ -147,7 +149,7 @@ void init_tbbmalloc() {
 #if !(_WIN32||_WIN64)
 struct RegisterProcessShutdownNotification {
     RegisterProcessShutdownNotification() {
-#if USE_PTHREAD
+#if USE_PTHREAD && __TBB_DYNAMIC_LOAD_ENABLED
         // prevents unloading, POSIX case
         dlopen(MALLOCLIB_NAME, RTLD_NOW);
 #endif
@@ -199,18 +201,17 @@ 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
 
-#if _XBOX
-    #define NONET
-    #define NOD3D
-    #include <xtl.h>
-#else
-#include <windows.h>
-#endif    
-
 extern "C" BOOL WINAPI DllMain( HINSTANCE hInst, DWORD callReason, LPVOID )
 {
 
@@ -227,3 +228,19 @@ extern "C" BOOL WINAPI DllMain( HINSTANCE hInst, DWORD callReason, LPVOID )
 
 #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.
+
+   This code is copy-pasted from tbb_misc.cpp.
+ */
+extern "C" intptr_t __TBB_machine_lockbyte( volatile unsigned char& flag ) {
+    if ( !__TBB_TryLockByte(flag) ) {
+        tbb::internal::atomic_backoff b;
+        do {
+            b.pause();
+        } while ( !__TBB_TryLockByte(flag) );
+    }
+    return 0;
+}
+#endif
diff --git a/src/tbbmalloc/tbbmalloc.rc b/src/tbbmalloc/tbbmalloc.rc
index 1aba798..6a01920 100644
--- a/src/tbbmalloc/tbbmalloc.rc
+++ b/src/tbbmalloc/tbbmalloc.rc
@@ -1,4 +1,4 @@
-// Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+// Copyright 2005-2011 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-2010 Intel Corporation.  All Rights Reserved.\0"
+            VALUE "LegalCopyright", "Copyright 2005-2011 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
new file mode 100644
index 0000000..c9c8956
--- /dev/null
+++ b/src/tbbmalloc/tbbmalloc_internal.h
@@ -0,0 +1,272 @@
+/*
+    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.
+*/
+
+#ifndef __TBB_tbbmalloc_internal_H
+#define __TBB_tbbmalloc_internal_H 1
+
+
+#include "TypeDefinitions.h" /* Also includes customization layer Customize.h */
+
+#if USE_PTHREAD
+    // Some pthreads documentation says that <pthreads.h> must be first header.
+    #include <pthread.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#if MALLOC_CHECK_RECURSION
+#include <new>        /* for placement new */
+#endif
+
+#if __sun || __SUNPRO_CC
+#define __asm__ asm 
+#endif
+
+extern "C" {
+    void mallocThreadShutdownNotification(void*);
+}
+
+/********* Various compile-time options        **************/
+
+
+#define MALLOC_TRACE 0
+
+#if MALLOC_TRACE
+#define TRACEF(x) printf x
+#else
+#define TRACEF(x) ((void)0)
+#endif /* MALLOC_TRACE */
+
+#define ASSERT_TEXT NULL
+
+#define COLLECT_STATISTICS MALLOC_DEBUG && defined(MALLOCENV_COLLECT_STATISTICS)
+#include "Statistics.h"
+
+/********* End compile-time options        **************/
+
+namespace rml {
+namespace internal {
+
+/********** Various numeric parameters controlling allocations ********/
+
+/*
+ * blockSize - the size of a block, it must be larger than maxSegregatedObjectSize.
+ *
+ */
+const uintptr_t blockSize = 16*1024;
+
+/*
+ * Difference between object sizes in large block bins
+ */
+const uint32_t largeBlockCacheStep = 8*1024;
+
+/*
+ * Large blocks cache cleanup frequency.
+ * It should be power of 2 for the fast checking.
+ */
+const unsigned cacheCleanupFreq = 256;
+
+/********** End of numeric parameters controlling allocations *********/
+
+class BackRefIdx { // composite index to backreference array
+private:
+    uint16_t master;      // index in BackRefMaster
+    uint16_t largeObj:1;  // is this object "large"?
+    uint16_t offset  :15; // offset from beginning of BackRefBlock
+public:
+    BackRefIdx() : master((uint16_t)-1) {}
+    bool isInvalid() const { return master == (uint16_t)-1; }
+    bool isLargeObject() const { return largeObj; }
+    uint16_t getMaster() const { return master; }
+    uint16_t getOffset() const { return offset; }
+
+    // only newBackRef can modify BackRefIdx
+    static BackRefIdx newBackRef(bool largeObj);
+};
+
+struct LargeMemoryBlock {
+    LargeMemoryBlock *next,          // ptrs in list of cached blocks
+                     *prev;
+    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
+    bool              fromMapMemory;
+    BackRefIdx        backRefIdx;    // cached here, used copy is in LargeObjectHdr
+};
+
+struct LargeObjectHdr {
+    LargeMemoryBlock *memoryBlock;
+    /* Backreference points to LargeObjectHdr. 
+       Duplicated in LargeMemoryBlock to reuse in subsequent allocations. */
+    BackRefIdx       backRefIdx;
+};
+
+struct FreeObject {
+    FreeObject  *next;
+};
+
+// interface class for external access to Block
+class BlockI {
+public:
+    static BlockI *getRawBlock(bool startup);
+    void initialize(void *bumpPtr);
+};
+
+class FreeBlocks {
+    typedef void* (*RawAlloc) (size_t size, bool useMapMem);
+    typedef void (*RawFree) (void *object, size_t size, bool useMapMem);
+
+    RawAlloc rawAlloc;
+    RawFree rawFree;
+    size_t memReqSize;
+
+    bool mallocBigBlock();
+public:
+    bool bootstrap(RawAlloc myAlloc, RawFree myFree, size_t myReqSize);
+    BlockI *get(bool startup);
+    void put(BlockI *block, bool startup);
+    void putList(BlockI *head, BlockI *tail);
+};
+
+extern FreeBlocks freeBlocks;
+
+/******* A helper class to support overriding malloc with scalable_malloc *******/
+#if MALLOC_CHECK_RECURSION
+
+class RecursiveMallocCallProtector {
+    // pointer to an automatic data of holding thread
+    static void       *autoObjPtr;
+    static MallocMutex rmc_mutex;
+    static pthread_t   owner_thread;
+/* Under FreeBSD 8.0 1st call to any pthread function including pthread_self
+   leads to pthread initialization, that causes malloc calls. As 1st usage of
+   RecursiveMallocCallProtector can be before pthread initialized, pthread calls
+   can't be used in 1st instance of RecursiveMallocCallProtector.
+   RecursiveMallocCallProtector is used 1st time in checkInitialization(),
+   so there is a guarantee that on 2nd usage pthread is initialized. 
+   No such situation observed with other supported OSes.
+ */
+#if __FreeBSD__
+    static bool        canUsePthread;
+#else
+    static const bool  canUsePthread = true;
+#endif
+/*
+  The variable modified in checkInitialization,
+  so can be read without memory barriers.
+ */
+    static bool mallocRecursionDetected;
+
+    MallocMutex::scoped_lock* lock_acquired;
+    char scoped_lock_space[sizeof(MallocMutex::scoped_lock)+1];
+
+    static uintptr_t absDiffPtr(void *x, void *y) {
+        uintptr_t xi = (uintptr_t)x, yi = (uintptr_t)y;
+        return xi > yi ? xi - yi : yi - xi;
+    }
+public:
+
+    RecursiveMallocCallProtector() : lock_acquired(NULL) {
+        lock_acquired = new (scoped_lock_space) MallocMutex::scoped_lock( rmc_mutex );
+        if (canUsePthread)
+            owner_thread = pthread_self();
+        autoObjPtr = &scoped_lock_space;
+    }
+    ~RecursiveMallocCallProtector() {
+        if (lock_acquired) {
+            autoObjPtr = NULL;
+            lock_acquired->~scoped_lock();
+        }
+    }
+    static bool sameThreadActive() {
+        if (!autoObjPtr) // fast path
+            return false;
+        // Some thread has an active recursive call protector; check if the current one.
+        // Exact pthread_self based test
+        if (canUsePthread) {
+            if (pthread_equal( owner_thread, pthread_self() )) {
+                mallocRecursionDetected = true;
+                return true;
+            } else
+                return false;
+        }
+        // inexact stack size based test
+        const uintptr_t threadStackSz = 2*1024*1024;
+        int dummy;
+        return absDiffPtr(autoObjPtr, &dummy)<threadStackSz;
+    }
+    static bool noRecursion();
+/* The function is called on 1st scalable_malloc call to check if malloc calls
+   scalable_malloc (nested call must set mallocRecursionDetected). */
+    static void detectNaiveOverload() {
+        if (!malloc_proxy) {
+#if __FreeBSD__
+/* If !canUsePthread, we can't call pthread_self() before, but now pthread 
+   is already on, so can do it. False positives here lead to silent switching 
+   from malloc to mmap for all large allocations with bad performance impact. */
+            if (!canUsePthread) {
+                canUsePthread = true;
+                owner_thread = pthread_self();
+            }
+#endif
+            free(malloc(1));
+        }
+    }
+};
+
+#else
+
+class RecursiveMallocCallProtector {
+public:
+    RecursiveMallocCallProtector() {}
+    ~RecursiveMallocCallProtector() {}
+};
+
+#endif  /* MALLOC_CHECK_RECURSION */
+
+bool isMallocInitializedExt();
+
+void* getRawMemory (size_t size, bool useMapMem);
+void freeRawMemory (void *object, size_t size, bool useMapMem);
+
+extern const uint32_t minLargeObjectSize;
+bool isLargeObject(void *object);
+void* mallocLargeObject (size_t size, size_t alignment, bool startupAlloc = false);
+void freeLargeObject (void *object);
+
+unsigned int getThreadId();
+
+bool initBackRefMaster();
+void removeBackRef(BackRefIdx backRefIdx);
+void setBackRef(BackRefIdx backRefIdx, void *newPtr);
+void *getBackRef(BackRefIdx backRefIdx);
+
+} // namespace internal
+} // namespace rml
+
+#endif // __TBB_tbbmalloc_internal_H
diff --git a/src/tbbmalloc/win-gcc-tbbmalloc-export.def b/src/tbbmalloc/win-gcc-tbbmalloc-export.def
index 7a7d072..c6090ee 100644
--- a/src/tbbmalloc/win-gcc-tbbmalloc-export.def
+++ b/src/tbbmalloc/win-gcc-tbbmalloc-export.def
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbbmalloc/win32-tbbmalloc-export.def b/src/tbbmalloc/win32-tbbmalloc-export.def
index 798879e..835722b 100644
--- a/src/tbbmalloc/win32-tbbmalloc-export.def
+++ b/src/tbbmalloc/win32-tbbmalloc-export.def
@@ -1,4 +1,4 @@
-; Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+; Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 ;
 ; This file is part of Threading Building Blocks.
 ;
diff --git a/src/tbbmalloc/win64-tbbmalloc-export.def b/src/tbbmalloc/win64-tbbmalloc-export.def
index 798879e..835722b 100644
--- a/src/tbbmalloc/win64-tbbmalloc-export.def
+++ b/src/tbbmalloc/win64-tbbmalloc-export.def
@@ -1,4 +1,4 @@
-; Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+; Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 ;
 ; This file is part of Threading Building Blocks.
 ;
diff --git a/src/tbbmalloc/xbox360-tbbmalloc-export.def b/src/tbbmalloc/xbox360-tbbmalloc-export.def
index 86509ad..f335e7c 100644
--- a/src/tbbmalloc/xbox360-tbbmalloc-export.def
+++ b/src/tbbmalloc/xbox360-tbbmalloc-export.def
@@ -1,4 +1,4 @@
-; Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+; Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 ;
 ; This file is part of Threading Building Blocks.
 ;
diff --git a/src/test/harness.h b/src/test/harness.h
index 2d570db..c2c27cc 100644
--- a/src/test/harness.h
+++ b/src/test/harness.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -41,21 +41,22 @@
 namespace Harness {
     enum TestResult {
         Done,
-        Skipped
+        Skipped,
+        Unknown
     };
 }
 
 //! Entry point to a TBB unit test application
 /** It MUST be defined by the test application.
-    
+
     If HARNESS_NO_PARSE_COMMAND_LINE macro was not explicitly set before including harness.h,
-    then global variables Verbose, MinThread, and MaxThread will be available and 
+    then global variables Verbose, MinThread, and MaxThread will be available and
     initialized when it is called.
 
-    Returns Harness::Done when the tests passed successfully. When the test fail, it must 
-    not return, calling exit(errcode) or abort() instead. When the test is not supported 
+    Returns Harness::Done when the tests passed successfully. When the test fail, it must
+    not return, calling exit(errcode) or abort() instead. When the test is not supported
     for the given platform/compiler/etc, it should return Harness::Skipped.
-    
+
     To provide non-standard variant of main() for the test, define HARNESS_CUSTOM_MAIN
     before including harness.h **/
 int TestMain ();
@@ -90,14 +91,10 @@ int TestMain ();
     #define REPORT_FATAL_ERROR REPORT
 
 #if _WIN32||_WIN64
+    #include "tbb/machine/windows_api.h"
 #if _XBOX
-    #define NONET
-    #define NOD3D
-    #include <xtl.h>
     #undef HARNESS_NO_PARSE_COMMAND_LINE
     #define HARNESS_NO_PARSE_COMMAND_LINE 1
-#else
-    #include <windows.h>
 #endif
     #include <process.h>
 #else
@@ -114,7 +111,7 @@ int TestMain ();
 #include "harness_assert.h"
 
 typedef void (*test_error_extra_t)(void);
-static test_error_extra_t ErrorExtraCall; 
+static test_error_extra_t ErrorExtraCall;
 //! Set additional handler to process failed assertions
 void SetHarnessErrorProcessing( test_error_extra_t extra_call ) {
     ErrorExtraCall = extra_call;
@@ -169,12 +166,12 @@ static int MaxThread = HARNESS_DEFAULT_MAX_THREADS;
 //! Parse command line of the form "name [-v] [MinThreads[:MaxThreads]]"
 /** Sets Verbose, MinThread, and MaxThread accordingly.
     The nthread argument can be a single number or a range of the form m:n.
-    A single number m is interpreted as if written m:m. 
-    The numbers must be non-negative.  
+    A single number m is interpreted as if written m:m.
+    The numbers must be non-negative.
     Clients often treat the value 0 as "run sequentially." */
 static void ParseCommandLine( int argc, char* argv[] ) {
     if( !argc ) REPORT("Command line with 0 arguments\n");
-    int i = 1;  
+    int i = 1;
     if( i<argc ) {
         if( strncmp( argv[i], "-v", 2 )==0 ) {
             Verbose = true;
@@ -186,12 +183,12 @@ static void ParseCommandLine( int argc, char* argv[] ) {
         MinThread = strtol( argv[i], &endptr, 0 );
         if( *endptr==':' )
             MaxThread = strtol( endptr+1, &endptr, 0 );
-        else if( *endptr=='\0' ) 
+        else if( *endptr=='\0' )
             MaxThread = MinThread;
         if( *endptr!='\0' ) {
             REPORT_FATAL_ERROR("garbled nthread range\n");
             exit(1);
-        }    
+        }
         if( MinThread<0 ) {
             REPORT_FATAL_ERROR("nthread must be nonnegative\n");
             exit(1);
@@ -219,6 +216,7 @@ static void ParseCommandLine( int argc, char* argv[] ) {
 
 #if !HARNESS_CUSTOM_MAIN
 
+
 HARNESS_EXPORT
 #if HARNESS_NO_PARSE_COMMAND_LINE
 int main() {
@@ -232,6 +230,7 @@ int main(int argc, char* argv[]) {
     return 0;
 }
 
+
 #endif /* !HARNESS_CUSTOM_MAIN */
 
 //! Base class for prohibiting compiler-generated operator=
@@ -247,7 +246,7 @@ public:
 
 //! Base class for prohibiting compiler-generated copy constructor or operator=
 class NoCopy: NoAssign {
-    //! Copy construction not allowed  
+    //! Copy construction not allowed
     NoCopy( const NoCopy& );
 public:
     NoCopy() {}
@@ -273,9 +272,9 @@ public:
     #pragma warning (push)
     #pragma warning (disable: 2193)
 #endif /* __ICC==1100 */
-        // Some machines may have very large hard stack limit. When the test is 
-        // launched by make, the default stack size is set to the hard limit, and 
-        // calls to pthread_create fail with out-of-memory error. 
+        // Some machines may have very large hard stack limit. When the test is
+        // 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;
 #if __i386__||__i386
@@ -308,7 +307,7 @@ public:
 #else
         int status = pthread_join( thread_id, NULL );
         ASSERT( !status, "pthread_join failed" );
-#endif 
+#endif
     }
 
 private:
@@ -331,15 +330,7 @@ private:
 #endif
     {
         NativeParallelForTask& self = *static_cast<NativeParallelForTask*>(object);
-#if TBB_USE_EXCEPTIONS
-        try {
-            (self.body)(self.index);
-        } catch(...) {
-            ASSERT( false, "uncaught exception" );
-        }
-#else /* !TBB_USE_EXCEPTIONS */
         (self.body)(self.index);
-#endif /* !TBB_USE_EXCEPTIONS */
         return 0;
     }
 };
@@ -355,7 +346,7 @@ void NativeParallelFor( Index n, const Body& body ) {
         task* array = static_cast<task*>(operator new( n*sizeof(task) ));
 
         // Construct the tasks
-        for( Index i=0; i!=n; ++i ) 
+        for( Index i=0; i!=n; ++i )
             new( &array[i] ) task(i,body);
 
         // Start the tasks
@@ -411,7 +402,7 @@ inline unsigned LinuxKernelVersion()
 {
     unsigned digit1, digit2, digit3;
     struct utsname utsnameBuf;
-    
+
     if (-1 == uname(&utsnameBuf)) {
         REPORT_FATAL_ERROR("Can't call uname: errno %d\n", errno);
         exit(1);
@@ -460,12 +451,20 @@ public:
 
 #if _WIN32 || _WIN64
     void Sleep ( int ms ) { ::Sleep(ms); }
+
+    typedef DWORD tid_t;
+    tid_t CurrentTid () { return GetCurrentThreadId(); }
+
 #else /* !WIN */
+
     void Sleep ( int ms ) {
         timespec  requested = { ms / 1000, (ms % 1000)*1000000 };
         timespec  remaining = { 0, 0 };
         nanosleep(&requested, &remaining);
     }
+
+    typedef pthread_t tid_t;
+    tid_t CurrentTid () { return pthread_self(); }
 #endif /* !WIN */
 
 } // namespace Harness
diff --git a/src/test/harness_allocator.h b/src/test/harness_allocator.h
index 3f771d8..b31f34b 100644
--- a/src/test/harness_allocator.h
+++ b/src/test/harness_allocator.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -31,18 +31,10 @@
 // This header is an optional part of the test harness.
 // It assumes that "harness_assert.h" has already been included.
 
-#if __linux__
+#if __linux__ || __APPLE__ || __sun
 #include <unistd.h>
-#elif __APPLE__ || __sun
-#include <unistd.h>
-#elif _WIN32
-#if _XBOX
-    #define NONET
-    #define NOD3D
-    #include <xtl.h>
-#else
-#include <windows.h>
-#endif
+#elif _WIN32 
+#include "tbb/machine/windows_api.h"
 #endif /* OS specific */
 #include <new>
 
@@ -58,7 +50,7 @@
     #pragma warning (pop)
 #endif
 
-#include <tbb/atomic.h>
+#include "tbb/atomic.h"
 
 #if __SUNPRO_CC
 using std::printf;
@@ -192,7 +184,7 @@ public:
 
     local_counting_allocator(const local_counting_allocator &a) throw()
         : base_alloc_t(a)
-		, items_allocated(a.items_allocated)
+        , items_allocated(a.items_allocated)
         , items_freed(a.items_freed)
         , allocations(a.allocations)
         , frees(a.frees)
diff --git a/src/test/harness_assert.h b/src/test/harness_assert.h
index 0fecbd5..0ae7ae1 100644
--- a/src/test/harness_assert.h
+++ b/src/test/harness_assert.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 2fc0b4a..117cac9 100644
--- a/src/test/harness_bad_expr.h
+++ b/src/test/harness_bad_expr.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 78d7c76..139dc0f 100644
--- a/src/test/harness_barrier.h
+++ b/src/test/harness_barrier.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/harness_concurrency_tracker.h b/src/test/harness_concurrency_tracker.h
index 5a5fa88..5fab92a 100644
--- a/src/test/harness_concurrency_tracker.h
+++ b/src/test/harness_concurrency_tracker.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 4f2c324..6b0e8dd 100644
--- a/src/test/harness_cpu.h
+++ b/src/test/harness_cpu.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -30,8 +30,10 @@
 // This header is an optional part of the test harness.
 // It assumes that "harness_assert.h" has already been included.
 
-#if _WIN32 && !_XBOX
+#if _WIN32 
+#if !_XBOX
     #include <windows.h>
+#endif
 #else
     #include <sys/time.h>
     #include <sys/resource.h>
diff --git a/src/test/harness_eh.h b/src/test/harness_eh.h
index 48f4b2e..603e3cc 100644
--- a/src/test/harness_eh.h
+++ b/src/test/harness_eh.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -27,20 +27,11 @@
 */
 
 #include <typeinfo>
+#include "tbb/tbb_exception.h"
 #include "tbb/atomic.h"
 #include "harness.h"
 #include "harness_concurrency_tracker.h"
 
-namespace Harness {
-#if _WIN32 || _WIN64
-    typedef DWORD tid_t;
-    tid_t CurrentTid () { return GetCurrentThreadId(); }
-#else /* !WIN */
-    typedef pthread_t tid_t;
-    tid_t CurrentTid () { return pthread_self(); }
-#endif /* !WIN */
-} // namespace Harness
-
 int g_NumThreads = 0;
 Harness::tid_t  g_Master = 0;
 
diff --git a/src/test/harness_graph.h b/src/test/harness_graph.h
new file mode 100644
index 0000000..4fc2327
--- /dev/null
+++ b/src/test/harness_graph.h
@@ -0,0 +1,205 @@
+/*
+    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.
+*/
+
+/** @file harness_graph.cpp     
+    This contains common helper classes and functions for testing graph nodes
+**/
+
+#ifndef harness_graph_H
+#define harness_graph_H
+
+#include "harness.h"
+#define TBB_PREVIEW_GRAPH 1
+#include "tbb/graph.h"
+#include "tbb/null_rw_mutex.h"
+#include "tbb/atomic.h"
+
+template< typename InputType, typename OutputType >
+struct harness_graph_default_functor {
+    static OutputType construct( InputType v ) {
+        return OutputType(v);
+    }
+};
+
+template< typename OutputType >
+struct harness_graph_default_functor< tbb::continue_msg, OutputType > {
+    static OutputType construct( tbb::continue_msg ) {
+        return OutputType();
+    }
+};
+
+template< typename InputType >
+struct harness_graph_default_functor< InputType, tbb::continue_msg > {
+    static tbb::continue_msg construct( InputType ) {
+        return tbb::continue_msg();
+    }
+};
+
+template< >
+struct harness_graph_default_functor< tbb::continue_msg, tbb::continue_msg > {
+    static tbb::continue_msg construct( tbb::continue_msg ) {
+        return tbb::continue_msg();
+    }
+};
+
+static tbb::atomic<size_t> current_executors;
+
+//! An executor that accepts InputType and generates OutputType
+template< typename InputType, typename OutputType, typename M=tbb::null_rw_mutex >
+struct harness_graph_executor {
+
+    typedef OutputType (*function_ptr_type)( InputType v );
+
+    static M mutex;
+    static function_ptr_type fptr;
+    static tbb::atomic<size_t> execute_count;
+    static size_t max_executors;
+
+    static inline OutputType func( InputType v ) {
+        typename M::scoped_lock l( mutex );
+        size_t c = current_executors.fetch_and_increment();
+        ASSERT( max_executors == 0 || c <= max_executors, NULL ); 
+        ++execute_count;
+        OutputType v2 = (*fptr)(v);
+        current_executors.fetch_and_decrement();
+        return v2; 
+    }
+
+    struct functor {
+        OutputType operator()( InputType i ) const {
+           typename M::scoped_lock l( harness_graph_executor::mutex );
+           size_t c = current_executors.fetch_and_increment();
+           ASSERT( harness_graph_executor::max_executors == 0 || c <= harness_graph_executor::max_executors, NULL ); 
+           ++execute_count;
+           OutputType v2 = (*harness_graph_executor::fptr)(i);
+           current_executors.fetch_and_decrement();
+           return v2; 
+        }
+    };
+
+};
+
+template< typename InputType, typename OutputType, typename M >
+M harness_graph_executor<InputType, OutputType, M>::mutex;
+
+template< typename InputType, typename OutputType, typename M >
+tbb::atomic<size_t> harness_graph_executor<InputType, OutputType, M>::execute_count;
+
+template< typename InputType, typename OutputType, typename M >
+typename harness_graph_executor<InputType, OutputType, M>::function_ptr_type harness_graph_executor<InputType, OutputType, M>::fptr
+    = harness_graph_default_functor< InputType, OutputType >::construct;
+
+template< typename InputType, typename OutputType, typename M >
+size_t harness_graph_executor<InputType, OutputType, M>::max_executors = 0;
+
+//! Counts the number of puts received
+template< typename T >
+struct harness_counting_receiver : public tbb::receiver<T>, NoCopy {
+
+    tbb::atomic< size_t > my_count;
+
+    harness_counting_receiver() {
+       my_count = 0;
+    }
+
+    /* override */ bool try_put( T ) {
+      ++my_count;
+      return true;
+    }
+};
+
+//! Counts the number of puts received
+template< typename T >
+struct harness_counting_sender : public tbb::sender<T>, NoCopy {
+
+    typedef tbb::receiver<T> successor_type;
+    tbb::atomic< successor_type * > my_receiver;
+    tbb::atomic< size_t > my_count;
+    tbb::atomic< size_t > my_received;
+    size_t my_limit;
+
+    harness_counting_sender( ) : my_limit(~size_t(0)) {
+       my_receiver = NULL;
+       my_count = 0;
+       my_received = 0;
+    }
+
+    harness_counting_sender( size_t limit ) : my_limit(limit) {
+       my_receiver = NULL;
+       my_count = 0;
+       my_received = 0;
+    }
+
+    /* override */ bool register_successor( successor_type &r ) {
+        my_receiver = &r;
+        return true;
+    }
+
+    /* override */ bool remove_successor( successor_type &r ) {
+        successor_type *s = my_receiver.fetch_and_store( NULL );
+        ASSERT( s == &r, NULL );
+        return true;
+    }
+
+    /* override */ bool try_get( T & v ) { 
+        size_t i = my_count.fetch_and_increment();
+        if ( i < my_limit ) {
+           v = T( i );
+           ++my_received;
+           return true;
+        } else {
+           return false;
+        }
+    }
+
+    bool try_put_once() {
+        successor_type *s = my_receiver;
+        size_t i = my_count.fetch_and_increment();
+        if ( s->try_put( T(i) ) ) {
+            ++my_received;
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    void try_put_until_false() {
+        successor_type *s = my_receiver;
+        size_t i = my_count.fetch_and_increment();
+
+        while ( s->try_put( T(i) ) ) {
+            ++my_received;
+            i = my_count.fetch_and_increment();
+        } 
+    }
+
+};
+
+#endif
+
+
diff --git a/src/test/harness_inject_scheduler.h b/src/test/harness_inject_scheduler.h
index 3c7ac61..019a3d4 100644
--- a/src/test/harness_inject_scheduler.h
+++ b/src/test/harness_inject_scheduler.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -35,14 +35,17 @@
 // Suppress usage of #pragma comment
 #define __TBB_NO_IMPLICIT_LINKAGE 1
 
+// Enable preview features if any 
+#define __TBB_BUILD 1
+
 #define __TBB_TASK_CPP_DIRECTLY_INCLUDED 1
 #include "../tbb/tbb_main.cpp"
+#include "../tbb/dynamic_link.cpp"
+#include "../tbb/tbb_misc_ex.cpp"
 
 // Tasking subsystem files
 #include "../tbb/governor.cpp"
-#if __TBB_ARENA_PER_MASTER
 #include "../tbb/market.cpp"
-#endif /* __TBB_ARENA_PER_MASTER */
 #include "../tbb/arena.cpp"
 #include "../tbb/scheduler.cpp"
 #include "../tbb/observer_proxy.cpp"
@@ -51,7 +54,6 @@
 
 // Other dependencies
 #include "../tbb/cache_aligned_allocator.cpp"
-#include "../tbb/dynamic_link.cpp"
 #include "../tbb/tbb_thread.cpp"
 #include "../tbb/mutex.cpp"
 #include "../tbb/spin_rw_mutex.cpp"
diff --git a/src/test/harness_iterator.h b/src/test/harness_iterator.h
index c3dbd02..fbfd697 100644
--- a/src/test/harness_iterator.h
+++ b/src/test/harness_iterator.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 88cd15c..931bafc 100644
--- a/src/test/harness_m128.h
+++ b/src/test/harness_m128.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 dca372f..a413f57 100644
--- a/src/test/harness_memory.h
+++ b/src/test/harness_memory.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 455c44b..952ae78 100644
--- a/src/test/harness_report.h
+++ b/src/test/harness_report.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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
new file mode 100644
index 0000000..2716d5e
--- /dev/null
+++ b/src/test/harness_tbb_independence.h
@@ -0,0 +1,70 @@
+/*
+    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.
+*/
+
+#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
+#include "tbb/tbb_machine.h"
+
+#include <pthread.h>
+
+// Can't use Intel compiler intrinsic due to internal error reported by 10.1 compiler
+pthread_mutex_t counter_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+int32_t __TBB_machine_fetchadd4__TBB_full_fence (volatile void *ptr, int32_t value)
+{
+    pthread_mutex_lock(&counter_mutex);
+    int32_t result = *(int32_t*)ptr;
+    *(int32_t*)ptr = result + value;
+    pthread_mutex_unlock(&counter_mutex);
+    return result;
+}
+
+void __TBB_machine_pause(int32_t /*delay*/) {  __TBB_Yield(); }
+
+#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 */
+
+#endif // harness_tbb_independence_H
diff --git a/src/test/test_ScalableAllocator.cpp b/src/test/test_ScalableAllocator.cpp
index cc66b35..a43f4aa 100644
--- a/src/test/test_ScalableAllocator.cpp
+++ b/src/test/test_ScalableAllocator.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -36,17 +36,17 @@
 #include "test_allocator.h"
 
 #if _MSC_VER
-#include <windows.h>
+#include "tbb/machine/windows_api.h"
 #endif /* _MSC_VER */
 
 int TestMain () {
 #if _MSC_VER && !__TBBMALLOC_NO_IMPLICIT_LINKAGE
     #ifdef _DEBUG
         ASSERT(!GetModuleHandle("tbbmalloc.dll") && GetModuleHandle("tbbmalloc_debug.dll"),
-            "debug application links with non-debug tbbmalloc library");
+            "test linked with wrong (non-debug) tbbmalloc library");
     #else
         ASSERT(!GetModuleHandle("tbbmalloc_debug.dll") && GetModuleHandle("tbbmalloc.dll"),
-            "non-debug application links with debug tbbmalloc library");
+            "test linked with wrong (debug) tbbmalloc library");
     #endif
 #endif /* _MSC_VER && !__TBBMALLOC_NO_IMPLICIT_LINKAGE */
     int result = TestMain<tbb::scalable_allocator<void> >();
diff --git a/src/test/test_ScalableAllocator_STL.cpp b/src/test/test_ScalableAllocator_STL.cpp
index 34c6d3c..3d89a3e 100644
--- a/src/test/test_ScalableAllocator_STL.cpp
+++ b/src/test/test_ScalableAllocator_STL.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_aligned_space.cpp b/src/test/test_aligned_space.cpp
index 95d6c8e..99d346d 100644
--- a/src/test/test_aligned_space.cpp
+++ b/src/test/test_aligned_space.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 d8a10e2..7d04163 100644
--- a/src/test/test_allocator.h
+++ b/src/test/test_allocator.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_allocator_STL.h b/src/test/test_allocator_STL.h
index 54820c0..b146298 100644
--- a/src/test/test_allocator_STL.h
+++ b/src/test/test_allocator_STL.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_assembly.cpp b/src/test/test_assembly.cpp
index 0496a13..43a88f7 100644
--- a/src/test/test_assembly.cpp
+++ b/src/test/test_assembly.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -43,7 +43,7 @@ static void TestCompareExchange() {
         for( intptr_t b=-10; b<10; ++b )
             for( intptr_t c=-10; c<10; ++c ) {
 // Workaround for a bug in GCC 4.3.0; and one more is below.
-#if __GNUC__==4&&__GNUC_MINOR__==3&&__GNUC_PATCHLEVEL__==0
+#if __TBB_GCC_OPTIMIZER_ORDERING_BROKEN
                 intptr_t x;
                 __TBB_store_with_release( x, a );
 #else
@@ -89,21 +89,24 @@ static void TestAtomicCounter() {
 
 static void TestTinyLock() {
     REMARK("testing __TBB_LockByte\n");
-    unsigned char flags[16];
-    for( int i=0; i<16; ++i )
-        flags[i] = (unsigned char)i;
-#if __GNUC__==4&&__GNUC_MINOR__==3&&__GNUC_PATCHLEVEL__==0
+    __TBB_Byte flags[16];
+    for( unsigned int i=0; i<16; ++i )
+        flags[i] = (__TBB_Byte)i;
+#if __TBB_GCC_OPTIMIZER_ORDERING_BROKEN
     __TBB_store_with_release( flags[8], 0 );
 #else
     flags[8] = 0;
 #endif
     __TBB_LockByte(flags[8]);
-    for( int i=0; i<16; ++i )
+    for( unsigned int i=0; i<16; ++i )
 	#ifdef __sparc
         ASSERT( flags[i]==(i==8?0xff:i), NULL );
 	#else
         ASSERT( flags[i]==(i==8?1:i), NULL );
 	#endif
+    __TBB_UnlockByte(flags[8], 0);
+    for( unsigned int i=0; i<16; ++i )
+        ASSERT( flags[i] == (i==8?0:i), NULL );
 }
 
 static void TestLog2() {
@@ -125,7 +128,6 @@ static void TestPause() {
     __TBB_Pause(1);
 }
 
-
 int TestMain () {
     __TBB_TRY {
         TestLog2();
diff --git a/src/test/test_atomic.cpp b/src/test/test_atomic.cpp
index 2b6322e..a2258c1 100644
--- a/src/test/test_atomic.cpp
+++ b/src/test/test_atomic.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -26,6 +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.h"
+int TestMain() {
+    return Harness::Skipped;
+}
+
+#else
+
 // Put tbb/atomic.h first, so if it is missing a prerequisite header, we find out about it.
 // The tests here do *not* test for atomicity, just serial correctness. */
 
@@ -42,20 +51,31 @@
 //! Structure that holds an atomic<T> and some guard bytes around it.
 template<typename T>
 struct TestStruct {
+    typedef unsigned char byte_type;
     T prefix;
     tbb::atomic<T> counter;
     T suffix;
-    TestStruct( T i ) : prefix(T(0x1234)), suffix(T(0x5678)) {
-        counter = i;
+    TestStruct( T i ) {
         ASSERT( sizeof(*this)==3*sizeof(T), NULL );
+        for (size_t j = 0; j < sizeof(T); ++j) {
+            reinterpret_cast<byte_type*>(&prefix)[j]             = byte_type(0x11*(j+1));
+            reinterpret_cast<byte_type*>(&suffix)[sizeof(T)-j-1] = byte_type(0x11*(j+1));
+        }
+        counter = i;
     }
     ~TestStruct() {
         // Check for writes outside the counter.
-        ASSERT( prefix==T(0x1234), NULL );
-        ASSERT( suffix==T(0x5678), NULL );
+        for (size_t j = 0; j < sizeof(T); ++j) {
+            ASSERT( reinterpret_cast<byte_type*>(&prefix)[j]             == byte_type(0x11*(j+1)), NULL );
+            ASSERT( reinterpret_cast<byte_type*>(&suffix)[sizeof(T)-j-1] == byte_type(0x11*(j+1)), NULL );
+        }
     }
+    static tbb::atomic<T> gCounter;
 };
 
+// A global variable of type tbb::atomic<>
+template<typename T> tbb::atomic<T> TestStruct<T>::gCounter;
+
 #if _MSC_VER && !defined(__INTEL_COMPILER)
     #pragma warning( pop )
 #endif
@@ -74,7 +94,7 @@ void TestCompareAndSwapAcquireRelease( T i, T j, T k ) {
     T old = x.counter.template compare_and_swap<M>( j, k );
     ASSERT( old==i, NULL );
     ASSERT( x.counter==i, "old value not retained" );
-    // Test compare and swap that should suceed
+    // Test compare and swap that should succeed
     old = x.counter.template compare_and_swap<M>( j, i );
     ASSERT( old==i, NULL );
     ASSERT( x.counter==j, "value not updated?" );
@@ -89,7 +109,7 @@ void TestCompareAndSwap( T i, T j, T k ) {
     T old = x.counter.compare_and_swap( j, k );
     ASSERT( old==i, NULL );
     ASSERT( x.counter==i, "old value not retained" );
-    // Test compare and swap that should suceed
+    // Test compare and swap that should succeed
     old = x.counter.compare_and_swap( j, i );
     ASSERT( old==i, NULL );
     if( x.counter==i ) {
@@ -97,6 +117,11 @@ void TestCompareAndSwap( T i, T j, T k ) {
     } else {    
         ASSERT( x.counter==j, "value trashed" );
     }
+    // Check that atomic global variables work
+    TestStruct<T>::gCounter = i;
+    old = TestStruct<T>::gCounter.compare_and_swap( j, i );
+    ASSERT( old==i, NULL );
+    ASSERT( TestStruct<T>::gCounter==j, "value not updated?" );
     TestCompareAndSwapAcquireRelease<T,tbb::acquire>(i,j,k);
     TestCompareAndSwapAcquireRelease<T,tbb::release>(i,j,k);
 }
@@ -119,6 +144,11 @@ void TestFetchAndStore( T i, T j ) {
     T old = x.counter.fetch_and_store( j );
     ASSERT( old==i, NULL );
     ASSERT( x.counter==j, NULL );
+    // Check that atomic global variables work
+    TestStruct<T>::gCounter = i;
+    old = TestStruct<T>::gCounter.fetch_and_store( j );
+    ASSERT( old==i, NULL );
+    ASSERT( TestStruct<T>::gCounter==j, "value not updated?" );
     TestFetchAndStoreAcquireRelease<T,tbb::acquire>(i,j);
     TestFetchAndStoreAcquireRelease<T,tbb::release>(i,j);
 }
@@ -199,6 +229,13 @@ void TestFetchAndAdd( T i ) {
     x.counter = i;
     ASSERT( x.counter==i, NULL );
 
+    // Check that atomic global variables work
+    TestStruct<T>::gCounter = i;
+    value = TestStruct<T>::gCounter.fetch_and_add( 42 );
+    expected = i+42;
+    ASSERT( value==i, NULL );
+    ASSERT( TestStruct<T>::gCounter==expected, "value not updated?" );
+
     TestFetchAndAddAcquireRelease<T,tbb::acquire>(i);
     TestFetchAndAddAcquireRelease<T,tbb::release>(i);
 }
@@ -258,7 +295,7 @@ struct AlignmentChecker {
 /** T is an integral type. */
 template<typename T>
 void TestAtomicInteger( const char* name ) {
-    REMARK("testing atomic<%s>\n",name);
+    REMARK("testing atomic<%s> (size=%d)\n",name,sizeof(tbb::atomic<T>));
 #if ( __linux__ && __TBB_x86_32 && __GNUC__==3 && __GNUC_MINOR__==3 ) || defined(__SUNPRO_CC)
     // gcc 3.3 has known problem for 32-bit Linux, so only warn if there is a problem.
     // SUNPRO_CC does have this problem as well
@@ -345,14 +382,12 @@ void TestAtomicEnum() {
     TestParallel<Color>( "Color" );
 }
 
-#if !__TBB_FLOATING_POINT_BROKEN 
 template<typename T>
 void TestAtomicFloat( const char* name ) {
     REMARK("testing atomic<%s>\n", name );
     TestOperations<T>(0.5,3.25,10.75);
     TestParallel<T>( name );
 }
-#endif /* !__TBB_FLOATING_POINT_BROKEN */
 
 const int numMaskedOperations = 100000;
 const int testSpaceSize = 8;
@@ -468,12 +503,14 @@ class ArrayElement {
 };
 
 int TestMain () {
-#if defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER>=1400
+    #if __TBB_64BIT_ATOMICS
     TestAtomicInteger<unsigned long long>("unsigned long long");
     TestAtomicInteger<long long>("long long");
-#else
-    REPORT("Known issue: atomic<64-bits> does not compile with VC 7.1\n");
-#endif /*defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER>=1400 */
+    #else
+    REPORT("64-bit atomics not supported\n");
+    // TODO: advise about possibility to have 64-bit atomics on 64-bit PowerPC hardware even for 32-bit build?
+    ASSERT(sizeof(long long)==8, "type long long is not 64 bits");
+    #endif
     TestAtomicInteger<unsigned long>("unsigned long");
     TestAtomicInteger<long>("long");
     TestAtomicInteger<unsigned int>("unsigned int");
@@ -498,10 +535,12 @@ int TestMain () {
     TestAtomicPointerToTypeOfUnknownSize<void*>( "void*" );
     TestAtomicBool();
     TestAtomicEnum();
-#if !__TBB_FLOATING_POINT_BROKEN 
     TestAtomicFloat<float>("float");
+    #if __TBB_64BIT_ATOMICS
     TestAtomicFloat<double>("double");
-#endif /* !__TBB_FLOATING_POINT_BROKEN  */
+    #else
+    ASSERT(sizeof(double)==8, "type double is not 64 bits");
+    #endif
     ASSERT( !ParallelError, NULL );
     TestMaskedCAS<unsigned char>();
     TestMaskedCAS<unsigned short>();
@@ -681,8 +720,6 @@ public:
     bool contains( bool ) const {return true;}
 };
 
-#if !__TBB_FLOATING_POINT_BROKEN
-
 #if _MSC_VER==1500 && !defined(__INTEL_COMPILER)
     // VS2008/VC9 seems to have an issue; limits pull in math.h
     #pragma warning( push )
@@ -729,8 +766,6 @@ class SparseValueSet<float>: public SparseFloatSet<float> {};
 template<> 
 class SparseValueSet<double>: public SparseFloatSet<double> {};
 
-#endif /* !__TBB_FLOATING_POINT_BROKEN */
-
 template<typename T>
 class HammerAssignment: NoAssign {
     tbb::atomic<T>& x;
@@ -813,3 +848,5 @@ void TestParallel( const char* name ) {
     TestLoadAndStoreFences<T>(name);
     TestAssignment<T>(name);
 }
+
+#endif // __TBB_TEST_PIC && !__PIC__
diff --git a/src/test/test_blocked_range.cpp b/src/test/test_blocked_range.cpp
index 2ee2c88..2f555e5 100644
--- a/src/test/test_blocked_range.cpp
+++ b/src/test/test_blocked_range.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 5eb109c..7a523fc 100644
--- a/src/test/test_blocked_range2d.cpp
+++ b/src/test/test_blocked_range2d.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 259cce7..04ab94e 100644
--- a/src/test/test_blocked_range3d.cpp
+++ b/src/test/test_blocked_range3d.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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
new file mode 100644
index 0000000..7556b61
--- /dev/null
+++ b/src/test/test_broadcast_node.cpp
@@ -0,0 +1,171 @@
+/*
+    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.
+*/
+
+#include "harness.h"
+#define TBB_PREVIEW_GRAPH 1
+#include "tbb/graph.h"
+
+#include "tbb/atomic.h"
+
+const int N = 1000;
+const int R = 4;
+
+class int_convertable_type : private NoAssign {
+
+   int my_value;
+
+public:
+
+   int_convertable_type( int v ) : my_value(v) {}
+   operator int() { return my_value; }
+
+};
+
+
+template< typename T >
+class counting_array_receiver : public tbb::receiver<T> {
+
+    tbb::atomic<size_t> my_counters[N];
+
+public:
+
+    counting_array_receiver() {
+        for (int i = 0; i < N; ++i )
+           my_counters[i] = 0;
+    }
+
+    size_t operator[]( int i ) {
+        size_t v = my_counters[i];
+        return v;
+    }
+
+    /* override */ bool try_put( T v ) {
+        ++my_counters[(int)v];
+        return true;
+    }
+
+};
+
+template< typename T >
+void test_serial_broadcasts() {
+
+    tbb::broadcast_node<T> b;
+    
+    for ( int num_receivers = 1; num_receivers < R; ++num_receivers ) {
+        counting_array_receiver<T> *receivers = new counting_array_receiver<T>[num_receivers];
+
+        for ( int r = 0; r < num_receivers; ++r ) {
+            ASSERT( b.register_successor( receivers[r] ), NULL );
+        } 
+
+        for (int n = 0; n < N; ++n ) {
+            ASSERT( b.try_put( (T)n ), NULL );
+        }
+
+        for ( int r = 0; r < num_receivers; ++r ) {
+            for (int n = 0; n < N; ++n ) {
+                ASSERT( receivers[r][n] == 1, NULL );
+            }
+            ASSERT( b.remove_successor( receivers[r] ), NULL );
+        } 
+        ASSERT( b.try_put( (T)0 ), NULL );
+        for ( int r = 0; r < num_receivers; ++r ) 
+            ASSERT( receivers[0][0] == 1, NULL ) ;
+
+        delete [] receivers;
+
+    }
+
+}
+
+template< typename T >
+class native_body : private NoAssign {
+ 
+   tbb::broadcast_node<T> &my_b;
+
+public:
+
+    native_body( tbb::broadcast_node<T> &b ) : my_b(b) {} 
+
+    void operator()(int) const {
+        for (int n = 0; n < N; ++n ) {
+            ASSERT( my_b.try_put( (T)n ), NULL );
+        }
+    }
+ 
+};
+
+template< typename T >
+void test_parallel_broadcasts(int p) {
+
+    tbb::broadcast_node<T> b;
+    
+    for ( int num_receivers = 1; num_receivers < R; ++num_receivers ) {
+        counting_array_receiver<T> *receivers = new counting_array_receiver<T>[num_receivers];
+
+        for ( int r = 0; r < num_receivers; ++r ) {
+            ASSERT( b.register_successor( receivers[r] ), NULL );
+        } 
+
+        NativeParallelFor( p, native_body<T>( b ) );
+
+        for ( int r = 0; r < num_receivers; ++r ) {
+            for (int n = 0; n < N; ++n ) {
+                ASSERT( (int)receivers[r][n] == p, NULL );
+            }
+            ASSERT( b.remove_successor( receivers[r] ), NULL );
+        } 
+        ASSERT( b.try_put( (T)0 ), NULL );
+        for ( int r = 0; r < num_receivers; ++r ) 
+            ASSERT( (int)receivers[0][0] == p, NULL ) ;
+
+        delete [] receivers;
+
+    }
+
+}
+
+int TestMain() { 
+    if( MinThread<1 ) {
+        REPORT("number of threads must be positive\n");
+        exit(1);
+    }
+
+   test_serial_broadcasts<int>();
+   test_serial_broadcasts<float>();
+   test_serial_broadcasts<int_convertable_type>();
+
+   for( int p=MinThread; p<=MaxThread; ++p ) {
+       test_parallel_broadcasts<int>(p);
+       test_parallel_broadcasts<float>(p);
+       test_parallel_broadcasts<int_convertable_type>(p);
+   }
+   return Harness::Done;
+
+}
+
diff --git a/src/test/test_buffer_node.cpp b/src/test/test_buffer_node.cpp
new file mode 100644
index 0000000..81a9e2f
--- /dev/null
+++ b/src/test/test_buffer_node.cpp
@@ -0,0 +1,404 @@
+/*
+    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.
+*/
+
+#include "harness.h"
+#define TBB_PREVIEW_GRAPH 1
+#include "tbb/graph.h"
+#include "tbb/task_scheduler_init.h"
+#include "tbb/tick_count.h"
+
+#include <cstdio>
+
+#define N 1000
+#define C 10
+
+template< typename T >
+void spin_try_get( tbb::buffer_node<T> &b, T &value ) {
+    while ( b.try_get(value) != true ) {}
+}
+
+template< typename T >
+void check_item( T* count_value, T &value ) {
+    count_value[value / N] += value % N;
+}
+
+template< typename T >
+struct parallel_puts : NoAssign {
+
+    tbb::buffer_node<T> &my_b;
+
+    parallel_puts( tbb::buffer_node<T> &b ) : my_b(b) {}
+
+    void operator()(int i) const {
+        for (int j = 0; j < N; ++j) {
+            bool msg = my_b.try_put( T(N*i + j) );
+            ASSERT( msg == true, NULL );
+        }
+    }
+};
+
+template< typename T >
+struct touches {
+
+    bool **my_touches;
+    int my_num_threads;
+
+    touches( int num_threads ) : my_num_threads(num_threads) {
+        my_touches = new bool* [my_num_threads]; 
+        for ( int p = 0; p < my_num_threads; ++p) {
+            my_touches[p] = new bool[N]; 
+            for ( int n = 0; n < N; ++n)
+                my_touches[p][n] = false;
+        }
+    }
+
+    ~touches() {
+        for ( int p = 0; p < my_num_threads; ++p) {
+            delete [] my_touches[p];
+        }
+        delete [] my_touches;
+    }
+
+    bool check( T v ) {
+        ASSERT ( my_touches[v/N][v%N] == false, NULL);
+        my_touches[v/N][v%N] = true; 
+        return true;
+    }
+
+    bool validate_touches() {
+        for ( int p = 0; p < my_num_threads; ++p) {
+            for ( int n = 0; n < N; ++n) {
+                ASSERT ( my_touches[p][n] == true, NULL);
+            }
+        }
+        return true;
+    }
+};
+
+template< typename T >
+struct parallel_gets : NoAssign {
+
+    tbb::buffer_node<T> &my_b;
+    touches<T> &my_touches;
+
+    parallel_gets( tbb::buffer_node<T> &b, touches<T> &t) : my_b(b), my_touches(t) {}
+
+    void operator()(int) const {
+        for (int j = 0; j < N; ++j) {
+            T v;
+            spin_try_get( my_b, v );
+            my_touches.check( v );
+        }
+    }
+
+};
+
+template< typename T >
+struct parallel_put_get : NoAssign {
+
+    tbb::buffer_node<T> &my_b;
+    touches<T> &my_touches;
+
+    parallel_put_get( tbb::buffer_node<T> &b, touches<T> &t ) : my_b(b), my_touches(t) {}
+
+    void operator()(int tid) const {
+
+        for ( int i = 0; i < N; i+=C ) {
+            int j_end = ( N < i + C ) ? N : i + C; 
+            // dump about C values into the buffer
+            for ( int j = i; j < j_end; ++j ) {
+                ASSERT( my_b.try_put( T (N*tid + j ) ) == true, NULL );
+            }
+            // receiver about C values from the buffer
+            for ( int j = i; j < j_end; ++j ) {
+                T v;
+                spin_try_get( my_b, v );
+                my_touches.check( v );
+            }
+        }
+    }
+
+};
+
+//
+// Tests
+//
+// Item can be reserved, released, consumed ( single serial receiver )
+//
+template< typename T >
+int test_reservation(int num_threads) {
+    tbb::graph g;
+    T bogus_value(-1);
+
+    // Simple tests
+    tbb::buffer_node<T> b(g);
+
+    b.try_put(T(1));
+    b.try_put(T(2));
+    b.try_put(T(3));
+ 
+    T v, vsum;
+    ASSERT( b.try_reserve(v) == true, NULL );
+    ASSERT( b.try_release() == true, NULL );
+    v = bogus_value;
+    g.wait_for_all();
+    ASSERT( b.try_reserve(v) == true, NULL );
+    ASSERT( b.try_consume() == true, NULL );
+    vsum += v;
+    v = bogus_value;
+    g.wait_for_all();
+ 
+    ASSERT( b.try_get(v) == true, NULL );
+    vsum += v;
+    v = bogus_value;
+    g.wait_for_all();
+    
+    ASSERT( b.try_reserve(v) == true, NULL );
+    ASSERT( b.try_release() == true, NULL );
+    v = bogus_value;
+    g.wait_for_all();
+    ASSERT( b.try_reserve(v) == true, NULL );
+    ASSERT( b.try_consume() == true, NULL );
+    vsum += v;
+    ASSERT( vsum == T(6), NULL);
+    v = bogus_value;
+    g.wait_for_all();
+
+    return 0;
+}
+
+//
+// Tests
+//
+// multilpe parallel senders, items in arbitrary order
+// multilpe parallel senders, multiple parallel receivers, items in arbitrary order and all items received
+//   * overlapped puts / gets
+//   * all puts finished before any getS
+//
+template< typename T >
+int test_parallel(int num_threads) {
+    tbb::graph g;
+    tbb::buffer_node<T> b(g);
+    tbb::buffer_node<T> b2(g);
+    tbb::buffer_node<T> b3(g);
+    T bogus_value(-1);
+    T j = bogus_value;
+
+    NativeParallelFor( num_threads, parallel_puts<T>(b) );
+
+    T *next_value = new T[num_threads];
+    for (int tid = 0; tid < num_threads; ++tid) next_value[tid] = T(0);
+
+    for (int i = 0; i < num_threads * N; ++i ) {
+        spin_try_get( b, j );
+        check_item( next_value, j );
+        j = bogus_value;
+    }
+    for (int tid = 0; tid < num_threads; ++tid)  {
+        ASSERT( next_value[tid] == T((N*(N-1))/2), NULL );
+    }
+
+    j = bogus_value;
+    g.wait_for_all();
+    ASSERT( b.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+
+    NativeParallelFor( num_threads, parallel_puts<T>(b) );
+
+    {
+        touches< T > t( num_threads );
+        NativeParallelFor( num_threads, parallel_gets<T>(b, t) );
+        g.wait_for_all();
+        ASSERT( t.validate_touches(), NULL );
+    }
+    j = bogus_value;
+    ASSERT( b.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+
+    g.wait_for_all();
+    {
+        touches< T > t( num_threads );
+        NativeParallelFor( num_threads, parallel_put_get<T>(b, t) );
+        g.wait_for_all();
+        ASSERT( t.validate_touches(), NULL );
+    }
+    j = bogus_value;
+    ASSERT( b.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+
+    ASSERT( b.register_successor( b2 ) == true, NULL );
+    ASSERT( b2.register_successor( b3 ) == true, NULL );
+
+    NativeParallelFor( num_threads, parallel_puts<T>(b) );
+    {
+        touches< T > t( num_threads );
+        NativeParallelFor( num_threads, parallel_gets<T>(b3, t) );
+        g.wait_for_all();
+        ASSERT( t.validate_touches(), NULL );
+    }
+    j = bogus_value;
+    g.wait_for_all();
+    ASSERT( b.try_get( j ) == false, NULL );
+    g.wait_for_all();
+    ASSERT( b2.try_get( j ) == false, NULL );
+    g.wait_for_all();
+    ASSERT( b3.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+
+    return 0;
+}
+
+//
+// Tests
+//
+// Predecessors cannot be registered
+// Empty buffer rejects item requests 
+// Single serial sender, items in arbitrary order
+// Chained buffers ( 2 & 3 ), single sender, items at last buffer in arbitrary order
+//
+
+template< typename T >
+int test_serial() {
+    tbb::graph g;
+    T bogus_value(-1);
+
+    tbb::buffer_node<T> b(g);
+    tbb::buffer_node<T> b2(g);
+    T j = bogus_value;
+
+    //
+    // Rejects attempts to add / remove predecessor
+    // Rejects request from empty buffer
+    //
+    ASSERT( b.register_predecessor( b2 ) == false, NULL );
+    ASSERT( b.remove_predecessor( b2 ) == false, NULL );
+    ASSERT( b.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+
+    //
+    // Simple puts and gets
+    //
+
+    for (int i = 0; i < N; ++i) {
+        bool msg = b.try_put( T(i) );
+        ASSERT( msg == true, NULL );
+    }
+
+    T vsum = T(0);
+    for (int i = 0; i < N; ++i) {
+        j = bogus_value;
+        spin_try_get( b, j );
+        vsum += j;
+    }
+    ASSERT( vsum == (N*(N-1))/2, NULL);
+    j = bogus_value;
+    g.wait_for_all();
+    ASSERT( b.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+
+    ASSERT( b.register_successor( b2 ) == true, NULL );
+
+    vsum = T(0);
+    for (int i = 0; i < N; ++i) {
+        bool msg = b.try_put( T(i) );
+        ASSERT( msg == true, NULL );
+    }
+
+    for (int i = 0; i < N; ++i) {
+        j = bogus_value;
+        spin_try_get( b2, j );
+        vsum += j;
+    }
+    ASSERT( vsum == (N*(N-1))/2, NULL);
+    j = bogus_value;
+    g.wait_for_all();
+    ASSERT( b.try_get( j ) == false, NULL );
+    g.wait_for_all();
+    ASSERT( b2.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+
+    ASSERT( b.remove_successor( b2 ) == true, NULL );
+    ASSERT( b.try_put( 1 ) == true, NULL );
+    g.wait_for_all();
+    ASSERT( b2.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+    g.wait_for_all();
+    ASSERT( b.try_get( j ) == true, NULL );
+    ASSERT( j == 1, NULL );
+
+    tbb::buffer_node<T> b3(g);
+    ASSERT( b.register_successor( b2 ) == true, NULL );
+    ASSERT( b2.register_successor( b3 ) == true, NULL );
+
+    vsum = T(0);
+    for (int i = 0; i < N; ++i) {
+        bool msg = b.try_put( T(i) );
+        ASSERT( msg == true, NULL );
+    }
+
+    for (int i = 0; i < N; ++i) {
+        j = bogus_value;
+        spin_try_get( b3, j );
+        vsum += j;
+    }
+    ASSERT( vsum == (N*(N-1))/2, NULL);
+    j = bogus_value;
+    g.wait_for_all();
+    ASSERT( b.try_get( j ) == false, NULL );
+    g.wait_for_all();
+    ASSERT( b2.try_get( j ) == false, NULL );
+    g.wait_for_all();
+    ASSERT( b3.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+
+    ASSERT( b.remove_successor( b2 ) == true, NULL );
+    ASSERT( b.try_put( 1 ) == true, NULL );
+    g.wait_for_all();
+    ASSERT( b2.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+    g.wait_for_all();
+    ASSERT( b3.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+    g.wait_for_all();
+    ASSERT( b.try_get( j ) == true, NULL );
+    ASSERT( j == 1, NULL );
+
+    return 0;
+}
+
+int TestMain() { 
+    tbb::tick_count start = tbb::tick_count::now(), stop;
+    for (int p = 1; p < 4; ++p) {
+        tbb::task_scheduler_init init(p);
+        test_serial<int>();
+        test_parallel<int>(p);
+    } 
+    stop = tbb::tick_count::now();
+    REMARK("Buffer_Node Time=%6.6f\n", (stop-start).seconds());
+    return Harness::Done;
+}
diff --git a/src/test/test_cache_aligned_allocator.cpp b/src/test/test_cache_aligned_allocator.cpp
index cd207ca..a50826c 100644
--- a/src/test/test_cache_aligned_allocator.cpp
+++ b/src/test/test_cache_aligned_allocator.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -40,10 +40,51 @@ struct is_zero_filling<tbb::zero_allocator<void> > {
     static const bool value = true;
 };
 
+// Test that NFS_Allocate() throws bad_alloc if cannot allocate memory.
+void Test_NFS_Allocate_Throws() {
+#if TBB_USE_EXCEPTIONS && !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN
+    using namespace tbb::internal;
+
+    bool exception_caught = false;
+    // First, allocate a reasonably big amount of memory, big enough
+    // to not cause warp around in system allocator after adding object header
+    // during address2 allocation.
+    const size_t itemsize = 1024;
+    const size_t nitems   = 1024;
+    void *address1 = NULL;
+    try {
+        address1 = NFS_Allocate( nitems, itemsize, NULL );
+    } catch( ... ) {
+        address1 = NULL;
+    }
+    ASSERT( address1, "NFS_Allocate unable to obtain 32*1024 bytes" );
+
+    void *address2 = NULL;
+    try {
+        // Try allocating more memory than left in the address space; should cause std::bad_alloc
+        address2 = NFS_Allocate( 1, ~size_t(0) - itemsize*nitems + NFS_GetLineSize(), NULL);
+    } catch( std::bad_alloc ) {
+        exception_caught = true;
+    } catch( ... ) {
+        ASSERT( __TBB_EXCEPTION_TYPE_INFO_BROKEN, "Unexpected exception type (std::bad_alloc was expected)" );
+        exception_caught = true;
+    }
+    ASSERT( exception_caught, "NFS_Allocate did not throw bad_alloc" );
+    ASSERT( !address2, "NFS_Allocate returned garbage?" );
+
+    try {
+        NFS_Free( address1 );
+    } catch( ... ) {
+        ASSERT( false, "NFS_Free did not accept the address obtained with NFS_Allocate" );
+    }
+#endif /* TBB_USE_EXCEPTIONS && !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN */
+}
+
 int TestMain () {
     int result = TestMain<tbb::cache_aligned_allocator<void> >();
     result += TestMain<tbb::tbb_allocator<void> >();
     result += TestMain<tbb::zero_allocator<void> >();
     ASSERT( !result, NULL );
+    Test_NFS_Allocate_Throws();
     return Harness::Done;
 }
diff --git a/src/test/test_cache_aligned_allocator_STL.cpp b/src/test/test_cache_aligned_allocator_STL.cpp
index 7e9d167..2338bc3 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-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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
new file mode 100644
index 0000000..e1bb7a2
--- /dev/null
+++ b/src/test/test_cilk_common.h
@@ -0,0 +1,91 @@
+/*
+    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.
+*/
+
+// This file is a common part of test_cilk_interop and test_cilk_dynamic_load tests
+
+int TBB_Fib( int n );
+
+class FibCilkSubtask: public tbb::task {
+    int n;
+    int& result;
+    /*override*/ task* execute() {
+        if( n<2 ) {
+            result = n;
+        } else {
+            int x, y;
+            x = cilk_spawn TBB_Fib(n-2);
+            y = cilk_spawn TBB_Fib(n-1);
+            cilk_sync;
+            result = x+y;
+        }
+        return NULL;
+    }
+public:
+    FibCilkSubtask( int& result_, int n_ ) : result(result_), n(n_) {}
+};
+
+class FibTask: public tbb::task {
+    int n;
+    int& result;
+    /*override*/ task* execute() {
+        if( !g_sandwich && n<2 ) {
+            result = n;
+        } else {
+            int x,y;
+            tbb::task_scheduler_init init(P_nested);
+            task* self0 = &task::self();
+            set_ref_count( 3 );
+            if ( g_sandwich ) {
+                spawn (*new( allocate_child() ) FibCilkSubtask(x,n-1));
+                spawn (*new( allocate_child() ) FibCilkSubtask(y,n-2));
+            }
+            else {
+                spawn (*new( allocate_child() ) FibTask(x,n-1));
+                spawn (*new( allocate_child() ) FibTask(y,n-2));
+            }
+            wait_for_all(); 
+            task* self1 = &task::self();
+            ASSERT( self0 == self1, "failed to preserve TBB TLS" );
+            result = x+y;
+        }
+        return NULL;
+    }
+public:
+    FibTask( int& result_, int n_ ) : result(result_), n(n_) {}
+};
+
+int TBB_Fib( int n ) {
+    if( n<2 ) {
+        return n;
+    } else {
+        int result;
+        tbb::task_scheduler_init init(P_nested);
+        tbb::task::spawn_root_and_wait(*new( tbb::task::allocate_root()) FibTask(result,n) );
+        return result;
+    }
+}
diff --git a/src/test/test_cilk_dynamic_load.cpp b/src/test/test_cilk_dynamic_load.cpp
new file mode 100644
index 0000000..2b91bac
--- /dev/null
+++ b/src/test/test_cilk_dynamic_load.cpp
@@ -0,0 +1,186 @@
+/*
+    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.
+*/
+
+#include "tbb/tbb_config.h"
+
+// Skip the test if no TBB-Cilk interoperability
+#define __TBB_CILK_INTEROP   (__TBB_SURVIVE_THREAD_SWITCH && __INTEL_COMPILER>=1200)
+// Skip the test until Cilk will have dlopen()/dlclose() start up feature
+#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 <= 20101116)
+
+#if __TBB_CILK_INTEROP && CILK_SYMBOLS_VISIBLE && !CILK_LINKAGE_BROKEN
+
+#if _WIN32 || _WIN64
+#include "tbb/machine/windows_api.h"
+#else
+#include <dlfcn.h>
+#endif /* _WIN32 || _WIN64 */
+
+#include "tbb/task_scheduler_init.h"
+#include "tbb/task.h"
+
+static const int N = 25;
+static const int P_outer = 4;
+static const int P_nested = 2;
+
+#ifdef _USRDLL
+
+#include <cilk/cilk.h>
+#define HARNESS_CUSTOM_MAIN 1
+#include "harness.h"
+#undef HARNESS_CUSTOM_MAIN
+
+#if _WIN32 || _WIN64
+#define CILK_TEST_EXPORT extern "C" __declspec(dllexport)
+#else
+#define CILK_TEST_EXPORT extern "C"
+#endif /* _WIN32 || _WIN64 */
+
+bool g_sandwich = true; // have to be declare before #include "test_cilk_sandwich.h"
+#include "test_cilk_common.h"
+
+CILK_TEST_EXPORT int CilkFib( int n )
+{
+    return TBB_Fib(n);
+}
+
+CILK_TEST_EXPORT void CilkShutdown()
+{
+    __cilkrts_end_cilk();
+}
+
+#else /* _USRDLL undefined */
+
+#include "harness.h"
+
+int SerialFib( int n ) {
+    int a=0, b=1;
+    for( int i=0; i<n; ++i ) {
+        b += a;
+        a = b-a;
+    }
+    return a;
+}
+
+int F = SerialFib(N);
+
+typedef int (*CILK_CALL)(int);
+CILK_CALL CilkFib = 0;
+
+typedef void (*CILK_SHUTDOWN)();
+CILK_SHUTDOWN CilkShutdown = 0;
+
+class FibTask: public tbb::task {
+    int n;
+    int& result;
+    /*override*/ task* execute() {
+        if( n<2 ) {
+            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 */
+
+            int x, y;
+            x = CilkFib(n-2);
+            y = CilkFib(n-1);
+            result = x+y;
+
+            CilkShutdown();
+
+#if _WIN32 || _WIN64
+            FreeLibrary(hLib);
+#else
+            dlclose(hLib);
+#endif
+        }
+        return NULL;
+    }
+public:
+    FibTask( int& result_, int n_ ) : result(result_), n(n_) {}
+};
+
+
+int TBB_Fib( int n ) {
+    if( n<2 ) {
+        return n;
+    } else {
+        int result;
+        tbb::task_scheduler_init init(P_nested);
+        tbb::task::spawn_root_and_wait(*new( tbb::task::allocate_root()) FibTask(result,n) );
+        return result;
+    }
+}
+
+void RunSandwich() { 
+    tbb::task_scheduler_init init(P_outer);
+    int m = TBB_Fib(N);
+    ASSERT( m == F, NULL );
+}
+
+int TestMain () {
+    for ( int i = 0; i < 20; ++i )
+        RunSandwich();
+    return Harness::Done;
+}
+
+#endif /* _USRDLL */
+
+#else /* No Cilk interop */
+
+#include "harness.h"
+
+int TestMain () {
+    return Harness::Skipped;
+}
+
+#endif /* No Cilk interop */
diff --git a/src/test/test_cilk_interop.cpp b/src/test/test_cilk_interop.cpp
new file mode 100644
index 0000000..ba9fb1e
--- /dev/null
+++ b/src/test/test_cilk_interop.cpp
@@ -0,0 +1,160 @@
+/*
+    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.
+*/
+
+#include "tbb/tbb_config.h"
+#include "harness.h"
+
+// Skip the test if no TBB-Cilk interoperability
+#define __TBB_CILK_INTEROP   (__TBB_SURVIVE_THREAD_SWITCH && __INTEL_COMPILER>=1200)
+// The compiler does not add "-lcilkrts" linker option on some linux systems
+#define CILK_LINKAGE_BROKEN  (__linux__ && __GNUC__<4 && __INTEL_COMPILER_BUILD_DATE <= 20101116)
+
+#if __TBB_CILK_INTEROP && !CILK_LINKAGE_BROKEN
+
+static const int N = 14;
+static const int P_outer = 4;
+static const int P_nested = 2;
+
+#include <cilk/cilk.h>
+#define private public
+#include "tbb/task.h"
+#undef private
+#include "tbb/task_scheduler_init.h"
+#include <cstdio>
+#include <cassert>
+
+enum tbb_sched_injection_mode_t {
+    tbbsched_none = 0,
+    tbbsched_explicit_only = 1,
+    tbbsched_auto_only = 2,
+    tbbsched_mixed = 3
+};
+
+tbb_sched_injection_mode_t g_sim = tbbsched_none;
+
+bool g_sandwich = false; // have to be declare before #include "test_cilk_sandwich.h"
+#include "test_cilk_common.h"
+
+// A time delay routine
+void Delay( int n ) {
+    static volatile int Global;
+    for( int k=0; k<10000; ++k )
+        for( int i=0; i<n; ++i )
+            ++Global;
+}
+
+int SerialFib( int n ) {
+    int a=0, b=1;
+    for( int i=0; i<n; ++i ) {
+        b += a;
+        a = b-a;
+    }
+    return a;
+}
+
+int F = SerialFib(N);
+
+int Fib ( int n ) {
+    if( n < 2 ) {
+        if ( g_sim ) {
+            tbb::task_scheduler_init tsi(P_nested);
+        }
+        return n;
+    } else {
+        tbb::task_scheduler_init *tsi = NULL;
+        tbb::task *cur = NULL;
+        if ( g_sim ) {
+            if ( n % 2 == 0 ) {
+                if ( g_sim == tbbsched_auto_only || (g_sim == tbbsched_mixed && n % 4 == 0) ) {
+                    // Trigger TBB scheduler auto-initialization
+                    cur = &tbb::task::self();
+                }
+                else {
+                    ASSERT ( g_sim == tbbsched_explicit_only || (g_sim == tbbsched_mixed && n % 4 != 0), NULL );
+                    // Initialize TBB scheduler explicitly
+                    tsi = new tbb::task_scheduler_init(P_nested);
+                }
+            }
+        }
+        int x, y;
+        x = cilk_spawn Fib(n-2);
+        y = cilk_spawn Fib(n-1);
+        cilk_sync;
+        if ( tsi )
+            delete tsi;
+        return x+y;
+    }
+}
+
+void RunCilkOnly ( tbb_sched_injection_mode_t sim ) {
+    g_sim = sim;
+    int m = Fib(N);
+    ASSERT( m == F, NULL );
+}
+
+struct FibBody : NoAssign, Harness::NoAfterlife {
+    void operator() ( int ) const {
+        int m = Fib(N);
+        ASSERT( m == F, NULL );
+    }
+};
+
+void RunCilkOnlyConcurrently ( tbb_sched_injection_mode_t sim ) {
+    g_sim = sim;
+    NativeParallelFor( P_outer, FibBody() );
+}
+
+void RunSandwich( bool sandwich ) { 
+    g_sandwich = sandwich;
+    tbb::task_scheduler_init init(P_outer);
+    int m = TBB_Fib(N);
+    ASSERT( g_sandwich == sandwich, "Memory corruption detected" );
+    ASSERT( m == F, NULL );
+}
+
+int TestMain () {
+    for ( int i = 0; i < 100; ++i )
+        RunCilkOnlyConcurrently( tbbsched_none );
+    RunCilkOnly( tbbsched_none );
+    RunCilkOnly( tbbsched_explicit_only );
+    RunCilkOnly( tbbsched_auto_only );
+    RunCilkOnly( tbbsched_mixed );
+    RunSandwich( false );
+    for ( int i = 0; i < 10; ++i )
+        RunSandwich( true );
+    __cilkrts_end_cilk();
+    return Harness::Done;
+}
+
+#else /* No Cilk interop */
+
+int TestMain () {
+    return Harness::Skipped;
+}
+
+#endif /* No Cilk interop */
diff --git a/src/test/test_combinable.cpp b/src/test/test_combinable.cpp
index b395f04..b7ff86b 100644
--- a/src/test/test_combinable.cpp
+++ b/src/test/test_combinable.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -30,7 +30,6 @@
 #include "tbb/combinable.h"
 #include "tbb/task_scheduler_init.h"
 #include "tbb/parallel_for.h"
-#include "tbb/parallel_reduce.h"
 #include "tbb/blocked_range.h"
 #include "tbb/tick_count.h"
 #include "tbb/tbb_allocator.h"
diff --git a/src/test/test_compiler.cpp b/src/test/test_compiler.cpp
deleted file mode 100644
index 5a5834c..0000000
--- a/src/test/test_compiler.cpp
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks.
-
-    Threading Building Blocks is free software; you can redistribute it
-    and/or modify it under the terms of the GNU General Public License
-    version 2 as published by the Free Software Foundation.
-
-    Threading Building Blocks is distributed in the hope that it will be
-    useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-    of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with Threading Building Blocks; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    As a special exception, you may use this file as part of a free software
-    library without restriction.  Specifically, if other files instantiate
-    templates or use macros or inline functions from this file, or you compile
-    this file and link it with other files to produce an executable, this
-    file does not by itself cause the resulting executable to be covered by
-    the GNU General Public License.  This exception does not however
-    invalidate any other reasons why the executable file might be covered by
-    the GNU General Public License.
-*/
-
-#define HARNESS_NO_PARSE_COMMAND_LINE 1
-#include "harness.h"
-
-union char2bool {
-    unsigned char c;
-    volatile bool b;
-} u;
-
-// The function proves the compiler uses 0 or 1 to store a bool. It
-// inspects what a compiler does when it loads a bool.  A compiler that
-// uses a value other than 0 or 1 to represent a bool will have to normalize
-// the value to 0 or 1 when the bool is cast to an unsigned char.
-// Compilers that pass this test do not do the normalization, and thus must
-// be assuming that a bool is a 0 or 1.
-void TestBoolRepresentation () {
-    unsigned i = 0;
-    for( ; i<256; ++i ) {
-        u.c = (unsigned char)i;
-        unsigned char x = (unsigned char)u.b;
-        if( x != i ) {
-            REPORT("Test failed at iteration i=%d\n",i);
-            break;
-        }
-    }
-    ASSERT( i == 256, "bool representation differs from {0,1} set" );
-}
-
-// Test if all the necessary symbols are exported for the exceptions thrown by TBB.
-// Missing exports result either in link error or in runtime assertion failure.
-#include "tbb/tbb_exception.h"
-
-template <typename E>
-void TestExceptionClassExports ( const E& exc, tbb::internal::exception_id eid ) {
-    // The assertion here serves to shut up warnings about "eid not used". 
-    ASSERT( eid<tbb::internal::eid_max, NULL );
-#if TBB_USE_EXCEPTIONS
-    for ( int i = 0; i < 2; ++i ) {
-        try {
-            if ( i == 0 )
-                throw exc;
-#if !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN
-            else
-                tbb::internal::throw_exception( eid );
-#endif
-        }
-        catch ( E& e ) {
-            ASSERT ( e.what(), "Missing what() string" );
-        }
-        catch ( ... ) {
-            ASSERT ( __TBB_EXCEPTION_TYPE_INFO_BROKEN, "Unrecognized exception. Likely RTTI related exports are missing" );
-        }
-    }
-#else /* !TBB_USE_EXCEPTIONS */
-    (void)exc;
-#endif /* !TBB_USE_EXCEPTIONS */
-}
-
-void TestExceptionClassesExports () {
-    TestExceptionClassExports( std::bad_alloc(), tbb::internal::eid_bad_alloc );
-    TestExceptionClassExports( tbb::bad_last_alloc(), tbb::internal::eid_bad_last_alloc );
-    TestExceptionClassExports( std::invalid_argument("test"), tbb::internal::eid_nonpositive_step );
-    TestExceptionClassExports( std::out_of_range("test"), tbb::internal::eid_out_of_range );
-    TestExceptionClassExports( std::range_error("test"), tbb::internal::eid_segment_range_error );
-    TestExceptionClassExports( std::range_error("test"), tbb::internal::eid_index_range_error );
-    TestExceptionClassExports( tbb::missing_wait(), tbb::internal::eid_missing_wait );
-    TestExceptionClassExports( tbb::invalid_multiple_scheduling(), tbb::internal::eid_invalid_multiple_scheduling );
-    TestExceptionClassExports( tbb::improper_lock(), tbb::internal::eid_improper_lock );
-}
-
-int TestMain () {
-    TestBoolRepresentation();
-    TestExceptionClassesExports();
-    return Harness::Done;
-}
diff --git a/src/test/test_concurrent_hash_map.cpp b/src/test/test_concurrent_hash_map.cpp
index df99252..26af309 100644
--- a/src/test/test_concurrent_hash_map.cpp
+++ b/src/test/test_concurrent_hash_map.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -42,10 +42,10 @@
 
 static bool bad_hashing = false;
 
-namespace tbb { 
+namespace tbb {
     namespace internal {
         static void hooked_warning( const char* /*format*/, ... ) {
-            ASSERT(bad_hashing, "unexpected bad hashing");
+            ASSERT(bad_hashing, "unexpected runtime_warning: bad hashing");
         }
     } // namespace internal
 } // namespace tbb
@@ -75,7 +75,7 @@ namespace tbb {
         size_t hash( UserDefinedKeyType ) const {return 0;}
         bool equal( UserDefinedKeyType /*x*/, UserDefinedKeyType /*y*/ ) {return true;}
     };
-};
+}
 
 tbb::concurrent_hash_map<UserDefinedKeyType,int> TestInstantiationWithUserDefinedKeyType;
 
@@ -145,7 +145,7 @@ public:
         --MyDataCount;
         my_state = DEAD;
     }
-    static MyData make( int i ) {   
+    static MyData make( int i ) {
         MyData result;
         result.data = i;
         return result;
@@ -197,7 +197,7 @@ public:
     }
     unsigned long hash( const MyKey& k ) const {
         return k.key;
-    }   
+    }
 };
 
 class YourHashCompare {
@@ -207,7 +207,7 @@ public:
     }
     unsigned long hash( const MyKey& ) const {
         return 1;
-    }   
+    }
 };
 
 typedef local_counting_allocator<std::allocator<MyData> > MyAllocator;
@@ -275,7 +275,7 @@ struct Find {
             else
                 (*ca).second.set_value( ~ca->second.value_of() );
         } else {
-            if( UseKey(i) ) 
+            if( UseKey(i) )
                 REPORT("Line %d: key %d missing\n",__LINE__,i);
         }
     }
@@ -324,7 +324,7 @@ struct InsertErase  {
     static void apply( YourTable& table, int i ) {
         if ( i%3 ) {
             int key = i%IE_SIZE;
-            if ( table.insert( std::make_pair(MyKey::make(key), MyData2()) ) ) 
+            if ( table.insert( std::make_pair(MyKey::make(key), MyData2()) ) )
                 ++InsertEraseCount[key];
         } else {
             int key = i%IE_SIZE;
@@ -354,12 +354,38 @@ struct InnerInsert {
     }
 };
 
+#include "harness_barrier.h"
+// Test for the misuse of constness
+struct FakeExclusive : NoAssign {
+    Harness::SpinBarrier& barrier;
+    YourTable& table;
+    FakeExclusive(Harness::SpinBarrier& b, YourTable&t) : barrier(b), table(t) {}
+    void operator()( int i ) const {
+        if(i) {
+            YourTable::const_accessor real_ca;
+            // const accessor on non-const table aquired as reader (shared)
+            ASSERT( table.find(real_ca,MyKey::make(1)), NULL );
+            barrier.wait(); // item can be erased
+            Harness::Sleep(10); // let it enter the erase
+            real_ca->second.value_of(); // check the state while holding accessor
+        } else {
+            YourTable::accessor fake_ca;
+            const YourTable &const_table = table;
+            // non-const accessor on const table aquired as reader (shared)
+            ASSERT( const_table.find(fake_ca,MyKey::make(1)), NULL );
+            barrier.wait(); // readers aquired
+            // can mistakenly remove the item while other readers still refers to it
+            table.erase( fake_ca );
+        }
+    }
+};
+
 template<typename Op, typename MyTable>
 class TableOperation: NoAssign {
     MyTable& my_table;
 public:
     void operator()( const tbb::blocked_range<int>& range ) const {
-        for( int i=range.begin(); i!=range.end(); ++i ) 
+        for( int i=range.begin(); i!=range.end(); ++i )
             Op::apply(my_table,i);
     }
     TableOperation( MyTable& table ) : my_table(table) {}
@@ -419,14 +445,14 @@ template<typename RangeType>
 struct ParallelTraverseBody: NoAssign {
     const size_t n;
     AtomicByte* const array;
-    ParallelTraverseBody( AtomicByte array_[], size_t n_ ) : 
-        n(n_), 
+    ParallelTraverseBody( AtomicByte array_[], size_t n_ ) :
+        n(n_),
         array(array_)
     {}
     void operator()( const RangeType& range ) const {
         for( typename RangeType::iterator i = range.begin(); i!=range.end(); ++i ) {
             int k = i->first.value_of();
-            ASSERT( 0<=k && size_t(k)<n, NULL ); 
+            ASSERT( 0<=k && size_t(k)<n, NULL );
             ++array[k];
         }
     }
@@ -464,13 +490,13 @@ void ParallelTraverseTable( MyTable& table, size_t n, size_t expected_size ) {
 }
 
 void TestInsertFindErase( int nthread ) {
-    int n=250000; 
+    int n=250000;
 
     // compute m = number of unique keys
-    int m = 0;       
+    int m = 0;
     for( int i=0; i<n; ++i )
         m += UseKey(i);
- 
+
     MyAllocator a; a.items_freed = a.frees = 100;
     ASSERT( MyDataCount==0, NULL );
     MyTable table(a);
@@ -506,12 +532,15 @@ void TestInsertFindErase( int nthread ) {
     if(nthread > 1) {
         YourTable ie_table;
         for( int i=0; i<IE_SIZE; ++i )
-            InsertEraseCount[i] = 0;        
+            InsertEraseCount[i] = 0;
         DoConcurrentOperations<InsertErase,YourTable>(ie_table,n/2,"insert_erase",nthread);
         for( int i=0; i<IE_SIZE; ++i )
             ASSERT( InsertEraseCount[i]==ie_table.count(MyKey::make(i)), NULL );
 
         DoConcurrentOperations<InnerInsert,YourTable>(ie_table,2000,"inner insert",nthread);
+        Harness::SpinBarrier barrier(nthread);
+        REMARK("testing erase on fake exclusive accessor\n");
+        NativeParallelFor( nthread, FakeExclusive(barrier, ie_table));
     }
 }
 
@@ -530,7 +559,7 @@ public:
             while( Counter<i ) {
                 if( ++j==1000000 ) {
                     // If Counter<i after a million iterations, then we almost surely have
-                    // more logical threads than physical threads, and should yield in 
+                    // more logical threads than physical threads, and should yield in
                     // order to let suspended logical threads make progress.
                     j = 0;
                     __TBB_Yield();
@@ -541,13 +570,13 @@ public:
             {
                 MyTable::accessor a;
                 MyKey key = MyKey::make(i);
-                if( my_table.insert( a, key ) ) 
+                if( my_table.insert( a, key ) )
                     a->second.set_value( 1 );
-                else 
-                    a->second.set_value( a->second.value_of()+1 );      
+                else
+                    a->second.set_value( a->second.value_of()+1 );
                 k = a->second.value_of();
             }
-            if( k==my_nthread ) 
+            if( k==my_nthread )
                 Counter=i+1;
         }
     }
@@ -647,7 +676,7 @@ static void FillTable( MyTable& x, int n ) {
     for( int i=1; i<=n; ++i ) {
         MyKey key( MyKey::make(-i) ); // hash values must not be specified in direct order
         typename MyTable::accessor a;
-        bool b = x.insert(a,key); 
+        bool b = x.insert(a,key);
         ASSERT(b, NULL);
         a->second.set_value( i*i );
     }
@@ -661,8 +690,8 @@ static void CheckTable( const MyTable& x, int n ) {
     for( int i=1; i<=n; ++i ) {
         MyKey key( MyKey::make(-i) );
         typename MyTable::const_accessor a;
-        bool b = x.find(a,key); 
-        ASSERT( b, NULL ); 
+        bool b = x.find(a,key);
+        ASSERT( b, NULL );
         ASSERT( a->second.value_of()==i*i, NULL );
     }
     int count = 0;
@@ -717,7 +746,7 @@ void TestAssignment() {
             ASSERT( (t1 == t2) == (i == j), NULL );
             CheckTable(t2,j);
 
-            MyTable& tref = t2=t1; 
+            MyTable& tref = t2=t1;
             ASSERT( &tref==&t2, NULL );
             ASSERT( t1 == t2, NULL );
             CheckTable(t1,i);
@@ -749,7 +778,7 @@ void TestIteratorsAndRanges() {
     TestIteratorAssignment<MyTable::iterator>( v.begin() );
     // doesn't compile as expected: TestIteratorAssignment<typename V::iterator>( u.begin() );
 
-    // check for non-existing 
+    // check for non-existing
     ASSERT(v.equal_range(MyKey::make(-1)) == std::make_pair(v.end(), v.end()), NULL);
     ASSERT(u.equal_range(MyKey::make(-1)) == std::make_pair(u.end(), u.end()), NULL);
 
@@ -892,6 +921,7 @@ int TestMain () {
         REPORT("ERROR: must use at least one thread\n");
         exit(1);
     }
+    if( MaxThread<2 ) MaxThread=2;
 
     // Do serial tests
     TestTypes();
diff --git a/src/test/test_concurrent_monitor.cpp b/src/test/test_concurrent_monitor.cpp
index 71246d8..0390adc 100644
--- a/src/test/test_concurrent_monitor.cpp
+++ b/src/test/test_concurrent_monitor.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -85,7 +85,7 @@ void QueuingMutex::ScopedLock::Acquire( QueuingMutex& m )
     // "sending" the fields initialized above to other processors.
     ScopedLock* pred = m.q_tail.fetch_and_store<tbb::release>(this);
     if( pred ) {
-        __TBB_ASSERT( !pred->next, "the predecessor has another successor!");
+        ASSERT( !pred->next, "the predecessor has another successor!");
         pred->next = this;
         for( int i=0; i<16; ++i ) {
             if( going!=0ul ) break;
@@ -123,8 +123,9 @@ void QueuingMutex::ScopedLock::SleepPerhaps()
     internal::concurrent_monitor& mq = mutex->waitq;
     mq.prepare_wait( thr_ctx, this );
     while( going==0ul ) {
-        if( (slept=mq.commit_wait( thr_ctx ))==true )
+        if( (slept=mq.commit_wait( thr_ctx ))==true && going!=0ul )
             break;
+        slept = false;
         mq.prepare_wait( thr_ctx, this );
     }
     if( !slept )
diff --git a/src/test/test_concurrent_priority_queue.cpp b/src/test/test_concurrent_priority_queue.cpp
new file mode 100644
index 0000000..2d757c7
--- /dev/null
+++ b/src/test/test_concurrent_priority_queue.cpp
@@ -0,0 +1,529 @@
+/*
+    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.
+*/
+
+#ifndef TBB_PREVIEW_CONCURRENT_PRIORITY_QUEUE
+    #define TBB_PREVIEW_CONCURRENT_PRIORITY_QUEUE 1
+#endif
+
+#if __INTEL_COMPILER && _WIN64 && TBB_USE_ASSERT
+// The Intel Compiler has an issue that causes the Microsoft Iterator
+// Debugging code to crash in vector::pop_back when it is called after a
+// vector::push_back throws an exception.
+#define _HAS_ITERATOR_DEBUGGING 0
+#endif
+
+#include "tbb/concurrent_priority_queue.h"
+#include "tbb/atomic.h"
+#include "harness.h"
+#include <functional>
+#include <vector>
+
+#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 <climits>
+#if _MSC_VER==1500 && !__INTEL_COMPILER
+    #pragma warning( pop )
+#endif
+
+using namespace tbb;
+
+const size_t MAX_ITER = 10000;
+const int MAX_PRIO = 100000000;
+
+tbb::atomic<unsigned int> counter;
+
+class my_data_type {
+public:
+    int priority;
+    char padding[tbb::internal::NFS_MaxLineSize - sizeof(int) % tbb::internal::NFS_MaxLineSize];
+    my_data_type() {}
+    my_data_type(int init_val) : priority(init_val) {}
+    const my_data_type operator+(const my_data_type& other) const {
+        return my_data_type(priority+other.priority);
+    }
+    bool operator==(const my_data_type& other) const {
+        return this->priority == other.priority;
+    }
+};
+
+const my_data_type DATA_MIN(INT_MIN);
+const my_data_type DATA_MAX(INT_MAX);
+
+class my_less {
+public:
+    bool operator()(const my_data_type d1, const my_data_type d2) const {
+        return d1.priority<d2.priority;
+    }
+};
+
+class my_throwing_type : public my_data_type {
+public:
+    static int throw_flag;
+    my_throwing_type() : my_data_type() {}
+    my_throwing_type(const my_throwing_type& src) : my_data_type(src) { 
+        if (my_throwing_type::throw_flag) throw 42; 
+        priority = src.priority;
+    }
+};
+
+int my_throwing_type::throw_flag = 0;
+
+typedef concurrent_priority_queue<my_throwing_type, my_less > cpq_ex_test_type;
+
+template<typename T, typename C>
+class FillBody : NoAssign {
+    int nThread;
+    T my_max, my_min;
+    concurrent_priority_queue<T, C> *q;
+    C less_than;
+public:  
+    FillBody(int nThread_, T max_, T min_, concurrent_priority_queue<T, C> *q_) : nThread(nThread_), my_max(max_), my_min(min_), q(q_) {}
+    void operator()(const int threadID) const {
+        T elem = my_min + T(threadID);
+        for (size_t i=0; i<MAX_ITER; ++i) {
+            // do some pushes
+            q->push(elem);
+            if (elem == my_max) elem = my_min;
+            elem = elem + T(nThread);
+        }
+    }
+};
+
+template<typename T, typename C>
+struct EmptyBody : NoAssign {
+    int nThread;
+    T my_max;
+    concurrent_priority_queue<T, C> *q;
+    C less_than;
+public:
+    EmptyBody(int nThread_, T max_, concurrent_priority_queue<T, C> *q_) : nThread(nThread_), my_max(max_), q(q_) {}
+    void operator()(const int /*threadID*/) const {
+        T elem(my_max), last;
+        if (q->try_pop(last)) {
+            ++counter;
+            while(q->try_pop(elem)) {
+                ASSERT(!less_than(last, elem), "FAILED pop/priority test in EmptyBody.");
+                last = elem;
+                elem = my_max;
+                ++counter;
+            }
+        }
+    }
+};
+
+template<typename T, typename C>
+struct ReserveBody : NoAssign {
+    int nThread;
+    concurrent_priority_queue<T, C> *q;
+public:
+    ReserveBody(int nThread_, concurrent_priority_queue<T, C> *q_) : nThread(nThread_), q(q_) {}
+    void operator()(const int threadID) const {
+        T in_elem(threadID), out_elem;
+        q->reserve(q->capacity()+1);
+        for (size_t i=0; i<MAX_ITER; ++i) {
+            q->push(in_elem);
+            if (i%2) in_elem = in_elem + nThread;
+            ASSERT(q->try_pop(out_elem), "FAILED simultaneous enqueue/dequeue test in ReserveBody.");
+        }
+    }
+};
+
+template <typename T, typename C>
+class FloggerBody : NoAssign {
+    int nThread;
+    concurrent_priority_queue<T, C> *q;
+public:
+    FloggerBody(int nThread_, concurrent_priority_queue<T, C> *q_) : 
+        nThread(nThread_), q(q_) {}  
+    void operator()(const int threadID) const {
+        T elem = T(threadID);
+        for (size_t i=0; i<MAX_ITER; ++i) {
+            q->push(elem);
+            (void) q->try_pop(elem);
+        }
+    }
+};
+
+void TestConstructorsDestructorsAccessors() {
+    std::vector<int> v;
+    std::allocator<int> a;
+    concurrent_priority_queue<int, std::less<int> > *q, *qo;
+    concurrent_priority_queue<int, std::less<int>, std::allocator<int>  > *qi;
+
+    // Test constructors/destructors
+    REMARK("Testing default constructor.\n");
+    q = new concurrent_priority_queue<int, std::less<int> >();
+    REMARK("Default constructor complete.\n");
+    ASSERT(q->size()==0, "FAILED size test.");
+    ASSERT(q->capacity()==0, "FAILED capacity test.");
+    ASSERT(q->empty(), "FAILED empty test.");
+    REMARK("Testing destructor.\n");
+    delete q;
+    REMARK("Destruction complete.\n");
+
+    REMARK("Testing capacity constructor.\n");
+    q = new concurrent_priority_queue<int, std::less<int> >(42);
+    REMARK("Capacity constructor complete.\n");
+    ASSERT(q->size()==0, "FAILED size test.");
+    ASSERT(q->capacity()==42, "FAILED capacity test.");
+    ASSERT(q->empty(), "FAILED empty test.");
+    REMARK("Testing destructor.\n");
+    delete q;
+    REMARK("Destruction complete.\n");
+
+    REMARK("Testing allocator constructor.\n");
+    qi = new concurrent_priority_queue<int, std::less<int>, std::allocator<int> >(a);
+    REMARK("Allocator constructor complete.\n");
+    ASSERT(qi->size()==0, "FAILED size test.");
+    ASSERT(qi->capacity()==0, "FAILED allocator test.");
+    ASSERT(qi->empty(), "FAILED empty test.");
+    REMARK("Testing destructor.\n");
+    delete qi;
+    REMARK("Destruction complete.\n");
+
+    REMARK("Testing capacity+allocator constructor.\n");
+    qi = new concurrent_priority_queue<int, std::less<int>, std::allocator<int> >(42, a);
+    REMARK("Capacity+allocator constructor complete.\n");
+    ASSERT(qi->size()==0, "FAILED size test.");
+    ASSERT(qi->capacity()==42, "FAILED capacity+allocator test.");
+    ASSERT(qi->empty(), "FAILED empty test.");
+    REMARK("Testing destructor.\n");
+    delete qi;
+    REMARK("Destruction complete.\n");
+
+    REMARK("Testing iterator filler constructor.\n");
+    for (int i=0; i<42; ++i)
+        v.push_back(i);
+    q = new concurrent_priority_queue<int, std::less<int> >(v.begin(), v.end());
+    REMARK("Iterator filler constructor complete.\n");
+    ASSERT(q->size()==42, "FAILED vector/size test.");
+    ASSERT(q->capacity()==42, "FAILED vector/capacity test.");
+    ASSERT(!q->empty(), "FAILED vector/empty test.");
+
+    REMARK("Testing copy constructor.\n");
+    qo = new concurrent_priority_queue<int, std::less<int> >(*q);
+    REMARK("Copy constructor complete.\n");
+    ASSERT(qo->size()==42, "FAILED vector/size test.");
+    ASSERT(qo->capacity()==42, "FAILED vector/capacity test.");
+    ASSERT(!qo->empty(), "FAILED vector/empty test.");
+    REMARK("Testing destructor.\n");
+    delete q;
+    delete qo;
+    REMARK("Destruction complete.\n");
+}
+
+void TestAssignmentClearShrinkSwap() {
+    std::vector<int> v;
+    concurrent_priority_queue<int, std::less<int> > *q, *qo;
+    int e;
+
+    for (int i=0; i<42; ++i)
+        v.push_back(i);
+    q = new concurrent_priority_queue<int, std::less<int> >(v.begin(), v.end());
+    qo = new concurrent_priority_queue<int, std::less<int> >();
+
+    REMARK("Testing assignment (1).\n");
+    *qo = *q; 
+    REMARK("Assignment complete.\n");
+    ASSERT(qo->size()==42, "FAILED assignment/size test.");
+    ASSERT(qo->capacity()==42, "FAILED assignment/capacity test.");
+    ASSERT(!qo->empty(), "FAILED assignment/empty test.");
+
+    REMARK("Testing clear.\n");
+    q->clear();
+    REMARK("Clear complete.\n");
+    ASSERT(q->size()==0, "FAILED clear/size test.");
+    ASSERT(q->capacity()==42, "FAILED clear/capacity test.");
+    ASSERT(q->empty(), "FAILED clear/empty test.");
+
+    for (size_t i=0; i<5; ++i)
+        (void) qo->try_pop(e);
+
+    REMARK("Testing assignment (2).\n");
+    *q = *qo;
+    REMARK("Assignment complete.\n");
+    ASSERT(q->size()==37, "FAILED assignment/size test.");
+    ASSERT(q->capacity()==37, "FAILED assignment/capacity test.");
+    ASSERT(!q->empty(), "FAILED assignment/empty test.");
+
+    for (size_t i=0; i<5; ++i)
+        (void) qo->try_pop(e);
+
+    REMARK("Testing shrink_to_fit.\n");
+    qo->shrink_to_fit();
+    REMARK("Shrink_to_fit complete.\n");
+    ASSERT(qo->size()==32, "FAILED shrink_to_fit/size test.");
+    ASSERT(qo->capacity()==32, "FAILED shrink_to_fit/capacity test.");
+    ASSERT(!qo->empty(), "FAILED shrink_to_fit/empty test.");
+
+    REMARK("Testing swap.\n");
+    q->swap(*qo);
+    REMARK("Swap complete.\n");
+    ASSERT(q->size()==32, "FAILED swap/size test.");
+    ASSERT(q->capacity()==32, "FAILED swap/capacity test.");
+    ASSERT(!q->empty(), "FAILED swap/empty test.");
+    ASSERT(qo->size()==37, "FAILED swap_operand/size test.");
+    ASSERT(qo->capacity()==37, "FAILED swap_operand/capacity test.");
+    ASSERT(!qo->empty(), "FAILED swap_operand/empty test.");
+    delete q;
+    delete qo;
+}
+
+void TestSerialPushPop() {
+    concurrent_priority_queue<int, std::less<int> > *q;
+    int e=42, prev=INT_MAX;
+    size_t count=0;
+
+    q = new concurrent_priority_queue<int, std::less<int> >(MAX_ITER);
+    REMARK("Testing serial push.\n");
+    for (size_t i=0; i<MAX_ITER; ++i) {
+        q->push(e);
+        e = e*-1 + int(i);
+    }
+    REMARK("Pushing complete.\n");
+    ASSERT(q->size()==MAX_ITER, "FAILED push/size test.");
+    ASSERT(q->capacity()==MAX_ITER, "FAILED push/capacity test.");
+    ASSERT(!q->empty(), "FAILED push/empty test.");
+    
+    REMARK("Testing serial pop.\n");
+    while (!q->empty()) {
+        ASSERT(q->try_pop(e), "FAILED pop test.");
+        ASSERT(prev>=e, "FAILED pop/priority test.");
+        prev = e;
+        ++count;
+        ASSERT(q->size()==MAX_ITER-count, "FAILED swap/size test.");
+        ASSERT(q->capacity()==MAX_ITER, "FAILED swap/capacity test.");
+        ASSERT(!q->empty() || count==MAX_ITER, "FAILED swap/empty test.");
+    }
+    REMARK("Popping complete.\n");
+    delete q;
+}
+
+template <typename T, typename C>
+void TestParallelPushPop(int nThreads, T t_max, T t_min, C /*compare*/) {
+    size_t qsize;
+
+    concurrent_priority_queue<T, C> *q = new concurrent_priority_queue<T, C>(0);
+    FillBody<T, C> filler(nThreads, t_max, t_min, q);
+    EmptyBody<T, C> emptier(nThreads, t_max, q);
+    counter = 0;
+    REMARK("Testing parallel push.\n");
+    NativeParallelFor(nThreads, filler);
+    REMARK("Pushing complete.\n");
+    qsize = q->size();
+    ASSERT(q->size()==nThreads*MAX_ITER, "FAILED push/size test.");
+    ASSERT(q->capacity()>=qsize, "FAILED push/capacity test.");
+    ASSERT(!q->empty(), "FAILED push/empty test.");
+    
+    REMARK("Testing parallel pop.\n");
+    NativeParallelFor(nThreads, emptier);
+    REMARK("Popping complete.\n");
+    ASSERT(counter==qsize, "FAILED pop/size test.");
+    ASSERT(q->size()==0, "FAILED pop/empty test.");
+
+    q->clear();
+    q->shrink_to_fit();
+    delete(q);
+}
+
+void TestPushPopReserve(int nThreads) {
+    concurrent_priority_queue<int, std::less<int> > *q = new concurrent_priority_queue<int, std::less<int> >(0);
+    counter = 0;
+    REMARK("Testing reserve.\n");
+    NativeParallelFor(nThreads, ReserveBody<int, std::less<int> >(nThreads, q));
+    REMARK("Reserve complete.\n");
+    ASSERT(q->size()==0, "FAILED reserve/size test.");
+    ASSERT(q->empty(), "FAILED reserve/empty test.");
+    q->clear();
+    q->shrink_to_fit();
+    delete q;
+}
+
+void TestExceptions() {
+    const size_t TOO_LARGE_SZ = 1000000000;
+    my_throwing_type elem;
+
+    REMARK("Testing basic constructor exceptions.\n");
+    // Allocate empty queue should not throw no matter the type
+    try {
+        my_throwing_type::throw_flag = 1;
+        cpq_ex_test_type q;
+    } catch(...) {
+        REMARK("FAILED: allocating empty queue should not throw exception.\n");
+    }
+    // Allocate small queue should not throw for reasonably sized type
+    try {
+        my_throwing_type::throw_flag = 1;
+        cpq_ex_test_type q(42);
+    } catch(...) {
+        REMARK("FAILED: allocating small queue should not throw exception.\n");
+    }
+    // Allocate a queue with too large initial size
+    try {
+        my_throwing_type::throw_flag = 0;
+        cpq_ex_test_type q(TOO_LARGE_SZ);
+        REMARK("FAILED: Huge queue did not throw exception.\n");
+    } catch(...) {}
+
+    cpq_ex_test_type *pq;
+    try {
+        my_throwing_type::throw_flag = 0;
+        pq = NULL;
+        pq = new cpq_ex_test_type(TOO_LARGE_SZ);
+        REMARK("FAILED: Huge queue did not throw exception.\n");
+        delete pq;
+    } catch(...) {
+        ASSERT(!pq, "FAILED: pq should not be touched when constructor throws.\n");
+    }
+    REMARK("Basic constructor exceptions testing complete.\n");
+    REMARK("Testing copy constructor exceptions.\n");
+    my_throwing_type::throw_flag = 0;
+    cpq_ex_test_type src_q(42);
+    elem.priority = 42;
+    for (size_t i=0; i<42; ++i) src_q.push(elem);
+    try {
+        my_throwing_type::throw_flag = 1;
+        cpq_ex_test_type q(src_q);
+        REMARK("FAILED: Copy construct did not throw exception.\n");
+    } catch(...) {}
+    try {
+        my_throwing_type::throw_flag = 1;
+        pq = NULL;
+        pq = new concurrent_priority_queue<my_throwing_type, my_less >(src_q);
+        REMARK("FAILED: Copy construct did not throw exception.\n");
+        delete pq;
+    } catch(...) {
+        ASSERT(!pq, "FAILED: pq should not be touched when constructor throws.\n");
+    }
+    REMARK("Copy constructor exceptions testing complete.\n");
+    REMARK("Testing assignment exceptions.\n");
+    // Assignment is copy-swap, so it should be exception safe
+    my_throwing_type::throw_flag = 0;
+    cpq_ex_test_type assign_q(24);
+    try {
+        my_throwing_type::throw_flag = 1;
+        assign_q = src_q;
+        REMARK("FAILED: Assign did not throw exception.\n");
+    } catch(...) {
+        ASSERT(assign_q.empty(), "FAILED: assign_q should be empty.\n");
+        ASSERT(assign_q.capacity()==24, "FAILED: assign_q should have no newly allocated memory.\n");
+    }
+    REMARK("Assignment exceptions testing complete.\n");
+    REMARK("Testing reserve exceptions.\n");
+    try {
+        my_throwing_type::throw_flag = 1;
+        src_q.reserve(50);
+        REMARK("FAILED: Reserve did not throw exception.\n");
+    } catch(...) {
+        ASSERT(!src_q.empty(), "FAILED: src_q should not be empty.\n");
+        ASSERT(src_q.capacity()==42, "FAILED: src_q should be have no new allocated memory.\n");
+        ASSERT(src_q.size()==42, "FAILED: src_q should have same size.\n");
+        ASSERT(src_q.try_pop(elem), "FAILED: src_q is not functional.\n");
+    }
+    REMARK("Reserve exceptions testing complete.\n");
+    REMARK("Testing push exceptions.\n");
+    my_throwing_type::throw_flag = 0;
+    pq = new cpq_ex_test_type(3);
+    try {
+        pq->push(elem);
+        pq->push(elem);
+        pq->push(elem);
+    } catch(...) {
+        REMARK("FAILED: Push should not throw exception... yet.\n");
+    }
+    try { // should crash on reserve copy 
+        my_throwing_type::throw_flag = 1;
+        pq->push(elem);
+        REMARK("FAILED: Push did not throw exception.\n");
+    } catch(...) {
+        ASSERT(!pq->empty(), "FAILED: pq should not be empty.\n");
+        ASSERT(pq->capacity()==3, "FAILED: pq should be have no new allocated memory.\n");
+        ASSERT(pq->size()==3, "FAILED: pq should be only three elements.\n");
+        ASSERT(pq->try_pop(elem), "FAILED: pq is not functional.\n");
+    }
+    try { // should crash on push copy of element, reserve not needed
+        my_throwing_type::throw_flag = 1;
+        pq->push(elem);
+        REMARK("FAILED: Push did not throw exception.\n");
+    } catch(...) {
+        ASSERT(!pq->empty(), "FAILED: pq should not be empty.\n");
+        ASSERT(pq->capacity()==3, "FAILED: pq should be have no new allocated memory.\n");
+        ASSERT(pq->size()==2, "FAILED: pq should be only two elements.\n");
+        ASSERT(pq->try_pop(elem), "FAILED: pq is not functional.\n");
+    }
+    delete pq;
+    REMARK("Push exceptions testing complete.\n");
+}
+
+template <typename T, typename C>
+void TestFlogger(int nThreads, T /*max*/, C /*compare*/) {
+    REMARK("Testing queue flogger.\n");
+    concurrent_priority_queue<T, C> *q = new concurrent_priority_queue<T, C> (0);
+    NativeParallelFor(nThreads, FloggerBody<T, C >(nThreads, q));
+    ASSERT(q->empty(), "FAILED flogger/empty test.");
+    ASSERT(!q->size(), "FAILED flogger/size test.");
+    REMARK("Flogging complete.\n");
+    delete q;
+}
+
+void TestCpqOnNThreads(int nThreads) {
+    std::less<int> int_compare;
+    my_less data_compare;
+
+    TestConstructorsDestructorsAccessors();
+    TestAssignmentClearShrinkSwap();
+    TestSerialPushPop(); 
+
+    TestParallelPushPop(nThreads, INT_MAX, INT_MIN, int_compare);
+    TestParallelPushPop(nThreads, (unsigned char)CHAR_MAX, (unsigned char)CHAR_MIN, int_compare);
+    TestParallelPushPop(nThreads, DATA_MAX, DATA_MIN, data_compare);
+
+    TestFlogger(nThreads, INT_MAX, int_compare);
+    TestFlogger(nThreads, (unsigned char)CHAR_MAX, int_compare);
+    TestFlogger(nThreads, DATA_MAX, data_compare);
+
+    TestPushPopReserve(nThreads);
+#if TBB_USE_EXCEPTIONS && !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN
+    TestExceptions();
+#else
+    REPORT("Known issue: exception handling tests are skipped.\n");
+#endif
+}
+
+int TestMain() {
+    if (MinThread < 1)
+        MinThread = 1;
+    for (int p = MinThread; p <= MaxThread; ++p) {
+        REMARK("Testing on %d threads.\n", p);
+        TestCpqOnNThreads(p);
+    }
+    return Harness::Done;
+}
diff --git a/src/test/test_concurrent_queue.cpp b/src/test/test_concurrent_queue.cpp
index fad9485..1e7f8db 100644
--- a/src/test/test_concurrent_queue.cpp
+++ b/src/test/test_concurrent_queue.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -213,12 +213,8 @@ void TestPushPop( size_t prefill, ptrdiff_t capacity, int nthread ) {
         tbb::tick_count t0 = tbb::tick_count::now();
         NativeParallelFor( nthread, body );
         tbb::tick_count t1 = tbb::tick_count::now();
-#if !__TBB_FLOATING_POINT_BROKEN
         double timing = (t1-t0).seconds();
         REMARK("prefill=%d capacity=%d threads=%d time = %g = %g nsec/operation\n", int(prefill), int(capacity), nthread, timing, timing/(2*M*nthread)*1.E9);
-#else
-        REMARK("prefill=%d capacity=%d threads=%d time=%g\n", int(prefill), int(capacity), (t1-t0).seconds(), nthread);
-#endif /* !__TBB_FLOATING_POINT_BROKEN */
         int sum = 0;
         for( int k=0; k<nthread; ++k )
             sum += Sum[k];
@@ -877,13 +873,13 @@ struct TestQueueElements: NoAssign {
     void operator()( int k ) const {
         for( int i=0; i<1000; ++i ) {
             if( (i&0x1)==0 ) {
-                __TBB_ASSERT( T(k)<T(nthread), NULL );
+                ASSERT( T(k)<T(nthread), NULL );
                 queue.push( T(k) );
             } else {
                 // Pop item from queue
                 T item;
                 queue.try_pop(item);
-                __TBB_ASSERT( item<=T(nthread), NULL );
+                ASSERT( item<=T(nthread), NULL );
             }
         }
     }
diff --git a/src/test/test_concurrent_unordered.cpp b/src/test/test_concurrent_unordered.cpp
index ff1bc1d..b9e857f 100644
--- a/src/test/test_concurrent_unordered.cpp
+++ b/src/test/test_concurrent_unordered.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -105,7 +105,7 @@ struct SpecialTests <Mycumap>
 {
     static void Test()
     {
-        Mycumap cont;
+        Mycumap cont(0);
         const Mycumap &ccont(cont);
 
         // mapped_type& operator[](const key_type& k);
@@ -421,6 +421,16 @@ public:
 };
 
 template<typename T>
+class AssignBody: NoAssign {
+    T &table;
+public:
+    AssignBody(T &t) : NoAssign(), table(t) {}
+    void operator()(int i) const {
+        table[i] = i;
+    }
+};
+
+template<typename T>
 void test_concurrent(const char *tablename) {
 #if TBB_USE_ASSERT
     int items = 2000;
@@ -429,7 +439,11 @@ void test_concurrent(const char *tablename) {
 #endif
     T table(items/1000);
     tbb::tick_count t0 = tbb::tick_count::now();
+    #if __bgp__
+    NativeParallelFor(  6/*min 6*/, FillTable<T>(table, items) );
+    #else
     NativeParallelFor( 16/*min 6*/, FillTable<T>(table, items) );
+    #endif
     tbb::tick_count t1 = tbb::tick_count::now();
     REMARK( "time for filling '%s' by %d items = %g\n", tablename, items, (t1-t0).seconds() );
     ASSERT( int(table.size()) == items, NULL);
@@ -454,6 +468,11 @@ void test_concurrent(const char *tablename) {
   
     table.clear();
     CheckAllocatorA(table, items+1, items); // one dummy is always allocated
+
+    for(int i=0; i<10000; ++i) {
+        tbb::parallel_for( 0, 8, AssignBody<T>( table ) );
+        table.clear();
+    }
 }
 
 int TestMain () {
diff --git a/src/test/test_concurrent_vector.cpp b/src/test/test_concurrent_vector.cpp
index 97aca28..e33190d 100644
--- a/src/test/test_concurrent_vector.cpp
+++ b/src/test/test_concurrent_vector.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -1002,9 +1002,7 @@ int TestMain () {
     ASSERT( !FooCount, NULL );
 #if !TBB_DEPRECATED
     TestComparison();
-#if !__TBB_FLOATING_POINT_BROKEN
     TestFindPrimes();
-#endif
     TestSort();
 #if __TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN
     REPORT("Known issue: exception safety test is skipped.\n");
diff --git a/src/test/test_condition_variable.h b/src/test/test_condition_variable.h
index 5422557..c685f3f 100644
--- a/src/test/test_condition_variable.h
+++ b/src/test/test_condition_variable.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_continue_node.cpp b/src/test/test_continue_node.cpp
new file mode 100644
index 0000000..86f757b
--- /dev/null
+++ b/src/test/test_continue_node.cpp
@@ -0,0 +1,133 @@
+/*
+    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.
+*/
+
+#include "harness.h"
+#define TBB_PREVIEW_GRAPH 1
+#include "tbb/graph.h"
+
+#define N 100
+#define T 10
+
+struct counting_receiver : public tbb::receiver<tbb::continue_msg> {
+
+    typedef tbb::continue_msg input_type;
+    typedef tbb::sender<tbb::continue_msg> predecessor_type;
+
+    tbb::atomic< int > my_count;
+
+    counting_receiver() { my_count = 0; }    
+
+    bool try_put( input_type ) { 
+        ++my_count; 
+        return true;  
+    }
+
+};
+
+#if !__TBB_LAMBDAS_PRESENT
+class native_body : tbb::internal::no_assign {
+    tbb::continue_node &my_node;
+
+public:
+
+     native_body( tbb::continue_node &n ) : my_node(n) {}
+     void operator()( int ) const { 
+         my_node.try_put( tbb::continue_msg() ); 
+     } 
+};
+#endif
+
+// Tests
+//  
+// Test that the node fires after receiving N messages from multiple senders
+// Test that the node resets and can be reused
+// Test that a successor added after triggering is NOT immediately signalled
+// 
+int test_parallel_puts() {
+    tbb::graph g;
+    tbb::continue_node n(g);
+    counting_receiver r;
+    counting_receiver r2;
+
+    n.register_successor(r);
+
+    for (int i = 0; i < N; ++i) 
+        n.register_predecessor( n ); // this is a trick since the predecessor doesn't matter
+
+    for (int t = 0; t < T; ++t)
+#if __TBB_LAMBDAS_PRESENT
+        NativeParallelFor( N, [&](int) { n.try_put( tbb::continue_msg() ); } );
+#else
+        NativeParallelFor( N, native_body(n) );
+#endif
+
+    g.wait_for_all();
+    ASSERT( r.my_count == T, NULL ); 
+
+
+    n.register_successor(r2);
+    ASSERT( r2.my_count == 0, NULL );
+    return 0; 
+}
+
+//
+// Tests
+//  
+// Test that the node fires after receiving N messages from a single sender
+// Test that the node resets and can be reused
+// Test that a successor added after triggering is NOT immediately signalled
+// 
+int test_serial_puts() {
+    tbb::graph g;
+    tbb::continue_node n(g);
+    counting_receiver r;
+    counting_receiver r2;
+
+    n.register_successor(r);
+
+    for (int i = 0; i < N; ++i) 
+        n.register_predecessor( n ); // this is a trick since the predecessor doesn't matter
+
+    for (int t = 0; t < T; ++t)
+        for (int i = 0; i < N; ++i)
+            n.try_put( tbb::continue_msg() );
+
+    g.wait_for_all();
+    ASSERT( r.my_count == T, NULL ); 
+
+    n.register_successor(r2);
+    ASSERT( r2.my_count == 0, NULL );
+    return 0; 
+}
+
+int TestMain() { 
+   test_serial_puts();
+   test_parallel_puts();
+   return Harness::Done;
+}
+
diff --git a/src/test/test_critical_section.cpp b/src/test/test_critical_section.cpp
index 7ca00b8..fe77718 100644
--- a/src/test/test_critical_section.cpp
+++ b/src/test/test_critical_section.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 833a281..cd204dc 100644
--- a/src/test/test_eh_algorithms.cpp
+++ b/src/test/test_eh_algorithms.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -26,6 +26,10 @@
     the GNU General Public License.
 */
 
+#include "harness.h"
+
+#if __TBB_TASK_GROUP_CONTEXT
+
 #include <limits.h> // for INT_MAX
 #include "tbb/task_scheduler_init.h"
 #include "tbb/tbb_exception.h"
@@ -39,8 +43,6 @@
 #include "tbb/blocked_range.h"
 #include "harness_assert.h"
 
-#if __TBB_TASK_GROUP_CONTEXT
-
 #define FLAT_RANGE  100000
 #define FLAT_GRAIN  100
 #define NESTING_RANGE  100
@@ -1195,7 +1197,6 @@ void RunPipelineTests() {
     TestCancelation2_pipeline();
 }
 
-#endif /* __TBB_TASK_GROUP_CONTEXT */
 
 #if TBB_USE_EXCEPTIONS
 
@@ -1255,7 +1256,6 @@ int TestMain () {
     MinThread = min(tbb::task_scheduler_init::default_num_threads(), max(2, MinThread));
     MaxThread = max(MinThread, min(tbb::task_scheduler_init::default_num_threads(), MaxThread));
     ASSERT (FLAT_RANGE >= FLAT_GRAIN * MaxThread, "Fix defines");
-#if __TBB_TASK_GROUP_CONTEXT
     int step = max((MaxThread - MinThread + 1)/2, 1);
     for ( g_NumThreads = MinThread; g_NumThreads <= MaxThread; g_NumThreads += step ) {
         REMARK ("Number of threads %d\n", g_NumThreads);
@@ -1275,7 +1275,12 @@ int TestMain () {
     REPORT("Known issue: exception handling tests are skipped.\n");
 #endif
     return Harness::Done;
-#else  /* !__TBB_TASK_GROUP_CONTEXT */
+}
+
+#else /* !__TBB_TASK_GROUP_CONTEXT */
+
+int TestMain () {
     return Harness::Skipped;
-#endif /* !__TBB_TASK_GROUP_CONTEXT */
 }
+
+#endif /* !__TBB_TASK_GROUP_CONTEXT */
diff --git a/src/test/test_eh_tasks.cpp b/src/test/test_eh_tasks.cpp
index 44ed1f3..abd0d5d 100644
--- a/src/test/test_eh_tasks.cpp
+++ b/src/test/test_eh_tasks.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -26,13 +26,16 @@
     the GNU General Public License.
 */
 
-#define  __TBB_COUNT_TASK_NODES 1
-#include "harness_inject_scheduler.h"
+#include "harness.h"
 
 #if __TBB_TASK_GROUP_CONTEXT
 
 #define __TBB_ATOMICS_CODEGEN_BROKEN __SUNPRO_CC
 
+#define private public
+#include "tbb/task.h"
+#undef private
+
 #include "tbb/task_scheduler_init.h"
 #include "tbb/spin_mutex.h"
 #include "tbb/tick_count.h"
@@ -241,7 +244,8 @@ class RootLauncherTask : public TaskBase {
  
     tbb::task* do_execute () {
         tbb::task_group_context  ctx(m_CtxKind);
-        SimpleRootTask &r = *new( allocate_root(ctx) ) SimpleRootTask;
+        SimpleRootTask &r = *new( allocate_root() ) SimpleRootTask;
+        r.change_group(ctx);
         TRY();
             spawn_root_and_wait(r);
             // Give a child of our siblings a chance to throw the test exception
@@ -273,6 +277,24 @@ void Test4 () {
     ASSERT_TEST_POSTCOND();
 } // void Test4 ()
 
+/** The same as Test4, except the contexts are bound. **/
+void Test4_1 () {
+    ResetGlobals();
+    tbb::task_list  tl;
+    for ( size_t i = 0; i < NUM_ROOT_TASKS; ++i )
+        tl.push_back( *new( tbb::task::allocate_root() ) RootLauncherTask(tbb::task_group_context::bound) );
+    TRY();
+        tbb::task::spawn_root_and_wait(tl);
+    CATCH_AND_ASSERT();
+    ASSERT (!exceptionCaught, "exception in this scope is unexpected");
+    intptr_t  num_tasks_expected = NUM_ROOT_TASKS * (NUM_CHILD_TASKS + 2);
+    ASSERT (g_CurStat.Existed() == num_tasks_expected, "Wrong total number of tasks");
+    if ( g_SolitaryException )
+        ASSERT (g_CurStat.Executed() >= num_tasks_expected - NUM_CHILD_TASKS, "Unexpected number of executed tasks");
+    ASSERT_TEST_POSTCOND();
+} // void Test4_1 ()
+
+
 class RootsGroupLauncherTask : public TaskBase {
     tbb::task* do_execute () {
         tbb::task_group_context  ctx (tbb::task_group_context::isolated);
@@ -532,7 +554,9 @@ void CheckException () {
     a movable exception in a worker or master thread (depending on the global settings).
     The test also checks the correctness of multiple rethrowing of the pending exception. **/
 void TestMovableException () {
+    REMARK( "TestMovableException\n" );
     ResetGlobals();
+    bool bUnsupported = false;
     tbb::task_group_context ctx;
     tbb::empty_task *r = new( tbb::task::allocate_root() ) tbb::empty_task;
     ASSERT (!g_CurStat.Existing() && !g_CurStat.Existed() && !g_CurStat.Executed(), 
@@ -555,8 +579,13 @@ void TestMovableException () {
             g_ExceptionCaught = true;
             g_UnknownException = unknownException = true;
         }
-        ctx.register_pending_exception();
-        ASSERT (ctx.is_group_execution_cancelled(), "After exception registration the context must be in the cancelled state");
+        try {
+            ctx.register_pending_exception();
+        } catch ( ... ) {
+            bUnsupported = true;
+            REPORT( "Warning: register_pending_exception() failed. This is expected in case of linking with static msvcrt\n" );
+        }
+        ASSERT (ctx.is_group_execution_cancelled() || bUnsupported, "After exception registration the context must be in the cancelled state");
     }
     r->destroy(*r);
     ASSERT_EXCEPTION();
@@ -575,8 +604,8 @@ void TestMovableException () {
         g_ExceptionCaught = true;
         g_UnknownException = true;
     }
-    ASSERT (g_ExceptionCaught, "no exception occurred");
-    ASSERT (__TBB_EXCEPTION_TYPE_INFO_BROKEN || !g_UnknownException, "unknown exception was caught");
+    ASSERT (g_ExceptionCaught || bUnsupported, "no exception occurred");
+    ASSERT (__TBB_EXCEPTION_TYPE_INFO_BROKEN || !g_UnknownException  || bUnsupported, "unknown exception was caught");
     r->destroy(*r);
 } // void Test10 ()
 
@@ -587,7 +616,7 @@ class CtxLauncherTask : public tbb::task {
     tbb::task_group_context &m_Ctx;
 
     tbb::task* execute () {
-        tbb::task::spawn_root_and_wait( *new( tbb::task::allocate_root(m_Ctx) ) T );
+        spawn_root_and_wait( *new( allocate_root(m_Ctx) ) T );
         return NULL;
     }
 public:
@@ -615,7 +644,7 @@ class CtxDestroyerTask : public tbb::task {
     tbb::task* execute () {
         ASSERT ( m_nestingLevel >= 0 && m_nestingLevel < MaxNestingDepth, "Wrong nesting level. The test is broken" );
         tbb::task_group_context  ctx;
-        tbb::task *t = new( tbb::task::allocate_root(ctx) ) tbb::empty_task;
+        tbb::task *t = new( allocate_root(ctx) ) tbb::empty_task;
         int level = ++m_nestingLevel;
         if ( level < MaxNestingDepth ) {
             execute();
@@ -642,6 +671,7 @@ int CtxDestroyerTask::s_numCancelled = 0;
 //! Test for data race between cancellation propagation and context destruction.
 /** If the data race ever occurs, an assertion inside TBB will be triggered. **/
 void TestCtxDestruction () {
+    REMARK( "TestCtxDestruction\n" );
     for ( size_t i = 0; i < 10; ++i ) {
         tbb::task_group_context  ctx;
         tbb::task_list  tl;
@@ -729,6 +759,7 @@ void RunTests () {
     Test2();
     Test3();
     Test4();
+    Test4_1();
     Test5();
     Test6();
     Test7();
@@ -741,14 +772,12 @@ void RunTests () {
     TestConcurrentCtxDestruction();
 #endif
 }
-#endif /* __TBB_TASK_GROUP_CONTEXT */
 
 int TestMain () {
-    REMARK ("Using %s", TBB_USE_CAPTURED_EXCEPTION ? "tbb:captured_exception" : "exact exception propagation");
+    REMARK ("Using %s\n", TBB_USE_CAPTURED_EXCEPTION ? "tbb:captured_exception" : "exact exception propagation");
     MinThread = min(NUM_ROOTS_IN_GROUP, min(tbb::task_scheduler_init::default_num_threads(), max(2, MinThread)));
     MaxThread = min(NUM_ROOTS_IN_GROUP, max(MinThread, min(tbb::task_scheduler_init::default_num_threads(), MaxThread)));
     ASSERT (NUM_ROOTS_IN_GROUP < NUM_ROOT_TASKS, "Fix defines");
-#if __TBB_TASK_GROUP_CONTEXT
 #if TBB_USE_EXCEPTIONS
     // Test0 always runs on one thread
     Test0();
@@ -757,7 +786,12 @@ int TestMain () {
     for ( g_NumThreads = MinThread; g_NumThreads <= MaxThread; ++g_NumThreads )
         RunTests();
     return Harness::Done;
-#else
+}
+
+#else /* !__TBB_TASK_GROUP_CONTEXT */
+
+int TestMain () {
     return Harness::Skipped;
-#endif /* __TBB_TASK_GROUP_CONTEXT */
 }
+
+#endif /* !__TBB_TASK_GROUP_CONTEXT */
diff --git a/src/test/test_enumerable_thread_specific.cpp b/src/test/test_enumerable_thread_specific.cpp
index f15223b..c0744fd 100644
--- a/src/test/test_enumerable_thread_specific.cpp
+++ b/src/test/test_enumerable_thread_specific.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -136,8 +136,7 @@ struct FunctorAddCombineRef<minimal<N> > {
 static tbb::atomic<int> FinitCounter;
 
 template <typename T, int Value>
-class FunctorFinit {
-public:
+struct FunctorFinit {
     FunctorFinit( const FunctorFinit& ) {++FinitCounter;}
     FunctorFinit( SecretTagType ) {++FinitCounter;}
     ~FunctorFinit() {--FinitCounter;}
@@ -1020,4 +1019,3 @@ int TestMain () {
 
     return Harness::Done;
 }
-
diff --git a/src/test/test_executable_node.cpp b/src/test/test_executable_node.cpp
new file mode 100644
index 0000000..74c968c
--- /dev/null
+++ b/src/test/test_executable_node.cpp
@@ -0,0 +1,123 @@
+/*
+    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.
+*/
+
+#include "harness_graph.h"
+
+#include "tbb/task_scheduler_init.h"
+#include "tbb/spin_mutex.h"
+
+tbb::spin_mutex global_mutex;
+
+#define N 1000
+#define MAX_NODES 4
+#define C 8 
+
+struct empty_no_assign : private NoAssign { 
+   empty_no_assign() {}
+   empty_no_assign( int ) {}
+   operator int() { return 0; }
+};
+
+template< typename InputType >
+struct parallel_puts : private NoAssign {
+
+    tbb::receiver< InputType > * const my_exe_node;
+
+    parallel_puts( tbb::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 );
+        }
+    }
+
+};
+
+template< typename OutputType, typename Body >
+void continue_nodes( Body body ) {
+
+    for (int p = 1; p < 2*MaxThread; ++p) {
+        tbb::graph g;
+        tbb::executable_node< OutputType > exe_node( g, body );
+        for (size_t i = 0; i < N; ++i) {
+           exe_node.register_predecessor( *reinterpret_cast< tbb::sender< tbb::continue_msg > * >(&exe_node) );
+        }
+
+        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::continue_msg, OutputType>::execute_count = 0;
+
+            for (size_t r = 0; r < num_receivers; ++r ) {
+                ASSERT( exe_node.register_successor( receivers[r] ), NULL );
+            }
+
+            NativeParallelFor( p, parallel_puts<tbb::continue_msg>(exe_node) );
+            g.wait_for_all(); 
+
+            // 2) the nodes will receive puts from multiple predecessors simultaneously,
+            size_t ec = harness_graph_executor<tbb::continue_msg, OutputType>::execute_count;
+            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.
+                ASSERT( (int)c == p, NULL );
+            }
+        }
+    }
+}
+
+template< typename OutputType >
+void run_continue_nodes() {
+    harness_graph_executor< tbb::continue_msg, OutputType>::max_executors = 0;
+    #if __TBB_LAMBDAS_PRESENT
+    continue_nodes<OutputType>( []( tbb::continue_msg i ) -> OutputType { return harness_graph_executor<tbb::continue_msg, OutputType>::func(i); } );
+    #endif
+    continue_nodes<OutputType>( &harness_graph_executor<tbb::continue_msg, OutputType>::func );
+    continue_nodes<OutputType>( typename harness_graph_executor<tbb::continue_msg, OutputType>::functor() );
+}
+
+//! Tests limited concurrency cases for nodes that accept data messages
+void test_concurrency(int num_threads) {
+    tbb::task_scheduler_init init(num_threads);
+    run_continue_nodes<tbb::continue_msg>();
+    run_continue_nodes<int>();
+    run_continue_nodes<empty_no_assign>();
+}
+
+int TestMain() { 
+    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;
+}
+
diff --git a/src/test/test_faf_task.cpp b/src/test/test_faf_task.cpp
new file mode 100644
index 0000000..ca2e702
--- /dev/null
+++ b/src/test/test_faf_task.cpp
@@ -0,0 +1,155 @@
+/*
+    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.
+*/
+
+#include "harness.h"
+#include "tbb/task.h"
+#include "tbb/task_scheduler_init.h"
+
+const int NumRepeats = 200;
+const int MaxNumThreads = 16;
+static volatile bool Finished[MaxNumThreads] = {};
+
+static volatile bool CanStart;
+
+//! Custom user task interface
+class ITask {
+public: 
+	virtual ~ITask() {} 
+	virtual void Execute() = 0;
+	virtual void Release() { delete this; }
+};
+
+class TestTask : public ITask {
+	volatile bool *m_pDone;
+public:
+    TestTask ( volatile bool *pDone ) : m_pDone(pDone) {}
+
+	/* override */ void Execute() {
+		*m_pDone = true;
+	}
+};
+
+class CarrierTask : public tbb::task {
+	ITask* m_pTask;
+public:
+    CarrierTask(ITask* pTask) : m_pTask(pTask) {}
+
+	/*override*/ task* execute() {
+		m_pTask->Execute();
+		m_pTask->Release();
+		return NULL;
+	}
+};
+
+class SpawnerTask : public ITask {
+	ITask* m_taskToSpawn;
+public:
+	SpawnerTask(ITask* job) : m_taskToSpawn(job) {}
+
+	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);
+
+	    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 () {
+	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);
+
+	for ( int numThreads = minNumThreads; numThreads <= maxNumThreads; ++numThreads ) {
+		for ( int i = 0; i < NumRepeats; ++i ) {
+			CanStart = false;
+            __TBB_Yield();
+			NativeParallelFor( numThreads, EnqueuerBody() );
+			CanStart = true;
+            int j = 0;
+			while ( j < numThreads ) {
+                if ( Finished[j] )
+                    ++j;
+                else
+    				__TBB_Yield();
+			}
+            for ( j = 0; j < numThreads; ++j )
+                Finished[j] = false;
+            REMARK("%02d threads; Iteration %03d\r", numThreads, i);
+		}
+	}
+    REMARK( "                                 \r" );
+}
+
+class DummyTask : public tbb::task {
+public:
+    task *execute() {
+        Harness::Sleep(1);
+        return NULL;
+    }
+};
+
+class SharedRootBody {
+    tbb::task *my_root;
+public:
+	SharedRootBody ( tbb::task *root ) : my_root(root) {}
+
+	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
+void TestSharedRoot () { 
+    for ( int p = MinThread; p <= MaxThread; ++p ) {
+        tbb::task_scheduler_init init(p);
+    	tbb::task *root =  new ( tbb::task::allocate_root() ) tbb::empty_task; 
+    	root->set_ref_count(1);
+        for( int n = MinThread; n <= MaxThread; ++n )
+            NativeParallelFor( n, SharedRootBody(root) );
+    	root->wait_for_all();
+        tbb::task::destroy(*root);
+    } 
+}
+
+
+int TestMain () {
+    TestCascadedEnqueue();
+    TestSharedRoot();
+    return Harness::Done;
+}
diff --git a/src/test/test_fast_random.cpp b/src/test/test_fast_random.cpp
new file mode 100644
index 0000000..ba620c5
--- /dev/null
+++ b/src/test/test_fast_random.cpp
@@ -0,0 +1,162 @@
+/*
+    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.
+*/
+
+/**
+    The test checks that for different ranges of random numbers (from 0 to 
+    [MinThread, MaxThread]) generated with different seeds the probability 
+    of each number in the range deviates from the ideal random distribution
+    by no more than AcceptableDeviation percent.
+**/
+
+#include "harness_inject_scheduler.h"
+
+#define HARNESS_DEFAULT_MIN_THREADS 2
+#define HARNESS_DEFAULT_MAX_THREADS 32
+
+#define TEST_TOTAL_SEQUENCE 0
+
+#include "harness.h"
+#include "tbb/atomic.h"
+
+//! Coefficient defining tolerable deviation from ideal random distribution
+const double AcceptableDeviation = 2.1;
+//! Tolerable probability of failure to achieve tolerable distribution
+const double AcceptableProbabilityOfOutliers = 1e-6;
+//! Coefficient defining the length of random numbers series used to estimate the distribution
+/** Number of random values generated per each range element. I.e. the larger is 
+    the range, the longer is the series of random values. **/
+const uintptr_t SeriesBaseLen = 100;
+//! Number of random numbers series to generate
+const uintptr_t NumSeries = 100;
+//! Number of random number generation series with different seeds
+const uintptr_t NumSeeds = 100;
+
+tbb::atomic<uintptr_t> NumHighOutliers;
+tbb::atomic<uintptr_t> NumLowOutliers;
+
+inline void CheckProbability ( double probability, double expectedProbability, int index, int numIndices ) {
+    double lowerBound = expectedProbability / AcceptableDeviation,
+           upperBound = expectedProbability * AcceptableDeviation;
+    if ( probability < lowerBound ) {
+        if ( !NumLowOutliers )
+            REMARK( "Warning: Probability %.3f of hitting index %d among %d elements is out of acceptable range (%.3f - %.3f)\n",
+                    probability, index, numIndices, lowerBound, upperBound );
+        ++NumLowOutliers;
+    }
+    else if ( probability > upperBound ) {
+        if ( !NumHighOutliers )
+            REMARK( "Warning: Probability %.3f of hitting index %d among %d elements is out of acceptable range (%.3f - %.3f)\n",
+                    probability, index, numIndices, lowerBound, upperBound );
+        ++NumHighOutliers;
+    }
+}
+
+struct CheckDistributionBody {
+    void operator() ( int id ) const {
+        uintptr_t randomRange = id + MinThread;
+        uintptr_t *curHits = new uintptr_t[randomRange]
+#if TEST_TOTAL_SEQUENCE
+                , *totalHits = new uintptr_t[randomRange]
+#endif
+        ;
+        double expectedProbability = 1./randomRange;
+        // Loop through different seeds
+        for ( uintptr_t i = 0; i < NumSeeds; ++i ) {
+            // Seed value is selected in two ways, the first of which mimics 
+            // the one used by the TBB task scheduler
+            void* seed = i % 2 ? (char*)&curHits + i * 16 : (void*)(i * 8);
+            tbb::internal::FastRandom random( (unsigned)(uintptr_t)seed );
+            memset( curHits, 0, randomRange * sizeof(uintptr_t) );
+#if TEST_TOTAL_SEQUENCE
+            memset( totalHits, 0, randomRange * sizeof(uintptr_t) );
+#endif
+            const uintptr_t seriesLen = randomRange * SeriesBaseLen,
+                            experimentLen = NumSeries * seriesLen;
+            uintptr_t *curSeries = new uintptr_t[seriesLen],  // circular buffer
+                       randsGenerated = 0;
+            // Initialize statistics
+            while ( randsGenerated < seriesLen ) {
+                uintptr_t idx = random.get() % randomRange;
+                ++curHits[idx];
+#if TEST_TOTAL_SEQUENCE
+                ++totalHits[idx];
+#endif
+                curSeries[randsGenerated++] = idx;
+            }
+            while ( randsGenerated < experimentLen ) {
+                for ( uintptr_t j = 0; j < randomRange; ++j ) {
+                    CheckProbability( double(curHits[j])/seriesLen, expectedProbability, j, randomRange );
+#if TEST_TOTAL_SEQUENCE
+                    CheckProbability( double(totalHits[j])/randsGenerated, expectedProbability, j, randomRange );
+#endif
+                }
+                --curHits[curSeries[randsGenerated % seriesLen]];
+                int idx = random.get() % randomRange;
+                ++curHits[idx];
+#if TEST_TOTAL_SEQUENCE
+                ++totalHits[idx];
+#endif
+                curSeries[randsGenerated++ % seriesLen] = idx;
+            }
+            delete [] curSeries;
+        }
+        delete [] curHits;
+#if TEST_TOTAL_SEQUENCE
+        delete [] totalHits;
+#endif
+    }
+};
+
+#include "tbb/tbb_thread.h"
+
+int TestMain () {
+    ASSERT( AcceptableDeviation < 100, NULL );
+    MinThread = max(MinThread, 2);
+    MaxThread = max(MinThread, MaxThread);
+    double NumChecks = double(NumSeeds) * (MaxThread - MinThread + 1) * (MaxThread + MinThread) / 2.0 * (SeriesBaseLen * NumSeries - SeriesBaseLen);
+    REMARK( "Number of distribution quality checks %g\n", NumChecks );
+    NumLowOutliers = NumHighOutliers = 0;
+    // Parallelism is used in this test only to speed up the long serial checks
+    // Essentially it is a loop over random number ranges
+    // Ideally tbb::parallel_for could be used to parallelize the outermost loop 
+    // in CheckDistributionBody, but it is not used to avoid unit test contamination.
+    int P = tbb::tbb_thread::hardware_concurrency();
+    while ( MinThread <= MaxThread ) {
+        NativeParallelFor( min(P, MaxThread - MinThread + 1), CheckDistributionBody() );
+        MinThread += P;
+    }
+    double observedProbabilityOfOutliers = (NumLowOutliers + NumHighOutliers) / NumChecks;
+    if ( observedProbabilityOfOutliers > AcceptableProbabilityOfOutliers ) {
+        if ( NumLowOutliers )
+            REPORT( "Warning: %d cases of too low probability of a given number detected\n", (int)NumLowOutliers );
+        if ( NumHighOutliers )
+            REPORT( "Warning: %d cases of too high probability of a given number detected\n", (int)NumHighOutliers );
+        ASSERT( observedProbabilityOfOutliers <= AcceptableProbabilityOfOutliers, NULL );
+    }
+    return Harness::Done;
+}
diff --git a/src/test/test_fp.cpp b/src/test/test_fp.cpp
new file mode 100644
index 0000000..7ce48a5
--- /dev/null
+++ b/src/test/test_fp.cpp
@@ -0,0 +1,208 @@
+/*
+    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.
+*/
+
+/** This test checks the automatic propagation of master thread FPU settings
+    into the worker threads. **/
+
+#include "harness.h"
+#include "tbb/parallel_for.h"
+#include "tbb/task_scheduler_init.h"
+#include "tbb/tbb_machine.h"
+
+const int N = 500000;
+
+#if ( __TBB_x86_32 || __TBB_x86_64 ) && __TBB_CPU_CTL_ENV_PRESENT
+
+const int FE_TONEAREST = 0x0000,
+          FE_DOWNWARD = 0x0400,
+          FE_UPWARD = 0x0800,
+          FE_TOWARDZERO = 0x0c00,
+          FE_RND_MODE_MASK = FE_TOWARDZERO,
+          SSE_RND_MODE_MASK = FE_RND_MODE_MASK << 3,
+          SSE_DAZ = 0x0040,
+          SSE_FTZ = 0x8000,
+          SSE_MODE_MASK = SSE_DAZ | SSE_FTZ;
+
+const int NumSseModes = 4;
+const int SseModes[NumSseModes] = { 0, SSE_DAZ, SSE_FTZ, SSE_DAZ | SSE_FTZ };
+
+#if _WIN64 && !__MINGW64__
+// MinGW uses inline implementation from tbb/machine/linux_intel64.h
+
+#include <float.h>
+
+inline void __TBB_get_cpu_ctl_env ( __TBB_cpu_ctl_env_t* fe ) {
+    fe->x87cw = short(_control87(0, 0) & _MCW_RC) << 2;
+    fe->mxcsr = _mm_getcsr();
+}
+inline void __TBB_set_cpu_ctl_env ( const __TBB_cpu_ctl_env_t* fe ) {
+    ASSERT( (fe->x87cw & FE_RND_MODE_MASK) == ((fe->x87cw & FE_RND_MODE_MASK) >> 2 & _MCW_RC) << 2, "Check float.h constants" );
+    _control87( (fe->x87cw & FE_RND_MODE_MASK) >> 6, _MCW_RC );
+    _mm_setcsr( fe->mxcsr );
+}
+
+#endif /* _WIN64 */
+
+inline int GetRoundingMode ( bool checkConsistency = true ) {
+    __TBB_cpu_ctl_env_t ctl = { 0, 0 };
+    __TBB_get_cpu_ctl_env(&ctl);
+    ASSERT( !checkConsistency || (ctl.mxcsr & SSE_RND_MODE_MASK) >> 3 == (ctl.x87cw & FE_RND_MODE_MASK), NULL );
+    return ctl.x87cw & FE_RND_MODE_MASK;
+}
+
+inline void SetRoundingMode ( int mode ) {
+    __TBB_cpu_ctl_env_t ctl = { 0, 0 };
+    __TBB_get_cpu_ctl_env(&ctl);
+    ctl.mxcsr = (ctl.mxcsr & ~SSE_RND_MODE_MASK) | (mode & FE_RND_MODE_MASK) << 3;
+    ctl.x87cw = short((ctl.x87cw & ~FE_RND_MODE_MASK) | (mode & FE_RND_MODE_MASK));
+    __TBB_set_cpu_ctl_env(&ctl);
+}
+
+inline int GetSseMode () {
+    __TBB_cpu_ctl_env_t ctl = { 0, 0 };
+    __TBB_get_cpu_ctl_env(&ctl);
+    return ctl.mxcsr & SSE_MODE_MASK;
+}
+
+inline void SetSseMode ( int mode ) {
+    __TBB_cpu_ctl_env_t ctl = { 0, 0 };
+    __TBB_get_cpu_ctl_env(&ctl);
+    ctl.mxcsr = (ctl.mxcsr & ~SSE_MODE_MASK) | (mode & SSE_MODE_MASK);
+    __TBB_set_cpu_ctl_env(&ctl);
+}
+
+
+#else /* Other archs */
+
+#include <fenv.h>
+
+const int RND_MODE_MASK = FE_TONEAREST | FE_DOWNWARD | FE_UPWARD | FE_TOWARDZERO;
+
+const int NumSseModes = 1;
+const int SseModes[NumSseModes] = { 0 };
+
+inline int GetRoundingMode ( bool = true ) { return fegetround(); }
+inline void SetRoundingMode ( int rnd ) { fesetround(rnd); }
+
+inline int GetSseMode () { return 0; }
+inline void SetSseMode ( int ) {}
+
+#endif /* Other archs */
+
+const int NumRoundingModes = 4;
+const int RoundingModes[NumRoundingModes] = { FE_TONEAREST, FE_DOWNWARD, FE_UPWARD, FE_TOWARDZERO };
+
+class RoundingModeCheckBody {
+    Harness::tid_t m_tidMaster;
+    int m_masterMode;
+    int m_workerMode;
+    int m_masterSseMode;
+    int m_workerSseMode;
+public:
+    void operator() ( int /*iter*/ ) const {
+        if ( Harness::CurrentTid() == m_tidMaster ) {
+            ASSERT( GetRoundingMode() == m_masterMode, "Master's FPU control state was corrupted" );
+            ASSERT( GetSseMode() == m_masterSseMode, "Master's SSE control state was corrupted" );
+        }
+        else {
+            ASSERT( GetRoundingMode() == m_workerMode, "FPU control state has not been propagated to a worker" );
+            ASSERT( GetSseMode() == m_workerSseMode, "SSE control state has not been propagated to a worker" );
+        }
+    }
+
+    RoundingModeCheckBody ( Harness::tid_t tidMaster, int masterMode, int workerMode, int masterSseMode, int workerSseMode )
+        : m_tidMaster(tidMaster)
+        , m_masterMode(masterMode)
+        , m_workerMode(workerMode)
+        , m_masterSseMode(masterSseMode)
+        , m_workerSseMode(workerSseMode)
+    {}
+};
+
+class LauncherBody {
+public:
+    void operator() ( int id ) const {
+        Harness::tid_t tid = Harness::CurrentTid();
+        // TBB scheduler instance in a master thread captures the FPU control state
+        // at the moment of its initialization and passes it to the workers toiling
+        // on its behalf.
+        for( int k = 0; k < NumSseModes; ++k ) {
+            int sse_mode = SseModes[(k + id) % NumSseModes];
+            SetSseMode( sse_mode );
+            for( int i = 0; i < NumRoundingModes; ++i ) {
+                int mode = RoundingModes[(i + id) % NumRoundingModes];
+                SetRoundingMode( mode );
+                // New mode must be set before TBB scheduler is initialized
+                tbb::task_scheduler_init init;
+                tbb::parallel_for( 0, N, 1, RoundingModeCheckBody(tid, mode, mode, sse_mode, sse_mode) );
+                ASSERT( GetRoundingMode() == mode, NULL );
+            }
+        }
+        // Since the following loop uses auto-initialization, the scheduler instance
+        // implicitly created by the first parallel_for invocation will persist
+        // until the thread ends, and thus workers will use the mode set by the
+        // first iteration.
+        int captured_mode = RoundingModes[id % NumRoundingModes];
+        int captured_sse_mode = SseModes[id % NumSseModes];
+        for( int k = 0; k < NumSseModes; ++k ) {
+            int sse_mode = SseModes[(k + id) % NumSseModes];
+            SetSseMode( sse_mode );
+            for( int i = 0; i < NumRoundingModes; ++i ) {
+                int mode = RoundingModes[(i + id) % NumRoundingModes];
+                SetRoundingMode( mode );
+                tbb::parallel_for( 0, N, 1, RoundingModeCheckBody(tid, mode, captured_mode, sse_mode, captured_sse_mode) );
+                ASSERT( GetRoundingMode() == mode, NULL );
+            }
+        }
+    }
+};
+
+void TestFpuEnvPropagation () {
+    NativeParallelFor ( tbb::task_scheduler_init::default_num_threads() * NumRoundingModes, LauncherBody() );
+}
+
+void TestCpuCtlEnvApi () {
+    for( int k = 0; k < NumSseModes; ++k ) {
+        SetSseMode( SseModes[k] );
+        for( int i = 0; i < NumRoundingModes; ++i ) {
+            SetRoundingMode( RoundingModes[i] );
+            ASSERT( GetRoundingMode() == RoundingModes[i], NULL );
+            ASSERT( GetSseMode() == SseModes[k], NULL );
+        }
+    }
+}
+
+int TestMain () {
+#if defined(__TBB_CPU_CTL_ENV_PRESENT) && !__TBB_CPU_CTL_ENV_PRESENT
+    return Harness::Skipped;
+#else
+    TestCpuCtlEnvApi();
+    TestFpuEnvPropagation();
+    return Harness::Done;
+#endif
+}
diff --git a/src/test/test_function_node.cpp b/src/test/test_function_node.cpp
new file mode 100644
index 0000000..eba9782
--- /dev/null
+++ b/src/test/test_function_node.cpp
@@ -0,0 +1,225 @@
+/*
+    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.
+*/
+
+#include "harness_graph.h"
+
+#include "tbb/task_scheduler_init.h"
+#include "tbb/spin_mutex.h"
+
+tbb::spin_mutex global_mutex;
+
+#define N 1000
+#define MAX_NODES 4
+#define C 8 
+
+//! 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 OutputType, typename Body >
+void concurrency_levels( size_t concurrency, Body body ) {
+
+   for ( size_t lc = 1; lc <= concurrency; ++lc ) { 
+   tbb::graph g;
+   harness_graph_executor<InputType, OutputType, tbb::spin_mutex>::execute_count = 0;
+
+   tbb::function_node< InputType, OutputType > 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 ) {
+            ASSERT( exe_node.register_successor( receivers[r] ), NULL );
+        }
+
+        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_executor< InputType, OutputType, 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();
+
+            // 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_node, NULL );
+            }
+            // cofirm 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 ) {
+            ASSERT( exe_node.remove_successor( receivers[r] ) == true, NULL );
+        }
+        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 OutputType >
+void run_concurrency_levels( int c ) {
+    harness_graph_executor<InputType, OutputType, tbb::spin_mutex>::max_executors = c;
+    #if __TBB_LAMBDAS_PRESENT
+    concurrency_levels<InputType,OutputType>( c, []( InputType i ) -> OutputType { return harness_graph_executor<InputType, OutputType, tbb::spin_mutex>::func(i); } );
+    #endif
+    concurrency_levels<InputType,OutputType>( c, &harness_graph_executor<InputType, OutputType, tbb::spin_mutex>::func );
+    concurrency_levels<InputType,OutputType>( c, typename harness_graph_executor<InputType, OutputType, tbb::spin_mutex>::functor() );
+}
+
+
+struct empty_no_assign : private NoAssign { 
+   empty_no_assign() {}
+   empty_no_assign( int ) {}
+   operator int() { return 0; }
+};
+
+template< typename InputType >
+struct parallel_puts : private NoAssign {
+
+    tbb::receiver< InputType > * const my_exe_node;
+
+    parallel_puts( tbb::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
+/** Theses 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 OutputType, typename Body >
+void unlimited_concurrency( Body body ) {
+
+    for (int p = 1; p < 2*MaxThread; ++p) {
+        tbb::graph g;
+        tbb::function_node< InputType, OutputType > exe_node( g, tbb::graph::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_executor<InputType, OutputType>::execute_count = 0;
+
+            for (size_t r = 0; r < num_receivers; ++r ) {
+                ASSERT( exe_node.register_successor( receivers[r] ), NULL );
+            }
+
+            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_executor<InputType, OutputType>::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 OutputType >
+void run_unlimited_concurrency() {
+    harness_graph_executor<InputType, OutputType>::max_executors = 0;
+    #if __TBB_LAMBDAS_PRESENT
+    unlimited_concurrency<InputType,OutputType>( []( InputType i ) -> OutputType { return harness_graph_executor<InputType, OutputType>::func(i); } );
+    #endif
+    unlimited_concurrency<InputType,OutputType>( &harness_graph_executor<InputType, OutputType>::func );
+    unlimited_concurrency<InputType,OutputType>( typename harness_graph_executor<InputType, OutputType>::functor() );
+}
+
+//! 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,int>(num_threads);
+    run_concurrency_levels<int,tbb::continue_msg>(num_threads);
+    run_unlimited_concurrency<int,int>();
+    run_unlimited_concurrency<int,empty_no_assign>();
+    run_unlimited_concurrency<empty_no_assign,int>();
+    run_unlimited_concurrency<empty_no_assign,empty_no_assign>();
+    run_unlimited_concurrency<int,tbb::continue_msg>();
+    run_unlimited_concurrency<empty_no_assign,tbb::continue_msg>();
+}
+
+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;
+}
+
diff --git a/src/test/test_halt.cpp b/src/test/test_halt.cpp
index 511d215..be5b37e 100644
--- a/src/test/test_halt.cpp
+++ b/src/test/test_halt.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 60a047d..90f6663 100644
--- a/src/test/test_handle_perror.cpp
+++ b/src/test/test_handle_perror.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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
new file mode 100644
index 0000000..fc0a7e2
--- /dev/null
+++ b/src/test/test_hw_concurrency.cpp
@@ -0,0 +1,93 @@
+/*
+    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.
+*/
+
+#include "harness.h"
+
+#include <limits.h>
+
+#if _WIN32||_WIN64
+#include "tbb/machine/windows_api.h"
+#elif __linux__
+#include <unistd.h>
+#include <sys/sysinfo.h>
+#include <string.h>
+#include <sched.h>
+#elif __FreeBSD__
+#include <unistd.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/param.h>  // Required by <sys/cpuset.h>
+#include <sys/cpuset.h>
+#endif
+
+#include "tbb/task_scheduler_init.h"
+#include "tbb/tbb_thread.h"
+
+int TestMain () {
+#if _WIN32||_WIN64 || __linux__ || __FreeBSD_version >= 701000
+#if _WIN32||_WIN64
+    SYSTEM_INFO si;
+    GetSystemInfo(&si);
+    if ( si.dwNumberOfProcessors < 2 )
+        return Harness::Skipped;
+    int availableProcs = (int)si.dwNumberOfProcessors / 2;
+    DWORD_PTR mask = 1;
+    for ( int i = 1; i < availableProcs; ++i )
+        mask |= mask << 1;
+    bool err = !SetProcessAffinityMask( GetCurrentProcess(), mask );
+#else /* !WIN */
+#if __linux__
+    int maxProcs = get_nprocs();
+    typedef cpu_set_t mask_t;
+    #define setaffinity(mask) sched_setaffinity(getpid(), sizeof(mask_t), &mask)
+#else /* __FreeBSD__ */
+    int maxProcs = sysconf(_SC_NPROCESSORS_ONLN);
+    typedef cpuset_t mask_t;
+#if __TBB_MAIN_THREAD_AFFINITY_BROKEN
+    #define setaffinity(mask) cpuset_setaffinity(CPU_LEVEL_WHICH, CPU_WHICH_TID, -1, sizeof(mask_t), &mask)
+#else
+    #define setaffinity(mask) cpuset_setaffinity(CPU_LEVEL_WHICH, CPU_WHICH_PID, -1, sizeof(mask_t), &mask)
+#endif
+#endif /* __FreeBSD__ */
+    if ( maxProcs < 2 )
+        return Harness::Skipped;
+    mask_t newMask;
+    CPU_ZERO(&newMask);
+    int availableProcs = min(maxProcs, (int)sizeof(mask_t) * CHAR_BIT) / 2;
+    for ( int i = 0; i < availableProcs; ++i )
+        CPU_SET( i, &newMask );
+    int err = setaffinity( newMask );
+#endif /* !WIN */
+    ASSERT( !err, "Setting process affinity failed" );
+    ASSERT( tbb::task_scheduler_init::default_num_threads() == availableProcs, NULL );
+    ASSERT( (int)tbb::tbb_thread::hardware_concurrency() == availableProcs, NULL );
+    return Harness::Done;
+#else /* !(WIN || LIN || BSD) */
+    return Harness::Skipped;
+#endif /* !(WIN || LIN || BSD) */
+}
diff --git a/src/test/test_inits_loop.cpp b/src/test/test_inits_loop.cpp
index 1836ee2..7f765da 100644
--- a/src/test/test_inits_loop.cpp
+++ b/src/test/test_inits_loop.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 c4c4458..a1fe490 100644
--- a/src/test/test_intrusive_list.cpp
+++ b/src/test/test_intrusive_list.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 c92e45b..17362d0 100644
--- a/src/test/test_ittnotify.cpp
+++ b/src/test/test_ittnotify.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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
new file mode 100644
index 0000000..35199c8
--- /dev/null
+++ b/src/test/test_join_node.cpp
@@ -0,0 +1,419 @@
+/*
+    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.
+*/
+
+#include "harness.h"
+
+#if !__SUNPRO_CC
+
+#define TBB_PREVIEW_GRAPH 1
+#include "tbb/graph.h"
+#include "tbb/task_scheduler_init.h"
+
+//
+// Tests
+//
+
+const int Count = 300;
+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
+
+void
+check_outputCheck( int nUsed, int maxCnt) {
+    for(int i=0; i < nUsed; ++i) {
+        for( int j = 0; j < maxCnt; ++j) {
+            ASSERT(outputCheck[i][j], NULL);
+        }
+    }
+}
+
+void
+reset_outputCheck( int nUsed, int maxCnt) {
+    for(int i=0; i < nUsed; ++i) {
+        for( int j = 0; j < maxCnt; ++j) {
+            outputCheck[i][j] = false;
+        }
+    }
+}
+
+template<typename T>
+class name_of {
+public:
+    static const char* name() { return  "Unknown"; }
+};
+template<>
+class name_of<int> {
+public:
+    static const char* name() { return  "int"; }
+};
+template<>
+class name_of<float> {
+public:
+    static const char* name() { return  "float"; }
+};
+template<>
+class name_of<double> {
+public:
+    static const char* name() { return  "double"; }
+};
+template<>
+class name_of<long> {
+public:
+    static const char* name() { return  "long"; }
+};
+template<>
+class name_of<short> {
+public:
+    static const char* name() { return  "short"; }
+};
+
+// T must be arithmetic, and shouldn't wrap around for reasonable sizes of Count (which is now 1000, and maxPorts is 10,
+// so the max number generated right now is 11000.)  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
+// source nodes to a join_port, and each will generate part of the numerical series the port is expecting
+// to receive.  If there is only one source node, the series order will be maintained; if more than one,
+// this is not guaranteed.
+template<typename TT>
+class source_body {
+    const TT my_mult;
+    int my_count;
+    const int addend;
+    source_body& operator=( const source_body& other);
+public:
+    source_body(TT multiplier, int init_val, int addto) : my_mult(multiplier), my_count(init_val), addend(addto) { }
+    bool operator()( TT &v) {
+        int lc = my_count;
+        v = my_mult * (TT)my_count;
+        my_count += addend;
+        return lc < Count;
+    }
+};
+
+// holder for source_node pointers for eventual deletion
+
+static void* all_source_nodes[MaxPorts][MaxNSources];
+
+template<int ELEM, typename JNT>
+class source_node_helper {
+public:
+    typedef JNT join_node_type;
+    typedef typename join_node_type::output_type TT;
+    typedef typename std::tuple_element<ELEM-1,TT>::type IT;
+    typedef typename tbb::source_node<IT> my_source_node_type;
+    static void print_remark() {
+        source_node_helper<ELEM-1,JNT>::print_remark();
+        REMARK(", %s", name_of<IT>::name());
+    }
+    static void add_source_nodes(join_node_type &my_join, tbb::graph &g, int nInputs) {
+        for(int i=0; i < nInputs; ++i) {
+            my_source_node_type *new_node = new my_source_node_type(g, source_body<IT>((IT)(ELEM+1), i, nInputs));
+            ASSERT(new_node->register_successor(std::get<ELEM-1>(my_join.inputs() )), NULL);
+            all_source_nodes[ELEM-1][i] = (void *)new_node;
+        }
+        // add the next source_node
+        source_node_helper<ELEM-1, JNT>::add_source_nodes(my_join, g, nInputs);
+    }
+    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);
+        // tally the fetched value.
+        int ival = (int)std::get<ELEM-1>(v);
+        ASSERT(!(ival%(ELEM+1)), NULL);
+        ival /= (ELEM+1);
+        ASSERT(!outputCheck[ELEM-1][ival], NULL);
+        outputCheck[ELEM-1][ival] = true;
+        source_node_helper<ELEM-1,JNT>::check_value(i, v, is_serial);
+    }
+    static void remove_source_nodes(join_node_type& my_join, int nInputs) {
+        for(int i=0; i< nInputs; ++i) {
+            my_source_node_type *dp = reinterpret_cast<my_source_node_type *>(all_source_nodes[ELEM-1][i]);
+            dp->remove_successor(std::get<ELEM-1>(my_join.inputs()));
+            delete dp;
+        }
+        source_node_helper<ELEM-1, JNT>::remove_source_nodes(my_join, nInputs);
+    }
+};
+
+template<typename JNT>
+class source_node_helper<1, JNT> {
+    typedef JNT join_node_type;
+    typedef typename join_node_type::output_type TT;
+    typedef typename std::tuple_element<0,TT>::type IT;
+    typedef typename tbb::source_node<IT> my_source_node_type;
+public:
+    static void print_remark() {
+        REMARK("Parallel test of join_node< %s", name_of<IT>::name());
+    }
+    static void add_source_nodes(join_node_type &my_join, tbb::graph &g, int nInputs) {
+        for(int i=0; i < nInputs; ++i) {
+            my_source_node_type *new_node = new my_source_node_type(g, source_body<IT>((IT)2, i, nInputs));
+            ASSERT(new_node->register_successor(std::get<0>(my_join.inputs() )), NULL);
+            all_source_nodes[0][i] = (void *)new_node;
+        }
+    }
+    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);
+        ASSERT(!(ival%2), NULL);
+        ival /= 2;
+        ASSERT(!outputCheck[0][ival], NULL);
+        outputCheck[0][ival] = true;
+    }
+    static void remove_source_nodes(join_node_type& my_join, int nInputs) {
+        for(int i=0; i < nInputs; ++i) {
+            my_source_node_type *dp = reinterpret_cast<my_source_node_type *>(all_source_nodes[0][i]);
+            dp->remove_successor(std::get<0>(my_join.inputs()));
+            delete dp;
+        }
+    }
+};
+
+template<typename JType>
+class parallel_test {
+public:
+    typedef typename JType::output_type TType;
+    static const int SIZE = std::tuple_size<TType>::value;
+    static void test() {
+        TType v;
+        source_node_helper<SIZE,JType>::print_remark();
+        REMARK(" >\n");
+        for(int i=0; i < MaxPorts; ++i) {
+            for(int j=0; j < MaxNSources; ++j) {
+                all_source_nodes[i][j] = NULL;
+            }
+        }
+        for(int nInputs = 1; nInputs <= MaxNSources; ++nInputs) {
+            tbb::graph g;
+            JType my_join(g);
+            tbb::queue_node<TType> outq1(g);
+            tbb::queue_node<TType> outq2(g);
+
+            ASSERT(my_join.register_successor(outq1), NULL);  // register outputs first, so they both get all
+            ASSERT(my_join.register_successor(outq2), NULL);  // the results
+
+            source_node_helper<SIZE, JType>::add_source_nodes(my_join, g, nInputs);
+
+            g.wait_for_all();
+
+            reset_outputCheck(SIZE, Count);
+            for(int i=0; i < Count; ++i) {
+                ASSERT(outq1.try_get(v), NULL);
+                source_node_helper<SIZE, JType>::check_value(i, v, nInputs == 1);
+            }
+
+            check_outputCheck(SIZE, Count);
+            reset_outputCheck(SIZE, Count);
+
+            for(int i=0; i < Count; i++) {
+                ASSERT(outq2.try_get(v), NULL);;
+                source_node_helper<SIZE, JType>::check_value(i, v, nInputs == 1);
+            }
+            check_outputCheck(SIZE, Count);
+
+            ASSERT(!outq1.try_get(v), NULL);
+            ASSERT(!outq2.try_get(v), NULL);
+
+            source_node_helper<SIZE, JType>::remove_source_nodes(my_join, nInputs);
+            my_join.remove_successor(outq1);
+            my_join.remove_successor(outq2);
+        }
+    }
+};
+
+
+template<int ELEM, typename JType>
+class serial_queue_helper {
+public:
+    typedef typename JType::output_type TT;
+    typedef typename std::tuple_element<ELEM-1,TT>::type IT;
+    typedef typename tbb::queue_node<IT> my_queue_node_type;
+    static void print_remark() {
+        serial_queue_helper<ELEM-1,JType>::print_remark();
+        REMARK(", %s", name_of<IT>::name());
+    }
+    static void add_queue_nodes(tbb::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);
+        ASSERT(new_node->register_successor(std::get<ELEM-1>(my_join.inputs())), NULL);
+        all_source_nodes[ELEM-1][0] = (void *)new_node;
+    }
+    static void fill_one_queue(int maxVal) {
+        // fill queue to "left" of me
+        my_queue_node_type *qptr = reinterpret_cast<my_queue_node_type *>(all_source_nodes[ELEM-1][0]);
+        serial_queue_helper<ELEM-1,JType>::fill_one_queue(maxVal);
+        for(int i = 0; i < maxVal; ++i) {
+            ASSERT(qptr->try_put((IT)(i*(ELEM+1))), NULL);
+        }
+    }
+    static void put_one_queue_val(int myVal) {
+        // put this val to my "left".
+        serial_queue_helper<ELEM-1,JType>::put_one_queue_val(myVal);
+        my_queue_node_type *qptr = reinterpret_cast<my_queue_node_type *>(all_source_nodes[ELEM-1][0]);
+        ASSERT(qptr->try_put((IT)(myVal*(ELEM+1))), NULL);
+    }
+    static void check_queue_value(int i, TT &v) {
+        serial_queue_helper<ELEM-1,JType>::check_queue_value(i, v);
+        ASSERT( std::get<ELEM-1>(v) == (IT)(i * (ELEM+1)), NULL);
+    }
+    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]);
+        vptr->remove_successor(my_join);
+        serial_queue_helper<ELEM-1, JType>::remove_queue_nodes(my_join);
+        delete vptr;
+    }
+};
+
+template<typename JType>
+class serial_queue_helper<1, JType> {
+public:
+    typedef typename JType::output_type TT;
+    typedef typename std::tuple_element<0,TT>::type IT;
+    typedef typename tbb::queue_node<IT> my_queue_node_type;
+    static void print_remark() {
+        REMARK("Serial test of join_node< %s", name_of<IT>::name());
+    }
+    static void add_queue_nodes(tbb::graph &g, JType &my_join) {
+        my_queue_node_type *new_node = new my_queue_node_type(g);
+        ASSERT(new_node->register_successor(std::get<0>(my_join.inputs() )), NULL);
+        all_source_nodes[0][0] = (void *)new_node;
+    }
+    static void fill_one_queue(int maxVal) {
+        my_queue_node_type *qptr = reinterpret_cast<my_queue_node_type *>(all_source_nodes[0][0]);
+        for(int i = 0; i < maxVal; ++i) {
+            ASSERT(qptr->try_put((IT)(i*2)), NULL);
+        }
+    }
+    static void put_one_queue_val(int myVal) {
+        my_queue_node_type *qptr = reinterpret_cast<my_queue_node_type *>(all_source_nodes[0][0]);
+        ASSERT(qptr->try_put((IT)(myVal*2)), NULL);
+    }
+    static void check_queue_value(int i, TT &v) {
+        ASSERT( std::get<0>(v) == (IT)(i*2), NULL);
+    }
+    static void remove_queue_nodes(JType &my_join) {
+        my_queue_node_type *vptr = reinterpret_cast<my_queue_node_type *>(all_source_nodes[0][0]);
+        vptr->remove_successor(my_join);
+        delete vptr;
+    }
+};
+
+//
+// Single reservable predecessor at each port, single accepting successor
+//   * put to buffer before port0, then put to buffer before port1, ...
+//   * fill buffer before port0 then fill buffer before port1, ...
+
+template<typename JType>
+class serial_test {
+    typedef typename JType::output_type TType;
+    static const int SIZE = std::tuple_size<TType>::value;
+public:
+static void test() {
+    tbb::graph g;
+    JType my_join(g);
+
+    serial_queue_helper<SIZE, JType>::add_queue_nodes(g,my_join);
+    typedef TType q3_input_type;
+    tbb::queue_node< q3_input_type >  q3(g);
+
+    serial_queue_helper<SIZE, JType>::print_remark(); REMARK(" >\n");
+
+    ASSERT(my_join.register_successor( q3 ), NULL);
+
+    // fill each queue with its value one-at-a-time
+    for (int i = 0; i < Count; ++i ) {
+        serial_queue_helper<SIZE,JType>::put_one_queue_val(i);
+    }
+
+    g.wait_for_all();
+    for (int i = 0; i < Count; ++i ) {
+        q3_input_type v;
+        g.wait_for_all();
+        ASSERT(q3.try_get( v ), "Error in try_get()");
+        serial_queue_helper<SIZE,JType>::check_queue_value(i, v);
+    }
+
+    // fill each queue completely before filling the next.
+    serial_queue_helper<SIZE, JType>::fill_one_queue(Count);
+
+    g.wait_for_all();
+    for (int i = 0; i < Count; ++i ) {
+        q3_input_type v;
+        g.wait_for_all();
+        ASSERT(q3.try_get( v ), "Error in try_get()");
+        serial_queue_helper<SIZE,JType>::check_queue_value(i, v);
+    }
+}
+
+}; // serial_test
+
+template<template<typename> class TestType, typename OutputTupleType, tbb::join_policy J>
+class generate_test {
+public:
+    typedef tbb::join_node<OutputTupleType,J> join_node_type;
+    static void do_test() {
+        TestType<join_node_type>::test();
+    }
+};
+
+int TestMain() {
+#if __TBB_USE_TBB_TUPLE
+    REMARK("  Using TBB tuple");
+#else
+    REMARK("  Using platform tuple");
+#endif
+#if __TBB_USE_VARIADIC_TEMPLATE
+    REMARK(" with variadic template\n");
+#else
+    REMARK(" with explicit template\n");
+#endif
+   for (int p = 0; p < 2; ++p) {
+
+       REMARK("two_phase\n");
+       generate_test<serial_test, std::tuple<float, double>, tbb::two_phase >::do_test();
+       generate_test<serial_test, std::tuple<float, double, int, long>, tbb::two_phase >::do_test();
+       generate_test<serial_test, std::tuple<double, double, int, long, int, short>, tbb::two_phase >::do_test();
+       generate_test<serial_test, std::tuple<float, double, double, double, float, int, float, long>, tbb::two_phase >::do_test();
+       generate_test<serial_test, std::tuple<float, double, int, double, double, float, long, int, float, long>, tbb::two_phase >::do_test();
+       generate_test<parallel_test, std::tuple<float, double>, tbb::two_phase >::do_test();
+       generate_test<parallel_test, std::tuple<float, int, long>, tbb::two_phase >::do_test();
+       generate_test<parallel_test, std::tuple<double, double, int, int, short>, tbb::two_phase >::do_test();
+       generate_test<parallel_test, std::tuple<float, int, double, float, long, float, long>, tbb::two_phase >::do_test();
+       generate_test<parallel_test, std::tuple<float, double, int, double, double, long, int, float, long>, tbb::two_phase >::do_test();
+
+   }
+   return Harness::Done;
+}
+
+#else /* __SUNPRO_CC */
+
+int TestMain() { 
+    REPORT("Known issue: test skipped because of the compiler (CC %X) bug.\n", __SUNPRO_CC);
+    return Harness::Skipped;
+}
+
+#endif /* __SUNPRO_CC */
diff --git a/src/test/test_lambda.cpp b/src/test/test_lambda.cpp
index 8958877..99037b2 100644
--- a/src/test/test_lambda.cpp
+++ b/src/test/test_lambda.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_limiter_node.cpp b/src/test/test_limiter_node.cpp
new file mode 100644
index 0000000..e560249
--- /dev/null
+++ b/src/test/test_limiter_node.cpp
@@ -0,0 +1,206 @@
+/*
+    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.
+*/
+
+#include "harness.h"
+#define TBB_PREVIEW_GRAPH 1
+#include "tbb/graph.h"
+#include "tbb/atomic.h"
+#include "tbb/task_scheduler_init.h"
+
+const int L = 10;
+const int N = 1000;
+
+template< typename T >
+struct serial_receiver : public tbb::receiver<T> {
+   T next_value;
+
+   serial_receiver() : next_value(T(0)) {}
+
+   /* override */ bool try_put( T v ) {
+       ASSERT( next_value++  == v, NULL );
+       return true;
+   }
+};
+
+template< typename T >
+struct parallel_receiver : public tbb::receiver<T> {
+
+   tbb::atomic<int> my_count;
+
+   parallel_receiver() { my_count = 0; }
+
+   /* override */ bool try_put( T ) {
+       ++my_count;
+       return true;
+   }
+};
+
+template< typename T >
+struct empty_sender : public tbb::sender<T> {
+        /* override */ bool register_successor( tbb::receiver<T> & ) { return false; }
+        /* override */ bool remove_successor( tbb::receiver<T> & ) { return false; }
+};
+
+
+template< typename T >
+struct put_body : NoAssign {
+
+    tbb::limiter_node<T> &my_lim;
+    tbb::atomic<int> &my_accept_count;
+
+    put_body( tbb::limiter_node<T> &lim, tbb::atomic<int> &accept_count ) : 
+        my_lim(lim), my_accept_count(accept_count) {}
+
+    void operator()( int ) const {
+        for ( int i = 0; i < L; ++i ) {
+            bool msg = my_lim.try_put( T(i) );
+            if ( msg == true )
+               ++my_accept_count; 
+        }
+    }
+};
+
+template< typename T >
+struct put_dec_body : NoAssign {
+
+    tbb::limiter_node<T> &my_lim;
+    tbb::atomic<int> &my_accept_count;
+
+    put_dec_body( tbb::limiter_node<T> &lim, tbb::atomic<int> &accept_count ) : 
+        my_lim(lim), my_accept_count(accept_count) {}
+
+    void operator()( int ) const {
+        int local_accept_count = 0;
+        while ( local_accept_count < N ) {
+            bool msg = my_lim.try_put( T(local_accept_count) );
+            if ( msg == true ) {
+                ++local_accept_count;
+                ++my_accept_count;
+                my_lim.decrement.try_put( tbb::continue_msg() );
+            } 
+        }
+    }
+
+};
+
+//
+// Tests
+//
+// limiter only forwards below the limit, multiple parallel senders / single receiver
+// mutiple parallel senders that put to decrement at each accept, limiter accepts new messages
+// 
+// 
+template< typename T >
+int test_parallel(int num_threads) {
+ 
+   // test puts with no decrements
+   for ( int i = 0; i < L; ++i ) {
+       tbb::graph g;
+       tbb::limiter_node< T > lim(g, i);
+       parallel_receiver<T> r;
+       tbb::atomic<int> accept_count;
+       accept_count = 0;
+       lim.register_successor( r );
+       // test puts with no decrements
+       NativeParallelFor( num_threads, put_body<T>(lim, accept_count) );
+       g.wait_for_all();
+       int c = accept_count;
+       ASSERT( c == i, NULL );
+   }
+
+   // test puts with decrements
+   for ( int i = 1; i < L; ++i ) {
+       tbb::graph g;
+       tbb::limiter_node< T > lim(g, i);
+       parallel_receiver<T> r;
+       empty_sender< tbb::continue_msg > s;
+       tbb::atomic<int> accept_count;
+       accept_count = 0;
+       lim.register_successor( r );
+       lim.decrement.register_predecessor( s );
+       // test puts with no decrements
+       NativeParallelFor( num_threads, put_dec_body<T>(lim, accept_count) );
+       int c = accept_count;
+       ASSERT( c == N*num_threads, NULL );
+       ASSERT( r.my_count == N*num_threads, NULL );
+   }
+
+   return 0;
+}
+
+//
+// Tests
+//
+// limiter only forwards below the limit, single sender / single receiver
+// at reject, a put to decrement, will cause next message to be accepted
+// 
+template< typename T >
+int test_serial() {
+ 
+   // test puts with no decrements
+   for ( int i = 0; i < L; ++i ) {
+       tbb::graph g;
+       tbb::limiter_node< T > lim(g, i);
+       serial_receiver<T> r;
+       lim.register_successor( r );
+       for ( int j = 0; j < L; ++j ) {
+           bool msg = lim.try_put( T(j) );
+           ASSERT( ( j < i && msg == true ) || ( j >= i && msg == false ), NULL );
+       }
+       g.wait_for_all();
+   }
+
+   // test puts with decrements
+   for ( int i = 1; i < L; ++i ) {
+       tbb::graph g;
+       tbb::limiter_node< T > lim(g, i);
+       serial_receiver<T> r;
+       empty_sender< tbb::continue_msg > s;
+       lim.register_successor( r );
+       lim.decrement.register_predecessor( s );
+       for ( int j = 0; j < N; ++j ) {
+           bool msg = lim.try_put( T(j) );
+           ASSERT( ( j < i && msg == true ) || ( j >= i && msg == false ), NULL );
+           if ( msg == false ) {
+               lim.decrement.try_put( tbb::continue_msg() );
+               msg = lim.try_put( T(j) );
+               ASSERT( msg == true, NULL );
+           }
+       }
+   }
+   return 0;
+}
+
+int TestMain() { 
+    for (int i = 1; i <= 8; ++i) {
+        tbb::task_scheduler_init init(i);
+        test_serial<int>();
+        test_parallel<int>(i);
+    }
+   return Harness::Done;
+}
diff --git a/src/test/test_malloc_atexit.cpp b/src/test/test_malloc_atexit.cpp
index 27cc0db..e422438 100644
--- a/src/test/test_malloc_atexit.cpp
+++ b/src/test/test_malloc_atexit.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -59,18 +59,20 @@ bool isMallocOverloaded()
 
 #endif    
 
+#ifndef _PGO_INSTRUMENT
 void dummyFunction() {}
 
 class Foo {
 public:
     Foo() {
-         // need a lot of them to cause memory allocation
+        // add a lot of exit handlers to cause memory allocation
         for (int i=0; i<1024; i++)
             atexit(dummyFunction);
     }
 };
 
 static Foo f;
+#endif
 
 #else // _USRDLL
 #include "harness.h"
@@ -81,7 +83,12 @@ extern __declspec(dllimport)
 bool isMallocOverloaded();
 
 int TestMain () {
+#ifdef _PGO_INSTRUMENT
+    REPORT("Known issue: test_malloc_atexit hangs if compiled with -prof-genx\n");
+    return Harness::Skipped;
+#else
     return isMallocOverloaded()? Harness::Done : Harness::Skipped;
+#endif
 }
 
 #endif // _USRDLL
diff --git a/src/test/test_malloc_compliance.cpp b/src/test/test_malloc_compliance.cpp
index 2ccc0eb..5db0db0 100644
--- a/src/test/test_malloc_compliance.cpp
+++ b/src/test/test_malloc_compliance.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -36,10 +36,14 @@ bool __tbb_test_errno = false;
 #if _WIN32 || _WIN64
 #undef _WIN32_WINNT
 #define _WIN32_WINNT 0x0500
-#include <windows.h>
+#include "tbb/machine/windows_api.h"
 #include <stdio.h>
 #include "harness_report.h"
 
+#if _MSC_VER && defined(_MT) && defined(_DLL)
+    #pragma comment(lib, "version.lib")  // to use GetFileVersionInfo*
+#endif
+
 void limitMem( int limit )
 {
     static HANDLE hJob = NULL;
@@ -97,11 +101,17 @@ void limitMem( int limit )
 #define HARNESS_CUSTOM_MAIN 1
 #include "harness.h"
 #include "harness_barrier.h"
+#include "harness_tbb_independence.h"
 #if __linux__
 #include <stdint.h> // uintptr_t
 #endif
 #if _WIN32 || _WIN64
 #include <malloc.h> // _aligned_(malloc|free|realloc)
+#if __MINGW64__
+// Workaround a bug in MinGW64 headers with _aligned_(malloc|free) not declared by default
+extern "C" void __cdecl _aligned_free(void *);
+extern "C" void *__cdecl _aligned_malloc(size_t,size_t);
+#endif
 #endif
 
 #if !TBB_USE_EXCEPTIONS && _MSC_VER
@@ -165,28 +175,6 @@ static bool perProcessLimits = true;
 
 const size_t POWERS_OF_2 = 20;
 
-#if __linux__  && __ia64__
-/* Can't use Intel compiler intrinsic due to internal error reported by
-   10.1 compiler */
-pthread_mutex_t counter_mutex = PTHREAD_MUTEX_INITIALIZER;
-
-int32_t __TBB_machine_fetchadd4__TBB_full_fence (volatile void *ptr, int32_t value)
-{
-    pthread_mutex_lock(&counter_mutex);
-    int32_t result = *(int32_t*)ptr;
-    *(int32_t*)ptr = result + value;
-    pthread_mutex_unlock(&counter_mutex);
-    return result;
-}
-
-void __TBB_machine_pause(int32_t /*delay*/) {}
-
-#elif (_WIN32||_WIN64) && defined(_M_AMD64)
-
-void __TBB_machine_pause(__int32 /*delay*/ ) {}
-
-#endif
-
 struct MemStruct
 {
     void* Pointer;
@@ -260,7 +248,7 @@ static void setSystemAllocs()
     Raligned_realloc=_aligned_realloc;
     Taligned_free=_aligned_free;
     Rposix_memalign=0;
-#elif  __APPLE__ || __sun //  Max OS X and Solaris don't have posix_memalign
+#elif  __APPLE__ || __sun //  Mac OS* X and Solaris don't have posix_memalign
     Raligned_malloc=0;
     Raligned_realloc=0;
     Taligned_free=0;
@@ -348,7 +336,6 @@ int main(int argc, char* argv[]) {
 //check if library compiled with /MD(d) and we can use errno
 #if _MSC_VER 
 #if defined(_MT) && defined(_DLL) //check errno if test itself compiled with /MD(d) only
-    #pragma comment(lib, "version.lib")
     char*  version_info_block = NULL;
     int version_info_block_size; 
     LPVOID comments_block = NULL;
@@ -1007,9 +994,7 @@ void CMemTest::RunAllTests(int total_threads)
 #else
     UniquePointer();
     AddrArifm();
-#if !__TBB_LRB_NATIVE
     NULLReturn(1*MByte,100*MByte,total_threads);
 #endif
-#endif
     if (FullLog) REPORT("All tests ended\nclearing memory...");
 }
diff --git a/src/test/test_malloc_init_shutdown.cpp b/src/test/test_malloc_init_shutdown.cpp
index 76a33ac..bab0fc4 100644
--- a/src/test/test_malloc_init_shutdown.cpp
+++ b/src/test/test_malloc_init_shutdown.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -26,64 +26,46 @@
     the GNU General Public License.
 */
 
-/*--------------------------------------------------------------------*/
-// 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.
-
 #include "tbb/scalable_allocator.h"
 #include "tbb/atomic.h"
 #include "tbb/aligned_space.h"
 
-#if _WIN64 && defined(_M_AMD64)
-void __TBB_machine_pause(__int32 /*delay*/ ) {}
-#elif  __linux__ && __ia64__
-#include <pthread.h>
-
-pthread_mutex_t counter_mutex = PTHREAD_MUTEX_INITIALIZER;
-
-int32_t __TBB_machine_fetchadd4__TBB_full_fence (volatile void *ptr, int32_t value)
-{
-    pthread_mutex_lock(&counter_mutex);
-    int32_t result = *(int32_t*)ptr;
-    *(int32_t*)ptr = result + value;
-    pthread_mutex_unlock(&counter_mutex);
-    return result;
-}
-
-void __TBB_machine_pause(int32_t /*delay*/) {}
-#endif
-
 #include "harness.h"
 #include "harness_barrier.h"
+#include "harness_tbb_independence.h"
 
 tbb::atomic<int> FinishedTasks;
+const int MaxTasks = 16;
 
-class TestFunc {
-	Harness::SpinBarrier* my_barr;
+/*--------------------------------------------------------------------*/
+// 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.
+
+class TestFunc1 {
+    Harness::SpinBarrier* my_barr;
 public:
-	TestFunc (Harness::SpinBarrier& barr) : my_barr(&barr) {}
-	void operator() (bool do_malloc) const {
-		my_barr->wait();
-		if (do_malloc) scalable_malloc(10);
-		++FinishedTasks;
-	}
+    TestFunc1 (Harness::SpinBarrier& barr) : my_barr(&barr) {}
+    void operator() (bool do_malloc) const {
+        my_barr->wait();
+        if (do_malloc) scalable_malloc(10);
+        ++FinishedTasks;
+    }
 };
 
-typedef NativeParallelForTask<bool,TestFunc> TestTask;
-const int MaxTasks = 16;
+typedef NativeParallelForTask<bool,TestFunc1> TestTask1;
 
-int TestMain () {
+void Test1 () {
     int NTasks = min(MaxTasks, max(2, MaxThread));
     Harness::SpinBarrier barr(NTasks);
-    TestFunc tf(barr);
+    TestFunc1 tf(barr);
     FinishedTasks = 0;
-    tbb::aligned_space<TestTask,MaxTasks> tasks;
+    tbb::aligned_space<TestTask1,MaxTasks> tasks;
 
     for(int i=0; i<NTasks; ++i) {
-        TestTask* t = tasks.begin()+i;
-        new(t) TestTask(i%2==0, tf);
+        TestTask1* t = tasks.begin()+i;
+        new(t) TestTask1(i%2==0, tf);
         t->start();
     }
     
@@ -91,10 +73,59 @@ int TestMain () {
     ASSERT( FinishedTasks==NTasks, "Some threads appear to deadlock" );
 
     for(int i=0; i<NTasks; ++i) {
-        TestTask* t = tasks.begin()+i;
+        TestTask1* t = tasks.begin()+i;
         t->wait_to_finish();
-        t->~TestTask();
+        t->~TestTask1();
+    }
+}
+
+/*--------------------------------------------------------------------*/
+// The regression test against a bug when cross-thread deallocation
+// caused livelock at thread shutdown.
+
+void* ptr = NULL;
+
+class TestFunc2a {
+    Harness::SpinBarrier* my_barr;
+public:
+    TestFunc2a (Harness::SpinBarrier& barr) : my_barr(&barr) {}
+    void operator() (int) const {
+        ptr = scalable_malloc(8);
+        my_barr->wait();
+        ++FinishedTasks;
     }
+};
 
+typedef NativeParallelForTask<int,TestFunc2a> TestTask2a;
+
+class TestFunc2b: NoAssign {
+    Harness::SpinBarrier* my_barr;
+    TestTask2a& my_ward;
+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);
+        my_barr->wait();
+        my_ward.wait_to_finish();
+        ++FinishedTasks;
+    }
+};
+void Test2() {
+    Harness::SpinBarrier barr(2);
+    TestFunc2a func2a(barr);
+    TestTask2a t2a(0, func2a);
+    TestFunc2b func2b(barr, t2a);
+    NativeParallelForTask<int,TestFunc2b> t2b(1, func2b);
+    FinishedTasks = 0;
+    t2a.start(); t2b.start();
+    Harness::Sleep(1000); // wait a second :)
+    ASSERT( FinishedTasks==2, "Threads appear to deadlock" );
+    t2b.wait_to_finish(); // t2a is monitored by t2b
+}
+
+int TestMain () {
+    Test1(); // requires malloc initialization so should be first
+    Test2();
     return Harness::Done;
 }
diff --git a/src/test/test_malloc_lib_unload.cpp b/src/test/test_malloc_lib_unload.cpp
index 0c06632..30d92b9 100644
--- a/src/test/test_malloc_lib_unload.cpp
+++ b/src/test/test_malloc_lib_unload.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -26,14 +26,108 @@
     the GNU General Public License.
 */
 
+#if _USRDLL
 
-#include <stdio.h>
+#include <stdlib.h> // for NULL
+#include "harness_assert.h"
+#define HARNESS_CUSTOM_MAIN 1
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+#include "harness.h"
+
+const char *globalCallMsg = "A TBB allocator function call is resolved into wrong implementation.";
+
+#if _WIN32||_WIN64
+// must be defined in DLL to linker not drop the dependence to the DLL.
+extern "C" {
+    extern __declspec(dllexport) void *scalable_malloc(size_t);
+    extern __declspec(dllexport) void scalable_free (void *);
+    extern __declspec(dllexport) void safer_scalable_free (void *, void (*)(void*));
+    extern __declspec(dllexport) void *scalable_realloc(void *, size_t);
+    extern __declspec(dllexport) void *safer_scalable_realloc(void *, size_t, void *);
+    extern __declspec(dllexport) void *scalable_calloc(size_t, size_t);
+    extern __declspec(dllexport) int scalable_posix_memalign(void **, size_t, size_t);
+    extern __declspec(dllexport) void *scalable_aligned_malloc(size_t, size_t);
+    extern __declspec(dllexport) void *scalable_aligned_realloc(void *, size_t, size_t);
+    extern __declspec(dllexport) void *safer_scalable_aligned_realloc(void *, size_t, size_t, void *);
+    extern __declspec(dllexport) void scalable_aligned_free(void *);
+    extern __declspec(dllexport) size_t scalable_msize(void *);
+    extern __declspec(dllexport) size_t safer_scalable_msize (void *, size_t (*)(void*));
+}
+#endif
+
+// Those functions must not be called instead of presented in dynamic library. 
+extern "C" void *scalable_malloc(size_t)
+{
+    ASSERT(0, globalCallMsg);
+    return NULL;
+}
+extern "C" void scalable_free (void *)
+{
+    ASSERT(0, globalCallMsg);
+}
+extern "C" void safer_scalable_free (void *, void (*)(void*)) 
+{
+    ASSERT(0, globalCallMsg);
+}
+extern "C" void *scalable_realloc(void *, size_t)
+{
+    ASSERT(0, globalCallMsg);
+    return NULL;
+}
+extern "C" void *safer_scalable_realloc(void *, size_t, void *) 
+{
+    ASSERT(0, globalCallMsg);
+    return NULL;
+}
+extern "C" void *scalable_calloc(size_t, size_t)
+{
+    ASSERT(0, globalCallMsg);
+    return NULL;
+}
+extern "C" int scalable_posix_memalign(void **, size_t, size_t)
+{
+    ASSERT(0, globalCallMsg);
+    return 0;
+}
+extern "C" void *scalable_aligned_malloc(size_t, size_t)
+{
+    ASSERT(0, globalCallMsg);
+    return NULL;
+}
+extern "C" void *scalable_aligned_realloc(void *, size_t, size_t)
+{
+    ASSERT(0, globalCallMsg);
+    return NULL;
+}
+extern "C" void *safer_scalable_aligned_realloc(void *, size_t, size_t, void *)
+{
+    ASSERT(0, globalCallMsg);
+    return NULL;
+}
+extern "C" void scalable_aligned_free(void *)
+{
+    ASSERT(0, globalCallMsg);
+}
+extern "C" size_t scalable_msize(void *)
+{
+    ASSERT(0, globalCallMsg);
+    return 0;
+}
+extern "C" size_t safer_scalable_msize (void *, size_t (*)(void*)) 
+{
+    ASSERT(0, globalCallMsg);
+    return 0;
+}
+
+#else  // _USRDLL
+
+#include <cstdlib>
 #if _WIN32 || _WIN64
-#include <windows.h>
+#include "tbb/machine/windows_api.h"
 #else
 #include <dlfcn.h>
 #endif
-#include <tbb/tbb_stddef.h>
+#include "tbb/tbb_stddef.h"
 #define HARNESS_NO_PARSE_COMMAND_LINE 1
 #include "harness.h"
 #include "harness_memory.h"
@@ -55,7 +149,7 @@
 #define EXT ".dylib"
 #elif __linux__
 #define EXT __TBB_STRING(.so.TBB_COMPATIBLE_INTERFACE_VERSION)
-#elif __FreeBSD__ || __sun
+#elif __FreeBSD__ || __NetBSD__ || __sun || _AIX
 #define EXT ".so"
 #else
 #error Unknown OS
@@ -74,10 +168,20 @@
 #define LOAD_LIBRARY(name) dlopen((name), RTLD_NOW|RTLD_GLOBAL)
 #endif
 
+extern "C" {
+#if _WIN32||_WIN64
+extern __declspec(dllimport)
+#endif
+void *scalable_malloc(size_t);
+}
+
 struct Run {
     void operator()( int /*id*/ ) const {
-        void* (*malloc_ptr)(size_t);
+        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);
@@ -90,15 +194,25 @@ struct Run {
         // 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);
         }
 
+        for (size_t sz = 1024; sz <= 10*1024 ; sz*=10) {
+            void *p1 = aligned_malloc_ptr(sz, 16);
+            memset(p1, 0, sz);
+            aligned_free_ptr(p1);
+        }
+
         void *p = malloc_ptr(100);
         memset(p, 1, 100);
         free_ptr(p);
@@ -119,7 +233,7 @@ struct Run {
 
 int TestMain () {
     int i;
-    ptrdiff_t memory_leak;
+    std::ptrdiff_t memory_leak;
 
     // warm-up run
     NativeParallelFor( 1, Run() );
@@ -127,13 +241,13 @@ int TestMain () {
        but it seems memory consumption stabilized after this.
      */
     GetMemoryUsage();
-    size_t memory_in_use = GetMemoryUsage();
+    std::size_t memory_in_use = GetMemoryUsage();
     ASSERT(memory_in_use == GetMemoryUsage(), 
            "Memory consumption should not increase after 1st GetMemoryUsage() call");
 
     // expect that memory consumption stabilized after several runs
     for (i=0; i<3; i++) {
-        size_t memory_in_use = GetMemoryUsage();
+        std::size_t memory_in_use = GetMemoryUsage();
         for (int j=0; j<10; j++)
             NativeParallelFor( 1, Run() );
         memory_leak = GetMemoryUsage() - memory_in_use;
@@ -148,3 +262,5 @@ int TestMain () {
 
     return Harness::Done;
 }
+
+#endif // _USRDLL
diff --git a/src/test/test_malloc_overload.cpp b/src/test/test_malloc_overload.cpp
index 19f5cc2..2c6f75d 100644
--- a/src/test/test_malloc_overload.cpp
+++ b/src/test/test_malloc_overload.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -29,7 +29,7 @@
 
 #if __linux__
 #define MALLOC_REPLACEMENT_AVAILABLE 1
-#elif _WIN32
+#elif _WIN32 && !__MINGW32__ && !__MINGW64__
 #define MALLOC_REPLACEMENT_AVAILABLE 2
 #include "tbb/tbbmalloc_proxy.h"
 #endif
@@ -97,7 +97,7 @@ static inline bool isAligned(T arg, uintptr_t alignment) {
     return 0==((uintptr_t)arg &  (alignment-1));
 }
 
-/* Below is part of MemoryAllocator.cpp. */
+/* start of code replicated from src/tbbmalloc */
 
 class BackRefIdx { // composite index to backreference array
 private:
@@ -134,11 +134,21 @@ struct LargeObjectHdr {
 };
 
 /*
- * Objects of this size and larger are considered large objects.
+ * Objects of size minLargeObjectSize and larger are considered large objects.
  */
-const uint32_t minLargeObjectSize = 8065;
+const uintptr_t blockSize = 16*1024;
+#if __powerpc64__ || __ppc64__ || __bgp__
+const int estimatedCacheLineSize = 128;
+#else
+const int estimatedCacheLineSize =  64;
+#endif
+const uint32_t fittingAlignment = estimatedCacheLineSize;
+#define SET_FITTING_SIZE(N) ( (blockSize-2*estimatedCacheLineSize)/N ) & ~(fittingAlignment-1)
+const uint32_t fittingSize5 = SET_FITTING_SIZE(2); // 8128/8064
+#undef SET_FITTING_SIZE
+const uint32_t minLargeObjectSize = fittingSize5 + 1;
 
-/* end of inclusion from MemoryAllocator.cpp */
+/* end of code replicated from src/tbbmalloc */
 
 /* Correct only for large blocks, i.e. not smaller then minLargeObjectSize */
 static bool scalableMallocLargeBlock(void *object, size_t size)
@@ -271,5 +281,6 @@ int main(int , char *[]) {
 
 int main(int , char *[]) {
     printf("skip\n");
+    return 0;
 }
 #endif /* !MALLOC_REPLACEMENT_AVAILABLE */
diff --git a/src/test/test_malloc_pure_c.c b/src/test/test_malloc_pure_c.c
index a92c481..5f81d6d 100644
--- a/src/test/test_malloc_pure_c.c
+++ b/src/test/test_malloc_pure_c.c
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 7e25440..8223639 100644
--- a/src/test/test_malloc_regression.cpp
+++ b/src/test/test_malloc_regression.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -79,7 +79,7 @@ bool TestBootstrapLeak() {
     }
 
     ptrdiff_t memory_leak = 0;
-    // Notice that 16K boot strap memory block is enough to serve 42 threads.
+    // Note that 16K boot strap memory block is enough to serve 42 threads.
     const int num_thread_runs = 200;
     for (int run=0; run<3; run++) {
         memory_in_use = GetMemoryUsage();
diff --git a/src/test/test_malloc_whitebox.cpp b/src/test/test_malloc_whitebox.cpp
index c37b85f..072da57 100644
--- a/src/test/test_malloc_whitebox.cpp
+++ b/src/test/test_malloc_whitebox.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -26,7 +26,6 @@
     the GNU General Public License.
 */
 
-#include "tbb/scalable_allocator.h"
 #include "harness.h"
 #include "harness_barrier.h"
 
@@ -35,9 +34,14 @@
 #undef DO_ITT_NOTIFY
 #endif
 
+#define protected public
 #define private public
-#include "MemoryAllocator.cpp" // can be in ../tbbmalloc or another directory
+#include "../tbbmalloc/frontend.cpp"
+#undef protected
 #undef private
+#include "../tbbmalloc/backend.cpp"
+#include "../tbbmalloc/backref.cpp"
+#include "../tbbmalloc/large_objects.cpp"
 #include "../tbbmalloc/tbbmalloc.cpp"
 
 const int LARGE_MEM_SIZES_NUM = 10;
@@ -135,28 +139,28 @@ public:
 
         for (int i=0; i<ITERS; i++) {
             blocks1[i].sz = rand() % minLargeObjectSize;
-            blocks1[i].ptr = startupAlloc(blocks1[i].sz);
-            ASSERT(blocks1[i].ptr && startupMsize(blocks1[i].ptr)>=blocks1[i].sz 
+            blocks1[i].ptr = StartupBlock::allocate(blocks1[i].sz);
+            ASSERT(blocks1[i].ptr && StartupBlock::msize(blocks1[i].ptr)>=blocks1[i].sz 
                    && 0==(uintptr_t)blocks1[i].ptr % sizeof(void*), NULL);
             memset(blocks1[i].ptr, i, blocks1[i].sz);
         }
         for (int i=0; i<ITERS; i++) {
             blocks2[i].sz = rand() % minLargeObjectSize;
-            blocks2[i].ptr = startupAlloc(blocks2[i].sz);
-            ASSERT(blocks2[i].ptr && startupMsize(blocks2[i].ptr)>=blocks2[i].sz 
+            blocks2[i].ptr = StartupBlock::allocate(blocks2[i].sz);
+            ASSERT(blocks2[i].ptr && StartupBlock::msize(blocks2[i].ptr)>=blocks2[i].sz 
                    && 0==(uintptr_t)blocks2[i].ptr % sizeof(void*), NULL);
             memset(blocks2[i].ptr, i, blocks2[i].sz);
 
             for (size_t j=0; j<blocks1[i].sz; j++)
                 ASSERT(*((char*)blocks1[i].ptr+j) == i, NULL);
             Block *block = (Block *)alignDown(blocks1[i].ptr, blockSize);
-            startupFree((StartupBlock *)block, blocks1[i].ptr);
+            ((StartupBlock *)block)->free(blocks1[i].ptr);
         }
         for (int i=ITERS-1; i>=0; i--) {
             for (size_t j=0; j<blocks2[i].sz; j++)
                 ASSERT(*((char*)blocks2[i].ptr+j) == i, NULL);
             Block *block = (Block *)alignDown(blocks2[i].ptr, blockSize);
-            startupFree((StartupBlock *)block, blocks2[i].ptr);
+            ((StartupBlock *)block)->free(blocks2[i].ptr);
         }
     }
 };
@@ -248,7 +252,6 @@ void TestObjectRecognition() {
     Block *auxBackRef;
 
     ASSERT(sizeof(BackRefIdx)==4, "Unexpected size of BackRefIdx");
-
     ASSERT(getObjectSize(falseObjectSize)!=falseObjectSize, "Error in test: bad choice for false object size");
 
     void* mem = scalable_malloc(2*blockSize);
diff --git a/src/test/test_model_plugin.cpp b/src/test/test_model_plugin.cpp
index b2b3a15..e81c7bd 100644
--- a/src/test/test_model_plugin.cpp
+++ b/src/test/test_model_plugin.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -28,7 +28,7 @@
 
 
 #if _WIN32 || _WIN64
-#include <windows.h>
+#include "tbb/machine/windows_api.h"
 #else
 #include <dlfcn.h>
 #endif
@@ -179,14 +179,12 @@ int TestMain () {
 
 #if _WIN32 || _WIN64
     HMODULE hLib;
-#if __TBB_ARENA_PER_MASTER
     hLib = LoadLibrary("irml.dll");
     if ( !hLib )
         hLib = LoadLibrary("irml_debug.dll");
     if ( !hLib )
         return Harness::Skipped; // No shared RML, skip the test
     FreeLibrary(hLib);
-#endif /* __TBB_ARENA_PER_MASTER */
 #else /* !WIN */
 #if __APPLE__
     #define LIBRARY_NAME(base) base".dylib"
diff --git a/src/test/test_mutex.cpp b/src/test/test_mutex.cpp
index 0e0ecb2..c18c685 100644
--- a/src/test/test_mutex.cpp
+++ b/src/test/test_mutex.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_mutex_native_threads.cpp b/src/test/test_mutex_native_threads.cpp
index ffda4e4..4e6fa2f 100644
--- a/src/test/test_mutex_native_threads.cpp
+++ b/src/test/test_mutex_native_threads.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_openmp.cpp b/src/test/test_openmp.cpp
index 103110f..6fccafc 100644
--- a/src/test/test_openmp.cpp
+++ b/src/test/test_openmp.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -53,7 +53,7 @@
                 "version='" _CRT_ASSEMBLY_VERSION "' "                          \
                 "processorArchitecture='x86' "                                  \
                 "publicKeyToken='" _VC_ASSEMBLY_PUBLICKEYTOKEN "'\"")
-        #elif defined(_M_AMD64)
+        #elif defined(_M_X64)
             #pragma comment(linker,"/manifestdependency:\"type='win32' "            \
                 "name='" __LIBRARIES_ASSEMBLY_NAME_PREFIX ".DebugOpenMP' "         \
                 "version='" _CRT_ASSEMBLY_VERSION "' "                          \
@@ -73,7 +73,7 @@
                 "version='" _CRT_ASSEMBLY_VERSION "' "                          \
                 "processorArchitecture='x86' "                                  \
                 "publicKeyToken='" _VC_ASSEMBLY_PUBLICKEYTOKEN "'\"")
-        #elif defined(_M_AMD64)
+        #elif defined(_M_X64)
             #pragma comment(linker,"/manifestdependency:\"type='win32' "            \
                 "name='" __LIBRARIES_ASSEMBLY_NAME_PREFIX ".OpenMP' "              \
                 "version='" _CRT_ASSEMBLY_VERSION "' "                          \
@@ -197,10 +197,6 @@ const int M = 17*17;
 const int N = 13*13;
 
 int TestMain () {
-#ifdef _PGO_INSTRUMENT
-    REPORT("Known issue: test_openmp.exe has problems if compiled with -prof-genx; skipping\n");
-    return Harness::Skipped;
-#endif
     MinThread = 1;
     for( int p=MinThread; p<=MaxThread; ++p ) {
         T a[M];
diff --git a/src/test/test_overwrite_node.cpp b/src/test/test_overwrite_node.cpp
new file mode 100644
index 0000000..8d0cdfc
--- /dev/null
+++ b/src/test/test_overwrite_node.cpp
@@ -0,0 +1,151 @@
+/*
+    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.
+*/
+
+#include "harness_graph.h"
+#define TBB_PREVIEW_GRAPH 1
+#include "tbb/graph.h"
+
+#include "tbb/task_scheduler_init.h"
+
+#define N 300
+#define T 4 
+#define M 4
+
+template< typename R >
+void simple_read_write_tests() {
+    tbb::overwrite_node<R> n;
+
+    for ( int t = 0; t < T; ++t ) {
+        R v0(N+1);
+        harness_counting_receiver<R> r[M];
+
+        ASSERT( n.is_valid() == false, NULL );
+        ASSERT( n.try_get( v0 ) == false, NULL );
+        if ( t % 2 ) {
+            ASSERT( n.try_put( static_cast<R>(N) ), NULL );
+            ASSERT( n.is_valid() == true, NULL );
+            ASSERT( n.try_get( v0 ) == true, NULL );
+            ASSERT( v0 == R(N), NULL );
+       }
+
+        for (int i = 0; i < M; ++i) {
+           ASSERT( n.register_successor(r[i]), NULL );
+        }
+
+        for (int i = 0; i < N; ++i ) {
+            R v1(static_cast<R>(i));
+            ASSERT( n.try_put( v1 ), NULL );
+            ASSERT( n.is_valid() == true, NULL );
+            for (int j = 0; j < N; ++j ) {
+                R v2(0);
+                ASSERT( n.try_get( v2 ), NULL );
+                ASSERT( v1 == v2, NULL );
+            }
+        }
+        for (int i = 0; i < M; ++i) {
+             size_t c = r[i].my_count;
+             ASSERT( int(c) == N+t%2, NULL );
+        }
+        for (int i = 0; i < M; ++i) {
+           ASSERT( n.remove_successor(r[i]), NULL );
+        }
+        ASSERT( n.try_put( R(0) ), NULL );
+        for (int i = 0; i < M; ++i) {
+             size_t c = r[i].my_count;
+             ASSERT( int(c) == N+t%2, NULL );
+        }
+        n.clear();
+        ASSERT( n.is_valid() == false, NULL );
+        ASSERT( n.try_get( v0 ) == false, NULL );
+    }
+}
+
+template< typename R >
+class native_body : NoAssign {
+    tbb::overwrite_node<R> &my_node;
+
+public:
+
+     native_body( tbb::overwrite_node<R> &n ) : my_node(n) {}
+
+     void operator()( int i ) const {
+         R v1(static_cast<R>(i));
+         ASSERT( my_node.try_put( v1 ), NULL );
+         ASSERT( my_node.is_valid() == true, NULL );
+     }
+};
+
+template< typename R >
+void parallel_read_write_tests() {
+    tbb::overwrite_node<R> n;
+
+    for ( int t = 0; t < T; ++t ) {
+        harness_counting_receiver<R> r[M];
+
+        for (int i = 0; i < M; ++i) {
+           ASSERT( n.register_successor(r[i]), NULL );
+        }
+        R v0;
+        ASSERT( n.is_valid() == false, NULL );
+        ASSERT( n.try_get( v0 ) == false, NULL );
+
+        NativeParallelFor( N, native_body<R>( n ) );
+
+        for (int i = 0; i < M; ++i) {
+             size_t c = r[i].my_count;
+             ASSERT( int(c) == N, NULL );
+        }
+        for (int i = 0; i < M; ++i) {
+           ASSERT( n.remove_successor(r[i]), NULL );
+        }
+        ASSERT( n.try_put( R(0) ), NULL );
+        for (int i = 0; i < M; ++i) {
+             size_t c = r[i].my_count;
+             ASSERT( int(c) == N, NULL );
+        }
+        n.clear();
+        ASSERT( n.is_valid() == false, NULL );
+        ASSERT( n.try_get( v0 ) == false, NULL );
+    }
+}
+
+int TestMain() { 
+    if( MinThread<1 ) {
+        REPORT("number of threads must be positive\n");
+        exit(1);
+    }
+    simple_read_write_tests<int>();
+    simple_read_write_tests<float>();
+    for( int p=MinThread; p<=MaxThread; ++p ) {
+        tbb::task_scheduler_init init(p);
+        parallel_read_write_tests<int>();
+        parallel_read_write_tests<float>();
+    }
+    return Harness::Done;
+}
+
diff --git a/src/test/test_parallel_do.cpp b/src/test/test_parallel_do.cpp
index 42ffd53..10f2ff8 100644
--- a/src/test/test_parallel_do.cpp
+++ b/src/test/test_parallel_do.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 68fe08b..17a7dbd 100644
--- a/src/test/test_parallel_for.cpp
+++ b/src/test/test_parallel_for.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 320aadf..4d8038f 100644
--- a/src/test/test_parallel_for_each.cpp
+++ b/src/test/test_parallel_for_each.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 e4ce649..55d15bf 100644
--- a/src/test/test_parallel_invoke.cpp
+++ b/src/test/test_parallel_invoke.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 e5cd43c..26104b1 100644
--- a/src/test/test_parallel_pipeline.cpp
+++ b/src/test/test_parallel_pipeline.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -34,12 +34,54 @@ int filter_node_count = 0;
 
 #include "tbb/atomic.h"
 #include "harness.h"
+#include <string.h>
 
-const int n_tokens = 8;
-const int max_counter = 16;
+#include "tbb/tbb_allocator.h"
+
+const unsigned n_tokens = 8;
+const unsigned max_counter = 16;
 static tbb::atomic<int> output_counter;
 static tbb::atomic<int> input_counter;
 static tbb::atomic<int> check_type_counter;
+static tbb::atomic<int> non_pointer_specialized_calls;
+static tbb::atomic<int> pointer_specialized_calls;
+static tbb::atomic<int> first_pointer_specialized_calls;
+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 tbb::atomic<size_t> nextBuffer;
+
+void *fetchNextBuffer() {
+    for(;;) {
+        size_t indx = ++nextBuffer;
+        if(buf_available[indx%n_tokens]) {
+            buf_available[indx%n_tokens] = false;
+            return buffers[indx%n_tokens];
+        }
+    }
+}
+void freeBuffer(void *buf) {
+    for(size_t i=0; i < n_tokens;++i) {
+        if(buffers[i] == buf) {
+            buf_available[i] = true;
+            return;
+        }
+    }
+    ASSERT(0, "Tried to free a buffer not in our list");
+}
+
+template<typename T>
+class free_on_scope_exit {
+public:
+    free_on_scope_exit(T *p) : my_p(p) {}
+    ~free_on_scope_exit() { if(!my_p) return; my_p->~T(); freeBuffer(my_p); }
+private:
+    T *my_p;
+};
 
 class check_type : Harness::NoAfterlife {
     unsigned int id;
@@ -60,7 +102,9 @@ public:
     ~check_type() { 
         AssertLive(); 
         --check_type_counter;
+        ASSERT(check_type_counter >= 0, "too many destructions");
     }
+
     unsigned int my_id() { AssertLive(); return id; }
     bool is_ready() { AssertLive(); return am_ready; }
     void function() {
@@ -80,12 +124,34 @@ public:
         AssertLive();
         if( --input_counter < 0 ) {
             control.stop();
-        }
+        } 
+        else  // only count successful reads
+            ++non_pointer_specialized_calls;
         return U();  // default constructed
     }
 
 };
 
+// specialization for pointer
+template<typename U>
+class input_filter<U*> : Harness::NoAfterlife {
+public:
+    U* operator()(tbb::flow_control& control) const {
+        AssertLive();
+        int ival = --input_counter;
+        if(ival < 0) {
+            control.stop();
+            return NULL;
+        }
+        ++pointer_specialized_calls;
+        if(ival == max_counter / 2) {
+            return NULL;  // non-stop NULL
+        }
+        U* myReturn = new(fetchNextBuffer()) U();
+        return myReturn;
+    }
+};
+
 template<>
 class input_filter<void> : Harness::NoAfterlife {
 public:
@@ -94,10 +160,29 @@ public:
         if( --input_counter < 0 ) {
             control.stop();
         }
+        else 
+            ++non_pointer_specialized_calls;
     }
 
 };
 
+// specialization for int that passes back a sequence of integers
+template<>
+class input_filter<int> : Harness::NoAfterlife {
+public:
+    int
+    operator()(tbb::flow_control& control ) const {
+        AssertLive();
+        int oldval = --input_counter;
+        if( oldval < 0 ) {
+            control.stop();
+        }
+        else
+            ++non_pointer_specialized_calls;
+        return oldval+1;
+    }
+};
+
 
 template<>
 class input_filter<check_type> : Harness::NoAfterlife {
@@ -107,19 +192,91 @@ public:
         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 {
         AssertLive();
+        ++non_pointer_specialized_calls;
+        return U();
+    }
+};
+
+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();
+        ++first_pointer_specialized_calls;
         return U();
     }
 };
 
+template<typename T, typename U>
+class middle_filter<T,U*> : Harness::NoAfterlife {
+public:
+    U* operator()(T /*my_storage*/) const {
+        AssertLive();
+        // allocate new space from buffers
+        U* my_return = new(fetchNextBuffer()) U();
+        ++second_pointer_specialized_calls;
+        return my_return;
+    }
+};
+
+template<typename T, typename U>
+class middle_filter<T*,U*> : Harness::NoAfterlife {
+public:
+    U* operator()(T* my_storage) const {
+        AssertLive();
+        // just construct a U over the T
+        // we are using the same buffer
+        ++pointer_specialized_calls;
+        if(!my_storage) return NULL;
+        my_storage->~T();
+        U* my_return = new(my_storage) U();
+        return my_return;
+    }
+};
+
+// specialization for int that squares the input and returns that.
+template<>
+class middle_filter<int,int> : Harness::NoAfterlife {
+public:
+    int operator()(int my_input) const {
+        AssertLive();
+        ++non_pointer_specialized_calls;
+        return my_input*my_input;
+    }
+};
+
 template<>
 class middle_filter<check_type, check_type> : Harness::NoAfterlife {
 public:
@@ -128,9 +285,56 @@ public:
         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>
@@ -138,7 +342,32 @@ class output_filter : Harness::NoAfterlife {
 public:
     void operator()(T) const {
         AssertLive();
+        ++non_pointer_specialized_calls;
+        output_counter++;
+    }
+};
+
+// specialization for int that puts the received value in an array
+template<>
+class output_filter<int> : Harness::NoAfterlife {
+public:
+    void operator()(int my_input) const {
+        AssertLive();
+        ++non_pointer_specialized_calls;
+        int myindx = output_counter++;
+        intbuffer[myindx] = my_input;
+    }
+};
+
+
+template<typename T>
+class output_filter<T*> : Harness::NoAfterlife {
+public:
+    void operator()(T* c) const {
+        free_on_scope_exit<T> my_ptr(c);
+        AssertLive();
         output_counter++;
+        ++pointer_specialized_calls;
     }
 };
 
@@ -149,17 +378,91 @@ public:
         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");
+        }
+        output_counter++;
+        ++pointer_specialized_calls;
+    }
+};
+
+typedef enum {
+    no_pointer_counts,
+    assert_nonpointer,
+    assert_firstpointer,
+    assert_secondpointer,
+    assert_allpointer
+} final_assert_type;
+
 void resetCounters() {
     output_counter = 0;
     input_counter = max_counter;
+    nextBuffer = 0;
+    non_pointer_specialized_calls = 0;
+    pointer_specialized_calls = 0;
+    first_pointer_specialized_calls = 0;
+    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)
+        buf_available[i] = true;
 }
 
-void checkCounters() {
+void checkCounters(final_assert_type my_t) {
     ASSERT(output_counter == max_counter, "not all tokens were passed through pipeline");
+    switch(my_t) {
+        case assert_nonpointer:
+            ASSERT(pointer_specialized_calls+first_pointer_specialized_calls+second_pointer_specialized_calls == 0, "non-pointer filters specialized to pointer");
+            ASSERT(non_pointer_specialized_calls == 3*max_counter, "bad count for non-pointer filters");
+            if(check_intbuffer) {
+                for(int i = 1; i <= (int)max_counter; ++i) {
+                    int j = i*i;
+                    bool found_val = false;
+                    for(int k = 0; k < (int)max_counter; ++k) {
+                        if(intbuffer[k] == j) {
+                            found_val = true;
+                            break;
+                        }
+                    }
+                    ASSERT(found_val, "Missing value in output array" );
+                }
+            }
+            break;
+        case assert_firstpointer:
+            ASSERT(pointer_specialized_calls == max_counter &&  // input filter extra invocation
+                    first_pointer_specialized_calls == max_counter &&
+                    non_pointer_specialized_calls == max_counter &&
+                    second_pointer_specialized_calls == 0, "incorrect specialization for firstpointer");
+            break;
+        case assert_secondpointer:
+            ASSERT(pointer_specialized_calls == max_counter && 
+                    first_pointer_specialized_calls == 0 &&
+                    non_pointer_specialized_calls == max_counter &&  // input filter
+                    second_pointer_specialized_calls == max_counter, "incorrect specialization for firstpointer");
+            break;
+        case assert_allpointer:
+            ASSERT(non_pointer_specialized_calls+first_pointer_specialized_calls+second_pointer_specialized_calls == 0, "pointer filters specialized to non-pointer");
+            ASSERT(pointer_specialized_calls == 3*max_counter, "bad count for pointer filters");
+            break;
+        case no_pointer_counts:
+            break;
+    }
+    if(check_type_counter > 0) {
+        REMARK("check_type_counter == %lu\n", (unsigned long)check_type_counter);
+    }
+    ASSERT(!check_type_counter, "Error in check_type creation/destruction");
 }
 
 static const tbb::filter::mode filter_table[] = { tbb::filter::parallel, tbb::filter::serial_in_order, tbb::filter::serial_out_of_order}; 
@@ -210,6 +513,167 @@ void run_function_spec() {
     ASSERT(!filter_node_count, "filter_node objects leaked");
 }
 
+template<typename t1, typename t2>
+void run_filter_set( 
+        input_filter<t1>& i_filter, 
+        middle_filter<t1,t2>& m_filter, 
+        output_filter<t2>& o_filter, 
+        mode_array *filter_type, 
+        final_assert_type my_t) {
+    tbb::filter_t<void, t1> filter1( filter_type[0], i_filter );
+    tbb::filter_t<t1, t2> filter2( filter_type[1], m_filter );
+    tbb::filter_t<t2, void> filter3( filter_type[2], o_filter );
+    ASSERT(filter_node_count==3, "some filter nodes left after previous iteration?");
+    resetCounters();
+    // Create filters sequence when parallel_pipeline() is being run
+    tbb::parallel_pipeline( n_tokens, filter1 & filter2 & filter3 );
+    checkCounters(my_t);
+
+    // Create filters sequence partially outside parallel_pipeline() and also when parallel_pipeline() is being run
+    tbb::filter_t<void, t2> filter12;
+    filter12 = filter1 & filter2;
+    resetCounters();
+    tbb::parallel_pipeline( n_tokens, filter12 & filter3 );
+    checkCounters(my_t);
+
+    tbb::filter_t<void, void> filter123 = filter12 & filter3;
+    // Run pipeline twice with the same filter sequence
+    for( unsigned i = 0; i<2; i++ ) {
+        resetCounters();
+        tbb::parallel_pipeline( n_tokens, filter123 );
+        checkCounters(my_t);
+    }
+
+    // Now copy-construct another filter_t instance, and use it to run pipeline
+    {
+        tbb::filter_t<void, void> copy123( filter123 );
+        resetCounters();
+        tbb::parallel_pipeline( n_tokens, copy123 );
+        checkCounters(my_t);
+    }
+
+    // Construct filters and create the sequence when parallel_pipeline() is being run
+    resetCounters();
+    tbb::parallel_pipeline( n_tokens, 
+               tbb::make_filter<void, t1>(filter_type[0], i_filter) &
+               tbb::make_filter<t1, t2>(filter_type[1], m_filter) &
+               tbb::make_filter<t2, void>(filter_type[2], o_filter) );
+    checkCounters(my_t);
+
+    // Construct filters, make a copy, destroy the original filters, and run with the copy
+    int cnt = filter_node_count;
+    {
+        tbb::filter_t<void, void>* p123 = new tbb::filter_t<void,void> (
+               tbb::make_filter<void, t1>(filter_type[0], i_filter) &
+               tbb::make_filter<t1, t2>(filter_type[1], m_filter) &
+               tbb::make_filter<t2, void>(filter_type[2], o_filter) );
+        ASSERT(filter_node_count==cnt+5, "filter node accounting error?");
+        tbb::filter_t<void, void> copy123( *p123 );
+        delete p123;
+        ASSERT(filter_node_count==cnt+5, "filter nodes deleted prematurely?");
+        resetCounters();
+        tbb::parallel_pipeline( n_tokens, copy123 );
+        checkCounters(my_t);
+    }
+
+    // construct a filter with temporaries
+    {
+        tbb::filter_t<void, void> my_filter;
+        fill_chain<t1,t2>( my_filter, filter_type, i_filter, m_filter, o_filter );
+        resetCounters();
+        tbb::parallel_pipeline( n_tokens, my_filter );
+        checkCounters(my_t);
+    }
+    ASSERT(filter_node_count==cnt, "scope ended but filter nodes not deleted?");
+}
+
+#if __TBB_LAMBDAS_PRESENT
+template <typename t1, typename t2>
+void run_lambdas_test( mode_array *filter_type ) {
+    tbb::atomic<int> counter;
+    counter = max_counter;
+    // Construct filters using lambda-syntax and create the sequence when parallel_pipeline() is being run;
+    resetCounters();  // only need the output_counter reset.
+    tbb::parallel_pipeline( n_tokens, 
+        tbb::make_filter<void, t1>(filter_type[0], [&counter]( tbb::flow_control& control ) -> t1 {
+                if( --counter < 0 )
+                    control.stop();
+                return t1(); }
+        ) &
+        tbb::make_filter<t1, t2>(filter_type[1], []( t1 /*my_storage*/ ) -> t2 {
+                return t2(); }
+        ) &
+        tbb::make_filter<t2, void>(filter_type[2], [] ( t2 ) -> void { 
+                output_counter++; }
+        ) 
+    );
+    checkCounters(no_pointer_counts);  // don't have to worry about specializations
+    counter = max_counter;
+    // pointer filters
+    resetCounters();
+    tbb::parallel_pipeline( n_tokens, 
+        tbb::make_filter<void, t1*>(filter_type[0], [&counter]( tbb::flow_control& control ) -> t1* {
+                if( --counter < 0 ) {
+                    control.stop();
+                    return NULL;
+                }
+                return new(fetchNextBuffer()) t1(); }
+        ) &
+        tbb::make_filter<t1*, t2*>(filter_type[1], []( t1* my_storage ) -> t2* {
+                tbb::tbb_allocator<t1>().destroy(my_storage); // my_storage->~t1();
+                return new(my_storage) t2(); }
+        ) &
+        tbb::make_filter<t2*, void>(filter_type[2], [] ( t2* my_storage ) -> void { 
+                tbb::tbb_allocator<t2>().destroy(my_storage);  // my_storage->~t2();
+                freeBuffer(my_storage);
+                output_counter++; }
+        ) 
+    );
+    checkCounters(no_pointer_counts);
+    // first filter outputs pointer
+    counter = max_counter;
+    resetCounters();
+    tbb::parallel_pipeline( n_tokens, 
+        tbb::make_filter<void, t1*>(filter_type[0], [&counter]( tbb::flow_control& control ) -> t1* {
+                if( --counter < 0 ) {
+                    control.stop();
+                    return NULL;
+                }
+                return new(fetchNextBuffer()) t1(); }
+        ) &
+        tbb::make_filter<t1*, t2>(filter_type[1], []( t1* my_storage ) -> t2 {
+                tbb::tbb_allocator<t1>().destroy(my_storage);   // my_storage->~t1();
+                freeBuffer(my_storage);
+                return t2(); }
+        ) &
+        tbb::make_filter<t2, void>(filter_type[2], [] ( t2 /*my_storage*/) -> void { 
+                output_counter++; }
+        ) 
+    );
+    checkCounters(no_pointer_counts);
+    // second filter outputs pointer
+    counter = max_counter;
+    resetCounters();
+    tbb::parallel_pipeline( n_tokens, 
+        tbb::make_filter<void, t1>(filter_type[0], [&counter]( tbb::flow_control& control ) -> t1 {
+                if( --counter < 0 ) {
+                    control.stop();
+                }
+                return t1(); }
+        ) &
+        tbb::make_filter<t1, t2*>(filter_type[1], []( t1 /*my_storage*/ ) -> t2* {
+                return new(fetchNextBuffer()) t2(); }
+        ) &
+        tbb::make_filter<t2*, void>(filter_type[2], [] ( t2* my_storage) -> void { 
+                tbb::tbb_allocator<t2>().destroy(my_storage);  // my_storage->~t2();
+                freeBuffer(my_storage);
+                output_counter++; }
+        ) 
+    );
+    checkCounters(no_pointer_counts);
+}
+#endif
+
 template<typename type1, typename type2>
 void run_function(const char *l1, const char *l2) {
     ASSERT(!filter_node_count, NULL);
@@ -217,13 +681,29 @@ void run_function(const char *l1, const char *l2) {
 #if __TBB_LAMBDAS_PRESENT
     REMARK( " ( + lambdas)");
 #endif
+    check_intbuffer = (!strcmp(l1,"int") && !strcmp(l2,"int"));
+    if(check_intbuffer) REMARK(", check output of filters");
     REMARK("\n");
 
     const size_t number_of_filters = 3;
 
     input_filter<type1> i_filter;
+    input_filter<type1*> p_i_filter;
+
     middle_filter<type1, type2> m_filter;
+    middle_filter<type1*, type2> pr_m_filter;
+    middle_filter<type1, type2*> rp_m_filter;
+    middle_filter<type1*, type2*> pp_m_filter;
+
     output_filter<type2> o_filter;
+    output_filter<type2*> p_o_filter;
+
+    // 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) {
+        buffers[i] = malloc(max_size);
+        buf_available[i] = true;
+    }
 
     unsigned limit = 1;
     // Test pipeline that contains number_of_filters filters
@@ -233,97 +713,23 @@ void run_function(const char *l1, const char *l2) {
     for( unsigned numeral=0; numeral<limit; ++numeral ) {
         unsigned temp = numeral;
         tbb::filter::mode filter_type[number_of_filter_types];
-        for( unsigned i=0; i<number_of_filters; ++i, temp/=number_of_filter_types ) 
+        for( unsigned i=0; i<number_of_filters; ++i, temp/=number_of_filter_types )
             filter_type[i] = filter_table[temp%number_of_filter_types];
 
-        tbb::filter_t<void, type1> filter1( filter_type[0], i_filter );
-        tbb::filter_t<type1, type2> filter2( filter_type[1], m_filter );
-        tbb::filter_t<type2, void> filter3( filter_type[2], o_filter );
-        ASSERT(filter_node_count==3, "some filter nodes left after previous iteration?");
-        resetCounters();
-        // Create filters sequence when parallel_pipeline() is being run
-        tbb::parallel_pipeline( n_tokens, filter1 & filter2 & filter3 );
-        checkCounters();
-
-        // Create filters sequence partially outside parallel_pipeline() and also when parallel_pipeline() is being run
-        tbb::filter_t<void, type2> filter12;
-        filter12 = filter1 & filter2;
-        resetCounters();
-        tbb::parallel_pipeline( n_tokens, filter12 & filter3 );
-        checkCounters();
-
-        tbb::filter_t<void, void> filter123 = filter12 & filter3;
-        // Run pipeline twice with the same filter sequence
-        for( unsigned i = 0; i<2; i++ ) {
-            resetCounters();
-            tbb::parallel_pipeline( n_tokens, filter123 );
-            checkCounters();
-        }
-
-        // Now copy-construct another filter_t instance, and use it to run pipeline
-        {
-            tbb::filter_t<void, void> copy123( filter123 );
-            resetCounters();
-            tbb::parallel_pipeline( n_tokens, copy123 );
-            checkCounters();
-        }
-
-        // Construct filters and create the sequence when parallel_pipeline() is being run
-        resetCounters();
-        tbb::parallel_pipeline( n_tokens, 
-                   tbb::make_filter<void, type1>(filter_type[0], i_filter) &
-                   tbb::make_filter<type1, type2>(filter_type[1], m_filter) &
-                   tbb::make_filter<type2, void>(filter_type[2], o_filter) );
-        checkCounters();
-
-        // Construct filters, make a copy, destroy the original filters, and run with the copy
-        int cnt = filter_node_count;
-        {
-            tbb::filter_t<void, void>* p123 = new tbb::filter_t<void,void> (
-                   tbb::make_filter<void, type1>(filter_type[0], i_filter) &
-                   tbb::make_filter<type1, type2>(filter_type[1], m_filter) &
-                   tbb::make_filter<type2, void>(filter_type[2], o_filter) );
-            ASSERT(filter_node_count==cnt+5, "filter node accounting error?");
-            tbb::filter_t<void, void> copy123( *p123 );
-            delete p123;
-            ASSERT(filter_node_count==cnt+5, "filter nodes deleted prematurely?");
-            resetCounters();
-            tbb::parallel_pipeline( n_tokens, copy123 );
-            checkCounters();
-        }
-
-        // construct a filter with temporaries
-        {
-            tbb::filter_t<void, void> my_filter;
-            fill_chain<type1,type2>( my_filter, filter_type, i_filter, m_filter, o_filter );
-            resetCounters();
-            tbb::parallel_pipeline( n_tokens, my_filter );
-            checkCounters();
-        }
-        ASSERT(filter_node_count==cnt, "scope ended but filter nodes not deleted?");
+        run_filter_set<type1,type2>(i_filter, m_filter, o_filter, filter_type, assert_nonpointer );
+        run_filter_set<type1*,type2>(p_i_filter, pr_m_filter, o_filter, filter_type, assert_firstpointer);
+        run_filter_set<type1,type2*>(i_filter, rp_m_filter, p_o_filter, filter_type, assert_secondpointer);
+        run_filter_set<type1*,type2*>(p_i_filter, pp_m_filter, p_o_filter, filter_type, assert_allpointer);
 
 #if __TBB_LAMBDAS_PRESENT
-        tbb::atomic<int> counter;
-        counter = max_counter;
-        // Construct filters using lambda-syntax and create the sequence when parallel_pipeline() is being run;
-        resetCounters();  // only need the output_counter reset.
-        tbb::parallel_pipeline( n_tokens, 
-            tbb::make_filter<void, type1>(filter_type[0], [&counter]( tbb::flow_control& control ) -> type1 {
-                    if( --counter < 0 )
-                        control.stop();
-                    return type1(); }
-            ) &
-            tbb::make_filter<type1, type2>(filter_type[1], []( type1 /*my_storage*/ ) -> type2 {
-                    return type2(); }
-            ) &
-            tbb::make_filter<type2, void>(filter_type[2], [] ( type2 ) -> void { 
-                    output_counter++; }
-            ) 
-        );
-        checkCounters();
+        run_lambdas_test<type1,type2>(filter_type);
 #endif
     }
     ASSERT(!filter_node_count, "filter_node objects leaked");
+
+    for(unsigned i = 0; i < (unsigned)n_tokens; ++i) {
+        free(buffers[i]);
+    }
 }
 
 #include "tbb/task_scheduler_init.h"
@@ -339,6 +745,9 @@ int TestMain() {
         run_function_spec();
         run_function<size_t,int>("size_t", "int");
         run_function<int,double>("int", "double");
+        run_function<size_t,double>("size_t", "double");
+        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");
diff --git a/src/test/test_parallel_reduce.cpp b/src/test/test_parallel_reduce.cpp
index c29eb89..e246413 100644
--- a/src/test/test_parallel_reduce.cpp
+++ b/src/test/test_parallel_reduce.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -200,7 +200,7 @@ void FlogWithInterference( int nthread ) {
     }
     // Wait for all tasks in the chain from root to leaf to finish.
     root->wait_for_all();
-    root->destroy( *root );
+    tbb::task::destroy( *root );
 }
 
 #include "tbb/blocked_range.h"
diff --git a/src/test/test_parallel_scan.cpp b/src/test/test_parallel_scan.cpp
index ac9f243..8d5daec 100644
--- a/src/test/test_parallel_scan.cpp
+++ b/src/test/test_parallel_scan.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 58df967..daf8812 100644
--- a/src/test/test_parallel_sort.cpp
+++ b/src/test/test_parallel_sort.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -419,7 +419,6 @@ void Flog() {
     Minimal *minimal_array_2 = new Minimal[N];
     MinimalCompare minimal_less;
 
-#if !__TBB_FLOATING_POINT_BROKEN
     float *float_array = new float[N];
     float *float_array_2 = new float[N];
     std::less<float> float_less;
@@ -428,7 +427,6 @@ void Flog() {
     tbb::concurrent_vector<float> float_cv2;
     float_cv1.grow_to_at_least(N);
     float_cv2.grow_to_at_least(N);
-#endif /* !__TBB_FLOATING_POINT_BROKEN */
 
     std::string *string_array = new std::string[N];
     std::string *string_array_2 = new std::string[N];
@@ -449,7 +447,6 @@ void Flog() {
     parallel_sortTest(9999, minimal_array, minimal_array_2, &minimal_less);
     parallel_sortTest(50000, minimal_array, minimal_array_2, &minimal_less);
 
-#if !__TBB_FLOATING_POINT_BROKEN
     current_type = "float (no less)";
     parallel_sortTest(0, float_array, float_array_2, static_cast<std::less<float> *>(NULL)); 
     parallel_sortTest(1, float_array, float_array_2, static_cast<std::less<float> *>(NULL)); 
@@ -477,7 +474,6 @@ void Flog() {
     parallel_sortTest(10, float_cv1.begin(), float_cv2.begin(), &float_less);
     parallel_sortTest(9999, float_cv1.begin(), float_cv2.begin(), &float_less);
     parallel_sortTest(50000, float_cv1.begin(), float_cv2.begin(), &float_less);
-#endif /* !__TBB_FLOATING_POINT_BROKEN */
 
     current_type = "string (no less)";
     parallel_sortTest(0, string_array, string_array_2, static_cast<std::less<std::string> *>(NULL));
@@ -503,10 +499,8 @@ void Flog() {
     delete [] minimal_array;
     delete [] minimal_array_2;
 
-#if !__TBB_FLOATING_POINT_BROKEN
     delete [] float_array;
     delete [] float_array_2;
-#endif /* !__TBB_FLOATING_POINT_BROKEN */
 
     delete [] string_array;
     delete [] string_array_2;
diff --git a/src/test/test_parallel_while.cpp b/src/test/test_parallel_while.cpp
index 88f7997..2a31a4d 100644
--- a/src/test/test_parallel_while.cpp
+++ b/src/test/test_parallel_while.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 38f7a69..01fb51d 100644
--- a/src/test/test_pipeline.cpp
+++ b/src/test/test_pipeline.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -173,6 +173,7 @@ struct hacked_pipeline {
 //! The struct below repeats layout of tbb::internal::input_buffer.
 struct hacked_input_buffer {
     void* array; // This should be changed to task_info* if ever used
+	void* my_sem; // This should be changed to semaphore* if ever used
     tbb::internal::Token array_size;
     tbb::internal::Token low_token;
     tbb::spin_mutex array_mutex;
@@ -215,7 +216,7 @@ void TestTrivialPipeline( unsigned nthread, unsigned number_of_filters ) {
         tbb::pipeline pipeline;
         if( do_hacking_tests ) {
             // A private member of pipeline is hacked there for sake of testing wrap-around immunity.
-            ((hacked_pipeline*)(void*)&pipeline)->token_counter = ~tokens_before_wraparound;
+            tbb::internal::punned_cast<hacked_pipeline*>(&pipeline)->token_counter = ~tokens_before_wraparound;
         }
         tbb::filter* filter[MaxFilters];
         unsigned temp = numeral;
diff --git a/src/test/test_pipeline_with_tbf.cpp b/src/test/test_pipeline_with_tbf.cpp
index 2376434..279b9fc 100644
--- a/src/test/test_pipeline_with_tbf.cpp
+++ b/src/test/test_pipeline_with_tbf.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -43,6 +43,7 @@ tbb::tbb_thread::id thread_id;
 tbb::tbb_thread::id id0;
 //! True if non-thread-bound stages must be executed on one thread
 bool is_serial_execution;
+double sleeptime; // how long is a non-thread-bound stage to sleep?
 
 struct Buffer {
     //! Indicates that the buffer is not used.
@@ -114,6 +115,9 @@ public:
         my_is_running = true;
         Buffer* b = get_buffer(item);
         if( b ) {
+            if(!this->is_bound() && sleeptime > 0) {
+                Harness::Sleep((int)sleeptime);
+            }
             if( this->is_ordered() ) {
                 if( b->sequence_number == Buffer::unused ) 
                     b->sequence_number = current_token-1;
@@ -237,15 +241,110 @@ void clear_global_state() {
     is_serial_execution = false;
 }
 
-void TestTrivialPipeline( unsigned nthread, unsigned number_of_filters ) {
+
+class PipelineTest {
     // There are 3 non-thread-bound filter types: serial_in_order and serial_out_of_order, parallel
-    static const tbb::filter::mode non_tb_filters_table[] = { tbb::filter::serial_in_order, tbb::filter::serial_out_of_order, tbb::filter::parallel}; 
+    static const tbb::filter::mode non_tb_filters_table[3]; // = { tbb::filter::serial_in_order, tbb::filter::serial_out_of_order, tbb::filter::parallel}; 
     // There are 2 thread-bound filter types: serial_in_order and serial_out_of_order 
-    static const tbb::filter::mode tb_filters_table[] = { tbb::filter::serial_in_order, tbb::filter::serial_out_of_order }; 
+    static const tbb::filter::mode tb_filters_table[2]; // = { tbb::filter::serial_in_order, tbb::filter::serial_out_of_order }; 
     
-    const unsigned number_of_non_tb_filter_types = sizeof(non_tb_filters_table)/sizeof(non_tb_filters_table[0]);
-    const unsigned number_of_tb_filter_types = sizeof(tb_filters_table)/sizeof(tb_filters_table[0]);
-    const unsigned number_of_filter_types = number_of_non_tb_filter_types + number_of_tb_filter_types;
+    static const unsigned number_of_non_tb_filter_types = sizeof(non_tb_filters_table)/sizeof(non_tb_filters_table[0]);
+    static const unsigned number_of_tb_filter_types = sizeof(tb_filters_table)/sizeof(tb_filters_table[0]);
+    static const unsigned number_of_filter_types = number_of_non_tb_filter_types + number_of_tb_filter_types;
+    // static unsigned my_nthread;
+    public:
+    static double TestOneConfiguration( unsigned numeral, unsigned nthread, unsigned number_of_filters, tbb::internal::Token ntokens);
+    static void TestTrivialPipeline( unsigned nthread, unsigned number_of_filters );
+    static void TestIdleSpinning(unsigned nthread);
+};
+
+const tbb::filter::mode PipelineTest::non_tb_filters_table[3] = { tbb::filter::serial_in_order, tbb::filter::serial_out_of_order, tbb::filter::parallel}; 
+const tbb::filter::mode PipelineTest::tb_filters_table[2] = { tbb::filter::serial_in_order, tbb::filter::serial_out_of_order }; 
+
+#include "harness_cpu.h"
+
+double PipelineTest::TestOneConfiguration(unsigned numeral, unsigned nthread, unsigned number_of_filters, tbb::internal::Token ntokens)
+{
+    // Build pipeline
+    tbb::pipeline pipeline;
+    tbb::filter* filter[MaxFilters];
+    unsigned temp = numeral;
+    // parallelism_limit is the upper bound on the possible parallelism
+    unsigned parallelism_limit = 0;
+    // number of thread-bound-filters in the current sequence
+    unsigned number_of_tb_filters = 0;
+    // ordinal numbers of thread-bound-filters in the current sequence
+    unsigned array_of_tb_filter_numbers[MaxFilters];
+    for( unsigned i=0; i<number_of_filters; ++i, temp/=number_of_filter_types ) {
+        bool is_bound = temp%number_of_filter_types&0x1;
+        tbb::filter::mode filter_type;
+        if( is_bound ) {
+            filter_type = tb_filters_table[temp%number_of_filter_types/number_of_non_tb_filter_types];
+        } else
+            filter_type = non_tb_filters_table[temp%number_of_filter_types/number_of_tb_filter_types];
+        const bool is_last = i==number_of_filters-1;
+        if( is_bound ) {
+            if( i == 0 )
+                filter[i] = new InputFilter<tbb::thread_bound_filter>(filter_type,ntokens,Done[i],is_last);
+            else
+                filter[i] = new BaseFilter<tbb::thread_bound_filter>(filter_type,Done[i],is_last);
+            array_of_tb_filter_numbers[number_of_tb_filters] = i;
+            number_of_tb_filters++;
+        } else {
+            if( i == 0 )
+                filter[i] = new InputFilter<tbb::filter>(filter_type,ntokens,Done[i],is_last);
+            else
+                filter[i] = new BaseFilter<tbb::filter>(filter_type,Done[i],is_last);
+        }
+        pipeline.add_filter(*filter[i]);
+        if ( filter[i]->is_serial() ) {
+            parallelism_limit += 1;
+        } else {
+            parallelism_limit = nthread;
+        }
+    }
+    clear_global_state();
+    // Account for clipping of parallelism.
+    if( parallelism_limit>nthread ) 
+        parallelism_limit = nthread;
+    if( parallelism_limit>ntokens )
+        parallelism_limit = (unsigned)ntokens;
+    StreamSize = nthread; // min( MaxStreamSize, nthread * MaxStreamItemsPerThread );
+
+    for( unsigned i=0; i<number_of_filters; ++i ) {
+        static_cast<BaseFilter<tbb::filter>*>(filter[i])->current_token=0;
+    }
+    tbb::tbb_thread* t[MaxFilters];
+    for( unsigned j = 0; j<number_of_tb_filters; j++)
+        t[j] = new tbb::tbb_thread(process_loop(), static_cast<tbb::thread_bound_filter*>(filter[array_of_tb_filter_numbers[j]]));
+    if( ntokens == 1 || ( number_of_filters == 1 && number_of_tb_filters == 0 && filter[0]->is_serial() ))
+        is_serial_execution = true;
+    double strttime = GetCPUUserTime();
+    pipeline.run( ntokens );
+    double endtime = GetCPUUserTime();
+    for( unsigned j = 0; j<number_of_tb_filters; j++)
+        t[j]->join();
+    ASSERT( !Harness::ConcurrencyTracker::InstantParallelism(), "filter still running?" );
+    for( unsigned i=0; i<number_of_filters; ++i )
+        ASSERT( static_cast<BaseFilter<tbb::filter>*>(filter[i])->current_token==StreamSize, NULL );
+    for( unsigned i=0; i<MaxFilters; ++i )
+        for( unsigned j=0; j<StreamSize; ++j ) {
+            ASSERT( Done[i][j]==(i<number_of_filters), NULL );
+        }
+    if( Harness::ConcurrencyTracker::PeakParallelism() < parallelism_limit ) 
+        REMARK( "nthread=%lu ntokens=%lu MaxParallelism=%lu parallelism_limit=%lu\n",
+            nthread, ntokens, Harness::ConcurrencyTracker::PeakParallelism(), parallelism_limit );
+    for( unsigned i=0; i < number_of_filters; ++i ) {
+        delete filter[i];
+        filter[i] = NULL;
+    }
+    for( unsigned j = 0; j<number_of_tb_filters; j++)
+        delete t[j];
+    pipeline.clear();
+    return endtime - strttime;
+} // TestOneConfiguration
+
+void PipelineTest::TestTrivialPipeline( unsigned nthread, unsigned number_of_filters ) {
 
     REMARK( "testing with %lu threads and %lu filters\n", nthread, number_of_filters );
     ASSERT( number_of_filters<=MaxFilters, "too many filters" );
@@ -265,86 +364,92 @@ void TestTrivialPipeline( unsigned nthread, unsigned number_of_filters ) {
         // Iterate over possible filter sequences
         for( unsigned numeral=0; numeral<limit; ++numeral ) {
             REMARK( "testing configuration %lu of %lu\n", numeral, limit );
-            // Build pipeline
-            tbb::pipeline pipeline;
-            tbb::filter* filter[MaxFilters];
-            unsigned temp = numeral;
-            // parallelism_limit is the upper bound on the possible parallelism
-            unsigned parallelism_limit = 0;
-            // number of thread-bound-filters in the current sequence
-            unsigned number_of_tb_filters = 0;
-            // ordinal numbers of thread-bound-filters in the current sequence
-            unsigned array_of_tb_filter_numbers[MaxFilters];
-            for( unsigned i=0; i<number_of_filters; ++i, temp/=number_of_filter_types ) {
-                bool is_bound = temp%number_of_filter_types&0x1;
-                tbb::filter::mode filter_type;
-                if( is_bound ) {
-                    filter_type = tb_filters_table[temp%number_of_filter_types/number_of_non_tb_filter_types];
-                } else
-                    filter_type = non_tb_filters_table[temp%number_of_filter_types/number_of_tb_filter_types];
-                const bool is_last = i==number_of_filters-1;
-                if( is_bound ) {
-                    if( i == 0 )
-                        filter[i] = new InputFilter<tbb::thread_bound_filter>(filter_type,ntokens,Done[i],is_last);
-                    else
-                        filter[i] = new BaseFilter<tbb::thread_bound_filter>(filter_type,Done[i],is_last);
-                    array_of_tb_filter_numbers[number_of_tb_filters] = i;
-                    number_of_tb_filters++;
-                } else {
-                    if( i == 0 )
-                       filter[i] = new InputFilter<tbb::filter>(filter_type,ntokens,Done[i],is_last);
-                    else
-                        filter[i] = new BaseFilter<tbb::filter>(filter_type,Done[i],is_last);
-                }
-                pipeline.add_filter(*filter[i]);
-                if ( filter[i]->is_serial() ) {
-                    parallelism_limit += 1;
-                } else {
-                    parallelism_limit = nthread;
-                }
+            (void)TestOneConfiguration(numeral, nthread, number_of_filters, ntokens);
+        }
+    }
+}
+
+// varying times for sleep result in different user times for all pipelines.
+// So we compare the running time of an all non-TBF pipeline with different (with
+// luck representative) TBF configurations.
+//
+// We run the tests multiple times and compare the average runtimes for those cases
+// that don't return 0 user time.  configurations that exceed the allowable extra
+// time are reported.
+void PipelineTest::TestIdleSpinning( unsigned nthread)  {
+    unsigned sample_setups[] = {
+        // in the comments below, s == serial, B == thread bound serial, p == parallel
+        1,   // B s s s
+        5,   // s B s s
+        25,  // s s B s
+        125, // s s s B
+        6,   // B B s s
+        26,  // B s B s
+        126, // B s s B
+        30,  // s B B s
+        130, // s B s B
+        150, // s s B B
+        31,  // B B B s
+        131, // B B s B
+        155, // s B B B
+        21,  // B p s s
+        105, // s B p s
+        45,  // s p B s
+        225, // s s p B
+    };
+    const int nsetups = sizeof(sample_setups) / sizeof(unsigned);
+    const int ntests = 4;
+    const double bignum = 1000000000.0;
+    const double allowable_slowdown = 3.5;
+    unsigned zero_count = 0;
+
+    REMARK( "testing idle spinning with %lu threads\n", nthread );
+    tbb::internal::Token max_tokens = nthread < MaxBuffer ? nthread : MaxBuffer;
+    for( int i=0; i<nsetups; ++i ) {
+        unsigned numeral = sample_setups[i];
+        unsigned temp = numeral;
+        unsigned nbound = 0;
+        while(temp) {
+            if((temp%number_of_filter_types)&0x01) nbound++;
+            temp /= number_of_filter_types;
+        }
+        sleeptime = 20.0;
+        double s0 = bignum;
+        double s1 = bignum;
+        int v0cnt = 0;
+        int v1cnt = 0;
+        double s0sum = 0.0;
+        double s1sum = 0.0;
+        for(int j = 0; j < ntests; ++j) {
+            double s1a = TestOneConfiguration(numeral, nthread, MaxFilters, max_tokens);
+            double s0a = TestOneConfiguration((unsigned)0, nthread, MaxFilters, max_tokens);
+            s1sum += s1a;
+            s0sum += s0a;
+            if(s0a > 0.0) {
+                ++v0cnt;
+                s0 = (s0a < s0) ? s0a : s0;
             }
-            clear_global_state();
-            // Account for clipping of parallelism.
-            if( parallelism_limit>nthread ) 
-                parallelism_limit = nthread;
-            if( parallelism_limit>ntokens )
-                parallelism_limit = (unsigned)ntokens;
-            StreamSize = nthread; // min( MaxStreamSize, nthread * MaxStreamItemsPerThread );
-
-            for( unsigned i=0; i<number_of_filters; ++i ) {
-                static_cast<BaseFilter<tbb::filter>*>(filter[i])->current_token=0;
+            else {
+                ++zero_count;
             }
-            tbb::tbb_thread* t[MaxFilters];
-            for( unsigned j = 0; j<number_of_tb_filters; j++)
-                t[j] = new tbb::tbb_thread(process_loop(), static_cast<tbb::thread_bound_filter*>(filter[array_of_tb_filter_numbers[j]]));
-            if( ntokens == 1 || ( number_of_filters == 1 && number_of_tb_filters == 0 && filter[0]->is_serial() ))
-                is_serial_execution = true;
-            pipeline.run( ntokens );
-            for( unsigned j = 0; j<number_of_tb_filters; j++)
-               t[j]->join();
-            ASSERT( !Harness::ConcurrencyTracker::InstantParallelism(), "filter still running?" );
-            for( unsigned i=0; i<number_of_filters; ++i )
-                ASSERT( static_cast<BaseFilter<tbb::filter>*>(filter[i])->current_token==StreamSize, NULL );
-            for( unsigned i=0; i<MaxFilters; ++i )
-                for( unsigned j=0; j<StreamSize; ++j ) {
-                    ASSERT( Done[i][j]==(i<number_of_filters), NULL );
-                }
-            if( Harness::ConcurrencyTracker::PeakParallelism() < parallelism_limit ) 
-                REMARK( "nthread=%lu ntokens=%lu MaxParallelism=%lu parallelism_limit=%lu\n",
-                    nthread, ntokens, Harness::ConcurrencyTracker::PeakParallelism(), parallelism_limit );
-            for( unsigned i=0; i < number_of_filters; ++i ) {
-                delete filter[i];
-                filter[i] = NULL;
+            if(s1a > 0.0) {
+                ++v1cnt;
+                s1 = (s1a < s1) ? s1a : s1;
+            }
+            else {
+                ++zero_count;
             }
-            for( unsigned j = 0; j<number_of_tb_filters; j++)
-                delete t[j];
-            pipeline.clear();
         }
+        if(s0 == bignum || s1 == bignum) continue;
+        s0sum /= (double)v0cnt;
+        s1sum /= (double)v1cnt;
+        double slowdown = (s1sum-s0sum)/s0sum;
+        if(slowdown > allowable_slowdown)
+            REMARK( "with %lu threads configuration %lu has slowdown > %g (%g)\n", nthread, numeral, allowable_slowdown, slowdown );
     }
+    REMARK("Total of %lu zero times\n", zero_count);
 }
 
-#include "harness_cpu.h"
-
 static int nthread; // knowing number of threads is necessary to call TestCPUUserTime
 
 void waiting_probe::probe( ) {
@@ -364,6 +469,7 @@ int TestMain () {
         exit(1);
     }
 
+    sleeptime = 0.0;  // msec : 0 == no_timing, > 0, each filter stage sleeps for sleeptime
     // Test with varying number of threads.
     for( nthread=MinThread; nthread<=MaxThread; ++nthread ) {
         // Initialize TBB task scheduler
@@ -373,11 +479,13 @@ int TestMain () {
         for( unsigned n=1; n<=MaxFilters; n*=MaxFilters ) {
             // Thread-bound stages are serviced by user-created threads those 
             // don't run the pipeline and don't service non-thread-bound stages 
-            TestTrivialPipeline(nthread,n);
+            PipelineTest::TestTrivialPipeline(nthread,n);
         }
 
         // Test that all workers sleep when no work
         TestCPUUserTime(nthread);
+        if((unsigned)nthread >= MaxFilters)  // test works when number of threads >= number of stages
+            PipelineTest::TestIdleSpinning(nthread);
     }
     if( !out_of_order_count )
         REPORT("Warning: out of order serial filter received tokens in order\n");
diff --git a/src/test/test_priority_queue_node.cpp b/src/test/test_priority_queue_node.cpp
new file mode 100644
index 0000000..c30a656
--- /dev/null
+++ b/src/test/test_priority_queue_node.cpp
@@ -0,0 +1,330 @@
+/*
+    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.
+*/
+
+// TO DO: Add overlapping put / receive tests
+
+#define TBB_PREVIEW_GRAPH 1
+#include "tbb/graph.h"
+#include "tbb/task_scheduler_init.h"
+#include "tbb/tick_count.h"
+#include "harness.h"
+
+#include <cstdio>
+
+#define N 10
+#define C 10
+
+template< typename T >
+void spin_try_get( tbb::priority_queue_node<T> &q, T &value ) {
+    while ( q.try_get(value) != true ) ;
+}
+
+template< typename T >
+void check_item( T* next_value, T &value ) {
+    int tid = value / N;
+    int offset = value % N;
+    ASSERT( next_value[tid] == T(offset), NULL );
+    ++next_value[tid];
+}
+
+template< typename T >
+struct parallel_puts : NoAssign {
+    tbb::priority_queue_node<T> &my_q;
+    parallel_puts( tbb::priority_queue_node<T> &q ) : my_q(q) {}
+    void operator()(int i) const {
+        for (int j = 0; j < N; ++j) {
+            bool msg = my_q.try_put( T(N*i + j) );
+            ASSERT( msg == true, NULL );
+        }
+    }
+};
+
+template< typename T >
+struct parallel_gets : NoAssign {
+    tbb::priority_queue_node<T> &my_q;
+    parallel_gets( tbb::priority_queue_node<T> &q) : my_q(q) {}
+    void operator()(int) const {
+        T prev;
+        spin_try_get( my_q, prev );
+        for (int j = 0; j < N-1; ++j) {
+            T v;
+            spin_try_get( my_q, v );
+            ASSERT(v < prev, NULL);
+        }
+    }
+};
+
+template< typename T >
+struct parallel_put_get : NoAssign {
+    tbb::priority_queue_node<T> &my_q;
+    parallel_put_get( tbb::priority_queue_node<T> &q ) : my_q(q) {}
+    void operator()(int tid) const {
+        for ( int i = 0; i < N; i+=C ) {
+            int j_end = ( N < i + C ) ? N : i + C; 
+            // dump about C values into the Q
+            for ( int j = i; j < j_end; ++j ) {
+                ASSERT( my_q.try_put( T (N*tid + j ) ) == true, NULL );
+            }
+            // receive about C values from the Q
+            for ( int j = i; j < j_end; ++j ) {
+                T v;
+                spin_try_get( my_q, v );
+            }
+        }
+    }
+};
+
+//
+// Tests
+//
+// Item can be reserved, released, consumed ( single serial receiver )
+//
+template< typename T >
+int test_reservation(int) {
+    tbb::graph g;
+    T bogus_value(-1);
+
+    // Simple tests
+    tbb::priority_queue_node<T> q(g);
+
+    q.try_put(T(1));
+    q.try_put(T(2));
+    q.try_put(T(3));
+    g.wait_for_all();
+
+    T v=bogus_value, w=bogus_value;
+    ASSERT( q.try_reserve(v) == true, NULL );
+    ASSERT( v == T(3), NULL ); 
+    ASSERT( q.try_release() == true, NULL );
+    v = bogus_value;
+    g.wait_for_all();
+    ASSERT( q.try_reserve(v) == true, NULL );
+    ASSERT( v == T(3), NULL ); 
+    ASSERT( q.try_consume() == true, NULL );
+    v = bogus_value;
+    g.wait_for_all();
+ 
+    ASSERT( q.try_get(v) == true, NULL );
+    ASSERT( v == T(2), NULL ); 
+    v = bogus_value;
+    g.wait_for_all();
+    
+    ASSERT( q.try_reserve(v) == true, NULL );
+    ASSERT( v == T(1), NULL ); 
+    ASSERT( q.try_reserve(w) == false, NULL );
+    ASSERT( w == bogus_value, NULL );
+    ASSERT( q.try_get(w) == false, NULL );
+    ASSERT( w == bogus_value, NULL );
+    ASSERT( q.try_release() == true, NULL );
+    v = bogus_value;
+    g.wait_for_all();
+    ASSERT( q.try_reserve(v) == true, NULL );
+    ASSERT( v == T(1), NULL ); 
+    ASSERT( q.try_consume() == true, NULL );
+    v = bogus_value;
+    g.wait_for_all();
+    ASSERT( q.try_get(v) == false, NULL );
+    return 0;
+}
+
+//
+// Tests
+//
+// multilpe parallel senders, items in FIFO (relatively to sender) order
+// multilpe parallel senders, multiple parallel receivers, items in FIFO order (relative to sender/receiver) and all items received
+//   * overlapped puts / gets
+//   * all puts finished before any getS
+//
+template< typename T >
+int test_parallel(int num_threads) {
+    tbb::graph g;
+    tbb::priority_queue_node<T> q(g);
+    tbb::priority_queue_node<T> q2(g);
+    tbb::priority_queue_node<T> q3(g);
+    T bogus_value(-1);
+    T j = bogus_value;
+
+    NativeParallelFor( num_threads, parallel_puts<T>(q) );
+    for (int i = num_threads*N -1; i>=0; --i) {
+        spin_try_get( q, j );
+        ASSERT(j == i, NULL);
+        j = bogus_value;
+    }
+    g.wait_for_all();
+    ASSERT( q.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+
+    NativeParallelFor( num_threads, parallel_puts<T>(q) );
+    g.wait_for_all();
+    NativeParallelFor( num_threads, parallel_gets<T>(q) );
+    g.wait_for_all();
+    j = bogus_value;
+    ASSERT( q.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+
+    NativeParallelFor( num_threads, parallel_put_get<T>(q) );
+    g.wait_for_all();
+    j = bogus_value;
+    ASSERT( q.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+
+
+    ASSERT( q.register_successor( q2 ) == true, NULL );
+    ASSERT( q2.register_successor( q3 ) == true, NULL );
+    NativeParallelFor( num_threads, parallel_puts<T>(q) );
+    g.wait_for_all();
+    NativeParallelFor( num_threads, parallel_gets<T>(q3) );
+    g.wait_for_all();
+    j = bogus_value;
+    ASSERT( q.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+    ASSERT( q2.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+    ASSERT( q3.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+
+    return 0;
+}
+
+//
+// Tests
+//
+// Predecessors cannot be registered
+// Empty Q rejects item requests 
+// Single serial sender, items in FIFO order
+// Chained Qs ( 2 & 3 ), single sender, items at last Q in FIFO order
+//
+
+template< typename T >
+int test_serial() {
+    tbb::graph g;
+    T bogus_value(-1);
+
+    tbb::priority_queue_node<T> q(g);
+    tbb::priority_queue_node<T> q2(g);
+    T j = bogus_value;
+
+    //
+    // Rejects attempts to add / remove predecessor
+    // Rejects request from empty Q
+    //
+    ASSERT( q.register_predecessor( q2 ) == false, NULL );
+    ASSERT( q.remove_predecessor( q2 ) == false, NULL );
+    ASSERT( q.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+
+    //
+    // Simple puts and gets
+    //
+
+    for (int i = 0; i < N; ++i)
+        ASSERT( q.try_put( T(i) ), NULL );
+    for (int i = N-1; i >=0; --i) {
+        j = bogus_value;
+        spin_try_get( q, j );
+        ASSERT( i == j, NULL );
+    }
+    j = bogus_value;
+    g.wait_for_all();
+    ASSERT( q.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+
+    ASSERT( q.register_successor( q2 ) == true, NULL );
+
+    for (int i = 0; i < N; ++i)
+        ASSERT( q.try_put( T(i) ), NULL );
+    g.wait_for_all();
+    for (int i = N-1; i >= 0; --i) {
+        j = bogus_value;
+        spin_try_get( q2, j );
+        ASSERT( i == j, NULL );
+    }
+    j = bogus_value;
+    g.wait_for_all();
+    ASSERT( q.try_get( j ) == false, NULL );
+    g.wait_for_all();
+    ASSERT( q2.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+
+    ASSERT( q.remove_successor( q2 ) == true, NULL );
+    ASSERT( q.try_put( 1 ) == true, NULL );
+    g.wait_for_all();
+    ASSERT( q2.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+    g.wait_for_all();
+    ASSERT( q.try_get( j ) == true, NULL );
+    ASSERT( j == 1, NULL );
+
+    tbb::priority_queue_node<T> q3(g);
+    ASSERT( q.register_successor( q2 ) == true, NULL );
+    ASSERT( q2.register_successor( q3 ) == true, NULL );
+
+    for (int i = 0; i < N; ++i)
+        ASSERT(  q.try_put( T(i) ), NULL );
+    g.wait_for_all();
+    for (int i = N-1; i >= 0; --i) {
+        j = bogus_value;
+        spin_try_get( q3, j );
+        ASSERT( i == j, NULL );
+    }
+    j = bogus_value;
+    g.wait_for_all();
+    ASSERT( q.try_get( j ) == false, NULL );
+    g.wait_for_all();
+    ASSERT( q2.try_get( j ) == false, NULL );
+    g.wait_for_all();
+    ASSERT( q3.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+
+    ASSERT( q.remove_successor( q2 ) == true, NULL );
+    ASSERT( q.try_put( 1 ) == true, NULL );
+    g.wait_for_all();
+    ASSERT( q2.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+    g.wait_for_all();
+    ASSERT( q3.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+    g.wait_for_all();
+    ASSERT( q.try_get( j ) == true, NULL );
+    ASSERT( j == 1, NULL );
+
+    return 0;
+}
+
+int TestMain() { 
+    tbb::tick_count start = tbb::tick_count::now(), stop;
+    for (int p = 1; p < 4; ++p) {
+        tbb::task_scheduler_init init(p);
+        test_serial<int>();
+        test_reservation<int>(p);
+        test_parallel<int>(p);
+    } 
+    stop = tbb::tick_count::now();
+    REMARK("Priority_Queue_Node Time=%6.6f\n", (stop-start).seconds());
+    return Harness::Done;
+}
diff --git a/src/test/test_queue_node.cpp b/src/test/test_queue_node.cpp
new file mode 100644
index 0000000..ecc617a
--- /dev/null
+++ b/src/test/test_queue_node.cpp
@@ -0,0 +1,440 @@
+/*
+    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.
+*/
+
+// TO DO: Add overlapping put / receive tests
+
+#define TBB_PREVIEW_GRAPH 1
+#include "tbb/graph.h"
+#include "tbb/task_scheduler_init.h"
+#include "tbb/tick_count.h"
+#include "harness.h"
+
+#include <cstdio>
+
+#define N 1000
+#define C 10
+
+template< typename T >
+void spin_try_get( tbb::queue_node<T> &q, T &value ) {
+    while ( q.try_get(value) != true ) ;
+}
+
+template< typename T >
+void check_item( T* next_value, T &value ) {
+    int tid = value / N;
+    int offset = value % N;
+    ASSERT( next_value[tid] == T(offset), NULL );
+    ++next_value[tid];
+}
+
+template< typename T >
+struct parallel_puts : NoAssign {
+
+    tbb::queue_node<T> &my_q;
+
+    parallel_puts( tbb::queue_node<T> &q ) : my_q(q) {}
+
+    void operator()(int i) const {
+        for (int j = 0; j < N; ++j) {
+            bool msg = my_q.try_put( T(N*i + j) );
+            ASSERT( msg == true, NULL );
+        }
+    }
+
+};
+
+
+
+template< typename T >
+struct touches {
+
+    bool **my_touches;
+    T **my_last_touch;
+    int my_num_threads;
+
+    touches( int num_threads ) : my_num_threads(num_threads) {
+        my_last_touch = new T* [my_num_threads]; 
+        my_touches = new bool* [my_num_threads]; 
+        for ( int p = 0; p < my_num_threads; ++p) {
+            my_last_touch[p] = new T[my_num_threads];
+            for ( int p2 = 0; p2 < my_num_threads; ++p2) 
+                my_last_touch[p][p2] = -1;
+
+            my_touches[p] = new bool[N*my_num_threads]; 
+            for ( int n = 0; n < N*my_num_threads; ++n)
+                my_touches[p][n] = false;
+        }
+    }
+
+    ~touches() {
+        for ( int p = 0; p < my_num_threads; ++p) {
+            delete [] my_touches[p];
+            delete [] my_last_touch[p];
+        }
+        delete [] my_touches;
+        delete [] my_last_touch;
+    }
+
+    bool check( int tid, T v ) {
+        int v_tid = v / N;
+        if ( my_touches[tid][v] != false ) {
+            printf("Error: value seen twice by local thread\n");
+            return false;
+        }
+        if ( v <= my_last_touch[tid][v_tid] ) {
+            printf("Error: value seen in wrong order by local thread\n");
+            return false;
+        }
+        my_last_touch[tid][v_tid] = v; 
+        my_touches[tid][v] = true; 
+        return true;
+    }
+
+    bool validate_touches() {
+        bool *all_touches = new bool[N*my_num_threads];
+        for ( int n = 0; n < N*my_num_threads; ++n)
+            all_touches[n] = false;
+     
+        for ( int p = 0; p < my_num_threads; ++p) {
+            for ( int n = 0; n < N*my_num_threads; ++n) {
+                if ( my_touches[p][n] == true ) {
+                    ASSERT( all_touches[n] == false, "value see by more than one thread\n" );
+                    all_touches[n] = true;
+                }
+            }
+        }
+        for ( int n = 0; n < N*my_num_threads; ++n) {
+            if ( !all_touches[n] )
+                printf("No touch at %d, my_num_threads = %d\n", n, my_num_threads);
+            //ASSERT( all_touches[n] == true, "value not seen by any thread\n" );
+        }
+        delete all_touches;
+        return true;
+    }
+
+};
+
+template< typename T >
+struct parallel_gets : NoAssign {
+
+    tbb::queue_node<T> &my_q;
+    touches<T> &my_touches;
+
+    parallel_gets( tbb::queue_node<T> &q, touches<T> &t) : my_q(q), my_touches(t) {}
+
+    void operator()(int tid) const {
+        for (int j = 0; j < N; ++j) {
+            T v;
+            spin_try_get( my_q, v );
+            my_touches.check( tid, v );
+        }
+    }
+
+};
+
+template< typename T >
+struct parallel_put_get : NoAssign {
+
+    tbb::queue_node<T> &my_q;
+    touches<T> &my_touches;
+
+    parallel_put_get( tbb::queue_node<T> &q, touches<T> &t ) : my_q(q), my_touches(t) {}
+
+    void operator()(int tid) const {
+
+        for ( int i = 0; i < N; i+=C ) {
+            int j_end = ( N < i + C ) ? N : i + C; 
+            // dump about C values into the Q
+            for ( int j = i; j < j_end; ++j ) {
+                ASSERT( my_q.try_put( T (N*tid + j ) ) == true, NULL );
+            }
+            // receiver about C values from the Q
+            for ( int j = i; j < j_end; ++j ) {
+                T v;
+                spin_try_get( my_q, v );
+                my_touches.check( tid, v );
+            }
+        }
+    }
+
+};
+
+//
+// Tests
+//
+// Item can be reserved, released, consumed ( single serial receiver )
+//
+template< typename T >
+int test_reservation(int num_threads) {
+    tbb::graph g;
+    T bogus_value(-1);
+
+    // Simple tests
+    tbb::queue_node<T> q(g);
+
+    q.try_put(T(1));
+    q.try_put(T(2));
+    q.try_put(T(3));
+ 
+    T v;
+    ASSERT( q.reserve_item(v) == true, NULL );
+    ASSERT( v == T(1), NULL ); 
+    ASSERT( q.release_reservation() == true, NULL );
+    v = bogus_value;
+    g.wait_for_all();
+    ASSERT( q.reserve_item(v) == true, NULL );
+    ASSERT( v == T(1), NULL ); 
+    ASSERT( q.consume_reservation() == true, NULL );
+    v = bogus_value;
+    g.wait_for_all();
+ 
+    ASSERT( q.try_get(v) == true, NULL );
+    ASSERT( v == T(2), NULL ); 
+    v = bogus_value;
+    g.wait_for_all();
+    
+    ASSERT( q.reserve_item(v) == true, NULL );
+    ASSERT( v == T(3), NULL ); 
+    ASSERT( q.release_reservation() == true, NULL );
+    v = bogus_value;
+    g.wait_for_all();
+    ASSERT( q.reserve_item(v) == true, NULL );
+    ASSERT( v == T(3), NULL ); 
+    ASSERT( q.consume_reservation() == true, NULL );
+    v = bogus_value;
+    g.wait_for_all();
+
+    return 0;
+}
+
+//
+// Tests
+//
+// multilpe parallel senders, items in FIFO (relatively to sender) order
+// multilpe parallel senders, multiple parallel receivers, items in FIFO order (relative to sender/receiver) and all items received
+//   * overlapped puts / gets
+//   * all puts finished before any getS
+//
+template< typename T >
+int test_parallel(int num_threads) {
+    tbb::graph g;
+    tbb::queue_node<T> q(g);
+    tbb::queue_node<T> q2(g);
+    tbb::queue_node<T> q3(g);
+    T bogus_value(-1);
+    T j = bogus_value;
+
+    NativeParallelFor( num_threads, parallel_puts<T>(q) );
+
+    T *next_value = new T[num_threads];
+    for (int tid = 0; tid < num_threads; ++tid) next_value[tid] = T(0);
+
+    for (int i = 0; i < num_threads * N; ++i ) {
+        spin_try_get( q, j );
+        check_item( next_value, j );
+        j = bogus_value;
+    }
+    for (int tid = 0; tid < num_threads; ++tid)  {
+        ASSERT( next_value[tid] == T(N), NULL );
+    }
+
+    j = bogus_value;
+    g.wait_for_all();
+    ASSERT( q.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+
+    NativeParallelFor( num_threads, parallel_puts<T>(q) );
+
+    {
+        touches< T > t( num_threads );
+        NativeParallelFor( num_threads, parallel_gets<T>(q, t) );
+        g.wait_for_all();
+        ASSERT( t.validate_touches(), NULL );
+    }
+    j = bogus_value;
+    ASSERT( q.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+
+    g.wait_for_all();
+    {
+        touches< T > t2( num_threads );
+        NativeParallelFor( num_threads, parallel_put_get<T>(q, t2) );
+        g.wait_for_all();
+        ASSERT( t2.validate_touches(), NULL );
+    }
+    j = bogus_value;
+    ASSERT( q.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+
+    ASSERT( q.register_successor( q2 ) == true, NULL );
+    ASSERT( q2.register_successor( q3 ) == true, NULL );
+
+    NativeParallelFor( num_threads, parallel_puts<T>(q) );
+    {
+        touches< T > t3( num_threads );
+        NativeParallelFor( num_threads, parallel_gets<T>(q3, t3) );
+        g.wait_for_all();
+        ASSERT( t3.validate_touches(), NULL );
+    }
+    j = bogus_value;
+    g.wait_for_all();
+    ASSERT( q.try_get( j ) == false, NULL );
+    g.wait_for_all();
+    ASSERT( q2.try_get( j ) == false, NULL );
+    g.wait_for_all();
+    ASSERT( q3.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+
+    return 0;
+}
+
+//
+// Tests
+//
+// Predecessors cannot be registered
+// Empty Q rejects item requests 
+// Single serial sender, items in FIFO order
+// Chained Qs ( 2 & 3 ), single sender, items at last Q in FIFO order
+//
+
+template< typename T >
+int test_serial() {
+    tbb::graph g;
+    T bogus_value(-1);
+
+    tbb::queue_node<T> q(g);
+    tbb::queue_node<T> q2(g);
+    T j = bogus_value;
+
+    //
+    // Rejects attempts to add / remove predecessor
+    // Rejects request from empty Q
+    //
+    ASSERT( q.register_predecessor( q2 ) == false, NULL );
+    ASSERT( q.remove_predecessor( q2 ) == false, NULL );
+    ASSERT( q.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+
+    //
+    // Simple puts and gets
+    //
+
+    for (int i = 0; i < N; ++i) {
+        bool msg = q.try_put( T(i) );
+        ASSERT( msg == true, NULL );
+    }
+
+
+    for (int i = 0; i < N; ++i) {
+        j = bogus_value;
+        spin_try_get( q, j );
+        ASSERT( i == j, NULL );
+    }
+    j = bogus_value;
+    g.wait_for_all();
+    ASSERT( q.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+
+    ASSERT( q.register_successor( q2 ) == true, NULL );
+
+    for (int i = 0; i < N; ++i) {
+        bool msg = q.try_put( T(i) );
+        ASSERT( msg == true, NULL );
+    }
+
+
+    for (int i = 0; i < N; ++i) {
+        j = bogus_value;
+        spin_try_get( q2, j );
+        ASSERT( i == j, NULL );
+    }
+    j = bogus_value;
+    g.wait_for_all();
+    ASSERT( q.try_get( j ) == false, NULL );
+    g.wait_for_all();
+    ASSERT( q2.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+
+    ASSERT( q.remove_successor( q2 ) == true, NULL );
+    ASSERT( q.try_put( 1 ) == true, NULL );
+    g.wait_for_all();
+    ASSERT( q2.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+    g.wait_for_all();
+    ASSERT( q.try_get( j ) == true, NULL );
+    ASSERT( j == 1, NULL );
+
+    tbb::queue_node<T> q3(g);
+    ASSERT( q.register_successor( q2 ) == true, NULL );
+    ASSERT( q2.register_successor( q3 ) == true, NULL );
+
+    for (int i = 0; i < N; ++i) {
+        bool msg = q.try_put( T(i) );
+        ASSERT( msg == true, NULL );
+    }
+
+    for (int i = 0; i < N; ++i) {
+        j = bogus_value;
+        spin_try_get( q3, j );
+        ASSERT( i == j, NULL );
+    }
+    j = bogus_value;
+    g.wait_for_all();
+    ASSERT( q.try_get( j ) == false, NULL );
+    g.wait_for_all();
+    ASSERT( q2.try_get( j ) == false, NULL );
+    g.wait_for_all();
+    ASSERT( q3.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+
+    ASSERT( q.remove_successor( q2 ) == true, NULL );
+    ASSERT( q.try_put( 1 ) == true, NULL );
+    g.wait_for_all();
+    ASSERT( q2.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+    g.wait_for_all();
+    ASSERT( q3.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+    g.wait_for_all();
+    ASSERT( q.try_get( j ) == true, NULL );
+    ASSERT( j == 1, NULL );
+
+    return 0;
+}
+
+int TestMain() { 
+    tbb::tick_count start = tbb::tick_count::now(), stop;
+    for (int p = 1; p < 4; ++p) {
+        tbb::task_scheduler_init init(p);
+        test_serial<int>();
+        test_parallel<int>(p);
+    } 
+    stop = tbb::tick_count::now();
+    REMARK("Queue_Node Time=%6.6f\n", (stop-start).seconds());
+    return Harness::Done;
+}
diff --git a/src/test/test_reader_writer_lock.cpp b/src/test/test_reader_writer_lock.cpp
index 86a4dd0..6d682b6 100644
--- a/src/test/test_reader_writer_lock.cpp
+++ b/src/test/test_reader_writer_lock.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 1cb26e2..14c31b5 100644
--- a/src/test/test_rwm_upgrade_downgrade.cpp
+++ b/src/test/test_rwm_upgrade_downgrade.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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
new file mode 100644
index 0000000..e3ebd79
--- /dev/null
+++ b/src/test/test_semaphore.cpp
@@ -0,0 +1,258 @@
+/*
+    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.
+*/
+
+//
+// Test for counting semaphore.
+//
+// set semaphore to N
+// create N + M threads
+// have each thread
+//   A. P()
+//   B. increment atomic count
+//   C. spin for awhile checking the value of the count; make sure it doesn't exceed N
+//   D. decrement atomic count
+//   E. V()
+//
+
+#include "tbb/semaphore.h"
+#include "tbb/atomic.h"
+
+#include <vector>
+using std::vector;
+
+#include "harness_assert.h"
+#include "harness.h"
+
+using tbb::internal::semaphore;
+
+#include "harness_barrier.h"
+
+tbb::atomic<int> pCount;
+
+Harness::SpinBarrier sBarrier;
+
+#include "tbb/tick_count.h"
+// semaphore basic function:
+//   set semaphore to initial value
+//   see that semaphore only allows that number of threads to be active
+class Body: NoAssign {
+    const int nThreads;
+    const int nIters;
+    tbb::internal::semaphore &mySem;
+    vector<int> &ourCounts;
+    vector<double> &tottime;
+    static const int tickCounts = 1;  // millisecond
+    static const int innerWait = 5; // millisecond
+public:
+    Body(int nThread_, int nIter_, semaphore &mySem_,
+            vector<int>& ourCounts_,
+            vector<double>& tottime_
+            ) : nThreads(nThread_), nIters(nIter_), mySem(mySem_), ourCounts(ourCounts_), tottime(tottime_) { sBarrier.initialize(nThread_); pCount = 0; }
+void operator()(const int tid) const {
+    sBarrier.wait();
+    for(int i=0; i < nIters; ++i) {
+        Harness::Sleep( tid * tickCounts );
+        tbb::tick_count t0 = tbb::tick_count::now();
+        mySem.P();
+        tbb::tick_count t1 = tbb::tick_count::now();
+        tottime[tid] += (t1-t0).seconds();
+        int curval = ++pCount;
+        if(curval > ourCounts[tid]) ourCounts[tid] = curval;
+        Harness::Sleep( innerWait );
+        --pCount;
+        ASSERT((int)pCount >= 0, NULL);
+        mySem.V();
+    }
+}
+};
+
+
+void testSemaphore( int semInitCnt, int extraThreads ) {
+    semaphore my_sem(semInitCnt);
+    // tbb::task_scheduler_init init(tbb::task_scheduler_init::deferred);
+    int nThreads = semInitCnt + extraThreads;
+    vector<int> maxVals(nThreads);
+    vector<double> totTimes(nThreads);
+    int nIters = 10;
+    Body myBody(nThreads, nIters, my_sem, maxVals, totTimes);
+
+    REMARK( " sem(%d) with %d extra threads\n", semInitCnt, extraThreads);
+    pCount = 0;
+    NativeParallelFor(nThreads, myBody);
+    if(extraThreads == 0) { 
+        double allPWaits = 0;
+        for(vector<double>::const_iterator j = totTimes.begin(); j != totTimes.end(); ++j) {
+            allPWaits += *j;
+        }
+        allPWaits /= static_cast<double>(nThreads * nIters);
+        REMARK("Average wait for P() in uncontested case for nThreads = %d is %g\n", nThreads, allPWaits);
+    }
+    ASSERT(!pCount, "not all threads decremented pCount");
+    int maxCount = -1;
+    for(vector<int>::const_iterator i=maxVals.begin(); i!= maxVals.end();++i) {
+        maxCount = max(maxCount,*i);
+    }
+    ASSERT(maxCount <= semInitCnt,"too many threads in semaphore-protected increment");
+    if(maxCount < semInitCnt) {
+        REMARK("Not enough threads in semaphore-protected region (%d < %d)\n", static_cast<int>(maxCount), semInitCnt);
+    }
+}
+
+// Power of 2, the most tokens that can be in flight.
+#define MAX_TOKENS 32
+enum FilterType { imaProducer, imaConsumer };
+class FilterBase : NoAssign {
+protected:
+    FilterType ima;
+    unsigned totTokens;  // total number of tokens to be emitted, only used by producer
+    tbb::atomic<unsigned>& myTokens;
+    tbb::atomic<unsigned>& otherTokens;
+    unsigned myWait;
+    semaphore &mySem;
+    semaphore &nextSem;
+    unsigned* myBuffer;
+    unsigned* nextBuffer;
+    unsigned curToken;
+public:
+    FilterBase( FilterType ima_
+            ,unsigned totTokens_ 
+            ,tbb::atomic<unsigned>& myTokens_ 
+            ,tbb::atomic<unsigned>& otherTokens_
+            ,unsigned myWait_
+            ,semaphore &mySem_ 
+            ,semaphore &nextSem_
+            ,unsigned* myBuffer_
+            ,unsigned* nextBuffer_
+            ) 
+        : ima(ima_),totTokens(totTokens_),myTokens(myTokens_),otherTokens(otherTokens_),myWait(myWait_),mySem(mySem_),
+          nextSem(nextSem_),myBuffer(myBuffer_),nextBuffer(nextBuffer_)
+    {
+        curToken = 0;
+    }
+    void Produce(const int tid);
+    void Consume(const int tid);
+    void operator()(const int tid) { if(ima == imaConsumer) Consume(tid); else Produce(tid); }
+};
+
+class ProduceConsumeBody {
+    FilterBase** myFilters;
+    public:
+    ProduceConsumeBody(FilterBase** myFilters_) : myFilters(myFilters_) {}
+    void operator()(const int tid) const {
+        myFilters[tid]->operator()(tid);
+    }
+};
+
+// send a bunch of non-Null "tokens" to consumer, then a NULL.
+void FilterBase::Produce(const int /*tid*/) {
+    nextBuffer[0] = 0;  // just in case we provide no tokens
+    sBarrier.wait();
+    while(totTokens) {
+        while(!myTokens) 
+            mySem.P();
+        // we have a slot available.
+        --myTokens;  // moving this down reduces spurious wakeups
+        --totTokens;
+        if(totTokens) 
+            nextBuffer[curToken&(MAX_TOKENS-1)] = curToken*3+1;
+        else
+            nextBuffer[curToken&(MAX_TOKENS-1)] = (unsigned)NULL;
+        ++curToken;
+        Harness::Sleep(myWait);
+        unsigned temp = ++otherTokens;
+        if(temp == 1) 
+            nextSem.V();
+    }
+    nextSem.V();  // final wakeup
+}
+
+void FilterBase::Consume(const int /*tid*/) {
+    unsigned myToken;
+    sBarrier.wait();
+    do {
+        while(!myTokens) 
+            mySem.P();
+        // we have a slot available.
+        --myTokens;  // moving this down reduces spurious wakeups
+        myToken = myBuffer[curToken&(MAX_TOKENS-1)];
+        if(myToken) {
+            ASSERT(myToken == curToken*3+1, "Error in received token");
+            ++curToken;
+            Harness::Sleep(myWait);
+            unsigned temp = ++otherTokens;
+            if(temp == 1) 
+                nextSem.V();
+        }
+    } while(myToken);
+    // end of processing
+    ASSERT(curToken + 1 == totTokens, "Didn't receive enough tokens");
+}
+
+// -- test of producer/consumer with atomic buffer cnt and semaphore
+// nTokens are total number of tokens through the pipe
+// pWait is the wait time for the producer
+// cWait is the wait time for the consumer
+void testProducerConsumer( unsigned totTokens, unsigned nTokens, unsigned pWait, unsigned cWait) {
+    semaphore pSem;
+    semaphore cSem;
+    tbb::atomic<unsigned> pTokens;
+    tbb::atomic<unsigned> cTokens;
+    cTokens = 0;
+    unsigned cBuffer[MAX_TOKENS];
+    FilterBase* myFilters[2];  // one producer, one consumer
+    REMARK("Testing producer/consumer with %lu total tokens, %lu tokens at a time, producer wait(%lu), consumer wait (%lu)\n", totTokens, nTokens, pWait, cWait);
+    ASSERT(nTokens <= MAX_TOKENS, "Not enough slots for tokens");
+    myFilters[0] = new FilterBase(imaProducer, totTokens, pTokens, cTokens, pWait, cSem, pSem, (unsigned *)NULL, &(cBuffer[0]));
+    myFilters[1] = new FilterBase(imaConsumer, totTokens, cTokens, pTokens, cWait, pSem, cSem, cBuffer, (unsigned *)NULL);
+    pTokens = nTokens;
+    ProduceConsumeBody myBody(myFilters);
+    sBarrier.initialize(2);
+    NativeParallelFor(2, myBody);
+    delete myFilters[0];
+    delete myFilters[1];
+}
+
+int TestMain() {
+    REMARK("Started\n");
+    if(MaxThread > 0) {
+        for(int semSize = 1; semSize <= MaxThread; ++semSize) {
+            for(int exThreads = 0; exThreads <= MaxThread - semSize; ++exThreads) {
+                testSemaphore( semSize, exThreads );
+            }
+        }
+    }
+    // Test producer/consumer with varying execution times and buffer sizes
+    // ( total tokens, tokens in buffer, sleep for producer, sleep for consumer )
+    testProducerConsumer( 10, 2, 5, 5 );
+    testProducerConsumer( 10, 2, 20, 5 );
+    testProducerConsumer( 10, 2, 5, 20 );
+    testProducerConsumer( 10, 1, 5, 5 );
+    testProducerConsumer( 20, 10, 5, 20 );
+    testProducerConsumer( 64, 32, 1, 20 );
+    return Harness::Done;
+}
diff --git a/src/test/test_sequencer_node.cpp b/src/test/test_sequencer_node.cpp
new file mode 100644
index 0000000..8df6374
--- /dev/null
+++ b/src/test/test_sequencer_node.cpp
@@ -0,0 +1,391 @@
+/*
+    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.
+*/
+
+#include "harness.h"
+#define TBB_PREVIEW_GRAPH 1
+#include "tbb/graph.h"
+#include "tbb/task_scheduler_init.h"
+#include "tbb/tick_count.h"
+#include "tbb/atomic.h"
+
+#include <cstdio>
+
+#define N 1000
+#define C 10
+
+template< typename T >
+struct seq_inspector {
+    size_t operator()(T &v) const { return size_t(v); }
+};
+
+template< typename T >
+bool wait_try_get( tbb::graph &g, tbb::sequencer_node<T> &q, T &value ) {
+    g.wait_for_all();
+    return q.try_get(value);
+}
+
+template< typename T >
+void spin_try_get( tbb::queue_node<T> &q, T &value ) {
+    while ( q.try_get(value) != true ) ;
+}
+
+template< typename T >
+struct parallel_puts : NoAssign {
+
+    tbb::sequencer_node<T> &my_q;
+    int my_num_threads;
+
+    parallel_puts( tbb::sequencer_node<T> &q, int num_threads ) : my_q(q), my_num_threads(num_threads) {}
+
+    void operator()(int tid) const {
+        for (int j = tid; j < N; j+=my_num_threads) {
+            bool msg = my_q.try_put( T(j) );
+            ASSERT( msg == true, NULL );
+        }
+    }
+
+};
+
+template< typename T >
+struct touches {
+
+    bool **my_touches;
+    T *my_last_touch;
+    int my_num_threads;
+
+    touches( int num_threads ) : my_num_threads(num_threads) {
+        my_last_touch = new T[my_num_threads]; 
+        my_touches = new bool* [my_num_threads]; 
+        for ( int p = 0; p < my_num_threads; ++p) {
+            my_last_touch[p] = T(-1);
+            my_touches[p] = new bool[N]; 
+            for ( int n = 0; n < N; ++n)
+                my_touches[p][n] = false;
+        }
+    }
+
+    ~touches() {
+        for ( int p = 0; p < my_num_threads; ++p) {
+            delete [] my_touches[p];
+        }
+        delete [] my_touches;
+        delete [] my_last_touch;
+    }
+
+    bool check( int tid, T v ) {
+        if ( my_touches[tid][v] != false ) {
+            printf("Error: value seen twice by local thread\n");
+            return false;
+        }
+        if ( v <= my_last_touch[tid] ) {
+            printf("Error: value seen in wrong order by local thread\n");
+            return false;
+        }
+        my_last_touch[tid] = v; 
+        my_touches[tid][v] = true; 
+        return true;
+    }
+
+    bool validate_touches() {
+        bool *all_touches = new bool[N];
+        for ( int n = 0; n < N; ++n)
+            all_touches[n] = false;
+     
+        for ( int p = 0; p < my_num_threads; ++p) {
+            for ( int n = 0; n < N; ++n) {
+                if ( my_touches[p][n] == true ) {
+                    ASSERT( all_touches[n] == false, "value see by more than one thread\n" );
+                    all_touches[n] = true;
+                }
+            }
+        }
+        for ( int n = 0; n < N; ++n) {
+            if ( !all_touches[n] )
+                printf("No touch at %d, my_num_threads = %d\n", n, my_num_threads);
+            //ASSERT( all_touches[n] == true, "value not seen by any thread\n" );
+        }
+        delete all_touches;
+        return true;
+    }
+
+};
+
+template< typename T >
+struct parallel_gets : NoAssign {
+
+    tbb::sequencer_node<T> &my_q;
+    int my_num_threads;
+    touches<T> &my_touches;
+
+    parallel_gets( tbb::sequencer_node<T> &q, int num_threads, touches<T> &t ) : my_q(q), my_num_threads(num_threads), my_touches(t) {}
+
+    void operator()(int tid) const {
+        for (int j = tid; j < N; j+=my_num_threads) {
+            T v;
+            spin_try_get( my_q, v );    
+            my_touches.check( tid, v );
+        }
+    }
+
+};
+
+template< typename T >
+struct parallel_put_get : NoAssign {
+
+    tbb::sequencer_node<T> &my_s1;
+    tbb::sequencer_node<T> &my_s2;
+    int my_num_threads;
+    tbb::atomic< int > &my_counter;    
+    touches<T> &my_touches; 
+
+    parallel_put_get( tbb::sequencer_node<T> &s1, tbb::sequencer_node<T> &s2, int num_threads, 
+                      tbb::atomic<int> &counter, touches<T> &t ) : my_s1(s1), my_s2(s2), my_num_threads(num_threads), my_counter(counter), my_touches(t) {}
+
+    void operator()(int tid) const {
+        int i_start = 0;
+
+        while ( (i_start = my_counter.fetch_and_add(C)) < N ) {
+            int i_end = ( N < i_start + C ) ? N : i_start + C;
+            for (int i = i_start; i < i_end; ++i) {
+                bool msg = my_s1.try_put( T(i) );
+                ASSERT( msg == true, NULL );
+            }
+
+            for (int i = i_start; i < i_end; ++i) {
+                T v;
+                spin_try_get( my_s2, v );    
+                my_touches.check( tid, v );
+            }
+        }
+    }
+
+};
+
+// 
+// Tests
+//
+// multiple parallel senders, multiple receivers, properly sequenced (relative to receiver) at output
+// chained sequencers, multiple parallel senders, multiple receivers, properly sequenced (relative to receiver) at output
+//
+
+template< typename T >
+int test_parallel(int num_threads) {
+    tbb::graph g;
+
+    tbb::sequencer_node<T> s(g, seq_inspector<T>());
+    NativeParallelFor( num_threads, parallel_puts<T>(s, num_threads) );
+    {
+        touches<T> t( num_threads );
+        NativeParallelFor( num_threads, parallel_gets<T>(s, num_threads, t) );
+        g.wait_for_all();
+        ASSERT( t.validate_touches(), NULL );
+    }
+    T bogus_value(-1);
+    T j = bogus_value;
+    ASSERT( s.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+    g.wait_for_all();
+
+    tbb::sequencer_node<T> s1(g, seq_inspector<T>());
+    tbb::sequencer_node<T> s2(g, seq_inspector<T>());
+    tbb::sequencer_node<T> s3(g, seq_inspector<T>());
+    ASSERT( s1.register_successor( s2 ) == true, NULL );
+    ASSERT( s2.register_successor( s3 ) == true, NULL );
+
+    {
+        touches<T> t( num_threads );
+        tbb::atomic<int> counter;
+        counter = 0;
+        NativeParallelFor( num_threads, parallel_put_get<T>(s1, s3, num_threads, counter, t) );
+        g.wait_for_all();
+        t.validate_touches();
+    }
+    g.wait_for_all();
+    ASSERT( s1.try_get( j ) == false, NULL );
+    g.wait_for_all();
+    ASSERT( s2.try_get( j ) == false, NULL );
+    g.wait_for_all();
+    ASSERT( s3.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+    return 0;
+}
+
+
+// 
+// Tests
+//
+// No predecessors can be registered
+// Request from empty buffer fails
+// In-order puts, single sender, single receiver, properly sequenced at output
+// Reverse-order puts, single sender, single receiver, properly sequenced at output
+// Chained sequencers (3), in-order and reverse-order tests, properly sequenced at output
+//
+
+template< typename T >
+int test_serial() {
+    tbb::graph g;
+    T bogus_value(-1);
+
+    tbb::sequencer_node<T> s(g, seq_inspector<T>());
+    tbb::sequencer_node<T> s2(g, seq_inspector<T>());
+    T j = bogus_value;
+
+    //
+    // Rejects attempts to add / remove predecessor
+    // Rejects request from empty Q
+    //
+    ASSERT( s.register_predecessor( s2 ) == false, NULL );
+    ASSERT( s.remove_predecessor( s2 ) == false, NULL );
+    ASSERT( s.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+
+    //
+    // In-order simple puts and gets
+    //
+
+    for (int i = 0; i < N; ++i) {
+        bool msg = s.try_put( T(i) );
+        ASSERT( msg == true, NULL );
+    }
+
+
+    for (int i = 0; i < N; ++i) {
+        j = bogus_value;
+        ASSERT(wait_try_get( g, s, j ) == true, NULL);
+        ASSERT( i == j, NULL );
+    }
+    j = bogus_value;
+    g.wait_for_all();
+    ASSERT( s.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+
+    //
+    // Reverse-order simple puts and gets
+    //
+
+    for (int i = N-1; i >= 0; --i) {
+        bool msg = s2.try_put( T(i) );
+        ASSERT( msg == true, NULL );
+    }
+
+    for (int i = 0; i < N; ++i) {
+        j = bogus_value;
+        ASSERT(wait_try_get( g, s2, j ) == true, NULL);
+        ASSERT( i == j, NULL );
+    }
+    j = bogus_value;
+    g.wait_for_all();
+    ASSERT( s2.try_get( j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+
+    //
+    // Chained in-order simple puts and gets
+    //
+
+    tbb::sequencer_node<T> s3(g, seq_inspector<T>());
+    tbb::sequencer_node<T> s4(g, seq_inspector<T>());
+    tbb::sequencer_node<T> s5(g, seq_inspector<T>());
+    ASSERT( s3.register_successor( s4 ) == true, NULL );
+    ASSERT( s4.register_successor( s5 ) == true, NULL );
+
+    for (int i = 0; i < N; ++i) {
+        bool msg = s3.try_put( T(i) );
+        ASSERT( msg == true, NULL );
+    }
+
+    for (int i = 0; i < N; ++i) {
+        j = bogus_value;
+        ASSERT(wait_try_get( g, s5, j ) == true, NULL);
+        ASSERT( i == j, NULL );
+    }
+    j = bogus_value;
+    ASSERT( wait_try_get( g, s3, j ) == false, NULL );
+    ASSERT( wait_try_get( g, s4, j ) == false, NULL );
+    ASSERT( wait_try_get( g, s5, j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+
+    g.wait_for_all();
+    ASSERT( s3.remove_successor( s4 ) == true, NULL );
+    ASSERT( s3.try_put( N ) == true, NULL );
+    ASSERT( wait_try_get( g, s4, j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+    ASSERT( wait_try_get( g, s5, j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+    ASSERT( wait_try_get( g, s3, j ) == true, NULL );
+    ASSERT( j == N, NULL );
+
+    //
+    // Chained reverse-order simple puts and gets
+    //
+
+    tbb::sequencer_node<T> s6(g, seq_inspector<T>());
+    tbb::sequencer_node<T> s7(g, seq_inspector<T>());
+    tbb::sequencer_node<T> s8(g, seq_inspector<T>());
+    ASSERT( s6.register_successor( s7 ) == true, NULL );
+    ASSERT( s7.register_successor( s8 ) == true, NULL );
+
+    for (int i = N-1; i >= 0; --i) {
+        bool msg = s6.try_put( T(i) );
+        ASSERT( msg == true, NULL );
+    }
+
+    for (int i = 0; i < N; ++i) {
+        j = bogus_value;
+        ASSERT( wait_try_get( g, s8, j ) == true, NULL );
+        ASSERT( i == j, NULL );
+    }
+    j = bogus_value;
+    ASSERT( wait_try_get( g, s6, j ) == false, NULL );
+    ASSERT( wait_try_get( g, s7, j ) == false, NULL );
+    ASSERT( wait_try_get( g, s8, j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+
+    g.wait_for_all();
+    ASSERT( s6.remove_successor( s7 ) == true, NULL );
+    ASSERT( s6.try_put( N ) == true, NULL );
+    ASSERT( wait_try_get( g, s7, j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+    ASSERT( wait_try_get( g, s8, j ) == false, NULL );
+    ASSERT( j == bogus_value, NULL );
+    ASSERT( wait_try_get( g, s6, j ) == true, NULL );
+    ASSERT( j == N, NULL );
+
+    return 0;
+}
+
+int TestMain() { 
+    tbb::tick_count start = tbb::tick_count::now(), stop;
+    for (int p = 1; p < 4; ++p) {
+        tbb::task_scheduler_init init(p);
+        test_serial<int>();
+        test_parallel<int>(p);
+    } 
+    stop = tbb::tick_count::now();
+    REMARK("Sequencer_Node Time=%6.6f\n", (stop-start).seconds());
+    return Harness::Done;
+}
diff --git a/src/test/test_source_node.cpp b/src/test/test_source_node.cpp
new file mode 100644
index 0000000..a403430
--- /dev/null
+++ b/src/test/test_source_node.cpp
@@ -0,0 +1,149 @@
+/*
+    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.
+*/
+
+#include "harness_graph.h"
+
+#include "tbb/task_scheduler_init.h"
+
+const int N = 1000;
+
+template< typename T >
+class test_push_receiver : public tbb::receiver<T> {
+
+    tbb::atomic<int> my_counters[N];
+
+public:
+
+    test_push_receiver() {  
+        for (int i = 0; i < N; ++i ) 
+            my_counters[i] = 0;
+    }
+
+    int get_count( int i ) {
+       int v = my_counters[i]; 
+       return v;
+    }
+
+    bool try_put( T v ) {
+       int i = (int)v;
+       ++my_counters[i];
+       return true;
+    }
+
+};
+
+template< typename T >
+class source_body {
+
+   tbb::atomic<int> my_count;
+ 
+public:
+
+   source_body() { my_count = 0; }
+
+   bool operator()( T &v ) {
+      v = (T)my_count.fetch_and_increment();
+      if ( (int)v < N )
+         return true;
+      else
+         return false;
+   } 
+
+};
+
+template< typename T >
+class function_body {
+
+    tbb::atomic<int> *my_counters;
+
+public:
+
+    function_body( tbb::atomic<int> *counters ) : my_counters(counters) {  
+        for (int i = 0; i < N; ++i ) 
+            my_counters[i] = 0;
+    }
+
+    bool operator()( T v ) {
+        ++my_counters[(int)v];
+		return true;
+    } 
+
+};
+
+template< typename T >
+void test_single_dest() {
+
+   // push only
+   tbb::graph g;
+   tbb::source_node<T> src(g, source_body<T>() );
+   test_push_receiver<T> dest;
+   ASSERT( src.register_successor(dest), NULL );
+   g.wait_for_all();
+   for (int i = 0; i < N; ++i ) {
+       ASSERT( dest.get_count(i) == 1, NULL ); 
+   }
+
+   // push only
+   tbb::atomic<int> counters3[N];
+   tbb::source_node<T> src3(g, source_body<T>() );
+   function_body<T> b3( counters3 );
+   tbb::function_node<T,bool> dest3(g, tbb::graph::unlimited, b3 );
+   ASSERT( src3.register_successor(dest3), NULL );
+   g.wait_for_all();
+   for (int i = 0; i < N; ++i ) {
+       int v = counters3[i];
+       ASSERT( v == 1, NULL ); 
+   }
+
+   // push & pull 
+   tbb::source_node<T> src2(g, source_body<T>() );
+   tbb::atomic<int> counters2[N];
+   function_body<T> b2( counters2 );
+   tbb::function_node<T,bool> dest2(g, tbb::graph::serial, b2 );
+   ASSERT( src2.register_successor(dest2), NULL );
+   g.wait_for_all();
+   for (int i = 0; i < N; ++i ) {
+       int v = counters2[i];
+       ASSERT( v == 1, NULL ); 
+   }
+
+}
+
+int TestMain() { 
+    if( MinThread<1 ) {
+        REPORT("number of threads must be positive\n");
+        exit(1);
+    }
+    for ( int p = MinThread; p < MaxThread; ++p ) {
+        tbb::task_scheduler_init init(p);
+        test_single_dest<int>();
+        test_single_dest<float>();
+    }
+    return Harness::Done;
+}
+
diff --git a/src/test/test_std_thread.cpp b/src/test/test_std_thread.cpp
index 5032606..0af65f6 100644
--- a/src/test/test_std_thread.cpp
+++ b/src/test/test_std_thread.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 197f168..9d5442d 100644
--- a/src/test/test_task.cpp
+++ b/src/test/test_task.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -71,7 +71,7 @@ public:
                 // We are stolen, let our parent to start waiting for us
                 m_Parent->m_GoAhead = false;
             }
-            tbb::task &t = *new( tbb::task::allocate_child() ) this_type(this, m_Depth - 1);
+            tbb::task &t = *new( allocate_child() ) this_type(this, m_Depth - 1);
             set_ref_count( 2 );
             spawn( t );
             // Give a willing thief a chance to steal
@@ -114,14 +114,14 @@ public:
             tbb::task_list list;
             ASSERT( list.empty(), NULL );
             for( int k=0; k<m_ChildCount; ++k ) {
-                list.push_back( *new( tbb::task::allocate_child() ) RecursiveTask(m_ChildCount/2,m_Depth-1 ) );
+                list.push_back( *new( allocate_child() ) RecursiveTask(m_ChildCount/2,m_Depth-1 ) );
                 ASSERT( !list.empty(), NULL );
             }
             set_ref_count( m_ChildCount+1 );
             SpawnList( list, 1 );
             // Now try reusing this as the parent.
             set_ref_count(2);
-            list.push_back( *new (tbb::task::allocate_child() ) tbb::empty_task() );
+            list.push_back( *new ( allocate_child() ) tbb::empty_task() );
             SpawnList( list, 2 );
         }
         return NULL;
@@ -218,12 +218,12 @@ void TestSafeContinuation( int nthread ) {
 tbb::atomic<int> TotalCount;
 
 struct AffinityTask: public tbb::task {
-    const tbb::task::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(tbb::task::affinity_id(expected_affinity_id_)), 
+        expected_affinity_id(affinity_id(expected_affinity_id_)), 
         noted(false) 
     {
         set_affinity(expected_affinity_id);
@@ -241,7 +241,7 @@ struct AffinityTask: public tbb::task {
         // We exploit those conditions for sake of unit testing.
         ASSERT( id!=expected_affinity_id, NULL );
         ASSERT( !noted, "note_affinity_id called twice!" );
-        ASSERT ( &tbb::task::self() == (tbb::task*)this, "Wrong innermost running task" );
+        ASSERT ( &self() == (tbb::task*)this, "Wrong innermost running task" );
         noted = true;
     }
 };
@@ -278,7 +278,7 @@ struct NoteAffinityTask: public tbb::task {
     bool noted;
     NoteAffinityTask( int id ) : noted(false)
     {
-        set_affinity(tbb::task::affinity_id(id));
+        set_affinity(affinity_id(id));
     }
     ~NoteAffinityTask () {
         ASSERT (noted, "note_affinity has not been called");
@@ -288,7 +288,7 @@ struct NoteAffinityTask: public tbb::task {
     }
     /*override*/ void note_affinity( affinity_id /*id*/ ) {
         noted = true;
-        ASSERT ( &tbb::task::self() == (tbb::task*)this, "Wrong innermost running task" );
+        ASSERT ( &self() == (tbb::task*)this, "Wrong innermost running task" );
     }
 };
 
@@ -394,7 +394,7 @@ class TaskWithMember: public tbb::task {
         x = y;
         if( count>0 ) { 
             set_ref_count(2);
-            tbb::task* t = new( tbb::task::allocate_child() ) TaskWithMember<T>(count-1);
+            tbb::task* t = new( allocate_child() ) TaskWithMember<T>(count-1);
             spawn_and_wait_for_all(*t);
         }
         return NULL;
@@ -494,7 +494,7 @@ public:
     DagTask *successor_to_below, *successor_to_right;
     DagTask( int i_, int j_ ) : i(i_), j(j_), sum_from_left(0), sum_from_above(0) {}
     task* execute() {
-        __TBB_ASSERT( ref_count()==0, NULL );
+        ASSERT( ref_count()==0, NULL );
         number_t sum = i==0 && j==0 ? 1 : sum_from_left+sum_from_above;
         check_sum(sum);
         ++execution_count;
@@ -555,7 +555,7 @@ class RelaxedOwnershipTask: public tbb::task {
 
     tbb::task* execute () {
         tbb::task &p = *parent();
-        tbb::task &r = *new( tbb::task::allocate_root() ) tbb::empty_task;
+        tbb::task &r = *new( allocate_root() ) tbb::empty_task;
         r.set_ref_count( 1 );
         m_barrier.wait();
         p.spawn( *new(p.allocate_child()) tbb::empty_task );
@@ -640,7 +640,7 @@ public:
     tbb::task* execute() {
         m_GoAhead = true;
         if ( m_Depth > 0 ) {
-            TaskWithChildToSteal &t = *new( tbb::task::allocate_child() ) TaskWithChildToSteal(m_Depth - 1);
+            TaskWithChildToSteal &t = *new( allocate_child() ) TaskWithChildToSteal(m_Depth - 1);
             t.SpawnAndWaitOnParent();
         }
         else
@@ -763,14 +763,14 @@ struct MasterBody : NoAssign, Harness::NoAfterlife {
             if( !m_Depth )
                 return NULL;
             set_ref_count(3);
-            spawn( *new( tbb::task::allocate_child() ) BinaryRecursiveTask(m_Depth - 1) );
-            spawn( *new( tbb::task::allocate_child() ) BinaryRecursiveTask(m_Depth - 1) );
+            spawn( *new( allocate_child() ) BinaryRecursiveTask(m_Depth - 1) );
+            spawn( *new( allocate_child() ) BinaryRecursiveTask(m_Depth - 1) );
             wait_for_all();
             return NULL;
         }
 
         void note_affinity( affinity_id ) {
-            __TBB_ASSERT( false, "These tasks cannot be stolen" );
+            ASSERT( false, "These tasks cannot be stolen" );
         }
     public:
         BinaryRecursiveTask ( int depth_ ) : m_Depth(depth_) {}
@@ -829,8 +829,8 @@ class EnqueuedTask : public tbb::task {
         // Capture execution order in the very beginning
         int execution_order = 2 - my_successor->decrement_ref_count();
         // Create some local work.
-        TaskGenerator& p = *new( tbb::task::allocate_root() ) TaskGenerator(2,2);
-        tbb::task::spawn_root_and_wait(p);
+        TaskGenerator& p = *new( allocate_root() ) TaskGenerator(2,2);
+        spawn_root_and_wait(p);
         if( execution_order==2 ) { // the "slower" of two peer tasks
             ++nCompletedPairs;
             // Of course execution order can differ from dequeue order.
@@ -851,10 +851,10 @@ public:
     static void FireTwoTasks( int* track ) {
         int progress = ++*track;
         if( progress < PairsPerTrack ) {
-            task* successor = new (tbb::task::allocate_root()) tbb::empty_task;
+            task* successor = new (allocate_root()) tbb::empty_task;
             successor->set_ref_count(2);
-            enqueue( *new (tbb::task::allocate_root()) EnqueuedTask(successor, 1, track) );
-            enqueue( *new (tbb::task::allocate_root()) EnqueuedTask(successor, 2, track) );
+            enqueue( *new (allocate_root()) EnqueuedTask(successor, 1, track) );
+            enqueue( *new (allocate_root()) EnqueuedTask(successor, 2, track) );
         }
     }
 
@@ -899,7 +899,7 @@ public:
             else {
                 ++stall_count;
                 // no progress for at least 0.1 s; consider it dead.
-                ASSERT(stall_count < stall_threshold, "no progress on enqueued tasks; deadlock?");
+                ASSERT(stall_count < stall_threshold, "no progress on enqueued tasks; deadlock, or the machine is oversubsribed?");
             }
             if( progress_mask==all_progressed || progress_mask^last_progress_mask ) {
                 uneven_progress_count = 0;
@@ -973,9 +973,7 @@ int TestMain () {
         TestUserThread( p );
         TestStealLimit( p );
         TestRelaxedOwnership( p );
-#if __TBB_ARENA_PER_MASTER
         TestMastersIsolation( p );
-#endif /* __TBB_ARENA_PER_MASTER */
     }
     return Harness::Done;
 }
diff --git a/src/test/test_task_assertions.cpp b/src/test/test_task_assertions.cpp
index b5b9984..2646ca3 100644
--- a/src/test/test_task_assertions.cpp
+++ b/src/test/test_task_assertions.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_task_auto_init.cpp b/src/test/test_task_auto_init.cpp
index 261b1df..1008fbe 100644
--- a/src/test/test_task_auto_init.cpp
+++ b/src/test/test_task_auto_init.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_task_group.cpp b/src/test/test_task_group.cpp
index 4d68737..da036ba 100644
--- a/src/test/test_task_group.cpp
+++ b/src/test/test_task_group.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -810,7 +810,7 @@ int TestMain () {
         Concurrency::SchedulerPolicy sp( 4,
                                 Concurrency::SchedulerKind, Concurrency::ThreadScheduler,
                                 Concurrency::MinConcurrency, 1,
-                                Concurrency::MaxConcurrency    , p,
+                                Concurrency::MaxConcurrency, p,
                                 Concurrency::TargetOversubscriptionFactor, 1);
         Concurrency::Scheduler  *s = Concurrency::Scheduler::Create( sp );
 #endif /* !TBBTEST_USE_TBB */
diff --git a/src/test/test_task_leaks.cpp b/src/test/test_task_leaks.cpp
index 8d5c012..07cbee7 100644
--- a/src/test/test_task_leaks.cpp
+++ b/src/test/test_task_leaks.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -159,6 +159,39 @@ void RunTaskGenerators( bool switchProducer = false, bool checkProducer = false
     dummy_root->destroy( *dummy_root );
 }
 
+class TaskList: public tbb::task {
+    const int my_num_childs;
+public:
+    TaskList(const int num_childs) : my_num_childs(num_childs) {}
+    tbb::task* execute() {
+        tbb::task_list list;
+        for (int i=0; i<my_num_childs; ++i)
+        {
+            list.push_back( *new( allocate_child() ) tbb::empty_task );
+        }
+        set_ref_count(my_num_childs+1);
+        spawn(list);
+
+        wait_for_all();
+        return 0;
+    }
+};
+
+void RunTaskListGenerator()
+{
+    const int max_num_childs = 10000;
+    int num_childs=3;
+
+    while ( num_childs < max_num_childs )
+    {
+        tbb::task& root = *new( tbb::task::allocate_root() ) TaskList(num_childs);
+
+        tbb::task::spawn_root_and_wait(root);
+
+        num_childs = 3 * num_childs;
+    }
+}
+
 //! Tests whether task scheduler allows thieves to hoard task objects.
 /** The test takes a while to run, so we run it only with the default
     number of threads. */
@@ -179,6 +212,7 @@ void TestTaskReclamation() {
     for( int i=0; i<N; ++i ) {
         // First N iterations fill internal buffers and collect initial statistics
         RunTaskGenerators();
+        RunTaskListGenerator();
 
         size_t m = GetMemoryUsage();
         if( m-initial_amount_of_memory > 0)
@@ -203,6 +237,7 @@ void TestTaskReclamation() {
     for( int i=0; i < MaxIterations; ++i ) {
         // These iterations check for excessive memory use and unreasonable task count
         RunTaskGenerators( switchProducer, checkProducer );
+        RunTaskListGenerator();
 
         intptr_t n = internal::governor::local_scheduler()->get_task_node_count( /*count_arena_workers=*/true );
         size_t m = GetMemoryUsage();
diff --git a/src/test/test_task_priority.cpp b/src/test/test_task_priority.cpp
new file mode 100644
index 0000000..056c685
--- /dev/null
+++ b/src/test/test_task_priority.cpp
@@ -0,0 +1,412 @@
+/*
+    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.
+*/
+
+#include "harness.h"
+
+#ifndef TBB_PREVIEW_TASK_PRIORITY
+    #define TBB_PREVIEW_TASK_PRIORITY __TBB_TASK_PRIORITY
+#endif
+
+#include "tbb/task.h"
+#include "tbb/task_scheduler_init.h"
+#include "tbb/atomic.h"
+#include <cstdlib>
+
+const int NumIterations = 1000;
+const int NumLeafTasks = 2;
+int MinBaseDepth = 8;
+int MaxBaseDepth = 12;
+int BaseDepth = 0;
+
+const int NumTests = 8;
+const int TestRepeats = 4;
+
+int g_NumMasters = 0;
+volatile intptr_t *g_LeavesExecuted = NULL;
+
+int g_TestFailures[NumTests];
+int g_CurConfig = 0;
+
+int P = 0;
+
+#if !__TBB_TASK_PRIORITY
+namespace tbb {
+    enum priority_t {
+        priority_low = 0,
+        priority_normal = 1,
+        priority_high = 2
+    };
+}
+#endif /* __TBB_TASK_PRIORITY */
+
+tbb::priority_t Low = tbb::priority_normal,
+                High = tbb::priority_high;
+int PreemptionActivatorId = 1;
+
+enum Options {
+    NoPriorities = 0,
+    TestPreemption = 1,
+    Flog = 2,
+    FlogEncloser = Flog | 4
+};
+
+void PrepareGlobals ( int numMasters ) {
+    ASSERT( !g_NumMasters && !g_LeavesExecuted, NULL );
+    g_NumMasters = numMasters;
+    if ( !g_LeavesExecuted )
+        g_LeavesExecuted = new intptr_t[numMasters];
+    g_CurConfig = 0;
+    memset( const_cast<intptr_t*>(g_LeavesExecuted), 0, sizeof(intptr_t) * numMasters );
+    memset( g_TestFailures, 0, sizeof(int) * NumTests );
+}
+
+void ClearGlobals () {
+    ASSERT( g_LeavesExecuted, NULL );
+    delete [] g_LeavesExecuted;
+    g_LeavesExecuted = NULL;
+    g_NumMasters = 0;
+    REMARK("\r                                                             \r");
+}
+
+class LeafTask : public tbb::task {
+    int m_tid;
+    uintptr_t m_opts;
+
+    tbb::task* execute () {
+        volatile int anchor = 0;
+        for ( int i = 0; i < NumIterations; ++i )
+            anchor += i;
+        __TBB_FetchAndAddW(g_LeavesExecuted + m_tid, 1);
+#if TBB_PREVIEW_TASK_PRIORITY
+        ASSERT( !m_opts || (m_opts & Flog) || (!(m_opts & TestPreemption) ^ (m_tid == PreemptionActivatorId)), NULL );
+        if ( (m_opts & TestPreemption) && g_LeavesExecuted[0] > P && group_priority() == tbb::priority_normal ) {
+            ASSERT( m_tid == PreemptionActivatorId, NULL );
+            ASSERT( (PreemptionActivatorId == 1 ? High > tbb::priority_normal : Low < tbb::priority_normal), NULL );
+            set_group_priority( PreemptionActivatorId == 1 ? High : Low );
+        }
+#endif /* TBB_PREVIEW_TASK_PRIORITY */
+        return NULL;
+    }
+public:
+    LeafTask ( int tid, uintptr_t opts ) : m_tid(tid), m_opts(opts) {
+        ASSERT( tid < g_NumMasters, NULL );
+    }
+};
+
+template<class NodeType>
+class NodeTask : public tbb::task {
+protected:
+    int m_tid;
+    int m_depth;
+    uintptr_t m_opts;
+    task *m_root;
+
+    void SpawnChildren ( task* parent_node ) {
+        ASSERT( m_depth > 0, NULL );
+        if ( g_LeavesExecuted[m_tid] % (100 / m_depth) == 0 ) {
+            if ( m_opts & Flog ) {
+#if TBB_PREVIEW_TASK_PRIORITY
+                task *r = m_opts & FlogEncloser ? this : m_root;
+                tbb::priority_t p = r->group_priority();
+                r->set_group_priority( p == Low ? High : Low );
+#endif /* TBB_PREVIEW_TASK_PRIORITY */
+            }
+            else
+                __TBB_Yield();
+        }
+        parent_node->set_ref_count(NumLeafTasks + 1);
+        --m_depth;
+        for ( int i = 0; i < NumLeafTasks; ++i ) {
+            task *t = m_depth ? (task*) new(parent_node->allocate_child()) NodeType(m_tid, m_depth, m_opts, m_root) 
+                              : (task*) new(parent_node->allocate_child()) LeafTask(m_tid, m_opts);
+            task::spawn(*t);
+        }
+    }
+
+public:
+    NodeTask ( int tid, int _depth, uintptr_t opts, task *r = NULL )
+        : m_tid(tid), m_depth(_depth), m_opts(opts), m_root(r)
+    {}
+};
+
+class NestedGroupNodeTask : public NodeTask<NestedGroupNodeTask> {
+    task* execute () {
+        tbb::task_group_context ctx; // Use bound context
+        tbb::empty_task &r = *new( task::allocate_root(ctx) ) tbb::empty_task;
+        SpawnChildren(&r);
+        r.wait_for_all();
+        task::destroy(r);
+        return NULL;
+    }
+public:
+    NestedGroupNodeTask ( int tid, int _depth, uintptr_t opts, task *r = NULL )
+        : NodeTask<NestedGroupNodeTask>(tid, _depth, opts, r)
+    {}
+};
+
+class BlockingNodeTask : public NodeTask<BlockingNodeTask> {
+    task* execute () {
+        SpawnChildren(this);
+        wait_for_all();
+        return NULL;
+    }
+public:
+    BlockingNodeTask ( int tid, int _depth, uintptr_t opts, task *r = NULL )
+        : NodeTask<BlockingNodeTask>(tid, _depth, opts, r) {}
+};
+
+class NonblockingNodeTask : public NodeTask<NonblockingNodeTask> {
+    task* execute () {
+        if ( m_depth < 0 )
+            return NULL; // I'm just a continuation now
+        recycle_as_safe_continuation();
+        SpawnChildren(this);
+        m_depth = -1;
+        return NULL;
+    }
+public:
+    NonblockingNodeTask ( int tid, int _depth, uintptr_t opts, task *r = NULL )
+        : NodeTask<NonblockingNodeTask>(tid, _depth, opts, r)
+    {}
+};
+
+template<class NodeType>
+class MasterBodyBase : NoAssign, Harness::NoAfterlife {
+protected:
+    uintptr_t m_opts;
+
+public:
+    void RunTaskForest ( int id ) const {
+        ASSERT( id < g_NumMasters, NULL );
+        g_LeavesExecuted[id] = 0;
+        int d = BaseDepth + id;
+        tbb::task_scheduler_init init(P-1);
+        tbb::task_group_context ctx (tbb::task_group_context::isolated);
+        tbb::empty_task &r = *new( tbb::task::allocate_root(ctx) ) tbb::empty_task;
+        const int R = 8;
+        r.set_ref_count( R * P + 1 );
+        // Only thread 1 changes its task tree priority in preemption test mode
+        uintptr_t opts = m_opts & (id == PreemptionActivatorId ? ~0u : ~(uintptr_t)TestPreemption);
+        for ( int i = 0; i < R; ++i ) {
+            for ( int j = 1; j < P; ++j )
+                r.spawn( *new(r.allocate_child()) NodeType(id, MinBaseDepth + id, opts, &r) );
+            r.spawn( *new(r.allocate_child()) NodeType(id, d, opts, &r) );
+        }
+        int count = 1;
+        intptr_t lastExecuted = 0;
+        while ( r.ref_count() > 1 ) {
+            // Give workers time to make some progress.
+            for ( int i = 0; i < 10 * count; ++i )
+                __TBB_Yield();
+#if __TBB_TASK_PRIORITY
+            if ( lastExecuted == g_LeavesExecuted[id] ) {
+                // No progress. Likely all workers left to higher priority arena,
+                // and then returned to RML. Request workers back from RML.
+                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)
+                count += 10;
+#endif
+            }
+            else {
+                count = 1;
+                lastExecuted = g_LeavesExecuted[id];
+            }
+#else /* !__TBB_TASK_PRIORITY */
+            (void)lastExecuted;
+            tbb::task::enqueue( *new(tbb::task::allocate_root() ) tbb::empty_task );
+#endif /* !__TBB_TASK_PRIORITY */
+        }
+        ASSERT( g_LeavesExecuted[id] == R * ((1 << d) + ((P - 1) * (1 << (MinBaseDepth + id)))), NULL );
+        g_LeavesExecuted[id] = -1;
+        tbb::task::destroy(r);
+    }
+
+    MasterBodyBase ( uintptr_t opts ) : m_opts(opts) {}
+};
+
+template<class NodeType>
+class MasterBody : public MasterBodyBase<NodeType> {
+    int m_testIndex;
+public:
+    void operator() ( int id ) const {
+        this->RunTaskForest(id);
+        if ( this->m_opts & Flog )
+            return;
+        if ( this->m_opts & TestPreemption ) {
+            if ( id == 1 && g_LeavesExecuted[0] == -1 ) {
+                //REMARK( "Warning: Low priority master finished too early [depth %d]\n", Depth );
+                ++g_TestFailures[m_testIndex];
+            }
+        }
+        else {
+            if ( id == 0 && g_LeavesExecuted[1] == -1 ) {
+                //REMARK( "Warning: Faster master takes too long [depth %d]\n", Depth );
+                ++g_TestFailures[m_testIndex];
+            }
+        }
+    }
+
+    MasterBody ( int idx, uintptr_t opts ) : MasterBodyBase<NodeType>(opts), m_testIndex(idx) {}
+};
+
+template<class NodeType>
+void RunPrioritySwitchBetweenTwoMasters ( int idx, uintptr_t opts ) {
+    ASSERT( idx < NumTests, NULL );
+    REMARK( "Config %d\r", ++g_CurConfig );
+    NativeParallelFor ( 2, MasterBody<NodeType>(idx, opts) );
+    Harness::Sleep(50);
+}
+
+void TestPrioritySwitchBetweenTwoMasters () {
+    REMARK( "Stress tests: %s / %s \n", Low == tbb::priority_low ? "Low" : "Normal", High == tbb::priority_normal ? "Normal" : "High" );
+    PrepareGlobals( 2 );
+    for ( int i = 0; i < TestRepeats; ++i ) {
+        for ( BaseDepth = MinBaseDepth; BaseDepth <= MaxBaseDepth; ++BaseDepth ) {
+            RunPrioritySwitchBetweenTwoMasters<BlockingNodeTask>( 0, NoPriorities );
+            RunPrioritySwitchBetweenTwoMasters<BlockingNodeTask>( 1, TestPreemption );
+            RunPrioritySwitchBetweenTwoMasters<NonblockingNodeTask>( 2, NoPriorities );
+            RunPrioritySwitchBetweenTwoMasters<NonblockingNodeTask>( 3, TestPreemption );
+            RunPrioritySwitchBetweenTwoMasters<BlockingNodeTask>( 4, Flog );
+            RunPrioritySwitchBetweenTwoMasters<NonblockingNodeTask>( 5, Flog );
+            RunPrioritySwitchBetweenTwoMasters<NestedGroupNodeTask>( 6, Flog );
+            RunPrioritySwitchBetweenTwoMasters<NestedGroupNodeTask>( 7, FlogEncloser );
+        }
+    }
+    const int NumRuns = TestRepeats * (MaxBaseDepth - MinBaseDepth + 1);
+    for ( int i = 0; i < NumTests; ++i ) {
+        if ( g_TestFailures[i] )
+            REMARK( "Test %d: %d failures in %d runs\n", i, g_TestFailures[i], NumRuns );
+        if ( g_TestFailures[i] * 100 / NumRuns > 45 )
+            REPORT( "Warning: test %d misbehaved too often (%d out of %d)\n", i, g_TestFailures[i], NumRuns );
+    }
+    ClearGlobals();
+}
+
+class SingleChildRootTask : public tbb::task {
+    tbb::task* execute () {
+        set_ref_count(2);
+        spawn ( *new(allocate_child()) tbb::empty_task );
+        wait_for_all();
+        return NULL;
+    }
+};
+
+int TestSimplePriorityOps ( tbb::priority_t prio ) {
+    tbb::task_scheduler_init init;
+    tbb::task_group_context ctx;
+#if __TBB_TASK_PRIORITY
+    ctx.set_priority( prio );
+#else /* !__TBB_TASK_PRIORITY */
+    (void)prio;
+#endif /* !__TBB_TASK_PRIORITY */
+    tbb::task *r = new( tbb::task::allocate_root(ctx) ) tbb::empty_task;
+    r->set_ref_count(2);
+    r->spawn ( *new(r->allocate_child()) tbb::empty_task );
+    REMARK( "TestSimplePriorityOps: waiting for a child\n" );
+    r->wait_for_all();
+    ASSERT( !r->ref_count(), NULL );
+    REMARK( "TestLowPriority: executing an empty root\n" );
+    tbb::task::spawn_root_and_wait(*r);
+    r = new( tbb::task::allocate_root(ctx) ) SingleChildRootTask;
+    REMARK( "TestLowPriority: executing a root with a single child\n" );
+    tbb::task::spawn_root_and_wait(*r);
+    return 0;
+}
+
+#include "tbb/parallel_for.h"
+
+void EmulateWork( int ) {
+    for ( int i = 0; i < 1000; ++i )
+        __TBB_Yield();
+};
+
+class PeriodicActivitiesBody {
+public:
+    void operator() ( int id ) const {
+        tbb::task_group_context ctx;
+#if TBB_PREVIEW_TASK_PRIORITY
+        ctx.set_priority( id ? High : Low );
+#else /* !__TBB_TASK_PRIORITY */
+        (void)id;
+#endif /* !__TBB_TASK_PRIORITY */
+        for ( int i = 0; i < 5; ++i ) {
+            tbb::task_scheduler_init init;
+            tbb::parallel_for( 1, 10000, &EmulateWork, ctx );
+        }
+    }
+};
+
+void TestPeriodicConcurrentActivities () {
+    REMARK( "TestPeriodicConcurrentActivities: %s / %s \n", Low == tbb::priority_low ? "Low" : "Normal", High == tbb::priority_normal ? "Normal" : "High" );
+    NativeParallelFor ( 2, PeriodicActivitiesBody() );
+}
+
+#include "harness_bad_expr.h"
+
+void TestPriorityAssertions () {
+#if TRY_BAD_EXPR_ENABLED && TBB_PREVIEW_TASK_PRIORITY
+    REMARK( "TestPriorityAssertions\n" );
+    tbb::priority_t bad_low_priority = tbb::priority_t( tbb::priority_low - 1 ),
+                    bad_high_priority = tbb::priority_t( tbb::priority_high + 1 );
+    tbb::task_group_context ctx;
+    // Catch assertion failures
+    tbb::set_assertion_handler( AssertionFailureHandler );
+    TRY_BAD_EXPR( ctx.set_priority( bad_low_priority ), "Invalid priority level value" );
+    tbb::task &t = *new( tbb::task::allocate_root() ) tbb::empty_task;
+    TRY_BAD_EXPR( tbb::task::enqueue( t, bad_high_priority ), "Invalid priority level value" );
+    // Restore normal assertion handling
+    tbb::set_assertion_handler( NULL );
+#endif /* TRY_BAD_EXPR_ENABLED && TBB_PREVIEW_TASK_PRIORITY */
+}
+
+int TestMain () {
+#if !TBB_PREVIEW_TASK_PRIORITY
+    REMARK( "Priorities disabled: Running as just yet another task scheduler test\n" );
+#endif /* TBB_PREVIEW_TASK_PRIORITY */
+    TestPriorityAssertions();
+    TestSimplePriorityOps(tbb::priority_low);
+    TestSimplePriorityOps(tbb::priority_high);
+    P = min( tbb::task_scheduler_init::default_num_threads(), 8 );
+    if ( P < 3 )
+        return Harness::Skipped;
+    TestPeriodicConcurrentActivities();
+    TestPrioritySwitchBetweenTwoMasters();
+    Low = tbb::priority_low;
+    High = tbb::priority_normal;
+    PreemptionActivatorId = 0;
+    TestPeriodicConcurrentActivities();
+    TestPrioritySwitchBetweenTwoMasters();
+    High = tbb::priority_high;
+    TestPeriodicConcurrentActivities();
+    TestPrioritySwitchBetweenTwoMasters();
+    PreemptionActivatorId = 1;
+    TestPrioritySwitchBetweenTwoMasters();
+    return Harness::Done;
+}
diff --git a/src/test/test_task_scheduler_init.cpp b/src/test/test_task_scheduler_init.cpp
index 53839e8..ff99ef6 100644
--- a/src/test/test_task_scheduler_init.cpp
+++ b/src/test/test_task_scheduler_init.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -98,7 +98,7 @@ struct ThreadedInit {
 };
 
 #if _MSC_VER
-#include <windows.h>
+#include "tbb/machine/windows_api.h"
 #include <tchar.h>
 #endif /* _MSC_VER */
 
@@ -131,15 +131,15 @@ void AssertExplicitInitIsNotSupplanted () {
 int TestMain () {
     // Do not use tbb::task_scheduler_init directly in the scope of main's body,
     // as a static variable, or as a member of a static variable.
-#if _MSC_VER && !__TBB_NO_IMPLICIT_LINKAGE
+#if _MSC_VER && !__TBB_NO_IMPLICIT_LINKAGE && !defined(__TBB_LIB_NAME)
     #ifdef _DEBUG
         ASSERT(!GetModuleHandle(_T("tbb.dll")) && GetModuleHandle(_T("tbb_debug.dll")),
-            "debug application links with non-debug tbb library");
+            "test linked with wrong (non-debug) tbb library");
     #else
         ASSERT(!GetModuleHandle(_T("tbb_debug.dll")) && GetModuleHandle(_T("tbb.dll")),
-            "non-debug application links with debug tbb library");
+            "test linked with wrong (debug) tbb library");
     #endif
-#endif /* _MSC_VER && !__TBB_NO_IMPLICIT_LINKAGE */
+#endif /* _MSC_VER && !__TBB_NO_IMPLICIT_LINKAGE && !__TBB_LIB_NAME */
     std::srand(2);
     InitializeAndTerminate(MaxThread);
     for( int p=MinThread; p<=MaxThread; ++p ) {
diff --git a/src/test/test_task_scheduler_observer.cpp b/src/test/test_task_scheduler_observer.cpp
index 99936f8..715d0ae 100644
--- a/src/test/test_task_scheduler_observer.cpp
+++ b/src/test/test_task_scheduler_observer.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -59,9 +59,6 @@ tbb::internal::tls<State*> LocalState;
 void MyObserver::on_scheduler_entry( bool is_worker ) {
     State& state = *LocalState;
     ASSERT( is_worker==!state.IsMaster, NULL );
-#if !__TBB_ARENA_PER_MASTER
-    ASSERT( (state.MyFlags & flags)==0, NULL );
-#endif /* !__TBB_ARENA_PER_MASTER */
     ++EntryCount;
     state.MyFlags |= flags;
 }
diff --git a/src/test/test_tbb_condition_variable.cpp b/src/test/test_tbb_condition_variable.cpp
index 74f2d6d..1818d11 100644
--- a/src/test/test_tbb_condition_variable.cpp
+++ b/src/test/test_tbb_condition_variable.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_tbb_header.cpp b/src/test/test_tbb_header.cpp
index cd3ec9b..fdea4d2 100644
--- a/src/test/test_tbb_header.cpp
+++ b/src/test/test_tbb_header.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -27,10 +27,10 @@
 */
 
 /**
-    This test ensures that tbb.h brings in all the public TBB interface definitions.
+    This test ensures that tbb.h brings in all the public TBB interface definitions,
+    and if all the necessary symbols are exported from the library.
 
-    The test is compile-time only. Nothing is actually executed except prinitng 
-    the final "done" message.
+    Most of the checks happen at the compilation or link phases.
 **/
 
 #include "tbb/tbb.h"
@@ -68,14 +68,61 @@ struct Body3 {
     void assign( const Body3& ) {}
 };
 
+#if !__TBB_TEST_SECONDARY
+
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+#include "harness.h"
+
+// Test if all the necessary symbols are exported for the exceptions thrown by TBB.
+// Missing exports result either in link error or in runtime assertion failure.
+#include "tbb/tbb_exception.h"
+
+template <typename E>
+void TestExceptionClassExports ( const E& exc, tbb::internal::exception_id eid ) {
+    // The assertion here serves to shut up warnings about "eid not used". 
+    ASSERT( eid<tbb::internal::eid_max, NULL );
+#if TBB_USE_EXCEPTIONS
+    for ( int i = 0; i < 2; ++i ) {
+        try {
+            if ( i == 0 )
+                throw exc;
+#if !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN
+            else
+                tbb::internal::throw_exception( eid );
+#endif
+        }
+        catch ( E& e ) {
+            ASSERT ( e.what(), "Missing what() string" );
+        }
+        catch ( ... ) {
+            ASSERT ( __TBB_EXCEPTION_TYPE_INFO_BROKEN, "Unrecognized exception. Likely RTTI related exports are missing" );
+        }
+    }
+#else /* !TBB_USE_EXCEPTIONS */
+    (void)exc;
+#endif /* !TBB_USE_EXCEPTIONS */
+}
+
+void TestExceptionClassesExports () {
+    TestExceptionClassExports( std::bad_alloc(), tbb::internal::eid_bad_alloc );
+    TestExceptionClassExports( tbb::bad_last_alloc(), tbb::internal::eid_bad_last_alloc );
+    TestExceptionClassExports( std::invalid_argument("test"), tbb::internal::eid_nonpositive_step );
+    TestExceptionClassExports( std::out_of_range("test"), tbb::internal::eid_out_of_range );
+    TestExceptionClassExports( std::range_error("test"), tbb::internal::eid_segment_range_error );
+    TestExceptionClassExports( std::range_error("test"), tbb::internal::eid_index_range_error );
+    TestExceptionClassExports( tbb::missing_wait(), tbb::internal::eid_missing_wait );
+    TestExceptionClassExports( tbb::invalid_multiple_scheduling(), tbb::internal::eid_invalid_multiple_scheduling );
+    TestExceptionClassExports( tbb::improper_lock(), tbb::internal::eid_improper_lock );
+}
+#endif /* !__TBB_TEST_SECONDARY */
+
+
 #if __TBB_TEST_SECONDARY
-/* This mode is used to produce secondary object file that should be linked with
-   main object file in order to detect "multiple definition" linker error.
+/* 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.
 */
 void secondary()
 #else
-#define HARNESS_NO_PARSE_COMMAND_LINE 1
-#include "harness.h"
 int TestMain ()
 #endif
 {
@@ -132,6 +179,7 @@ int TestMain ()
     TestTypeDefinitionPresence( zero_allocator<int> );
     TestTypeDefinitionPresence( tick_count );
 #if !__TBB_TEST_SECONDARY
+    TestExceptionClassesExports();
     return Harness::Done;
 #endif
 }
diff --git a/src/test/test_tbb_thread.cpp b/src/test/test_tbb_thread.cpp
index 962dd40..3f9b4fb 100644
--- a/src/test/test_tbb_thread.cpp
+++ b/src/test/test_tbb_thread.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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 72a2da3..94c55ad 100644
--- a/src/test/test_tbb_version.cpp
+++ b/src/test/test_tbb_version.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -213,7 +213,7 @@ int main(int argc, char *argv[] ) {
 void initialize_strings_vector(std::vector <string_pair>* vector)
 {
     vector->push_back(string_pair("TBB: VERSION\t\t3.0", required));          // check TBB_VERSION
-    vector->push_back(string_pair("TBB: INTERFACE VERSION\t5000", required)); // check TBB_INTERFACE_VERSION
+    vector->push_back(string_pair("TBB: INTERFACE VERSION\t5006", 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));
@@ -241,13 +241,15 @@ void initialize_strings_vector(std::vector <string_pair>* vector)
     vector->push_back(string_pair("TBB: BUILD_COMMAND", required));
     vector->push_back(string_pair("TBB: TBB_USE_DEBUG", required));
     vector->push_back(string_pair("TBB: TBB_USE_ASSERT", required));
+#if __TBB_CPF_BUILD
+    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: 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));
-    vector->push_back(string_pair("TBB: SCHEDULER", required));
-
+    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 888eeef..58109b4 100644
--- a/src/test/test_thread.h
+++ b/src/test/test_thread.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -104,7 +104,7 @@ public:
         if(delta+SHORT_TOLERANCE <= 0.0)
             REPORT("ERROR: Sleep interval too short (%g outside short tolerance(%g))\n", (t1-t0).seconds(), WAIT - SHORT_TOLERANCE);
         if(delta > LONG_TOLERANCE)
-            REPORT("WARNING: Sleep interval too long (%g outside long tolerance(%g))\n", (t1-t0).seconds(), WAIT + LONG_TOLERANCE);
+            REPORT("Warning: Sleep interval too long (%g outside long tolerance(%g))\n", (t1-t0).seconds(), WAIT + LONG_TOLERANCE);
 
         init_barrier.wait();
 
diff --git a/src/test/test_tick_count.cpp b/src/test/test_tick_count.cpp
index c4360a0..17f9813 100644
--- a/src/test/test_tick_count.cpp
+++ b/src/test/test_tick_count.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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
new file mode 100644
index 0000000..7ecfeaf
--- /dev/null
+++ b/src/test/test_tuple.cpp
@@ -0,0 +1,144 @@
+/*
+    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.
+*/
+
+// tbb::tuple
+
+#include "harness.h"
+#define TBB_PREVIEW_TUPLE 1
+#define TBB_IMPLEMENT_CPP0X 1
+#include "tbb/compat/tuple"
+#include <string>
+#include <iostream>
+
+using namespace std;
+
+class non_trivial {
+public:
+    non_trivial() {}
+    ~non_trivial() {}
+    non_trivial(const non_trivial& other) : my_int(other.my_int), my_float(other.my_float) { }
+    int get_int() const { return my_int; }
+    float get_float() const { return my_float; }
+    void set_int(int newval) { my_int = newval; }
+    void set_float(float newval) { my_float = newval; }
+private:
+    int my_int;
+    float my_float;
+};
+
+void RunTests() {
+
+    tuple<int> ituple1(3);
+    tuple<int> ituple2(5);
+    tuple<double> ftuple2(4.1);
+
+    ASSERT(!(ituple1 == ituple2), NULL);
+    ASSERT(ituple1 != ituple2, NULL);
+    ASSERT(!(ituple1 > ituple2), NULL);
+    ASSERT(ituple1 < ituple2, NULL);
+    ASSERT(ituple1 <= ituple2, NULL);
+    ASSERT(!(ituple1 >= ituple2), NULL);
+    ASSERT(ituple1 < ftuple2, NULL);
+
+    typedef tuple<int,double,float> tuple_type1;
+    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);
+    int_tuple_type int_tup(4, 5, 6);
+    non_trivial_tuple_type nti;
+    stringy_tuple_type stv;
+    get<1>(stv) = "hello";
+    get<2>(stv) = 'x';
+
+    ASSERT(get<0>(stv) == 0.0, NULL);
+    ASSERT(get<1>(stv) == "hello", NULL);
+    ASSERT(get<2>(stv) == 'x', NULL);
+
+    ASSERT(tuple_size<tuple_type1>::value == 3, NULL);
+    ASSERT(get<0>(tup1) == 42, NULL);
+    ASSERT(get<1>(tup1) == 3.14159, NULL);
+    ASSERT(get<2>(tup1) == 2.0, NULL);
+
+    get<1>(nti).set_float(1.0);
+    get<1>(nti).set_int(32);
+    ASSERT(get<1>(nti).get_int() == 32, NULL);
+    ASSERT(get<1>(nti).get_float() == 1.0, NULL);
+
+    // converting constructor
+    tuple<double,double,double> tup2(1,2.0,3.0f);
+    tuple<double,double,double> tup3(9,4.0,7.0f);
+    ASSERT(tup2 != tup3, NULL);
+
+    ASSERT(tup2 < tup3, NULL);
+
+    // assignment
+    tup2 = tup3;
+    ASSERT(tup2 == tup3, NULL);
+
+    tup2 = int_tup;
+    ASSERT(get<0>(tup2) == 4, NULL);
+    ASSERT(get<1>(tup2) == 5, NULL);
+    ASSERT(get<2>(tup2) == 6, NULL);
+
+    // increment component of tuple
+    get<0>(tup2) += 1;
+    ASSERT(get<0>(tup2) == 5, NULL);
+
+    std::pair<int,int> two_pair( 4, 8);
+    tuple<int,int> two_pair_tuple;
+    two_pair_tuple = two_pair;
+    ASSERT(get<0>(two_pair_tuple) == 4, NULL);
+    ASSERT(get<1>(two_pair_tuple) == 8, NULL);
+
+    //relational ops
+    ASSERT(int_tuple_type(1,1,0) == int_tuple_type(1,1,0),NULL);
+    ASSERT(int_tuple_type(1,0,1) <  int_tuple_type(1,1,1),NULL);
+    ASSERT(int_tuple_type(1,0,0) >  int_tuple_type(0,1,0),NULL);
+    ASSERT(int_tuple_type(0,0,0) != int_tuple_type(1,0,1),NULL);
+    ASSERT(int_tuple_type(0,1,0) <= int_tuple_type(0,1,1),NULL);
+    ASSERT(int_tuple_type(0,0,1) <= int_tuple_type(0,0,1),NULL);
+    ASSERT(int_tuple_type(1,1,1) >= int_tuple_type(1,0,0),NULL);
+    ASSERT(int_tuple_type(0,1,1) >= int_tuple_type(0,1,1),NULL);
+    typedef tuple<int,float,double,char> mixed_tuple_left;
+    typedef tuple<float,int,char,double> mixed_tuple_right;
+    ASSERT(mixed_tuple_left(1,1.f,1,1) == mixed_tuple_right(1.f,1,1,1),NULL);
+    ASSERT(mixed_tuple_left(1,0.f,1,1) <  mixed_tuple_right(1.f,1,1,1),NULL);
+    ASSERT(mixed_tuple_left(1,1.f,1,1) >  mixed_tuple_right(1.f,1,0,1),NULL);
+    ASSERT(mixed_tuple_left(1,1.f,1,0) != mixed_tuple_right(1.f,1,1,1),NULL);
+    ASSERT(mixed_tuple_left(1,0.f,1,1) <= mixed_tuple_right(1.f,1,0,1),NULL);
+    ASSERT(mixed_tuple_left(1,0.f,0,1) <= mixed_tuple_right(1.f,0,0,1),NULL);
+    ASSERT(mixed_tuple_left(1,1.f,1,0) >= mixed_tuple_right(1.f,0,1,1),NULL);
+    ASSERT(mixed_tuple_left(0,1.f,1,0) >= mixed_tuple_right(0.f,1,1,0),NULL);
+
+}
+
+int TestMain() {
+    RunTests();
+    return Harness::Done;
+}
diff --git a/src/test/test_write_once_node.cpp b/src/test/test_write_once_node.cpp
new file mode 100644
index 0000000..906b497
--- /dev/null
+++ b/src/test/test_write_once_node.cpp
@@ -0,0 +1,169 @@
+/*
+    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.
+*/
+
+#include "harness_graph.h"
+#define TBB_PREVIEW_GRAPH 1
+#include "tbb/graph.h"
+
+#include "tbb/task_scheduler_init.h"
+
+#define N 300
+#define T 4 
+#define M 4
+
+template< typename R >
+void simple_read_write_tests() {
+    tbb::write_once_node<R> n;
+
+    for ( int t = 0; t < T; ++t ) {
+        R v0(0);
+        harness_counting_receiver<R> r[M];
+
+        ASSERT( n.is_valid() == false, NULL );
+        ASSERT( n.try_get( v0 ) == false, NULL );
+
+        if ( t % 2 ) {
+            ASSERT( n.try_put( static_cast<R>(N+1) ), NULL );
+            ASSERT( n.is_valid() == true, NULL );
+            ASSERT( n.try_get( v0 ) == true, NULL );
+            ASSERT( v0 == R(N+1), NULL );
+       }
+
+        for (int i = 0; i < M; ++i) {
+           ASSERT( n.register_successor(r[i]), NULL );
+        }
+      
+        if ( t%2 ) {
+            for (int i = 0; i < M; ++i) {
+                 size_t c = r[i].my_count;
+                 ASSERT( int(c) == 1, NULL );
+            }
+        }
+
+        for (int i = 1; i <= N; ++i ) {
+            R v1(static_cast<R>(i));
+
+            bool result = n.try_put( v1 );
+            if ( !(t%2) && i == 1 ) 
+                ASSERT( result == true, NULL );
+            else
+                ASSERT( result == false, NULL );
+
+            ASSERT( n.is_valid() == true, NULL );
+
+            for (int j = 0; j < N; ++j ) {
+                R v2(0);
+                ASSERT( n.try_get( v2 ), NULL );
+                if ( t%2 ) 
+                    ASSERT( R(N+1) == v2, NULL );
+                else 
+                    ASSERT( R(1) == v2, NULL );
+            }
+        }
+        for (int i = 0; i < M; ++i) {
+             size_t c = r[i].my_count;
+             ASSERT( int(c) == 1, NULL );
+        }
+        for (int i = 0; i < M; ++i) {
+           ASSERT( n.remove_successor(r[i]), NULL );
+        }
+        ASSERT( n.try_put( R(0) ) == false, NULL );
+        for (int i = 0; i < M; ++i) {
+             size_t c = r[i].my_count;
+             ASSERT( int(c) == 1, NULL );
+        }
+        n.clear();
+        ASSERT( n.is_valid() == false, NULL );
+        ASSERT( n.try_get( v0 ) == false, NULL );
+    }
+}
+
+template< typename R >
+class native_body : NoAssign {
+    tbb::write_once_node<R> &my_node;
+
+public:
+
+     native_body( tbb::write_once_node<R> &n ) : my_node(n) {}
+
+     void operator()( int i ) const {
+         R v1(static_cast<R>(i));
+         ASSERT( my_node.try_put( v1 ) == false, NULL );
+         ASSERT( my_node.is_valid() == true, NULL );
+         ASSERT( my_node.try_get( v1 ) == true, NULL );
+         ASSERT( v1 == R(-1), NULL );
+     }
+};
+
+template< typename R >
+void parallel_read_write_tests() {
+    tbb::write_once_node<R> n;
+
+    for ( int t = 0; t < T; ++t ) {
+        harness_counting_receiver<R> r[M];
+
+        for (int i = 0; i < M; ++i) {
+           ASSERT( n.register_successor(r[i]), NULL );
+        }
+        R v0;
+        ASSERT( n.is_valid() == false, NULL );
+        ASSERT( n.try_get( v0 ) == false, NULL );
+
+        ASSERT( n.try_put( R(-1) ), NULL );
+
+        NativeParallelFor( N, native_body<R>( n ) );
+
+        for (int i = 0; i < M; ++i) {
+             size_t c = r[i].my_count;
+             ASSERT( int(c) == 1, NULL );
+        }
+        for (int i = 0; i < M; ++i) {
+           ASSERT( n.remove_successor(r[i]), NULL );
+        }
+        ASSERT( n.try_put( R(0) ) == false, NULL );
+        for (int i = 0; i < M; ++i) {
+             size_t c = r[i].my_count;
+             ASSERT( int(c) == 1, NULL );
+        }
+        n.clear();
+        ASSERT( n.is_valid() == false, NULL );
+        ASSERT( n.try_get( v0 ) == false, NULL );
+    }
+}
+
+int TestMain() { 
+    simple_read_write_tests<int>();
+    simple_read_write_tests<float>();
+    for( int p=MinThread; p<=MaxThread; ++p ) {
+        tbb::task_scheduler_init init(p);
+        parallel_read_write_tests<int>();
+        parallel_read_write_tests<float>();
+    }
+    return Harness::Done;
+}
+
diff --git a/src/test/test_yield.cpp b/src/test/test_yield.cpp
index 301e485..d1273cf 100644
--- a/src/test/test_yield.cpp
+++ b/src/test/test_yield.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2011 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